@maptiler/geocoding-control 0.0.79 → 0.0.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/ClearIcon.svelte.d.ts +23 -0
  2. package/GeocodingControl.svelte +685 -0
  3. package/GeocodingControl.svelte.d.ts +66 -0
  4. package/LoadingIcon.svelte.d.ts +23 -0
  5. package/{src/lib/MarkerIcon.svelte → MarkerIcon.svelte} +1 -2
  6. package/MarkerIcon.svelte.d.ts +16 -0
  7. package/README.md +7 -7
  8. package/ReverseGeocodingIcon.svelte.d.ts +23 -0
  9. package/SearchIcon.svelte.d.ts +23 -0
  10. package/leaflet-controller.js +1 -0
  11. package/leaflet-controller.js.map +1 -0
  12. package/leaflet-controller.umd.js +1 -0
  13. package/leaflet-controller.umd.js.map +1 -0
  14. package/leaflet.js +3943 -3970
  15. package/leaflet.js.map +1 -0
  16. package/leaflet.umd.js +6 -5
  17. package/leaflet.umd.js.map +1 -0
  18. package/maplibregl-controller.js +1 -0
  19. package/maplibregl-controller.js.map +1 -0
  20. package/maplibregl-controller.umd.js +1 -0
  21. package/maplibregl-controller.umd.js.map +1 -0
  22. package/maplibregl.js +4028 -4055
  23. package/maplibregl.js.map +1 -0
  24. package/maplibregl.umd.js +6 -5
  25. package/maplibregl.umd.js.map +1 -0
  26. package/package.json +20 -20
  27. package/react.js +470 -552
  28. package/react.js.map +1 -0
  29. package/react.umd.js +2 -1
  30. package/react.umd.js.map +1 -0
  31. package/style.css +1 -1
  32. package/src/AppLeaflet.svelte +0 -55
  33. package/src/AppMaplibregl.svelte +0 -45
  34. package/src/lib/GeocodingControl.svelte +0 -851
  35. package/src/lib/LeafletGeocodingControl.ts +0 -154
  36. package/src/lib/MaplibreglGeocodingControl.ts +0 -160
  37. package/src/lib/ReactGeocodingControl.ts +0 -158
  38. package/src/lib/leafletMapController.ts +0 -305
  39. package/src/lib/maplibreglMapController.ts +0 -366
  40. package/src/lib/mask.ts +0 -70
  41. package/src/lib/types.ts +0 -235
  42. package/src/main-copy.ts +0 -59
  43. package/src/main.ts +0 -65
  44. package/src/vite-env.d.ts +0 -2
  45. /package/{src/lib/ClearIcon.svelte → ClearIcon.svelte} +0 -0
  46. /package/{src/lib/LoadingIcon.svelte → LoadingIcon.svelte} +0 -0
  47. /package/{src/lib/ReverseGeocodingIcon.svelte → ReverseGeocodingIcon.svelte} +0 -0
  48. /package/{src/lib/SearchIcon.svelte → SearchIcon.svelte} +0 -0
  49. /package/{maplibre.d.ts → maplibregl.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maplibregl.js","sources":["../node_modules/svelte/internal/index.mjs","../src/lib/ReverseGeocodingIcon.svelte","../src/lib/ClearIcon.svelte","../src/lib/LoadingIcon.svelte","../src/lib/MarkerIcon.svelte","../src/lib/SearchIcon.svelte","../src/lib/GeocodingControl.svelte","../node_modules/splaytree/dist/splay.esm.js","../node_modules/polygon-clipping/dist/polygon-clipping.esm.js","../node_modules/@turf/helpers/dist/es/index.js","../node_modules/@turf/invariant/dist/es/index.js","../node_modules/@turf/union/dist/es/index.js","../node_modules/@turf/difference/dist/es/index.js","../node_modules/@turf/meta/dist/es/index.js","../node_modules/@turf/bbox/dist/es/index.js","../node_modules/@turf/center/dist/es/index.js","../node_modules/turf-jsts/jsts.mjs","../node_modules/d3-geo/src/adder.js","../node_modules/d3-geo/src/math.js","../node_modules/d3-geo/src/noop.js","../node_modules/d3-geo/src/stream.js","../node_modules/d3-geo/src/area.js","../node_modules/d3-geo/src/cartesian.js","../node_modules/d3-geo/src/bounds.js","../node_modules/d3-geo/src/compose.js","../node_modules/d3-geo/src/rotation.js","../node_modules/d3-geo/src/circle.js","../node_modules/d3-geo/src/clip/buffer.js","../node_modules/d3-geo/src/clip/line.js","../node_modules/d3-geo/src/pointEqual.js","../node_modules/d3-geo/src/clip/polygon.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-array/src/merge.js","../node_modules/d3-geo/src/clip/extent.js","../node_modules/d3-geo/src/polygonContains.js","../node_modules/d3-geo/src/length.js","../node_modules/d3-geo/src/identity.js","../node_modules/d3-geo/src/path/area.js","../node_modules/d3-geo/src/path/bounds.js","../node_modules/d3-geo/src/path/measure.js","../node_modules/d3-geo/src/clip/index.js","../node_modules/d3-geo/src/clip/antimeridian.js","../node_modules/d3-geo/src/clip/circle.js","../node_modules/d3-geo/src/transform.js","../node_modules/d3-geo/src/projection/fit.js","../node_modules/d3-geo/src/projection/resample.js","../node_modules/d3-geo/src/projection/index.js","../node_modules/d3-geo/src/projection/azimuthal.js","../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../node_modules/d3-geo/src/projection/equirectangular.js","../node_modules/@turf/buffer/dist/es/index.js","../src/lib/mask.ts","../src/lib/maplibreglMapController.ts","../src/lib/MaplibreglGeocodingControl.ts"],"sourcesContent":["function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\nfunction is_promise(value) {\n return !!value && (typeof value === 'object' || typeof value === 'function') && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\nfunction split_css_unit(value) {\n const split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n return split ? [parseFloat(split[1]), split[2] || 'px'] : [value, 'px'];\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\nfunction start_hydrating() {\n is_hydrating = true;\n}\nfunction end_hydrating() {\n is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n // Return first index of value larger than input value in the range [low, high)\n while (low < high) {\n const mid = low + ((high - low) >> 1);\n if (key(mid) <= value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return low;\n}\nfunction init_hydrate(target) {\n if (target.hydrate_init)\n return;\n target.hydrate_init = true;\n // We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n let children = target.childNodes;\n // If target is <head>, there may be children without claim_order\n if (target.nodeName === 'HEAD') {\n const myChildren = [];\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n if (node.claim_order !== undefined) {\n myChildren.push(node);\n }\n }\n children = myChildren;\n }\n /*\n * Reorder claimed children optimally.\n * We can reorder claimed children optimally by finding the longest subsequence of\n * nodes that are already claimed in order and only moving the rest. The longest\n * subsequence of nodes that are claimed in order can be found by\n * computing the longest increasing subsequence of .claim_order values.\n *\n * This algorithm is optimal in generating the least amount of reorder operations\n * possible.\n *\n * Proof:\n * We know that, given a set of reordering operations, the nodes that do not move\n * always form an increasing subsequence, since they do not move among each other\n * meaning that they must be already ordered among each other. Thus, the maximal\n * set of nodes that do not move form a longest increasing subsequence.\n */\n // Compute longest increasing subsequence\n // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n const m = new Int32Array(children.length + 1);\n // Predecessor indices + 1\n const p = new Int32Array(children.length);\n m[0] = -1;\n let longest = 0;\n for (let i = 0; i < children.length; i++) {\n const current = children[i].claim_order;\n // Find the largest subsequence length such that it ends in a value less than our current value\n // upper_bound returns first greater value, so we subtract one\n // with fast path for when we are on the current longest subsequence\n const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n p[i] = m[seqLen] + 1;\n const newLen = seqLen + 1;\n // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n m[newLen] = i;\n longest = Math.max(newLen, longest);\n }\n // The longest increasing subsequence of nodes (initially reversed)\n const lis = [];\n // The rest of the nodes, nodes that will be moved\n const toMove = [];\n let last = children.length - 1;\n for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n lis.push(children[cur - 1]);\n for (; last >= cur; last--) {\n toMove.push(children[last]);\n }\n last--;\n }\n for (; last >= 0; last--) {\n toMove.push(children[last]);\n }\n lis.reverse();\n // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n toMove.sort((a, b) => a.claim_order - b.claim_order);\n // Finally, we move the nodes\n for (let i = 0, j = 0; i < toMove.length; i++) {\n while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n j++;\n }\n const anchor = j < lis.length ? lis[j] : null;\n target.insertBefore(toMove[i], anchor);\n }\n}\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element('style');\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element('style');\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n return style.sheet;\n}\nfunction append_hydration(target, node) {\n if (is_hydrating) {\n init_hydrate(target);\n if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentNode !== target))) {\n target.actual_end_child = target.firstChild;\n }\n // Skip nodes of undefined ordering\n while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n target.actual_end_child = target.actual_end_child.nextSibling;\n }\n if (node !== target.actual_end_child) {\n // We only insert if the ordering of this node should be modified or the parent node is not target\n if (node.claim_order !== undefined || node.parentNode !== target) {\n target.insertBefore(node, target.actual_end_child);\n }\n }\n else {\n target.actual_end_child = node.nextSibling;\n }\n }\n else if (node.parentNode !== target || node.nextSibling !== null) {\n target.appendChild(node);\n }\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n if (is_hydrating && !anchor) {\n append_hydration(target, node);\n }\n else if (node.parentNode !== target || node.nextSibling != anchor) {\n target.insertBefore(node, anchor || null);\n }\n}\nfunction detach(node) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_immediate_propagation(fn) {\n return function (event) {\n event.stopImmediatePropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction trusted(fn) {\n return function (event) {\n // @ts-ignore\n if (event.isTrusted)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data_map(node, data_map) {\n Object.keys(data_map).forEach((key) => {\n set_custom_element_data(node, key, data_map[key]);\n });\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction set_dynamic_element_data(tag) {\n return (/-/.test(tag)) ? set_custom_element_data_map : set_attributes;\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction init_binding_group(group) {\n let _inputs;\n return {\n /* push */ p(...inputs) {\n _inputs = inputs;\n _inputs.forEach(input => group.push(input));\n },\n /* remove */ r() {\n _inputs.forEach(input => group.splice(group.indexOf(input), 1));\n }\n };\n}\nfunction init_binding_group_dynamic(group, indexes) {\n let _group = get_binding_group(group);\n let _inputs;\n function get_binding_group(group) {\n for (let i = 0; i < indexes.length; i++) {\n group = group[indexes[i]] = group[indexes[i]] || [];\n }\n return group;\n }\n function push() {\n _inputs.forEach(input => _group.push(input));\n }\n function remove() {\n _inputs.forEach(input => _group.splice(_group.indexOf(input), 1));\n }\n return {\n /* update */ u(new_indexes) {\n indexes = new_indexes;\n const new_group = get_binding_group(group);\n if (new_group !== _group) {\n remove();\n _group = new_group;\n push();\n }\n },\n /* push */ p(...inputs) {\n _inputs = inputs;\n push();\n },\n /* remove */ r: remove\n };\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n if (nodes.claim_info === undefined) {\n nodes.claim_info = { last_index: 0, total_claimed: 0 };\n }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n init_claim_info(nodes);\n const resultNode = (() => {\n // We first try to find an element after the previous one\n for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n return node;\n }\n }\n // Otherwise, we try to find one before\n // We iterate in reverse so that we don't go too far back\n for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n else if (replacement === undefined) {\n // Since we spliced before the last_index, we decrease it\n nodes.claim_info.last_index--;\n }\n return node;\n }\n }\n // If we can't find any matching node, we create a new one\n return createNode();\n })();\n resultNode.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n const remove = [];\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n remove.forEach(v => node.removeAttribute(v));\n return undefined;\n }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n const dataStr = '' + data;\n if (node.data.startsWith(dataStr)) {\n if (node.data.length !== dataStr.length) {\n return node.splitText(dataStr.length);\n }\n }\n else {\n node.data = dataStr;\n }\n }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n );\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction find_comment(nodes, text, start) {\n for (let i = start; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n return i;\n }\n }\n return nodes.length;\n}\nfunction claim_html_tag(nodes, is_svg) {\n // find html opening tag\n const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n if (start_index === end_index) {\n return new HtmlTagHydration(undefined, is_svg);\n }\n init_claim_info(nodes);\n const html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n detach(html_tag_nodes[0]);\n detach(html_tag_nodes[html_tag_nodes.length - 1]);\n const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n for (const n of claimed_nodes) {\n n.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n }\n return new HtmlTagHydration(claimed_nodes, is_svg);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n if (value === null) {\n node.style.removeProperty(key);\n }\n else {\n node.style.setProperty(key, value, important ? 'important' : '');\n }\n}\nfunction select_option(select, value, mounting) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n if (!mounting || value !== undefined) {\n select.selectedIndex = -1; // no option should be selected\n }\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked');\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n // make sure an initial resize event is fired _after_ the iframe is loaded (which is asynchronous)\n // see https://github.com/sveltejs/svelte/issues/4233\n fn();\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, bubbles, cancelable, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nfunction head_selector(nodeId, head) {\n const result = [];\n let started = 0;\n for (const node of head.childNodes) {\n if (node.nodeType === 8 /* comment node */) {\n const comment = node.textContent.trim();\n if (comment === `HEAD_${nodeId}_END`) {\n started -= 1;\n result.push(node);\n }\n else if (comment === `HEAD_${nodeId}_START`) {\n started += 1;\n result.push(node);\n }\n }\n else if (started > 0) {\n result.push(node);\n }\n }\n return result;\n}\nclass HtmlTag {\n constructor(is_svg = false) {\n this.is_svg = false;\n this.is_svg = is_svg;\n this.e = this.n = null;\n }\n c(html) {\n this.h(html);\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n if (this.is_svg)\n this.e = svg_element(target.nodeName);\n /** #7364 target for <template> may be provided as #document-fragment(11) */\n else\n this.e = element((target.nodeType === 11 ? 'TEMPLATE' : target.nodeName));\n this.t = target.tagName !== 'TEMPLATE' ? target : target.content;\n this.c(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.nodeName === 'TEMPLATE' ? this.e.content.childNodes : this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nclass HtmlTagHydration extends HtmlTag {\n constructor(claimed_nodes, is_svg = false) {\n super(is_svg);\n this.e = this.n = null;\n this.l = claimed_nodes;\n }\n c(html) {\n if (this.l) {\n this.n = this.l;\n }\n else {\n super.c(html);\n }\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert_hydration(this.t, this.n[i], anchor);\n }\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\nfunction construct_svelte_component(component, props) {\n return new component(props);\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n managed_styles.set(doc, info);\n return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = get_root_for_style(node);\n const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n if (!rules[name]) {\n rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n managed_styles.forEach(info => {\n const { ownerNode } = info.stylesheet;\n // there is no ownerNode if it runs on jsdom.\n if (ownerNode)\n detach(ownerNode);\n });\n managed_styles.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`\n *\n * https://svelte.dev/docs#run-time-svelte-beforeupdate\n */\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs#run-time-svelte-onmount\n */\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`\n */\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * https://svelte.dev/docs#run-time-svelte-ondestroy\n */\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](/docs#template-syntax-component-directives-on-eventname).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * https://svelte.dev/docs#run-time-svelte-createeventdispatcher\n */\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail, { cancelable = false } = {}) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail, { cancelable });\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n return !event.defaultPrevented;\n }\n return true;\n };\n}\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-setcontext\n */\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n return context;\n}\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-getcontext\n */\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * https://svelte.dev/docs#run-time-svelte-getallcontexts\n */\nfunction getAllContexts() {\n return get_current_component().$$.context;\n}\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs#run-time-svelte-hascontext\n */\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n // @ts-ignore\n callbacks.slice().forEach(fn => fn.call(this, event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nlet render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n// for afterUpdates called during the initial onMount, which are called in\n// reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n// dirty_components array and will cause a reentrant call to flush(). Because\n// the flush index is kept outside the function, the reentrant call will pick\n// up where the earlier call left off and go through all dirty components. The\n// current_component value is saved and restored so that the reentrant call will\n// not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n// callback called a second time; the seen_callbacks set, outside the flush()\n// function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n // Do not reenter flush while dirty components are updated, as this can\n // result in an infinite loop. Instead, let the inner flush handle it.\n // Reentrancy is ok afterwards for bindings etc.\n if (flushidx !== 0) {\n return;\n }\n const saved_component = current_component;\n do {\n // first, call beforeUpdate functions\n // and update components\n try {\n while (flushidx < dirty_components.length) {\n const component = dirty_components[flushidx];\n flushidx++;\n set_current_component(component);\n update(component.$$);\n }\n }\n catch (e) {\n // reset dirty state to not end up in a deadlocked state and then rethrow\n dirty_components.length = 0;\n flushidx = 0;\n throw e;\n }\n set_current_component(null);\n dirty_components.length = 0;\n flushidx = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n seen_callbacks.clear();\n set_current_component(saved_component);\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n */\nfunction flush_render_callbacks(fns) {\n const filtered = [];\n const targets = [];\n render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c));\n targets.forEach((c) => c());\n render_callbacks = filtered;\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n else if (callback) {\n callback();\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n const options = { direction: 'in' };\n let config = fn(node, params, options);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n started = true;\n delete_rule(node);\n if (is_function(config)) {\n config = config(options);\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n const options = { direction: 'out' };\n let config = fn(node, params, options);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config(options);\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n const options = { direction: 'both' };\n let config = fn(node, params, options);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = (program.b - t);\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config(options);\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n const child_ctx = ctx.slice();\n const { resolved } = info;\n if (info.current === info.then) {\n child_ctx[info.value] = resolved;\n }\n if (info.current === info.catch) {\n child_ctx[info.error] = resolved;\n }\n info.block.p(child_ctx, dirty);\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n const updates = [];\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n // defer updates until all the DOM shuffling is done\n updates.push(() => block.p(child_ctx, dirty));\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n run_all(updates);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\nconst _boolean_attributes = [\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'itemscope',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n];\n/**\n * List of HTML boolean attributes (e.g. `<input disabled>`).\n * Source: https://html.spec.whatwg.org/multipage/indices.html\n */\nconst boolean_attributes = new Set([..._boolean_attributes]);\n\n/** regex of all html void element names */\nconst void_element_names = /^(?:area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/;\nfunction is_void(name) {\n return void_element_names.test(name) || name.toLowerCase() === '!doctype';\n}\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, attrs_to_add) {\n const attributes = Object.assign({}, ...args);\n if (attrs_to_add) {\n const classes_to_add = attrs_to_add.classes;\n const styles_to_add = attrs_to_add.styles;\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n if (styles_to_add) {\n if (attributes.style == null) {\n attributes.style = style_object_to_string(styles_to_add);\n }\n else {\n attributes.style = style_object_to_string(merge_ssr_styles(attributes.style, styles_to_add));\n }\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${value}\"`;\n }\n });\n return str;\n}\nfunction merge_ssr_styles(style_attribute, style_directive) {\n const style_object = {};\n for (const individual_style of style_attribute.split(';')) {\n const colon_index = individual_style.indexOf(':');\n const name = individual_style.slice(0, colon_index).trim();\n const value = individual_style.slice(colon_index + 1).trim();\n if (!name)\n continue;\n style_object[name] = value;\n }\n for (const name in style_directive) {\n const value = style_directive[name];\n if (value) {\n style_object[name] = value;\n }\n else {\n delete style_object[name];\n }\n }\n return style_object;\n}\nconst ATTR_REGEX = /[&\"]/g;\nconst CONTENT_REGEX = /[&<]/g;\n/**\n * Note: this method is performance sensitive and has been optimized\n * https://github.com/sveltejs/svelte/pull/5701\n */\nfunction escape(value, is_attr = false) {\n const str = String(value);\n const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n pattern.lastIndex = 0;\n let escaped = '';\n let last = 0;\n while (pattern.test(str)) {\n const i = pattern.lastIndex - 1;\n const ch = str[i];\n escaped += str.substring(last, i) + (ch === '&' ? '&amp;' : (ch === '\"' ? '&quot;' : '&lt;'));\n last = i + 1;\n }\n return escaped + str.substring(last);\n}\nfunction escape_attribute_value(value) {\n // keep booleans, null, and undefined for the sake of `spread`\n const should_escape = typeof value === 'string' || (value && typeof value === 'object');\n return should_escape ? escape(value, true) : value;\n}\nfunction escape_object(obj) {\n const result = {};\n for (const key in obj) {\n result[key] = escape_attribute_value(obj[key]);\n }\n return result;\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules. Otherwise you may need to fix a <${name}>.`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(context || (parent_component ? parent_component.$$.context : [])),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n const assignment = (boolean && value === true) ? '' : `=\"${escape(value, true)}\"`;\n return ` ${name}${assignment}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\nfunction style_object_to_string(style_object) {\n return Object.keys(style_object)\n .filter(key => style_object[key])\n .map(key => `${key}: ${escape_attribute_value(style_object[key])};`)\n .join(' ');\n}\nfunction add_styles(style_object) {\n const styles = style_object_to_string(style_object);\n return styles ? ` style=\"${styles}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n // if the component was destroyed immediately\n // it will update the `$$.on_destroy` reference to `null`.\n // the destructured on_destroy may still reference to the old array\n if (component.$$.on_destroy) {\n component.$$.on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n flush_render_callbacks($$.after_update);\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: [],\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles && append_styles($$.root);\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n start_hydrating();\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n end_hydrating();\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.57.0' }, detail), { bubbles: true }));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction append_hydration_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append_hydration(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction insert_hydration_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert_hydration(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation, has_stop_immediate_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n if (has_stop_immediate_propagation)\n modifiers.push('stopImmediatePropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\nfunction validate_dynamic_element(tag) {\n const is_string = typeof tag === 'string';\n if (tag && !is_string) {\n throw new Error('<svelte:element> expects \"this\" attribute to be a string.');\n }\n}\nfunction validate_void_dynamic_element(tag) {\n if (tag && is_void(tag)) {\n console.warn(`<svelte:element this=\"${tag}\"> is self-closing and cannot have content.`);\n }\n}\nfunction construct_svelte_component_dev(component, props) {\n const error_message = 'this={...} of <svelte:component> should specify a Svelte component.';\n try {\n const instance = new component(props);\n if (!instance.$$ || !instance.$set || !instance.$on || !instance.$destroy) {\n throw new Error(error_message);\n }\n return instance;\n }\n catch (err) {\n const { message } = err;\n if (typeof message === 'string' && message.indexOf('is not a constructor') !== -1) {\n throw new Error(error_message);\n }\n else {\n throw err;\n }\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * <script lang=\"ts\">\n * \timport { MyComponent } from \"component-library\";\n * </script>\n * <MyComponent foo={'bar'} />\n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to separate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, HtmlTagHydration, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_styles, add_transform, afterUpdate, append, append_dev, append_empty_stylesheet, append_hydration, append_hydration_dev, append_styles, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_html_tag, claim_space, claim_svg_element, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, construct_svelte_component, construct_svelte_component_dev, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, end_hydrating, escape, escape_attribute_value, escape_object, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, flush_render_callbacks, getAllContexts, getContext, get_all_dirty_from_scope, get_binding_group_value, get_current_component, get_custom_elements_slots, get_root_for_style, get_slot_changes, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, head_selector, identity, init, init_binding_group, init_binding_group_dynamic, insert, insert_dev, insert_hydration, insert_hydration_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, is_void, listen, listen_dev, loop, loop_guard, merge_ssr_styles, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_custom_element_data_map, set_data, set_data_dev, set_dynamic_element_data, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, split_css_unit, spread, src_url_equal, start_hydrating, stop_immediate_propagation, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, trusted, update_await_block_branch, update_keyed_each, update_slot, update_slot_base, validate_component, validate_dynamic_element, validate_each_argument, validate_each_keys, validate_slots, validate_store, validate_void_dynamic_element, xlink_attr };\n","<svg viewBox=\"0 0 60.006 21.412\" width=\"14\" height=\"20\">\n <path\n d=\"M30.003-26.765C13.46-26.765 0-14.158 0 1.337c0 23.286 24.535 42.952 28.39 46.04.24.192.402.316.471.376.323.282.732.424 1.142.424.41 0 .82-.142 1.142-.424.068-.06.231-.183.471-.376 3.856-3.09 28.39-22.754 28.39-46.04 0-15.495-13.46-28.102-30.003-28.102Zm1.757 12.469c4.38 0 7.858 1.052 10.431 3.158 2.595 2.105 3.89 4.913 3.89 8.422 0 2.34-.53 4.362-1.593 6.063-1.063 1.702-3.086 3.616-6.063 5.742-2.042 1.51-3.337 2.659-3.89 3.446-.532.787-.8 1.82-.8 3.096v1.914h-8.449V15.18c0-2.041.434-3.815 1.306-5.325.872-1.51 2.467-3.118 4.785-4.82 2.233-1.594 3.7-2.89 4.402-3.889a5.582 5.582 0 0 0 1.087-3.35c0-1.382-.51-2.435-1.531-3.158-1.02-.723-2.45-1.087-4.28-1.087-3.19 0-6.826 1.047-10.91 3.131l-3.472-6.986c4.742-2.659 9.77-3.992 15.087-3.992Zm-1.88 37.324c1.765 0 3.124.472 4.08 1.408.98.936 1.47 2.276 1.47 4.02 0 1.68-.49 3.007-1.47 3.985-.977.957-2.336 1.435-4.08 1.435-1.787 0-3.171-.465-4.15-1.4-.978-.958-1.47-2.298-1.47-4.02 0-1.787.48-3.14 1.436-4.054.957-.915 2.355-1.374 4.184-1.374Z\"\n />\n</svg>\n\n<style>\n svg {\n display: block;\n fill: var(--color-icon-button);\n }\n</style>\n","<svg viewBox=\"0 0 18 18\" width=\"16\" height=\"16\">\n <path\n d=\"M3.8 2.5c-.6 0-1.3.7-1.3 1.3 0 .3.2.7.5.8L7.2 9 3 13.2c-.3.3-.5.7-.5 1 0 .6.7 1.3 1.3 1.3.3 0 .7-.2 1-.5L9 10.8l4.2 4.2c.2.3.7.3 1 .3.6 0 1.3-.7 1.3-1.3 0-.3-.2-.7-.3-1l-4.4-4L15 4.6c.3-.2.5-.5.5-.8 0-.7-.7-1.3-1.3-1.3-.3 0-.7.2-1 .3L9 7.1 4.8 2.8c-.3-.1-.7-.3-1-.3z\"\n />\n</svg>\n\n<style>\n svg {\n display: block;\n fill: var(--color-icon-button);\n }\n</style>\n","<div>\n <svg viewBox=\"0 0 18 18\" width=\"24\" height=\"24\">\n <path\n fill=\"#333\"\n d=\"M4.4 4.4l.8.8c2.1-2.1 5.5-2.1 7.6 0l.8-.8c-2.5-2.5-6.7-2.5-9.2 0z\"\n />\n <path\n opacity=\".1\"\n d=\"M12.8 12.9c-2.1 2.1-5.5 2.1-7.6 0-2.1-2.1-2.1-5.5 0-7.7l-.8-.8c-2.5 2.5-2.5 6.7 0 9.2s6.6 2.5 9.2 0 2.5-6.6 0-9.2l-.8.8c2.2 2.1 2.2 5.6 0 7.7z\"\n />\n </svg>\n</div>\n\n<style>\n div {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n pointer-events: none;\n\n display: flex;\n align-items: center;\n }\n\n svg {\n animation: rotate 0.8s infinite cubic-bezier(0.45, 0.05, 0.55, 0.95);\n }\n\n @keyframes rotate {\n from {\n -webkit-transform: rotate(0);\n transform: rotate(0);\n }\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n</style>\n","<script lang=\"ts\">\n export let displayIn: \"list\" | \"leaflet\" | \"maplibre\";\n</script>\n\n<svg\n width={displayIn !== \"list\" ? undefined : \"20\"}\n viewBox=\"0 0 70 85\"\n fill=\"none\"\n class:in-map={displayIn !== \"list\"}\n class:list-icon={displayIn === \"list\"}\n>\n <path\n stroke-width=\"4\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M 5,33.103579 C 5,17.607779 18.457,5 35,5 C 51.543,5 65,17.607779 65,33.103579 C 65,56.388679 40.4668,76.048179 36.6112,79.137779 C 36.3714,79.329879 36.2116,79.457979 36.1427,79.518879 C 35.8203,79.800879 35.4102,79.942779 35,79.942779 C 34.5899,79.942779 34.1797,79.800879 33.8575,79.518879 C 33.7886,79.457979 33.6289,79.330079 33.3893,79.138079 C 29.5346,76.049279 5,56.389379 5,33.103579 Z M 35.0001,49.386379 C 43.1917,49.386379 49.8323,42.646079 49.8323,34.331379 C 49.8323,26.016779 43.1917,19.276479 35.0001,19.276479 C 26.8085,19.276479 20.1679,26.016779 20.1679,34.331379 C 20.1679,42.646079 26.8085,49.386379 35.0001,49.386379 Z\"\n />\n</svg>\n\n<style>\n svg {\n display: block;\n fill: #6b7c93;\n stroke: #6b7c93;\n }\n\n .list-icon {\n grid-row: 1/3;\n align-self: center;\n margin: 8px;\n }\n\n .in-map {\n height: 30px;\n }\n\n :global(.maplibregl-canvas-container .marker-selected) {\n z-index: 1;\n }\n\n :global(.maplibregl-canvas-container) svg path,\n :global(.leaflet-map-pane) svg path {\n fill: #3170fe;\n stroke: #3170fe;\n }\n\n :global(.marker-selected) svg path {\n fill: #98b7ff;\n stroke: #3170fe;\n }\n\n :global(.marker-reverse) svg path {\n fill: silver;\n stroke: gray;\n }\n\n :global(.marker-interactive) {\n cursor: pointer !important;\n }\n\n :global(.marker-fuzzy) svg path {\n fill: silver;\n stroke: gray;\n }\n\n :global(.marker-fuzzy.marker-selected) svg path {\n fill: #ddd;\n stroke: silver;\n }\n\n :global(.maptiler-gc-popup > .maplibregl-popup-content) {\n padding: 2px 8px;\n }\n</style>\n","<svg viewBox=\"0 0 18 18\" xml:space=\"preserve\" width=\"20\">\n <path\n d=\"M7.4 2.5c-2.7 0-4.9 2.2-4.9 4.9s2.2 4.9 4.9 4.9c1 0 1.8-.2 2.5-.8l3.7 3.7c.2.2.4.3.8.3.7 0 1.1-.4 1.1-1.1 0-.3-.1-.5-.3-.8L11.4 10c.4-.8.8-1.6.8-2.5.1-2.8-2.1-5-4.8-5zm0 1.6c1.8 0 3.2 1.4 3.2 3.2s-1.4 3.2-3.2 3.2-3.3-1.3-3.3-3.1 1.4-3.3 3.3-3.3z\"\n />\n</svg>\n\n<style>\n svg {\n display: block;\n fill: var(--color-icon-button);\n }\n</style>\n","<script lang=\"ts\">\n import { createEventDispatcher } from \"svelte\";\n import { onDestroy } from \"svelte/internal\";\n import ReverseGeocodingIcon from \"./ReverseGeocodingIcon.svelte\";\n import ClearIcon from \"./ClearIcon.svelte\";\n import LoadingIcon from \"./LoadingIcon.svelte\";\n import MarkerIcon from \"./MarkerIcon.svelte\";\n import SearchIcon from \"./SearchIcon.svelte\";\n import type {\n Feature,\n FeatureCollection,\n MapController,\n Proximity,\n } from \"./types\";\n\n let className: string | undefined = undefined;\n\n type BBox = [number, number, number, number];\n\n export { className as class };\n\n export let apiKey: string;\n\n export let bbox: BBox | undefined = undefined;\n\n export let clearButtonTitle = \"clear\";\n\n export let clearOnBlur = false;\n\n export let collapsed = false;\n\n export let country: string | string[] | undefined = undefined;\n\n export let debounceSearch = 200;\n\n export let enableReverse: boolean | \"always\" = false;\n\n export let errorMessage = \"Searching failed\";\n\n export let filter: (feature: Feature) => boolean = () => true;\n\n export let flyTo = true;\n\n export let fuzzyMatch = true;\n\n export let language: string | string[] | undefined = undefined;\n\n export let limit: number | undefined = undefined;\n\n export let mapController: MapController | undefined = undefined;\n\n export let minLength = 2;\n\n export let noResultsMessage = \"No results found\";\n\n export let placeholder = \"Search\";\n\n export let proximity: Proximity = undefined;\n\n export let reverseActive = enableReverse === \"always\";\n\n export let reverseButtonTitle = \"toggle reverse geocoding\";\n\n export let searchValue = \"\";\n\n export let showFullGeometry = true;\n\n export let showPlaceType = false;\n\n export let showResultsWhileTyping = true;\n\n export let trackProximity = true;\n\n export let types: string[] | undefined = undefined;\n\n export let zoom = 16;\n\n export let fetchParameters: RequestInit = {};\n\n export function focus() {\n input.focus();\n }\n\n export function blur() {\n input.blur();\n }\n\n export function setQuery(value: string, submit = true) {\n searchValue = value;\n\n if (submit) {\n selectedItemIndex = -1;\n\n handleOnSubmit();\n } else {\n handleInput();\n\n setTimeout(() => {\n input.focus();\n input.select();\n });\n }\n }\n\n let focused = false;\n\n let listFeatures: Feature[] | undefined;\n\n let markedFeatures: Feature[] | undefined;\n\n let picked: Feature | undefined;\n\n let lastSearchUrl = \"\";\n\n let input: HTMLInputElement;\n\n let selectedItemIndex = -1;\n\n let error: unknown;\n\n let cachedFeatures: Feature[] = [];\n\n let abortController: AbortController | undefined;\n\n let searchTimeoutRef: number | undefined;\n\n let focusedDelayed: boolean;\n\n const dispatch = createEventDispatcher<{\n select: Feature;\n pick: Feature;\n optionsVisibilityChange: boolean;\n featuresListed: Feature[];\n featuresMarked: Feature[];\n response: { url: string; featureCollection: FeatureCollection };\n reverseToggle: boolean;\n queryChange: string;\n }>();\n\n $: if (!trackProximity) {\n proximity = undefined;\n }\n\n $: if (\n showFullGeometry &&\n picked &&\n !picked.address &&\n picked.geometry.type === \"Point\"\n ) {\n search(picked.id, { byId: true }).catch((err) => (error = err));\n }\n\n $: if (mapController && picked && flyTo) {\n if (\n !picked.bbox ||\n (picked.bbox[0] === picked.bbox[2] && picked.bbox[1] === picked.bbox[3])\n ) {\n mapController.flyTo(picked.center, zoom);\n } else {\n mapController.fitBounds(unwrapBbox(picked.bbox), 50);\n }\n\n listFeatures = undefined;\n markedFeatures = undefined;\n selectedItemIndex = -1;\n }\n\n $: if (markedFeatures !== listFeatures) {\n markedFeatures = undefined;\n }\n\n $: if (mapController) {\n mapController.setMarkers(markedFeatures, picked);\n }\n\n $: if (!searchValue) {\n picked = undefined;\n listFeatures = undefined;\n error = undefined;\n markedFeatures = listFeatures;\n }\n\n // highlight selected marker\n $: mapController?.setSelectedMarker(selectedItemIndex);\n\n // close dropdown in the next cycle so that the selected item event has the chance to fire\n $: setTimeout(() => {\n focusedDelayed = focused;\n\n if (clearOnBlur && !focused) {\n searchValue = \"\";\n }\n });\n\n // clear selection on edit\n $: {\n searchValue;\n\n selectedItemIndex = -1;\n }\n\n $: selected = listFeatures?.[selectedItemIndex];\n\n $: {\n const m = /^(-?\\d+(?:\\.\\d*)?),(-?\\d+(?:\\.\\d*)?)$/.exec(searchValue);\n\n mapController?.setReverseMarker(\n m ? [Number(m[1]), Number(m[2])] : undefined\n );\n }\n\n $: dispatch(\"select\", selected);\n\n $: dispatch(\"pick\", picked);\n\n $: dispatch(\"optionsVisibilityChange\", focusedDelayed && !!listFeatures);\n\n $: dispatch(\"featuresListed\", listFeatures);\n\n $: dispatch(\"featuresMarked\", markedFeatures);\n\n $: dispatch(\"reverseToggle\", reverseActive);\n\n $: dispatch(\"queryChange\", searchValue);\n\n $: if (mapController) {\n mapController.indicateReverse(reverseActive);\n }\n\n $: if (mapController) {\n mapController.setEventHandler((e) => {\n switch (e.type) {\n case \"mapClick\":\n if (reverseActive) {\n handleReverse(e.coordinates);\n }\n\n break;\n case \"proximityChange\":\n proximity = trackProximity ? e.proximity : undefined;\n\n break;\n case \"markerClick\":\n {\n const feature = listFeatures?.find(\n (feature) => feature.id === e.id\n );\n\n if (feature) {\n pick(feature);\n }\n }\n\n break;\n case \"markerMouseEnter\":\n selectedItemIndex = !focusedDelayed\n ? -1\n : listFeatures?.findIndex((feature) => feature.id === e.id) ?? -1;\n\n break;\n case \"markerMouseLeave\":\n selectedItemIndex = -1;\n\n break;\n }\n });\n }\n\n onDestroy(() => {\n if (mapController) {\n mapController.setEventHandler(undefined);\n mapController.indicateReverse(false);\n mapController.setSelectedMarker(-1);\n mapController.setMarkers(undefined, undefined);\n }\n });\n\n function handleOnSubmit(event?: unknown) {\n if (searchTimeoutRef) {\n clearTimeout(searchTimeoutRef);\n\n searchTimeoutRef = undefined;\n }\n\n if (selectedItemIndex > -1 && listFeatures) {\n picked = listFeatures[selectedItemIndex];\n searchValue = picked.place_name.replace(/,.*/, \"\");\n error = undefined;\n markedFeatures = undefined;\n selectedItemIndex = -1;\n } else if (searchValue) {\n const zoomTo = event || !isQuerReverse();\n\n search(searchValue, { exact: true })\n .then(() => {\n markedFeatures = listFeatures;\n\n picked = undefined;\n\n if (zoomTo) {\n zoomToResults();\n }\n })\n .catch((err) => (error = err));\n }\n }\n\n function isQuerReverse() {\n return /^-?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)?$/.test(searchValue);\n }\n\n async function search(\n searchValue: string,\n {\n byId = false,\n exact = false,\n }: undefined | { byId?: boolean; exact?: boolean } = {}\n ) {\n error = undefined;\n\n const isReverse = isQuerReverse();\n\n const sp = new URLSearchParams();\n\n if (language != undefined) {\n sp.set(\n \"language\",\n Array.isArray(language) ? language.join(\",\") : language\n );\n }\n\n if (types) {\n sp.set(\"types\", types.join(\",\"));\n }\n\n if (!isReverse) {\n if (bbox) {\n sp.set(\"bbox\", bbox.map((c) => c.toFixed(6)).join(\",\"));\n }\n\n if (country) {\n sp.set(\"country\", Array.isArray(country) ? country.join(\",\") : country);\n }\n }\n\n if (!byId) {\n if (proximity) {\n sp.set(\"proximity\", proximity.map((c) => c.toFixed(6)).join(\",\"));\n }\n\n if (exact || !showResultsWhileTyping) {\n sp.set(\"autocomplete\", \"false\");\n }\n\n sp.set(\"fuzzyMatch\", String(fuzzyMatch));\n }\n\n if (limit !== undefined) {\n sp.set(\"limit\", String(limit));\n }\n\n sp.set(\"key\", apiKey);\n\n const url =\n import.meta.env.VITE_API_URL +\n \"/\" +\n encodeURIComponent(searchValue) +\n \".json?\" +\n sp.toString();\n\n if (url === lastSearchUrl) {\n if (byId) {\n listFeatures = undefined;\n\n picked = cachedFeatures[0];\n } else {\n listFeatures = cachedFeatures;\n }\n\n return;\n }\n\n lastSearchUrl = url;\n\n abortController?.abort();\n\n const ac = new AbortController();\n\n abortController = ac;\n\n let res: Response;\n\n try {\n res = await fetch(url, {\n signal: ac.signal,\n ...fetchParameters,\n }).finally(() => {\n if (ac === abortController) {\n abortController = undefined;\n }\n });\n } catch (e) {\n if (e && typeof e === \"object\" && (e as any).name === \"AbortError\") {\n return;\n }\n\n throw new Error();\n }\n\n if (!res.ok) {\n throw new Error();\n }\n\n const featureCollection: FeatureCollection = await res.json();\n\n dispatch(\"response\", { url, featureCollection });\n\n if (byId) {\n listFeatures = undefined;\n\n picked = featureCollection.features[0];\n\n cachedFeatures = [picked];\n } else {\n listFeatures = featureCollection.features.filter(filter);\n\n cachedFeatures = listFeatures;\n\n if (isReverse) {\n input.focus();\n }\n }\n }\n\n function zoomToResults() {\n if (!markedFeatures?.length || !flyTo) {\n return;\n }\n\n const bbox: [number, number, number, number] = [180, 90, -180, -90];\n\n const fuzzyOnly = !markedFeatures.some((feature) => !feature.matching_text);\n\n for (const feature of markedFeatures) {\n if (fuzzyOnly || !feature.matching_text) {\n bbox[0] = Math.min(bbox[0], feature.bbox?.[0] ?? feature.center[0]);\n bbox[1] = Math.min(bbox[1], feature.bbox?.[1] ?? feature.center[1]);\n bbox[2] = Math.max(bbox[2], feature.bbox?.[2] ?? feature.center[0]);\n bbox[3] = Math.max(bbox[3], feature.bbox?.[3] ?? feature.center[1]);\n }\n }\n\n if (mapController && markedFeatures.length > 0) {\n if (picked && bbox[0] === bbox[2] && bbox[1] === bbox[3]) {\n mapController.flyTo(picked.center, zoom);\n } else {\n mapController.fitBounds(unwrapBbox(bbox), 50);\n }\n }\n }\n\n // taken from Leaflet\n function wrapNum(x: number, range: [number, number], includeMax: boolean) {\n const max = range[1],\n min = range[0],\n d = max - min;\n\n return x === max && includeMax ? x : ((((x - min) % d) + d) % d) + min;\n }\n\n function handleReverse(coordinates: [lng: number, lat: number]) {\n reverseActive = enableReverse === \"always\";\n\n setQuery(\n wrapNum(coordinates[0], [-180, 180], true).toFixed(6) +\n \",\" +\n coordinates[1].toFixed(6)\n );\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n if (!listFeatures) {\n return;\n }\n\n let dir = e.key === \"ArrowDown\" ? 1 : e.key === \"ArrowUp\" ? -1 : 0;\n\n if (dir) {\n if (selectedItemIndex === -1 && dir === -1) {\n selectedItemIndex = listFeatures.length;\n }\n\n selectedItemIndex += dir;\n\n if (selectedItemIndex >= listFeatures.length) {\n selectedItemIndex = -1;\n }\n\n e.preventDefault();\n } else if ([\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(e.key)) {\n selectedItemIndex = -1;\n }\n }\n\n function handleInput(debounce = true) {\n if (showResultsWhileTyping && searchValue.length > minLength) {\n if (searchTimeoutRef) {\n clearTimeout(searchTimeoutRef);\n }\n\n const sv = searchValue;\n\n searchTimeoutRef = window.setTimeout(\n () => {\n search(sv).catch((err) => (error = err));\n },\n debounce ? debounceSearch : 0\n );\n } else {\n listFeatures = undefined;\n error = undefined;\n }\n }\n\n function pick(feature: Feature) {\n picked = feature;\n searchValue = feature.place_name;\n selectedItemIndex = -1;\n }\n\n function unwrapBbox(bbox0: BBox): BBox {\n let bbox = [...bbox0] satisfies BBox;\n\n if (bbox[2] < bbox[0]) {\n bbox[2] += 360;\n }\n\n return bbox;\n }\n</script>\n\n<!-- svelte-ignore a11y-no-noninteractive-tabindex -->\n<form\n tabindex=\"0\"\n on:submit|preventDefault={handleOnSubmit}\n class:can-collapse={collapsed && searchValue === \"\"}\n class={className}\n>\n <div class=\"input-group\">\n <button type=\"button\" on:click={() => input.focus()}>\n <SearchIcon />\n </button>\n\n <input\n bind:this={input}\n bind:value={searchValue}\n on:focus={() => (focused = true)}\n on:blur={() => (focused = false)}\n on:keydown={handleKeyDown}\n on:input={() => handleInput()}\n {placeholder}\n aria-label={placeholder}\n />\n\n <div class=\"clear-button-container\">\n <button\n type=\"button\"\n on:click={() => {\n searchValue = \"\";\n input.focus();\n }}\n class:displayable={searchValue !== \"\"}\n title={clearButtonTitle}\n >\n <ClearIcon />\n </button>\n\n {#if abortController}\n <LoadingIcon />\n {/if}\n </div>\n\n {#if enableReverse === true}\n <button\n type=\"button\"\n class:active={reverseActive}\n title={reverseButtonTitle}\n on:click={() => (reverseActive = !reverseActive)}\n >\n <ReverseGeocodingIcon />\n </button>\n {/if}\n\n <slot />\n </div>\n\n {#if error}\n <div class=\"error\">{errorMessage}</div>\n {:else if !focusedDelayed}\n {\"\"}\n {:else if listFeatures?.length === 0}\n <div class=\"no-results\">{noResultsMessage}</div>\n {:else if focusedDelayed && listFeatures?.length}\n <ul\n on:mouseleave={() => (selectedItemIndex = -1)}\n on:blur={() => undefined}\n >\n {#each listFeatures as feature, i}\n <!-- svelte-ignore a11y-no-noninteractive-tabindex -->\n <li\n tabindex=\"0\"\n data-selected={selectedItemIndex === i}\n class:selected={selectedItemIndex === i}\n on:mouseenter={() => (selectedItemIndex = i)}\n on:focus={() => pick(feature)}\n >\n <!-- <MarkerIcon displayIn=\"list\" /> -->\n <span class=\"texts\">\n <span class=\"line1\">\n <span class=\"primary\">\n {feature.place_name.replace(/,.*/, \"\")}\n </span>\n <span class=\"secondary\">\n {feature.place_name.replace(/[^,]*,?\\s*/, \"\")}\n </span>\n </span>\n {#if showPlaceType}\n <span class=\"line2\">\n {feature.properties?.place_type_name?.[0] ??\n feature.place_type[0]}\n </span>\n {/if}\n </span>\n </li>\n {/each}\n </ul>\n {/if}\n</form>\n\n<style type=\"text/scss\">\n form,\n form *,\n form *:after,\n form *:before {\n box-sizing: border-box;\n }\n\n form {\n font-family: \"Open Sans\", \"Ubuntu\", \"Helvetica Neue\", Arial, Helvetica,\n sans-serif;\n position: relative;\n background-color: #fff;\n width: 100%;\n z-index: 10;\n border-radius: 4px;\n transition: max-width 0.25s;\n box-shadow: 0px 5px 10px rgba(51, 51, 89, 0.15);\n --color-text: #444952;\n --color-icon-button: #444952;\n }\n\n form.can-collapse {\n max-width: 35px;\n }\n\n form,\n form:focus-within,\n form:hover {\n max-width: 240px;\n }\n\n input {\n font: inherit;\n font-size: 14px;\n width: 100%;\n border: 0;\n background-color: transparent;\n margin: 0;\n height: 36px;\n color: #444952;\n white-space: nowrap;\n overflow: hidden;\n padding: 0;\n }\n\n input:focus {\n color: #444952;\n outline: 0;\n outline: none;\n box-shadow: none;\n }\n\n ul,\n div.error,\n div.no-results {\n background-color: #fff;\n border-radius: 4px;\n left: 0;\n list-style: none;\n margin: 0;\n padding: 0;\n position: absolute;\n width: 100%;\n top: calc(100% + 6px);\n font-size: 14px;\n box-shadow: 0px 2px 8px rgba(51, 51, 89, 0.15);\n line-height: 16px;\n overflow: hidden;\n }\n\n :global(.maplibregl-ctrl-bottom-left) ul,\n :global(.maplibregl-ctrl-bottom-right) ul {\n top: auto;\n bottom: 100%;\n }\n\n li {\n text-align: left;\n cursor: default;\n display: grid;\n grid-template-columns: 1fr;\n color: var(--color-text);\n padding: 8px 0px;\n font-size: 14px;\n line-height: 18px;\n }\n\n li:first-child {\n padding-top: 10px;\n }\n\n li:last-child {\n padding-bottom: 10px;\n }\n\n .texts {\n padding: 0 17px;\n }\n\n .texts > * {\n white-space: nowrap;\n display: block;\n min-width: fit-content;\n }\n\n li.selected .texts > * {\n animation: backAndForth 5s linear infinite;\n }\n\n .primary {\n font-weight: 600;\n }\n\n li.selected .primary {\n color: #2b8bfb;\n }\n\n .secondary {\n color: #aeb6c7;\n padding-left: 4px;\n }\n\n .line2 {\n color: #aeb6c7;\n }\n\n li.selected {\n background-color: #f3f6ff;\n }\n\n button:hover {\n background-color: transparent;\n }\n\n button:hover :global(svg),\n button.active :global(svg) {\n fill: #6b7c92;\n }\n\n button {\n padding: 0;\n margin: 0;\n border: 0;\n background-color: transparent;\n }\n\n .input-group {\n display: flex;\n align-items: stretch;\n gap: 7px;\n padding-inline: 8px;\n outline: #c1cfe4 solid 1.5px;\n border-radius: 4px;\n overflow: hidden;\n }\n\n .input-group:hover .displayable {\n visibility: visible;\n }\n\n .input-group:focus-within {\n outline: #2b8bfb solid 1.5px;\n }\n\n div.error,\n div.no-results {\n font: inherit;\n font-size: 14px;\n padding: 6px 10px;\n }\n\n div.error {\n color: #e25041;\n }\n\n div.no-results {\n color: var(--color-text);\n }\n\n .clear-button-container {\n position: relative;\n display: flex;\n align-items: stretch;\n }\n\n .clear-button-container button {\n visibility: hidden;\n }\n\n @keyframes backAndForth {\n 0% {\n transform: translateX(0);\n }\n 10% {\n transform: translateX(0);\n }\n 45% {\n transform: translateX(calc(-100% + 206px));\n }\n 55% {\n transform: translateX(calc(-100% + 206px));\n }\n 90% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(0);\n }\n }\n\n form.can-collapse button:not(:nth-of-type(1)) {\n opacity: 0;\n transition: opacity 0.25s;\n }\n\n form.can-collapse:focus-within :not(:nth-of-type(1)),\n form.can-collapse:hover :not(:nth-of-type(1)) {\n opacity: 1;\n }\n</style>\n","/**\n * splaytree v3.1.1\n * Fast Splay tree for Node and browser\n *\n * @author Alexander Milevski <info@w8r.name>\n * @license MIT\n * @preserve\n */\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\n\nvar Node = /** @class */ (function () {\r\n function Node(key, data) {\r\n this.next = null;\r\n this.key = key;\r\n this.data = data;\r\n this.left = null;\r\n this.right = null;\r\n }\r\n return Node;\r\n}());\n\n/* follows \"An implementation of top-down splaying\"\r\n * by D. Sleator <sleator@cs.cmu.edu> March 1992\r\n */\r\nfunction DEFAULT_COMPARE(a, b) {\r\n return a > b ? 1 : a < b ? -1 : 0;\r\n}\r\n/**\r\n * Simple top down splay, not requiring i to be in the tree t.\r\n */\r\nfunction splay(i, t, comparator) {\r\n var N = new Node(null, null);\r\n var l = N;\r\n var r = N;\r\n while (true) {\r\n var cmp = comparator(i, t.key);\r\n //if (i < t.key) {\r\n if (cmp < 0) {\r\n if (t.left === null)\r\n break;\r\n //if (i < t.left.key) {\r\n if (comparator(i, t.left.key) < 0) {\r\n var y = t.left; /* rotate right */\r\n t.left = y.right;\r\n y.right = t;\r\n t = y;\r\n if (t.left === null)\r\n break;\r\n }\r\n r.left = t; /* link right */\r\n r = t;\r\n t = t.left;\r\n //} else if (i > t.key) {\r\n }\r\n else if (cmp > 0) {\r\n if (t.right === null)\r\n break;\r\n //if (i > t.right.key) {\r\n if (comparator(i, t.right.key) > 0) {\r\n var y = t.right; /* rotate left */\r\n t.right = y.left;\r\n y.left = t;\r\n t = y;\r\n if (t.right === null)\r\n break;\r\n }\r\n l.right = t; /* link left */\r\n l = t;\r\n t = t.right;\r\n }\r\n else\r\n break;\r\n }\r\n /* assemble */\r\n l.right = t.left;\r\n r.left = t.right;\r\n t.left = N.right;\r\n t.right = N.left;\r\n return t;\r\n}\r\nfunction insert(i, data, t, comparator) {\r\n var node = new Node(i, data);\r\n if (t === null) {\r\n node.left = node.right = null;\r\n return node;\r\n }\r\n t = splay(i, t, comparator);\r\n var cmp = comparator(i, t.key);\r\n if (cmp < 0) {\r\n node.left = t.left;\r\n node.right = t;\r\n t.left = null;\r\n }\r\n else if (cmp >= 0) {\r\n node.right = t.right;\r\n node.left = t;\r\n t.right = null;\r\n }\r\n return node;\r\n}\r\nfunction split(key, v, comparator) {\r\n var left = null;\r\n var right = null;\r\n if (v) {\r\n v = splay(key, v, comparator);\r\n var cmp = comparator(v.key, key);\r\n if (cmp === 0) {\r\n left = v.left;\r\n right = v.right;\r\n }\r\n else if (cmp < 0) {\r\n right = v.right;\r\n v.right = null;\r\n left = v;\r\n }\r\n else {\r\n left = v.left;\r\n v.left = null;\r\n right = v;\r\n }\r\n }\r\n return { left: left, right: right };\r\n}\r\nfunction merge(left, right, comparator) {\r\n if (right === null)\r\n return left;\r\n if (left === null)\r\n return right;\r\n right = splay(left.key, right, comparator);\r\n right.left = left;\r\n return right;\r\n}\r\n/**\r\n * Prints level of the tree\r\n */\r\nfunction printRow(root, prefix, isTail, out, printNode) {\r\n if (root) {\r\n out(\"\" + prefix + (isTail ? '└── ' : '├── ') + printNode(root) + \"\\n\");\r\n var indent = prefix + (isTail ? ' ' : '│ ');\r\n if (root.left)\r\n printRow(root.left, indent, false, out, printNode);\r\n if (root.right)\r\n printRow(root.right, indent, true, out, printNode);\r\n }\r\n}\r\nvar Tree = /** @class */ (function () {\r\n function Tree(comparator) {\r\n if (comparator === void 0) { comparator = DEFAULT_COMPARE; }\r\n this._root = null;\r\n this._size = 0;\r\n this._comparator = comparator;\r\n }\r\n /**\r\n * Inserts a key, allows duplicates\r\n */\r\n Tree.prototype.insert = function (key, data) {\r\n this._size++;\r\n return this._root = insert(key, data, this._root, this._comparator);\r\n };\r\n /**\r\n * Adds a key, if it is not present in the tree\r\n */\r\n Tree.prototype.add = function (key, data) {\r\n var node = new Node(key, data);\r\n if (this._root === null) {\r\n node.left = node.right = null;\r\n this._size++;\r\n this._root = node;\r\n }\r\n var comparator = this._comparator;\r\n var t = splay(key, this._root, comparator);\r\n var cmp = comparator(key, t.key);\r\n if (cmp === 0)\r\n this._root = t;\r\n else {\r\n if (cmp < 0) {\r\n node.left = t.left;\r\n node.right = t;\r\n t.left = null;\r\n }\r\n else if (cmp > 0) {\r\n node.right = t.right;\r\n node.left = t;\r\n t.right = null;\r\n }\r\n this._size++;\r\n this._root = node;\r\n }\r\n return this._root;\r\n };\r\n /**\r\n * @param {Key} key\r\n * @return {Node|null}\r\n */\r\n Tree.prototype.remove = function (key) {\r\n this._root = this._remove(key, this._root, this._comparator);\r\n };\r\n /**\r\n * Deletes i from the tree if it's there\r\n */\r\n Tree.prototype._remove = function (i, t, comparator) {\r\n var x;\r\n if (t === null)\r\n return null;\r\n t = splay(i, t, comparator);\r\n var cmp = comparator(i, t.key);\r\n if (cmp === 0) { /* found it */\r\n if (t.left === null) {\r\n x = t.right;\r\n }\r\n else {\r\n x = splay(i, t.left, comparator);\r\n x.right = t.right;\r\n }\r\n this._size--;\r\n return x;\r\n }\r\n return t; /* It wasn't there */\r\n };\r\n /**\r\n * Removes and returns the node with smallest key\r\n */\r\n Tree.prototype.pop = function () {\r\n var node = this._root;\r\n if (node) {\r\n while (node.left)\r\n node = node.left;\r\n this._root = splay(node.key, this._root, this._comparator);\r\n this._root = this._remove(node.key, this._root, this._comparator);\r\n return { key: node.key, data: node.data };\r\n }\r\n return null;\r\n };\r\n /**\r\n * Find without splaying\r\n */\r\n Tree.prototype.findStatic = function (key) {\r\n var current = this._root;\r\n var compare = this._comparator;\r\n while (current) {\r\n var cmp = compare(key, current.key);\r\n if (cmp === 0)\r\n return current;\r\n else if (cmp < 0)\r\n current = current.left;\r\n else\r\n current = current.right;\r\n }\r\n return null;\r\n };\r\n Tree.prototype.find = function (key) {\r\n if (this._root) {\r\n this._root = splay(key, this._root, this._comparator);\r\n if (this._comparator(key, this._root.key) !== 0)\r\n return null;\r\n }\r\n return this._root;\r\n };\r\n Tree.prototype.contains = function (key) {\r\n var current = this._root;\r\n var compare = this._comparator;\r\n while (current) {\r\n var cmp = compare(key, current.key);\r\n if (cmp === 0)\r\n return true;\r\n else if (cmp < 0)\r\n current = current.left;\r\n else\r\n current = current.right;\r\n }\r\n return false;\r\n };\r\n Tree.prototype.forEach = function (visitor, ctx) {\r\n var current = this._root;\r\n var Q = []; /* Initialize stack s */\r\n var done = false;\r\n while (!done) {\r\n if (current !== null) {\r\n Q.push(current);\r\n current = current.left;\r\n }\r\n else {\r\n if (Q.length !== 0) {\r\n current = Q.pop();\r\n visitor.call(ctx, current);\r\n current = current.right;\r\n }\r\n else\r\n done = true;\r\n }\r\n }\r\n return this;\r\n };\r\n /**\r\n * Walk key range from `low` to `high`. Stops if `fn` returns a value.\r\n */\r\n Tree.prototype.range = function (low, high, fn, ctx) {\r\n var Q = [];\r\n var compare = this._comparator;\r\n var node = this._root;\r\n var cmp;\r\n while (Q.length !== 0 || node) {\r\n if (node) {\r\n Q.push(node);\r\n node = node.left;\r\n }\r\n else {\r\n node = Q.pop();\r\n cmp = compare(node.key, high);\r\n if (cmp > 0) {\r\n break;\r\n }\r\n else if (compare(node.key, low) >= 0) {\r\n if (fn.call(ctx, node))\r\n return this; // stop if smth is returned\r\n }\r\n node = node.right;\r\n }\r\n }\r\n return this;\r\n };\r\n /**\r\n * Returns array of keys\r\n */\r\n Tree.prototype.keys = function () {\r\n var keys = [];\r\n this.forEach(function (_a) {\r\n var key = _a.key;\r\n return keys.push(key);\r\n });\r\n return keys;\r\n };\r\n /**\r\n * Returns array of all the data in the nodes\r\n */\r\n Tree.prototype.values = function () {\r\n var values = [];\r\n this.forEach(function (_a) {\r\n var data = _a.data;\r\n return values.push(data);\r\n });\r\n return values;\r\n };\r\n Tree.prototype.min = function () {\r\n if (this._root)\r\n return this.minNode(this._root).key;\r\n return null;\r\n };\r\n Tree.prototype.max = function () {\r\n if (this._root)\r\n return this.maxNode(this._root).key;\r\n return null;\r\n };\r\n Tree.prototype.minNode = function (t) {\r\n if (t === void 0) { t = this._root; }\r\n if (t)\r\n while (t.left)\r\n t = t.left;\r\n return t;\r\n };\r\n Tree.prototype.maxNode = function (t) {\r\n if (t === void 0) { t = this._root; }\r\n if (t)\r\n while (t.right)\r\n t = t.right;\r\n return t;\r\n };\r\n /**\r\n * Returns node at given index\r\n */\r\n Tree.prototype.at = function (index) {\r\n var current = this._root;\r\n var done = false;\r\n var i = 0;\r\n var Q = [];\r\n while (!done) {\r\n if (current) {\r\n Q.push(current);\r\n current = current.left;\r\n }\r\n else {\r\n if (Q.length > 0) {\r\n current = Q.pop();\r\n if (i === index)\r\n return current;\r\n i++;\r\n current = current.right;\r\n }\r\n else\r\n done = true;\r\n }\r\n }\r\n return null;\r\n };\r\n Tree.prototype.next = function (d) {\r\n var root = this._root;\r\n var successor = null;\r\n if (d.right) {\r\n successor = d.right;\r\n while (successor.left)\r\n successor = successor.left;\r\n return successor;\r\n }\r\n var comparator = this._comparator;\r\n while (root) {\r\n var cmp = comparator(d.key, root.key);\r\n if (cmp === 0)\r\n break;\r\n else if (cmp < 0) {\r\n successor = root;\r\n root = root.left;\r\n }\r\n else\r\n root = root.right;\r\n }\r\n return successor;\r\n };\r\n Tree.prototype.prev = function (d) {\r\n var root = this._root;\r\n var predecessor = null;\r\n if (d.left !== null) {\r\n predecessor = d.left;\r\n while (predecessor.right)\r\n predecessor = predecessor.right;\r\n return predecessor;\r\n }\r\n var comparator = this._comparator;\r\n while (root) {\r\n var cmp = comparator(d.key, root.key);\r\n if (cmp === 0)\r\n break;\r\n else if (cmp < 0)\r\n root = root.left;\r\n else {\r\n predecessor = root;\r\n root = root.right;\r\n }\r\n }\r\n return predecessor;\r\n };\r\n Tree.prototype.clear = function () {\r\n this._root = null;\r\n this._size = 0;\r\n return this;\r\n };\r\n Tree.prototype.toList = function () {\r\n return toList(this._root);\r\n };\r\n /**\r\n * Bulk-load items. Both array have to be same size\r\n */\r\n Tree.prototype.load = function (keys, values, presort) {\r\n if (values === void 0) { values = []; }\r\n if (presort === void 0) { presort = false; }\r\n var size = keys.length;\r\n var comparator = this._comparator;\r\n // sort if needed\r\n if (presort)\r\n sort(keys, values, 0, size - 1, comparator);\r\n if (this._root === null) { // empty tree\r\n this._root = loadRecursive(keys, values, 0, size);\r\n this._size = size;\r\n }\r\n else { // that re-builds the whole tree from two in-order traversals\r\n var mergedList = mergeLists(this.toList(), createList(keys, values), comparator);\r\n size = this._size + size;\r\n this._root = sortedListToBST({ head: mergedList }, 0, size);\r\n }\r\n return this;\r\n };\r\n Tree.prototype.isEmpty = function () { return this._root === null; };\r\n Object.defineProperty(Tree.prototype, \"size\", {\r\n get: function () { return this._size; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tree.prototype, \"root\", {\r\n get: function () { return this._root; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Tree.prototype.toString = function (printNode) {\r\n if (printNode === void 0) { printNode = function (n) { return String(n.key); }; }\r\n var out = [];\r\n printRow(this._root, '', true, function (v) { return out.push(v); }, printNode);\r\n return out.join('');\r\n };\r\n Tree.prototype.update = function (key, newKey, newData) {\r\n var comparator = this._comparator;\r\n var _a = split(key, this._root, comparator), left = _a.left, right = _a.right;\r\n if (comparator(key, newKey) < 0) {\r\n right = insert(newKey, newData, right, comparator);\r\n }\r\n else {\r\n left = insert(newKey, newData, left, comparator);\r\n }\r\n this._root = merge(left, right, comparator);\r\n };\r\n Tree.prototype.split = function (key) {\r\n return split(key, this._root, this._comparator);\r\n };\r\n Tree.prototype[Symbol.iterator] = function () {\r\n var n;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n n = this.minNode();\r\n _a.label = 1;\r\n case 1:\r\n if (!n) return [3 /*break*/, 3];\r\n return [4 /*yield*/, n];\r\n case 2:\r\n _a.sent();\r\n n = this.next(n);\r\n return [3 /*break*/, 1];\r\n case 3: return [2 /*return*/];\r\n }\r\n });\r\n };\r\n return Tree;\r\n}());\r\nfunction loadRecursive(keys, values, start, end) {\r\n var size = end - start;\r\n if (size > 0) {\r\n var middle = start + Math.floor(size / 2);\r\n var key = keys[middle];\r\n var data = values[middle];\r\n var node = new Node(key, data);\r\n node.left = loadRecursive(keys, values, start, middle);\r\n node.right = loadRecursive(keys, values, middle + 1, end);\r\n return node;\r\n }\r\n return null;\r\n}\r\nfunction createList(keys, values) {\r\n var head = new Node(null, null);\r\n var p = head;\r\n for (var i = 0; i < keys.length; i++) {\r\n p = p.next = new Node(keys[i], values[i]);\r\n }\r\n p.next = null;\r\n return head.next;\r\n}\r\nfunction toList(root) {\r\n var current = root;\r\n var Q = [];\r\n var done = false;\r\n var head = new Node(null, null);\r\n var p = head;\r\n while (!done) {\r\n if (current) {\r\n Q.push(current);\r\n current = current.left;\r\n }\r\n else {\r\n if (Q.length > 0) {\r\n current = p = p.next = Q.pop();\r\n current = current.right;\r\n }\r\n else\r\n done = true;\r\n }\r\n }\r\n p.next = null; // that'll work even if the tree was empty\r\n return head.next;\r\n}\r\nfunction sortedListToBST(list, start, end) {\r\n var size = end - start;\r\n if (size > 0) {\r\n var middle = start + Math.floor(size / 2);\r\n var left = sortedListToBST(list, start, middle);\r\n var root = list.head;\r\n root.left = left;\r\n list.head = list.head.next;\r\n root.right = sortedListToBST(list, middle + 1, end);\r\n return root;\r\n }\r\n return null;\r\n}\r\nfunction mergeLists(l1, l2, compare) {\r\n var head = new Node(null, null); // dummy\r\n var p = head;\r\n var p1 = l1;\r\n var p2 = l2;\r\n while (p1 !== null && p2 !== null) {\r\n if (compare(p1.key, p2.key) < 0) {\r\n p.next = p1;\r\n p1 = p1.next;\r\n }\r\n else {\r\n p.next = p2;\r\n p2 = p2.next;\r\n }\r\n p = p.next;\r\n }\r\n if (p1 !== null) {\r\n p.next = p1;\r\n }\r\n else if (p2 !== null) {\r\n p.next = p2;\r\n }\r\n return head.next;\r\n}\r\nfunction sort(keys, values, left, right, compare) {\r\n if (left >= right)\r\n return;\r\n var pivot = keys[(left + right) >> 1];\r\n var i = left - 1;\r\n var j = right + 1;\r\n while (true) {\r\n do\r\n i++;\r\n while (compare(keys[i], pivot) < 0);\r\n do\r\n j--;\r\n while (compare(keys[j], pivot) > 0);\r\n if (i >= j)\r\n break;\r\n var tmp = keys[i];\r\n keys[i] = keys[j];\r\n keys[j] = tmp;\r\n tmp = values[i];\r\n values[i] = values[j];\r\n values[j] = tmp;\r\n }\r\n sort(keys, values, left, j, compare);\r\n sort(keys, values, j + 1, right, compare);\r\n}\n\nexport default Tree;\n//# sourceMappingURL=splay.esm.js.map\n","import SplayTree from 'splaytree';\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\n/**\n * A bounding box has the format:\n *\n * { ll: { x: xmin, y: ymin }, ur: { x: xmax, y: ymax } }\n *\n */\nvar isInBbox = function isInBbox(bbox, point) {\n return bbox.ll.x <= point.x && point.x <= bbox.ur.x && bbox.ll.y <= point.y && point.y <= bbox.ur.y;\n};\n/* Returns either null, or a bbox (aka an ordered pair of points)\n * If there is only one point of overlap, a bbox with identical points\n * will be returned */\n\nvar getBboxOverlap = function getBboxOverlap(b1, b2) {\n // check if the bboxes overlap at all\n if (b2.ur.x < b1.ll.x || b1.ur.x < b2.ll.x || b2.ur.y < b1.ll.y || b1.ur.y < b2.ll.y) return null; // find the middle two X values\n\n var lowerX = b1.ll.x < b2.ll.x ? b2.ll.x : b1.ll.x;\n var upperX = b1.ur.x < b2.ur.x ? b1.ur.x : b2.ur.x; // find the middle two Y values\n\n var lowerY = b1.ll.y < b2.ll.y ? b2.ll.y : b1.ll.y;\n var upperY = b1.ur.y < b2.ur.y ? b1.ur.y : b2.ur.y; // put those middle values together to get the overlap\n\n return {\n ll: {\n x: lowerX,\n y: lowerY\n },\n ur: {\n x: upperX,\n y: upperY\n }\n };\n};\n\n/* Javascript doesn't do integer math. Everything is\n * floating point with percision Number.EPSILON.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON\n */\nvar epsilon = Number.EPSILON; // IE Polyfill\n\nif (epsilon === undefined) epsilon = Math.pow(2, -52);\nvar EPSILON_SQ = epsilon * epsilon;\n/* FLP comparator */\n\nvar cmp = function cmp(a, b) {\n // check if they're both 0\n if (-epsilon < a && a < epsilon) {\n if (-epsilon < b && b < epsilon) {\n return 0;\n }\n } // check if they're flp equal\n\n\n var ab = a - b;\n\n if (ab * ab < EPSILON_SQ * a * b) {\n return 0;\n } // normal comparison\n\n\n return a < b ? -1 : 1;\n};\n\n/**\n * This class rounds incoming values sufficiently so that\n * floating points problems are, for the most part, avoided.\n *\n * Incoming points are have their x & y values tested against\n * all previously seen x & y values. If either is 'too close'\n * to a previously seen value, it's value is 'snapped' to the\n * previously seen value.\n *\n * All points should be rounded by this class before being\n * stored in any data structures in the rest of this algorithm.\n */\n\nvar PtRounder = /*#__PURE__*/function () {\n function PtRounder() {\n _classCallCheck(this, PtRounder);\n\n this.reset();\n }\n\n _createClass(PtRounder, [{\n key: \"reset\",\n value: function reset() {\n this.xRounder = new CoordRounder();\n this.yRounder = new CoordRounder();\n }\n }, {\n key: \"round\",\n value: function round(x, y) {\n return {\n x: this.xRounder.round(x),\n y: this.yRounder.round(y)\n };\n }\n }]);\n\n return PtRounder;\n}();\n\nvar CoordRounder = /*#__PURE__*/function () {\n function CoordRounder() {\n _classCallCheck(this, CoordRounder);\n\n this.tree = new SplayTree(); // preseed with 0 so we don't end up with values < Number.EPSILON\n\n this.round(0);\n } // Note: this can rounds input values backwards or forwards.\n // You might ask, why not restrict this to just rounding\n // forwards? Wouldn't that allow left endpoints to always\n // remain left endpoints during splitting (never change to\n // right). No - it wouldn't, because we snap intersections\n // to endpoints (to establish independence from the segment\n // angle for t-intersections).\n\n\n _createClass(CoordRounder, [{\n key: \"round\",\n value: function round(coord) {\n var node = this.tree.add(coord);\n var prevNode = this.tree.prev(node);\n\n if (prevNode !== null && cmp(node.key, prevNode.key) === 0) {\n this.tree.remove(coord);\n return prevNode.key;\n }\n\n var nextNode = this.tree.next(node);\n\n if (nextNode !== null && cmp(node.key, nextNode.key) === 0) {\n this.tree.remove(coord);\n return nextNode.key;\n }\n\n return coord;\n }\n }]);\n\n return CoordRounder;\n}(); // singleton available by import\n\n\nvar rounder = new PtRounder();\n\n/* Cross Product of two vectors with first point at origin */\n\nvar crossProduct = function crossProduct(a, b) {\n return a.x * b.y - a.y * b.x;\n};\n/* Dot Product of two vectors with first point at origin */\n\nvar dotProduct = function dotProduct(a, b) {\n return a.x * b.x + a.y * b.y;\n};\n/* Comparator for two vectors with same starting point */\n\nvar compareVectorAngles = function compareVectorAngles(basePt, endPt1, endPt2) {\n var v1 = {\n x: endPt1.x - basePt.x,\n y: endPt1.y - basePt.y\n };\n var v2 = {\n x: endPt2.x - basePt.x,\n y: endPt2.y - basePt.y\n };\n var kross = crossProduct(v1, v2);\n return cmp(kross, 0);\n};\nvar length = function length(v) {\n return Math.sqrt(dotProduct(v, v));\n};\n/* Get the sine of the angle from pShared -> pAngle to pShaed -> pBase */\n\nvar sineOfAngle = function sineOfAngle(pShared, pBase, pAngle) {\n var vBase = {\n x: pBase.x - pShared.x,\n y: pBase.y - pShared.y\n };\n var vAngle = {\n x: pAngle.x - pShared.x,\n y: pAngle.y - pShared.y\n };\n return crossProduct(vAngle, vBase) / length(vAngle) / length(vBase);\n};\n/* Get the cosine of the angle from pShared -> pAngle to pShaed -> pBase */\n\nvar cosineOfAngle = function cosineOfAngle(pShared, pBase, pAngle) {\n var vBase = {\n x: pBase.x - pShared.x,\n y: pBase.y - pShared.y\n };\n var vAngle = {\n x: pAngle.x - pShared.x,\n y: pAngle.y - pShared.y\n };\n return dotProduct(vAngle, vBase) / length(vAngle) / length(vBase);\n};\n/* Get the x coordinate where the given line (defined by a point and vector)\n * crosses the horizontal line with the given y coordiante.\n * In the case of parrallel lines (including overlapping ones) returns null. */\n\nvar horizontalIntersection = function horizontalIntersection(pt, v, y) {\n if (v.y === 0) return null;\n return {\n x: pt.x + v.x / v.y * (y - pt.y),\n y: y\n };\n};\n/* Get the y coordinate where the given line (defined by a point and vector)\n * crosses the vertical line with the given x coordiante.\n * In the case of parrallel lines (including overlapping ones) returns null. */\n\nvar verticalIntersection = function verticalIntersection(pt, v, x) {\n if (v.x === 0) return null;\n return {\n x: x,\n y: pt.y + v.y / v.x * (x - pt.x)\n };\n};\n/* Get the intersection of two lines, each defined by a base point and a vector.\n * In the case of parrallel lines (including overlapping ones) returns null. */\n\nvar intersection = function intersection(pt1, v1, pt2, v2) {\n // take some shortcuts for vertical and horizontal lines\n // this also ensures we don't calculate an intersection and then discover\n // it's actually outside the bounding box of the line\n if (v1.x === 0) return verticalIntersection(pt2, v2, pt1.x);\n if (v2.x === 0) return verticalIntersection(pt1, v1, pt2.x);\n if (v1.y === 0) return horizontalIntersection(pt2, v2, pt1.y);\n if (v2.y === 0) return horizontalIntersection(pt1, v1, pt2.y); // General case for non-overlapping segments.\n // This algorithm is based on Schneider and Eberly.\n // http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf - pg 244\n\n var kross = crossProduct(v1, v2);\n if (kross == 0) return null;\n var ve = {\n x: pt2.x - pt1.x,\n y: pt2.y - pt1.y\n };\n var d1 = crossProduct(ve, v1) / kross;\n var d2 = crossProduct(ve, v2) / kross; // take the average of the two calculations to minimize rounding error\n\n var x1 = pt1.x + d2 * v1.x,\n x2 = pt2.x + d1 * v2.x;\n var y1 = pt1.y + d2 * v1.y,\n y2 = pt2.y + d1 * v2.y;\n var x = (x1 + x2) / 2;\n var y = (y1 + y2) / 2;\n return {\n x: x,\n y: y\n };\n};\n\nvar SweepEvent = /*#__PURE__*/function () {\n _createClass(SweepEvent, null, [{\n key: \"compare\",\n // for ordering sweep events in the sweep event queue\n value: function compare(a, b) {\n // favor event with a point that the sweep line hits first\n var ptCmp = SweepEvent.comparePoints(a.point, b.point);\n if (ptCmp !== 0) return ptCmp; // the points are the same, so link them if needed\n\n if (a.point !== b.point) a.link(b); // favor right events over left\n\n if (a.isLeft !== b.isLeft) return a.isLeft ? 1 : -1; // we have two matching left or right endpoints\n // ordering of this case is the same as for their segments\n\n return Segment.compare(a.segment, b.segment);\n } // for ordering points in sweep line order\n\n }, {\n key: \"comparePoints\",\n value: function comparePoints(aPt, bPt) {\n if (aPt.x < bPt.x) return -1;\n if (aPt.x > bPt.x) return 1;\n if (aPt.y < bPt.y) return -1;\n if (aPt.y > bPt.y) return 1;\n return 0;\n } // Warning: 'point' input will be modified and re-used (for performance)\n\n }]);\n\n function SweepEvent(point, isLeft) {\n _classCallCheck(this, SweepEvent);\n\n if (point.events === undefined) point.events = [this];else point.events.push(this);\n this.point = point;\n this.isLeft = isLeft; // this.segment, this.otherSE set by factory\n }\n\n _createClass(SweepEvent, [{\n key: \"link\",\n value: function link(other) {\n if (other.point === this.point) {\n throw new Error('Tried to link already linked events');\n }\n\n var otherEvents = other.point.events;\n\n for (var i = 0, iMax = otherEvents.length; i < iMax; i++) {\n var evt = otherEvents[i];\n this.point.events.push(evt);\n evt.point = this.point;\n }\n\n this.checkForConsuming();\n }\n /* Do a pass over our linked events and check to see if any pair\n * of segments match, and should be consumed. */\n\n }, {\n key: \"checkForConsuming\",\n value: function checkForConsuming() {\n // FIXME: The loops in this method run O(n^2) => no good.\n // Maintain little ordered sweep event trees?\n // Can we maintaining an ordering that avoids the need\n // for the re-sorting with getLeftmostComparator in geom-out?\n // Compare each pair of events to see if other events also match\n var numEvents = this.point.events.length;\n\n for (var i = 0; i < numEvents; i++) {\n var evt1 = this.point.events[i];\n if (evt1.segment.consumedBy !== undefined) continue;\n\n for (var j = i + 1; j < numEvents; j++) {\n var evt2 = this.point.events[j];\n if (evt2.consumedBy !== undefined) continue;\n if (evt1.otherSE.point.events !== evt2.otherSE.point.events) continue;\n evt1.segment.consume(evt2.segment);\n }\n }\n }\n }, {\n key: \"getAvailableLinkedEvents\",\n value: function getAvailableLinkedEvents() {\n // point.events is always of length 2 or greater\n var events = [];\n\n for (var i = 0, iMax = this.point.events.length; i < iMax; i++) {\n var evt = this.point.events[i];\n\n if (evt !== this && !evt.segment.ringOut && evt.segment.isInResult()) {\n events.push(evt);\n }\n }\n\n return events;\n }\n /**\n * Returns a comparator function for sorting linked events that will\n * favor the event that will give us the smallest left-side angle.\n * All ring construction starts as low as possible heading to the right,\n * so by always turning left as sharp as possible we'll get polygons\n * without uncessary loops & holes.\n *\n * The comparator function has a compute cache such that it avoids\n * re-computing already-computed values.\n */\n\n }, {\n key: \"getLeftmostComparator\",\n value: function getLeftmostComparator(baseEvent) {\n var _this = this;\n\n var cache = new Map();\n\n var fillCache = function fillCache(linkedEvent) {\n var nextEvent = linkedEvent.otherSE;\n cache.set(linkedEvent, {\n sine: sineOfAngle(_this.point, baseEvent.point, nextEvent.point),\n cosine: cosineOfAngle(_this.point, baseEvent.point, nextEvent.point)\n });\n };\n\n return function (a, b) {\n if (!cache.has(a)) fillCache(a);\n if (!cache.has(b)) fillCache(b);\n\n var _cache$get = cache.get(a),\n asine = _cache$get.sine,\n acosine = _cache$get.cosine;\n\n var _cache$get2 = cache.get(b),\n bsine = _cache$get2.sine,\n bcosine = _cache$get2.cosine; // both on or above x-axis\n\n\n if (asine >= 0 && bsine >= 0) {\n if (acosine < bcosine) return 1;\n if (acosine > bcosine) return -1;\n return 0;\n } // both below x-axis\n\n\n if (asine < 0 && bsine < 0) {\n if (acosine < bcosine) return -1;\n if (acosine > bcosine) return 1;\n return 0;\n } // one above x-axis, one below\n\n\n if (bsine < asine) return -1;\n if (bsine > asine) return 1;\n return 0;\n };\n }\n }]);\n\n return SweepEvent;\n}();\n\n// segments and sweep events when all else is identical\n\nvar segmentId = 0;\n\nvar Segment = /*#__PURE__*/function () {\n _createClass(Segment, null, [{\n key: \"compare\",\n\n /* This compare() function is for ordering segments in the sweep\n * line tree, and does so according to the following criteria:\n *\n * Consider the vertical line that lies an infinestimal step to the\n * right of the right-more of the two left endpoints of the input\n * segments. Imagine slowly moving a point up from negative infinity\n * in the increasing y direction. Which of the two segments will that\n * point intersect first? That segment comes 'before' the other one.\n *\n * If neither segment would be intersected by such a line, (if one\n * or more of the segments are vertical) then the line to be considered\n * is directly on the right-more of the two left inputs.\n */\n value: function compare(a, b) {\n var alx = a.leftSE.point.x;\n var blx = b.leftSE.point.x;\n var arx = a.rightSE.point.x;\n var brx = b.rightSE.point.x; // check if they're even in the same vertical plane\n\n if (brx < alx) return 1;\n if (arx < blx) return -1;\n var aly = a.leftSE.point.y;\n var bly = b.leftSE.point.y;\n var ary = a.rightSE.point.y;\n var bry = b.rightSE.point.y; // is left endpoint of segment B the right-more?\n\n if (alx < blx) {\n // are the two segments in the same horizontal plane?\n if (bly < aly && bly < ary) return 1;\n if (bly > aly && bly > ary) return -1; // is the B left endpoint colinear to segment A?\n\n var aCmpBLeft = a.comparePoint(b.leftSE.point);\n if (aCmpBLeft < 0) return 1;\n if (aCmpBLeft > 0) return -1; // is the A right endpoint colinear to segment B ?\n\n var bCmpARight = b.comparePoint(a.rightSE.point);\n if (bCmpARight !== 0) return bCmpARight; // colinear segments, consider the one with left-more\n // left endpoint to be first (arbitrary?)\n\n return -1;\n } // is left endpoint of segment A the right-more?\n\n\n if (alx > blx) {\n if (aly < bly && aly < bry) return -1;\n if (aly > bly && aly > bry) return 1; // is the A left endpoint colinear to segment B?\n\n var bCmpALeft = b.comparePoint(a.leftSE.point);\n if (bCmpALeft !== 0) return bCmpALeft; // is the B right endpoint colinear to segment A?\n\n var aCmpBRight = a.comparePoint(b.rightSE.point);\n if (aCmpBRight < 0) return 1;\n if (aCmpBRight > 0) return -1; // colinear segments, consider the one with left-more\n // left endpoint to be first (arbitrary?)\n\n return 1;\n } // if we get here, the two left endpoints are in the same\n // vertical plane, ie alx === blx\n // consider the lower left-endpoint to come first\n\n\n if (aly < bly) return -1;\n if (aly > bly) return 1; // left endpoints are identical\n // check for colinearity by using the left-more right endpoint\n // is the A right endpoint more left-more?\n\n if (arx < brx) {\n var _bCmpARight = b.comparePoint(a.rightSE.point);\n\n if (_bCmpARight !== 0) return _bCmpARight;\n } // is the B right endpoint more left-more?\n\n\n if (arx > brx) {\n var _aCmpBRight = a.comparePoint(b.rightSE.point);\n\n if (_aCmpBRight < 0) return 1;\n if (_aCmpBRight > 0) return -1;\n }\n\n if (arx !== brx) {\n // are these two [almost] vertical segments with opposite orientation?\n // if so, the one with the lower right endpoint comes first\n var ay = ary - aly;\n var ax = arx - alx;\n var by = bry - bly;\n var bx = brx - blx;\n if (ay > ax && by < bx) return 1;\n if (ay < ax && by > bx) return -1;\n } // we have colinear segments with matching orientation\n // consider the one with more left-more right endpoint to be first\n\n\n if (arx > brx) return 1;\n if (arx < brx) return -1; // if we get here, two two right endpoints are in the same\n // vertical plane, ie arx === brx\n // consider the lower right-endpoint to come first\n\n if (ary < bry) return -1;\n if (ary > bry) return 1; // right endpoints identical as well, so the segments are idential\n // fall back on creation order as consistent tie-breaker\n\n if (a.id < b.id) return -1;\n if (a.id > b.id) return 1; // identical segment, ie a === b\n\n return 0;\n }\n /* Warning: a reference to ringWindings input will be stored,\n * and possibly will be later modified */\n\n }]);\n\n function Segment(leftSE, rightSE, rings, windings) {\n _classCallCheck(this, Segment);\n\n this.id = ++segmentId;\n this.leftSE = leftSE;\n leftSE.segment = this;\n leftSE.otherSE = rightSE;\n this.rightSE = rightSE;\n rightSE.segment = this;\n rightSE.otherSE = leftSE;\n this.rings = rings;\n this.windings = windings; // left unset for performance, set later in algorithm\n // this.ringOut, this.consumedBy, this.prev\n }\n\n _createClass(Segment, [{\n key: \"replaceRightSE\",\n\n /* When a segment is split, the rightSE is replaced with a new sweep event */\n value: function replaceRightSE(newRightSE) {\n this.rightSE = newRightSE;\n this.rightSE.segment = this;\n this.rightSE.otherSE = this.leftSE;\n this.leftSE.otherSE = this.rightSE;\n }\n }, {\n key: \"bbox\",\n value: function bbox() {\n var y1 = this.leftSE.point.y;\n var y2 = this.rightSE.point.y;\n return {\n ll: {\n x: this.leftSE.point.x,\n y: y1 < y2 ? y1 : y2\n },\n ur: {\n x: this.rightSE.point.x,\n y: y1 > y2 ? y1 : y2\n }\n };\n }\n /* A vector from the left point to the right */\n\n }, {\n key: \"vector\",\n value: function vector() {\n return {\n x: this.rightSE.point.x - this.leftSE.point.x,\n y: this.rightSE.point.y - this.leftSE.point.y\n };\n }\n }, {\n key: \"isAnEndpoint\",\n value: function isAnEndpoint(pt) {\n return pt.x === this.leftSE.point.x && pt.y === this.leftSE.point.y || pt.x === this.rightSE.point.x && pt.y === this.rightSE.point.y;\n }\n /* Compare this segment with a point.\n *\n * A point P is considered to be colinear to a segment if there\n * exists a distance D such that if we travel along the segment\n * from one * endpoint towards the other a distance D, we find\n * ourselves at point P.\n *\n * Return value indicates:\n *\n * 1: point lies above the segment (to the left of vertical)\n * 0: point is colinear to segment\n * -1: point lies below the segment (to the right of vertical)\n */\n\n }, {\n key: \"comparePoint\",\n value: function comparePoint(point) {\n if (this.isAnEndpoint(point)) return 0;\n var lPt = this.leftSE.point;\n var rPt = this.rightSE.point;\n var v = this.vector(); // Exactly vertical segments.\n\n if (lPt.x === rPt.x) {\n if (point.x === lPt.x) return 0;\n return point.x < lPt.x ? 1 : -1;\n } // Nearly vertical segments with an intersection.\n // Check to see where a point on the line with matching Y coordinate is.\n\n\n var yDist = (point.y - lPt.y) / v.y;\n var xFromYDist = lPt.x + yDist * v.x;\n if (point.x === xFromYDist) return 0; // General case.\n // Check to see where a point on the line with matching X coordinate is.\n\n var xDist = (point.x - lPt.x) / v.x;\n var yFromXDist = lPt.y + xDist * v.y;\n if (point.y === yFromXDist) return 0;\n return point.y < yFromXDist ? -1 : 1;\n }\n /**\n * Given another segment, returns the first non-trivial intersection\n * between the two segments (in terms of sweep line ordering), if it exists.\n *\n * A 'non-trivial' intersection is one that will cause one or both of the\n * segments to be split(). As such, 'trivial' vs. 'non-trivial' intersection:\n *\n * * endpoint of segA with endpoint of segB --> trivial\n * * endpoint of segA with point along segB --> non-trivial\n * * endpoint of segB with point along segA --> non-trivial\n * * point along segA with point along segB --> non-trivial\n *\n * If no non-trivial intersection exists, return null\n * Else, return null.\n */\n\n }, {\n key: \"getIntersection\",\n value: function getIntersection(other) {\n // If bboxes don't overlap, there can't be any intersections\n var tBbox = this.bbox();\n var oBbox = other.bbox();\n var bboxOverlap = getBboxOverlap(tBbox, oBbox);\n if (bboxOverlap === null) return null; // We first check to see if the endpoints can be considered intersections.\n // This will 'snap' intersections to endpoints if possible, and will\n // handle cases of colinearity.\n\n var tlp = this.leftSE.point;\n var trp = this.rightSE.point;\n var olp = other.leftSE.point;\n var orp = other.rightSE.point; // does each endpoint touch the other segment?\n // note that we restrict the 'touching' definition to only allow segments\n // to touch endpoints that lie forward from where we are in the sweep line pass\n\n var touchesOtherLSE = isInBbox(tBbox, olp) && this.comparePoint(olp) === 0;\n var touchesThisLSE = isInBbox(oBbox, tlp) && other.comparePoint(tlp) === 0;\n var touchesOtherRSE = isInBbox(tBbox, orp) && this.comparePoint(orp) === 0;\n var touchesThisRSE = isInBbox(oBbox, trp) && other.comparePoint(trp) === 0; // do left endpoints match?\n\n if (touchesThisLSE && touchesOtherLSE) {\n // these two cases are for colinear segments with matching left\n // endpoints, and one segment being longer than the other\n if (touchesThisRSE && !touchesOtherRSE) return trp;\n if (!touchesThisRSE && touchesOtherRSE) return orp; // either the two segments match exactly (two trival intersections)\n // or just on their left endpoint (one trivial intersection\n\n return null;\n } // does this left endpoint matches (other doesn't)\n\n\n if (touchesThisLSE) {\n // check for segments that just intersect on opposing endpoints\n if (touchesOtherRSE) {\n if (tlp.x === orp.x && tlp.y === orp.y) return null;\n } // t-intersection on left endpoint\n\n\n return tlp;\n } // does other left endpoint matches (this doesn't)\n\n\n if (touchesOtherLSE) {\n // check for segments that just intersect on opposing endpoints\n if (touchesThisRSE) {\n if (trp.x === olp.x && trp.y === olp.y) return null;\n } // t-intersection on left endpoint\n\n\n return olp;\n } // trivial intersection on right endpoints\n\n\n if (touchesThisRSE && touchesOtherRSE) return null; // t-intersections on just one right endpoint\n\n if (touchesThisRSE) return trp;\n if (touchesOtherRSE) return orp; // None of our endpoints intersect. Look for a general intersection between\n // infinite lines laid over the segments\n\n var pt = intersection(tlp, this.vector(), olp, other.vector()); // are the segments parrallel? Note that if they were colinear with overlap,\n // they would have an endpoint intersection and that case was already handled above\n\n if (pt === null) return null; // is the intersection found between the lines not on the segments?\n\n if (!isInBbox(bboxOverlap, pt)) return null; // round the the computed point if needed\n\n return rounder.round(pt.x, pt.y);\n }\n /**\n * Split the given segment into multiple segments on the given points.\n * * Each existing segment will retain its leftSE and a new rightSE will be\n * generated for it.\n * * A new segment will be generated which will adopt the original segment's\n * rightSE, and a new leftSE will be generated for it.\n * * If there are more than two points given to split on, new segments\n * in the middle will be generated with new leftSE and rightSE's.\n * * An array of the newly generated SweepEvents will be returned.\n *\n * Warning: input array of points is modified\n */\n\n }, {\n key: \"split\",\n value: function split(point) {\n var newEvents = [];\n var alreadyLinked = point.events !== undefined;\n var newLeftSE = new SweepEvent(point, true);\n var newRightSE = new SweepEvent(point, false);\n var oldRightSE = this.rightSE;\n this.replaceRightSE(newRightSE);\n newEvents.push(newRightSE);\n newEvents.push(newLeftSE);\n var newSeg = new Segment(newLeftSE, oldRightSE, this.rings.slice(), this.windings.slice()); // when splitting a nearly vertical downward-facing segment,\n // sometimes one of the resulting new segments is vertical, in which\n // case its left and right events may need to be swapped\n\n if (SweepEvent.comparePoints(newSeg.leftSE.point, newSeg.rightSE.point) > 0) {\n newSeg.swapEvents();\n }\n\n if (SweepEvent.comparePoints(this.leftSE.point, this.rightSE.point) > 0) {\n this.swapEvents();\n } // in the point we just used to create new sweep events with was already\n // linked to other events, we need to check if either of the affected\n // segments should be consumed\n\n\n if (alreadyLinked) {\n newLeftSE.checkForConsuming();\n newRightSE.checkForConsuming();\n }\n\n return newEvents;\n }\n /* Swap which event is left and right */\n\n }, {\n key: \"swapEvents\",\n value: function swapEvents() {\n var tmpEvt = this.rightSE;\n this.rightSE = this.leftSE;\n this.leftSE = tmpEvt;\n this.leftSE.isLeft = true;\n this.rightSE.isLeft = false;\n\n for (var i = 0, iMax = this.windings.length; i < iMax; i++) {\n this.windings[i] *= -1;\n }\n }\n /* Consume another segment. We take their rings under our wing\n * and mark them as consumed. Use for perfectly overlapping segments */\n\n }, {\n key: \"consume\",\n value: function consume(other) {\n var consumer = this;\n var consumee = other;\n\n while (consumer.consumedBy) {\n consumer = consumer.consumedBy;\n }\n\n while (consumee.consumedBy) {\n consumee = consumee.consumedBy;\n }\n\n var cmp = Segment.compare(consumer, consumee);\n if (cmp === 0) return; // already consumed\n // the winner of the consumption is the earlier segment\n // according to sweep line ordering\n\n if (cmp > 0) {\n var tmp = consumer;\n consumer = consumee;\n consumee = tmp;\n } // make sure a segment doesn't consume it's prev\n\n\n if (consumer.prev === consumee) {\n var _tmp = consumer;\n consumer = consumee;\n consumee = _tmp;\n }\n\n for (var i = 0, iMax = consumee.rings.length; i < iMax; i++) {\n var ring = consumee.rings[i];\n var winding = consumee.windings[i];\n var index = consumer.rings.indexOf(ring);\n\n if (index === -1) {\n consumer.rings.push(ring);\n consumer.windings.push(winding);\n } else consumer.windings[index] += winding;\n }\n\n consumee.rings = null;\n consumee.windings = null;\n consumee.consumedBy = consumer; // mark sweep events consumed as to maintain ordering in sweep event queue\n\n consumee.leftSE.consumedBy = consumer.leftSE;\n consumee.rightSE.consumedBy = consumer.rightSE;\n }\n /* The first segment previous segment chain that is in the result */\n\n }, {\n key: \"prevInResult\",\n value: function prevInResult() {\n if (this._prevInResult !== undefined) return this._prevInResult;\n if (!this.prev) this._prevInResult = null;else if (this.prev.isInResult()) this._prevInResult = this.prev;else this._prevInResult = this.prev.prevInResult();\n return this._prevInResult;\n }\n }, {\n key: \"beforeState\",\n value: function beforeState() {\n if (this._beforeState !== undefined) return this._beforeState;\n if (!this.prev) this._beforeState = {\n rings: [],\n windings: [],\n multiPolys: []\n };else {\n var seg = this.prev.consumedBy || this.prev;\n this._beforeState = seg.afterState();\n }\n return this._beforeState;\n }\n }, {\n key: \"afterState\",\n value: function afterState() {\n if (this._afterState !== undefined) return this._afterState;\n var beforeState = this.beforeState();\n this._afterState = {\n rings: beforeState.rings.slice(0),\n windings: beforeState.windings.slice(0),\n multiPolys: []\n };\n var ringsAfter = this._afterState.rings;\n var windingsAfter = this._afterState.windings;\n var mpsAfter = this._afterState.multiPolys; // calculate ringsAfter, windingsAfter\n\n for (var i = 0, iMax = this.rings.length; i < iMax; i++) {\n var ring = this.rings[i];\n var winding = this.windings[i];\n var index = ringsAfter.indexOf(ring);\n\n if (index === -1) {\n ringsAfter.push(ring);\n windingsAfter.push(winding);\n } else windingsAfter[index] += winding;\n } // calcualte polysAfter\n\n\n var polysAfter = [];\n var polysExclude = [];\n\n for (var _i = 0, _iMax = ringsAfter.length; _i < _iMax; _i++) {\n if (windingsAfter[_i] === 0) continue; // non-zero rule\n\n var _ring = ringsAfter[_i];\n var poly = _ring.poly;\n if (polysExclude.indexOf(poly) !== -1) continue;\n if (_ring.isExterior) polysAfter.push(poly);else {\n if (polysExclude.indexOf(poly) === -1) polysExclude.push(poly);\n\n var _index = polysAfter.indexOf(_ring.poly);\n\n if (_index !== -1) polysAfter.splice(_index, 1);\n }\n } // calculate multiPolysAfter\n\n\n for (var _i2 = 0, _iMax2 = polysAfter.length; _i2 < _iMax2; _i2++) {\n var mp = polysAfter[_i2].multiPoly;\n if (mpsAfter.indexOf(mp) === -1) mpsAfter.push(mp);\n }\n\n return this._afterState;\n }\n /* Is this segment part of the final result? */\n\n }, {\n key: \"isInResult\",\n value: function isInResult() {\n // if we've been consumed, we're not in the result\n if (this.consumedBy) return false;\n if (this._isInResult !== undefined) return this._isInResult;\n var mpsBefore = this.beforeState().multiPolys;\n var mpsAfter = this.afterState().multiPolys;\n\n switch (operation.type) {\n case 'union':\n {\n // UNION - included iff:\n // * On one side of us there is 0 poly interiors AND\n // * On the other side there is 1 or more.\n var noBefores = mpsBefore.length === 0;\n var noAfters = mpsAfter.length === 0;\n this._isInResult = noBefores !== noAfters;\n break;\n }\n\n case 'intersection':\n {\n // INTERSECTION - included iff:\n // * on one side of us all multipolys are rep. with poly interiors AND\n // * on the other side of us, not all multipolys are repsented\n // with poly interiors\n var least;\n var most;\n\n if (mpsBefore.length < mpsAfter.length) {\n least = mpsBefore.length;\n most = mpsAfter.length;\n } else {\n least = mpsAfter.length;\n most = mpsBefore.length;\n }\n\n this._isInResult = most === operation.numMultiPolys && least < most;\n break;\n }\n\n case 'xor':\n {\n // XOR - included iff:\n // * the difference between the number of multipolys represented\n // with poly interiors on our two sides is an odd number\n var diff = Math.abs(mpsBefore.length - mpsAfter.length);\n this._isInResult = diff % 2 === 1;\n break;\n }\n\n case 'difference':\n {\n // DIFFERENCE included iff:\n // * on exactly one side, we have just the subject\n var isJustSubject = function isJustSubject(mps) {\n return mps.length === 1 && mps[0].isSubject;\n };\n\n this._isInResult = isJustSubject(mpsBefore) !== isJustSubject(mpsAfter);\n break;\n }\n\n default:\n throw new Error(\"Unrecognized operation type found \".concat(operation.type));\n }\n\n return this._isInResult;\n }\n }], [{\n key: \"fromRing\",\n value: function fromRing(pt1, pt2, ring) {\n var leftPt, rightPt, winding; // ordering the two points according to sweep line ordering\n\n var cmpPts = SweepEvent.comparePoints(pt1, pt2);\n\n if (cmpPts < 0) {\n leftPt = pt1;\n rightPt = pt2;\n winding = 1;\n } else if (cmpPts > 0) {\n leftPt = pt2;\n rightPt = pt1;\n winding = -1;\n } else throw new Error(\"Tried to create degenerate segment at [\".concat(pt1.x, \", \").concat(pt1.y, \"]\"));\n\n var leftSE = new SweepEvent(leftPt, true);\n var rightSE = new SweepEvent(rightPt, false);\n return new Segment(leftSE, rightSE, [ring], [winding]);\n }\n }]);\n\n return Segment;\n}();\n\nvar RingIn = /*#__PURE__*/function () {\n function RingIn(geomRing, poly, isExterior) {\n _classCallCheck(this, RingIn);\n\n if (!Array.isArray(geomRing) || geomRing.length === 0) {\n throw new Error('Input geometry is not a valid Polygon or MultiPolygon');\n }\n\n this.poly = poly;\n this.isExterior = isExterior;\n this.segments = [];\n\n if (typeof geomRing[0][0] !== 'number' || typeof geomRing[0][1] !== 'number') {\n throw new Error('Input geometry is not a valid Polygon or MultiPolygon');\n }\n\n var firstPoint = rounder.round(geomRing[0][0], geomRing[0][1]);\n this.bbox = {\n ll: {\n x: firstPoint.x,\n y: firstPoint.y\n },\n ur: {\n x: firstPoint.x,\n y: firstPoint.y\n }\n };\n var prevPoint = firstPoint;\n\n for (var i = 1, iMax = geomRing.length; i < iMax; i++) {\n if (typeof geomRing[i][0] !== 'number' || typeof geomRing[i][1] !== 'number') {\n throw new Error('Input geometry is not a valid Polygon or MultiPolygon');\n }\n\n var point = rounder.round(geomRing[i][0], geomRing[i][1]); // skip repeated points\n\n if (point.x === prevPoint.x && point.y === prevPoint.y) continue;\n this.segments.push(Segment.fromRing(prevPoint, point, this));\n if (point.x < this.bbox.ll.x) this.bbox.ll.x = point.x;\n if (point.y < this.bbox.ll.y) this.bbox.ll.y = point.y;\n if (point.x > this.bbox.ur.x) this.bbox.ur.x = point.x;\n if (point.y > this.bbox.ur.y) this.bbox.ur.y = point.y;\n prevPoint = point;\n } // add segment from last to first if last is not the same as first\n\n\n if (firstPoint.x !== prevPoint.x || firstPoint.y !== prevPoint.y) {\n this.segments.push(Segment.fromRing(prevPoint, firstPoint, this));\n }\n }\n\n _createClass(RingIn, [{\n key: \"getSweepEvents\",\n value: function getSweepEvents() {\n var sweepEvents = [];\n\n for (var i = 0, iMax = this.segments.length; i < iMax; i++) {\n var segment = this.segments[i];\n sweepEvents.push(segment.leftSE);\n sweepEvents.push(segment.rightSE);\n }\n\n return sweepEvents;\n }\n }]);\n\n return RingIn;\n}();\nvar PolyIn = /*#__PURE__*/function () {\n function PolyIn(geomPoly, multiPoly) {\n _classCallCheck(this, PolyIn);\n\n if (!Array.isArray(geomPoly)) {\n throw new Error('Input geometry is not a valid Polygon or MultiPolygon');\n }\n\n this.exteriorRing = new RingIn(geomPoly[0], this, true); // copy by value\n\n this.bbox = {\n ll: {\n x: this.exteriorRing.bbox.ll.x,\n y: this.exteriorRing.bbox.ll.y\n },\n ur: {\n x: this.exteriorRing.bbox.ur.x,\n y: this.exteriorRing.bbox.ur.y\n }\n };\n this.interiorRings = [];\n\n for (var i = 1, iMax = geomPoly.length; i < iMax; i++) {\n var ring = new RingIn(geomPoly[i], this, false);\n if (ring.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = ring.bbox.ll.x;\n if (ring.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = ring.bbox.ll.y;\n if (ring.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = ring.bbox.ur.x;\n if (ring.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = ring.bbox.ur.y;\n this.interiorRings.push(ring);\n }\n\n this.multiPoly = multiPoly;\n }\n\n _createClass(PolyIn, [{\n key: \"getSweepEvents\",\n value: function getSweepEvents() {\n var sweepEvents = this.exteriorRing.getSweepEvents();\n\n for (var i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n var ringSweepEvents = this.interiorRings[i].getSweepEvents();\n\n for (var j = 0, jMax = ringSweepEvents.length; j < jMax; j++) {\n sweepEvents.push(ringSweepEvents[j]);\n }\n }\n\n return sweepEvents;\n }\n }]);\n\n return PolyIn;\n}();\nvar MultiPolyIn = /*#__PURE__*/function () {\n function MultiPolyIn(geom, isSubject) {\n _classCallCheck(this, MultiPolyIn);\n\n if (!Array.isArray(geom)) {\n throw new Error('Input geometry is not a valid Polygon or MultiPolygon');\n }\n\n try {\n // if the input looks like a polygon, convert it to a multipolygon\n if (typeof geom[0][0][0] === 'number') geom = [geom];\n } catch (ex) {// The input is either malformed or has empty arrays.\n // In either case, it will be handled later on.\n }\n\n this.polys = [];\n this.bbox = {\n ll: {\n x: Number.POSITIVE_INFINITY,\n y: Number.POSITIVE_INFINITY\n },\n ur: {\n x: Number.NEGATIVE_INFINITY,\n y: Number.NEGATIVE_INFINITY\n }\n };\n\n for (var i = 0, iMax = geom.length; i < iMax; i++) {\n var poly = new PolyIn(geom[i], this);\n if (poly.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = poly.bbox.ll.x;\n if (poly.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = poly.bbox.ll.y;\n if (poly.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = poly.bbox.ur.x;\n if (poly.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = poly.bbox.ur.y;\n this.polys.push(poly);\n }\n\n this.isSubject = isSubject;\n }\n\n _createClass(MultiPolyIn, [{\n key: \"getSweepEvents\",\n value: function getSweepEvents() {\n var sweepEvents = [];\n\n for (var i = 0, iMax = this.polys.length; i < iMax; i++) {\n var polySweepEvents = this.polys[i].getSweepEvents();\n\n for (var j = 0, jMax = polySweepEvents.length; j < jMax; j++) {\n sweepEvents.push(polySweepEvents[j]);\n }\n }\n\n return sweepEvents;\n }\n }]);\n\n return MultiPolyIn;\n}();\n\nvar RingOut = /*#__PURE__*/function () {\n _createClass(RingOut, null, [{\n key: \"factory\",\n\n /* Given the segments from the sweep line pass, compute & return a series\n * of closed rings from all the segments marked to be part of the result */\n value: function factory(allSegments) {\n var ringsOut = [];\n\n for (var i = 0, iMax = allSegments.length; i < iMax; i++) {\n var segment = allSegments[i];\n if (!segment.isInResult() || segment.ringOut) continue;\n var prevEvent = null;\n var event = segment.leftSE;\n var nextEvent = segment.rightSE;\n var events = [event];\n var startingPoint = event.point;\n var intersectionLEs = [];\n /* Walk the chain of linked events to form a closed ring */\n\n while (true) {\n prevEvent = event;\n event = nextEvent;\n events.push(event);\n /* Is the ring complete? */\n\n if (event.point === startingPoint) break;\n\n while (true) {\n var availableLEs = event.getAvailableLinkedEvents();\n /* Did we hit a dead end? This shouldn't happen. Indicates some earlier\n * part of the algorithm malfunctioned... please file a bug report. */\n\n if (availableLEs.length === 0) {\n var firstPt = events[0].point;\n var lastPt = events[events.length - 1].point;\n throw new Error(\"Unable to complete output ring starting at [\".concat(firstPt.x, \",\") + \" \".concat(firstPt.y, \"]. Last matching segment found ends at\") + \" [\".concat(lastPt.x, \", \").concat(lastPt.y, \"].\"));\n }\n /* Only one way to go, so cotinue on the path */\n\n\n if (availableLEs.length === 1) {\n nextEvent = availableLEs[0].otherSE;\n break;\n }\n /* We must have an intersection. Check for a completed loop */\n\n\n var indexLE = null;\n\n for (var j = 0, jMax = intersectionLEs.length; j < jMax; j++) {\n if (intersectionLEs[j].point === event.point) {\n indexLE = j;\n break;\n }\n }\n /* Found a completed loop. Cut that off and make a ring */\n\n\n if (indexLE !== null) {\n var intersectionLE = intersectionLEs.splice(indexLE)[0];\n var ringEvents = events.splice(intersectionLE.index);\n ringEvents.unshift(ringEvents[0].otherSE);\n ringsOut.push(new RingOut(ringEvents.reverse()));\n continue;\n }\n /* register the intersection */\n\n\n intersectionLEs.push({\n index: events.length,\n point: event.point\n });\n /* Choose the left-most option to continue the walk */\n\n var comparator = event.getLeftmostComparator(prevEvent);\n nextEvent = availableLEs.sort(comparator)[0].otherSE;\n break;\n }\n }\n\n ringsOut.push(new RingOut(events));\n }\n\n return ringsOut;\n }\n }]);\n\n function RingOut(events) {\n _classCallCheck(this, RingOut);\n\n this.events = events;\n\n for (var i = 0, iMax = events.length; i < iMax; i++) {\n events[i].segment.ringOut = this;\n }\n\n this.poly = null;\n }\n\n _createClass(RingOut, [{\n key: \"getGeom\",\n value: function getGeom() {\n // Remove superfluous points (ie extra points along a straight line),\n var prevPt = this.events[0].point;\n var points = [prevPt];\n\n for (var i = 1, iMax = this.events.length - 1; i < iMax; i++) {\n var _pt = this.events[i].point;\n var _nextPt = this.events[i + 1].point;\n if (compareVectorAngles(_pt, prevPt, _nextPt) === 0) continue;\n points.push(_pt);\n prevPt = _pt;\n } // ring was all (within rounding error of angle calc) colinear points\n\n\n if (points.length === 1) return null; // check if the starting point is necessary\n\n var pt = points[0];\n var nextPt = points[1];\n if (compareVectorAngles(pt, prevPt, nextPt) === 0) points.shift();\n points.push(points[0]);\n var step = this.isExteriorRing() ? 1 : -1;\n var iStart = this.isExteriorRing() ? 0 : points.length - 1;\n var iEnd = this.isExteriorRing() ? points.length : -1;\n var orderedPoints = [];\n\n for (var _i = iStart; _i != iEnd; _i += step) {\n orderedPoints.push([points[_i].x, points[_i].y]);\n }\n\n return orderedPoints;\n }\n }, {\n key: \"isExteriorRing\",\n value: function isExteriorRing() {\n if (this._isExteriorRing === undefined) {\n var enclosing = this.enclosingRing();\n this._isExteriorRing = enclosing ? !enclosing.isExteriorRing() : true;\n }\n\n return this._isExteriorRing;\n }\n }, {\n key: \"enclosingRing\",\n value: function enclosingRing() {\n if (this._enclosingRing === undefined) {\n this._enclosingRing = this._calcEnclosingRing();\n }\n\n return this._enclosingRing;\n }\n /* Returns the ring that encloses this one, if any */\n\n }, {\n key: \"_calcEnclosingRing\",\n value: function _calcEnclosingRing() {\n // start with the ealier sweep line event so that the prevSeg\n // chain doesn't lead us inside of a loop of ours\n var leftMostEvt = this.events[0];\n\n for (var i = 1, iMax = this.events.length; i < iMax; i++) {\n var evt = this.events[i];\n if (SweepEvent.compare(leftMostEvt, evt) > 0) leftMostEvt = evt;\n }\n\n var prevSeg = leftMostEvt.segment.prevInResult();\n var prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;\n\n while (true) {\n // no segment found, thus no ring can enclose us\n if (!prevSeg) return null; // no segments below prev segment found, thus the ring of the prev\n // segment must loop back around and enclose us\n\n if (!prevPrevSeg) return prevSeg.ringOut; // if the two segments are of different rings, the ring of the prev\n // segment must either loop around us or the ring of the prev prev\n // seg, which would make us and the ring of the prev peers\n\n if (prevPrevSeg.ringOut !== prevSeg.ringOut) {\n if (prevPrevSeg.ringOut.enclosingRing() !== prevSeg.ringOut) {\n return prevSeg.ringOut;\n } else return prevSeg.ringOut.enclosingRing();\n } // two segments are from the same ring, so this was a penisula\n // of that ring. iterate downward, keep searching\n\n\n prevSeg = prevPrevSeg.prevInResult();\n prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;\n }\n }\n }]);\n\n return RingOut;\n}();\nvar PolyOut = /*#__PURE__*/function () {\n function PolyOut(exteriorRing) {\n _classCallCheck(this, PolyOut);\n\n this.exteriorRing = exteriorRing;\n exteriorRing.poly = this;\n this.interiorRings = [];\n }\n\n _createClass(PolyOut, [{\n key: \"addInterior\",\n value: function addInterior(ring) {\n this.interiorRings.push(ring);\n ring.poly = this;\n }\n }, {\n key: \"getGeom\",\n value: function getGeom() {\n var geom = [this.exteriorRing.getGeom()]; // exterior ring was all (within rounding error of angle calc) colinear points\n\n if (geom[0] === null) return null;\n\n for (var i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n var ringGeom = this.interiorRings[i].getGeom(); // interior ring was all (within rounding error of angle calc) colinear points\n\n if (ringGeom === null) continue;\n geom.push(ringGeom);\n }\n\n return geom;\n }\n }]);\n\n return PolyOut;\n}();\nvar MultiPolyOut = /*#__PURE__*/function () {\n function MultiPolyOut(rings) {\n _classCallCheck(this, MultiPolyOut);\n\n this.rings = rings;\n this.polys = this._composePolys(rings);\n }\n\n _createClass(MultiPolyOut, [{\n key: \"getGeom\",\n value: function getGeom() {\n var geom = [];\n\n for (var i = 0, iMax = this.polys.length; i < iMax; i++) {\n var polyGeom = this.polys[i].getGeom(); // exterior ring was all (within rounding error of angle calc) colinear points\n\n if (polyGeom === null) continue;\n geom.push(polyGeom);\n }\n\n return geom;\n }\n }, {\n key: \"_composePolys\",\n value: function _composePolys(rings) {\n var polys = [];\n\n for (var i = 0, iMax = rings.length; i < iMax; i++) {\n var ring = rings[i];\n if (ring.poly) continue;\n if (ring.isExteriorRing()) polys.push(new PolyOut(ring));else {\n var enclosingRing = ring.enclosingRing();\n if (!enclosingRing.poly) polys.push(new PolyOut(enclosingRing));\n enclosingRing.poly.addInterior(ring);\n }\n }\n\n return polys;\n }\n }]);\n\n return MultiPolyOut;\n}();\n\n/**\n * NOTE: We must be careful not to change any segments while\n * they are in the SplayTree. AFAIK, there's no way to tell\n * the tree to rebalance itself - thus before splitting\n * a segment that's in the tree, we remove it from the tree,\n * do the split, then re-insert it. (Even though splitting a\n * segment *shouldn't* change its correct position in the\n * sweep line tree, the reality is because of rounding errors,\n * it sometimes does.)\n */\n\nvar SweepLine = /*#__PURE__*/function () {\n function SweepLine(queue) {\n var comparator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Segment.compare;\n\n _classCallCheck(this, SweepLine);\n\n this.queue = queue;\n this.tree = new SplayTree(comparator);\n this.segments = [];\n }\n\n _createClass(SweepLine, [{\n key: \"process\",\n value: function process(event) {\n var segment = event.segment;\n var newEvents = []; // if we've already been consumed by another segment,\n // clean up our body parts and get out\n\n if (event.consumedBy) {\n if (event.isLeft) this.queue.remove(event.otherSE);else this.tree.remove(segment);\n return newEvents;\n }\n\n var node = event.isLeft ? this.tree.insert(segment) : this.tree.find(segment);\n if (!node) throw new Error(\"Unable to find segment #\".concat(segment.id, \" \") + \"[\".concat(segment.leftSE.point.x, \", \").concat(segment.leftSE.point.y, \"] -> \") + \"[\".concat(segment.rightSE.point.x, \", \").concat(segment.rightSE.point.y, \"] \") + 'in SweepLine tree. Please submit a bug report.');\n var prevNode = node;\n var nextNode = node;\n var prevSeg = undefined;\n var nextSeg = undefined; // skip consumed segments still in tree\n\n while (prevSeg === undefined) {\n prevNode = this.tree.prev(prevNode);\n if (prevNode === null) prevSeg = null;else if (prevNode.key.consumedBy === undefined) prevSeg = prevNode.key;\n } // skip consumed segments still in tree\n\n\n while (nextSeg === undefined) {\n nextNode = this.tree.next(nextNode);\n if (nextNode === null) nextSeg = null;else if (nextNode.key.consumedBy === undefined) nextSeg = nextNode.key;\n }\n\n if (event.isLeft) {\n // Check for intersections against the previous segment in the sweep line\n var prevMySplitter = null;\n\n if (prevSeg) {\n var prevInter = prevSeg.getIntersection(segment);\n\n if (prevInter !== null) {\n if (!segment.isAnEndpoint(prevInter)) prevMySplitter = prevInter;\n\n if (!prevSeg.isAnEndpoint(prevInter)) {\n var newEventsFromSplit = this._splitSafely(prevSeg, prevInter);\n\n for (var i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n } // Check for intersections against the next segment in the sweep line\n\n\n var nextMySplitter = null;\n\n if (nextSeg) {\n var nextInter = nextSeg.getIntersection(segment);\n\n if (nextInter !== null) {\n if (!segment.isAnEndpoint(nextInter)) nextMySplitter = nextInter;\n\n if (!nextSeg.isAnEndpoint(nextInter)) {\n var _newEventsFromSplit = this._splitSafely(nextSeg, nextInter);\n\n for (var _i = 0, _iMax = _newEventsFromSplit.length; _i < _iMax; _i++) {\n newEvents.push(_newEventsFromSplit[_i]);\n }\n }\n }\n } // For simplicity, even if we find more than one intersection we only\n // spilt on the 'earliest' (sweep-line style) of the intersections.\n // The other intersection will be handled in a future process().\n\n\n if (prevMySplitter !== null || nextMySplitter !== null) {\n var mySplitter = null;\n if (prevMySplitter === null) mySplitter = nextMySplitter;else if (nextMySplitter === null) mySplitter = prevMySplitter;else {\n var cmpSplitters = SweepEvent.comparePoints(prevMySplitter, nextMySplitter);\n mySplitter = cmpSplitters <= 0 ? prevMySplitter : nextMySplitter;\n } // Rounding errors can cause changes in ordering,\n // so remove afected segments and right sweep events before splitting\n\n this.queue.remove(segment.rightSE);\n newEvents.push(segment.rightSE);\n\n var _newEventsFromSplit2 = segment.split(mySplitter);\n\n for (var _i2 = 0, _iMax2 = _newEventsFromSplit2.length; _i2 < _iMax2; _i2++) {\n newEvents.push(_newEventsFromSplit2[_i2]);\n }\n }\n\n if (newEvents.length > 0) {\n // We found some intersections, so re-do the current event to\n // make sure sweep line ordering is totally consistent for later\n // use with the segment 'prev' pointers\n this.tree.remove(segment);\n newEvents.push(event);\n } else {\n // done with left event\n this.segments.push(segment);\n segment.prev = prevSeg;\n }\n } else {\n // event.isRight\n // since we're about to be removed from the sweep line, check for\n // intersections between our previous and next segments\n if (prevSeg && nextSeg) {\n var inter = prevSeg.getIntersection(nextSeg);\n\n if (inter !== null) {\n if (!prevSeg.isAnEndpoint(inter)) {\n var _newEventsFromSplit3 = this._splitSafely(prevSeg, inter);\n\n for (var _i3 = 0, _iMax3 = _newEventsFromSplit3.length; _i3 < _iMax3; _i3++) {\n newEvents.push(_newEventsFromSplit3[_i3]);\n }\n }\n\n if (!nextSeg.isAnEndpoint(inter)) {\n var _newEventsFromSplit4 = this._splitSafely(nextSeg, inter);\n\n for (var _i4 = 0, _iMax4 = _newEventsFromSplit4.length; _i4 < _iMax4; _i4++) {\n newEvents.push(_newEventsFromSplit4[_i4]);\n }\n }\n }\n }\n\n this.tree.remove(segment);\n }\n\n return newEvents;\n }\n /* Safely split a segment that is currently in the datastructures\n * IE - a segment other than the one that is currently being processed. */\n\n }, {\n key: \"_splitSafely\",\n value: function _splitSafely(seg, pt) {\n // Rounding errors can cause changes in ordering,\n // so remove afected segments and right sweep events before splitting\n // removeNode() doesn't work, so have re-find the seg\n // https://github.com/w8r/splay-tree/pull/5\n this.tree.remove(seg);\n var rightSE = seg.rightSE;\n this.queue.remove(rightSE);\n var newEvents = seg.split(pt);\n newEvents.push(rightSE); // splitting can trigger consumption\n\n if (seg.consumedBy === undefined) this.tree.insert(seg);\n return newEvents;\n }\n }]);\n\n return SweepLine;\n}();\n\nvar POLYGON_CLIPPING_MAX_QUEUE_SIZE = typeof process !== 'undefined' && process.env.POLYGON_CLIPPING_MAX_QUEUE_SIZE || 1000000;\nvar POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS = typeof process !== 'undefined' && process.env.POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS || 1000000;\nvar Operation = /*#__PURE__*/function () {\n function Operation() {\n _classCallCheck(this, Operation);\n }\n\n _createClass(Operation, [{\n key: \"run\",\n value: function run(type, geom, moreGeoms) {\n operation.type = type;\n rounder.reset();\n /* Convert inputs to MultiPoly objects */\n\n var multipolys = [new MultiPolyIn(geom, true)];\n\n for (var i = 0, iMax = moreGeoms.length; i < iMax; i++) {\n multipolys.push(new MultiPolyIn(moreGeoms[i], false));\n }\n\n operation.numMultiPolys = multipolys.length;\n /* BBox optimization for difference operation\n * If the bbox of a multipolygon that's part of the clipping doesn't\n * intersect the bbox of the subject at all, we can just drop that\n * multiploygon. */\n\n if (operation.type === 'difference') {\n // in place removal\n var subject = multipolys[0];\n var _i = 1;\n\n while (_i < multipolys.length) {\n if (getBboxOverlap(multipolys[_i].bbox, subject.bbox) !== null) _i++;else multipolys.splice(_i, 1);\n }\n }\n /* BBox optimization for intersection operation\n * If we can find any pair of multipolygons whose bbox does not overlap,\n * then the result will be empty. */\n\n\n if (operation.type === 'intersection') {\n // TODO: this is O(n^2) in number of polygons. By sorting the bboxes,\n // it could be optimized to O(n * ln(n))\n for (var _i2 = 0, _iMax = multipolys.length; _i2 < _iMax; _i2++) {\n var mpA = multipolys[_i2];\n\n for (var j = _i2 + 1, jMax = multipolys.length; j < jMax; j++) {\n if (getBboxOverlap(mpA.bbox, multipolys[j].bbox) === null) return [];\n }\n }\n }\n /* Put segment endpoints in a priority queue */\n\n\n var queue = new SplayTree(SweepEvent.compare);\n\n for (var _i3 = 0, _iMax2 = multipolys.length; _i3 < _iMax2; _i3++) {\n var sweepEvents = multipolys[_i3].getSweepEvents();\n\n for (var _j = 0, _jMax = sweepEvents.length; _j < _jMax; _j++) {\n queue.insert(sweepEvents[_j]);\n\n if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error('Infinite loop when putting segment endpoints in a priority queue ' + '(queue size too big). Please file a bug report.');\n }\n }\n }\n /* Pass the sweep line over those endpoints */\n\n\n var sweepLine = new SweepLine(queue);\n var prevQueueSize = queue.size;\n var node = queue.pop();\n\n while (node) {\n var evt = node.key;\n\n if (queue.size === prevQueueSize) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n var seg = evt.segment;\n throw new Error(\"Unable to pop() \".concat(evt.isLeft ? 'left' : 'right', \" SweepEvent \") + \"[\".concat(evt.point.x, \", \").concat(evt.point.y, \"] from segment #\").concat(seg.id, \" \") + \"[\".concat(seg.leftSE.point.x, \", \").concat(seg.leftSE.point.y, \"] -> \") + \"[\".concat(seg.rightSE.point.x, \", \").concat(seg.rightSE.point.y, \"] from queue. \") + 'Please file a bug report.');\n }\n\n if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error('Infinite loop when passing sweep line over endpoints ' + '(queue size too big). Please file a bug report.');\n }\n\n if (sweepLine.segments.length > POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error('Infinite loop when passing sweep line over endpoints ' + '(too many sweep line segments). Please file a bug report.');\n }\n\n var newEvents = sweepLine.process(evt);\n\n for (var _i4 = 0, _iMax3 = newEvents.length; _i4 < _iMax3; _i4++) {\n var _evt = newEvents[_i4];\n if (_evt.consumedBy === undefined) queue.insert(_evt);\n }\n\n prevQueueSize = queue.size;\n node = queue.pop();\n } // free some memory we don't need anymore\n\n\n rounder.reset();\n /* Collect and compile segments we're keeping into a multipolygon */\n\n var ringsOut = RingOut.factory(sweepLine.segments);\n var result = new MultiPolyOut(ringsOut);\n return result.getGeom();\n }\n }]);\n\n return Operation;\n}(); // singleton available by import\n\nvar operation = new Operation();\n\nvar union = function union(geom) {\n for (var _len = arguments.length, moreGeoms = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n moreGeoms[_key - 1] = arguments[_key];\n }\n\n return operation.run('union', geom, moreGeoms);\n};\n\nvar intersection$1 = function intersection(geom) {\n for (var _len2 = arguments.length, moreGeoms = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n moreGeoms[_key2 - 1] = arguments[_key2];\n }\n\n return operation.run('intersection', geom, moreGeoms);\n};\n\nvar xor = function xor(geom) {\n for (var _len3 = arguments.length, moreGeoms = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n moreGeoms[_key3 - 1] = arguments[_key3];\n }\n\n return operation.run('xor', geom, moreGeoms);\n};\n\nvar difference = function difference(subjectGeom) {\n for (var _len4 = arguments.length, clippingGeoms = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n clippingGeoms[_key4 - 1] = arguments[_key4];\n }\n\n return operation.run('difference', subjectGeom, clippingGeoms);\n};\n\nvar index = {\n union: union,\n intersection: intersection$1,\n xor: xor,\n difference: difference\n};\n\nexport default index;\n","/**\n * @module helpers\n */\n/**\n * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.\n *\n * @memberof helpers\n * @type {number}\n */\nexport var earthRadius = 6371008.8;\n/**\n * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var factors = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: earthRadius / 111325,\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1000,\n kilometres: earthRadius / 1000,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1000,\n millimetres: earthRadius * 1000,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936,\n};\n/**\n * Units of measurement factors based on 1 meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var unitsFactors = {\n centimeters: 100,\n centimetres: 100,\n degrees: 1 / 111325,\n feet: 3.28084,\n inches: 39.37,\n kilometers: 1 / 1000,\n kilometres: 1 / 1000,\n meters: 1,\n metres: 1,\n miles: 1 / 1609.344,\n millimeters: 1000,\n millimetres: 1000,\n nauticalmiles: 1 / 1852,\n radians: 1 / earthRadius,\n yards: 1.0936133,\n};\n/**\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var areaFactors = {\n acres: 0.000247105,\n centimeters: 10000,\n centimetres: 10000,\n feet: 10.763910417,\n hectares: 0.0001,\n inches: 1550.003100006,\n kilometers: 0.000001,\n kilometres: 0.000001,\n meters: 1,\n metres: 1,\n miles: 3.86e-7,\n millimeters: 1000000,\n millimetres: 1000000,\n yards: 1.195990046,\n};\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\nexport function feature(geom, properties, options) {\n if (options === void 0) { options = {}; }\n var feat = { type: \"Feature\" };\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array<any>} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = \"Point\";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\nexport function geometry(type, coordinates, _options) {\n if (_options === void 0) { _options = {}; }\n switch (type) {\n case \"Point\":\n return point(coordinates).geometry;\n case \"LineString\":\n return lineString(coordinates).geometry;\n case \"Polygon\":\n return polygon(coordinates).geometry;\n case \"MultiPoint\":\n return multiPoint(coordinates).geometry;\n case \"MultiLineString\":\n return multiLineString(coordinates).geometry;\n case \"MultiPolygon\":\n return multiPolygon(coordinates).geometry;\n default:\n throw new Error(type + \" is invalid\");\n }\n}\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<Point>} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\nexport function point(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (!coordinates) {\n throw new Error(\"coordinates is required\");\n }\n if (!Array.isArray(coordinates)) {\n throw new Error(\"coordinates must be an Array\");\n }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be at least 2 numbers long\");\n }\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error(\"coordinates must contain numbers\");\n }\n var geom = {\n type: \"Point\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array<Array<number>>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<Point>} Point Feature\n * @example\n * var points = turf.points([\n * [-75, 39],\n * [-80, 45],\n * [-78, 50]\n * ]);\n *\n * //=points\n */\nexport function points(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return point(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<Polygon>} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });\n *\n * //=polygon\n */\nexport function polygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {\n var ring = coordinates_1[_i];\n if (ring.length < 4) {\n throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");\n }\n for (var j = 0; j < ring[ring.length - 1].length; j++) {\n // Check if first point of Polygon contains two numbers\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n }\n }\n var geom = {\n type: \"Polygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\nexport function polygons(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return polygon(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array<Array<number>>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<LineString>} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});\n *\n * //=linestring1\n * //=linestring2\n */\nexport function lineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n var geom = {\n type: \"LineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<LineString>} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\nexport function lineStrings(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return lineString(coords, properties);\n }), options);\n}\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});\n * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});\n * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});\n *\n * var collection = turf.featureCollection([\n * locationA,\n * locationB,\n * locationC\n * ]);\n *\n * //=collection\n */\nexport function featureCollection(features, options) {\n if (options === void 0) { options = {}; }\n var fc = { type: \"FeatureCollection\" };\n if (options.id) {\n fc.id = options.id;\n }\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n fc.features = features;\n return fc;\n}\n/**\n * Creates a {@link Feature<MultiLineString>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiLineString>} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\nexport function multiLineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiLineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature<MultiPoint>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array<Array<number>>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiPoint>} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\nexport function multiPoint(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPoint\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature<MultiPolygon>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiPolygon>} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\nexport function multiPolygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPolygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature<GeometryCollection>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array<Geometry>} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry(\"Point\", [100, 0]);\n * var line = turf.geometry(\"LineString\", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\nexport function geometryCollection(geometries, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"GeometryCollection\",\n geometries: geometries,\n };\n return feature(geom, properties, options);\n}\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\nexport function round(num, precision) {\n if (precision === void 0) { precision = 0; }\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n var multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\nexport function radiansToLength(radians, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\nexport function lengthToRadians(distance, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\nexport function lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\nexport function bearingToAzimuth(bearing) {\n var angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\nexport function radiansToDegrees(radians) {\n var degrees = radians % (2 * Math.PI);\n return (degrees * 180) / Math.PI;\n}\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\nexport function degreesToRadians(degrees) {\n var radians = degrees % 360;\n return (radians * Math.PI) / 180;\n}\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit=\"kilometers\"] of the length\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted length\n */\nexport function convertLength(length, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"kilometers\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(length >= 0)) {\n throw new Error(\"length must be a positive number\");\n }\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches, hectares\n * @param {number} area to be converted\n * @param {Units} [originalUnit=\"meters\"] of the distance\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted area\n */\nexport function convertArea(area, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"meters\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n var startFactor = areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n var finalFactor = areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n return (area / startFactor) * finalFactor;\n}\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber('foo')\n * //=false\n */\nexport function isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject('foo')\n * //=false\n */\nexport function isObject(input) {\n return !!input && input.constructor === Object;\n}\n/**\n * Validate BBox\n *\n * @private\n * @param {Array<number>} bbox BBox to validate\n * @returns {void}\n * @throws Error if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox('Foo')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\nexport function validateBBox(bbox) {\n if (!bbox) {\n throw new Error(\"bbox is required\");\n }\n if (!Array.isArray(bbox)) {\n throw new Error(\"bbox must be an Array\");\n }\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n }\n bbox.forEach(function (num) {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws Error if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId('Foo')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\nexport function validateId(id) {\n if (!id) {\n throw new Error(\"id is required\");\n }\n if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n throw new Error(\"id must be a number or a string\");\n }\n}\n","import { isNumber, } from \"@turf/helpers\";\n/**\n * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.\n *\n * @name getCoord\n * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers\n * @returns {Array<number>} coordinates\n * @example\n * var pt = turf.point([10, 10]);\n *\n * var coord = turf.getCoord(pt);\n * //= [10, 10]\n */\nexport function getCoord(coord) {\n if (!coord) {\n throw new Error(\"coord is required\");\n }\n if (!Array.isArray(coord)) {\n if (coord.type === \"Feature\" &&\n coord.geometry !== null &&\n coord.geometry.type === \"Point\") {\n return coord.geometry.coordinates;\n }\n if (coord.type === \"Point\") {\n return coord.coordinates;\n }\n }\n if (Array.isArray(coord) &&\n coord.length >= 2 &&\n !Array.isArray(coord[0]) &&\n !Array.isArray(coord[1])) {\n return coord;\n }\n throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\n/**\n * Unwrap coordinates from a Feature, Geometry Object or an Array\n *\n * @name getCoords\n * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array\n * @returns {Array<any>} coordinates\n * @example\n * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);\n *\n * var coords = turf.getCoords(poly);\n * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]\n */\nexport function getCoords(coords) {\n if (Array.isArray(coords)) {\n return coords;\n }\n // Feature\n if (coords.type === \"Feature\") {\n if (coords.geometry !== null) {\n return coords.geometry.coordinates;\n }\n }\n else {\n // Geometry\n if (coords.coordinates) {\n return coords.coordinates;\n }\n }\n throw new Error(\"coords must be GeoJSON Feature, Geometry Object or an Array\");\n}\n/**\n * Checks if coordinates contains a number\n *\n * @name containsNumber\n * @param {Array<any>} coordinates GeoJSON Coordinates\n * @returns {boolean} true if Array contains a number\n */\nexport function containsNumber(coordinates) {\n if (coordinates.length > 1 &&\n isNumber(coordinates[0]) &&\n isNumber(coordinates[1])) {\n return true;\n }\n if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n return containsNumber(coordinates[0]);\n }\n throw new Error(\"coordinates must only contain numbers\");\n}\n/**\n * Enforce expectations about types of GeoJSON objects for Turf.\n *\n * @name geojsonType\n * @param {GeoJSON} value any GeoJSON object\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nexport function geojsonType(value, type, name) {\n if (!type || !name) {\n throw new Error(\"type and name required\");\n }\n if (!value || value.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n value.type);\n }\n}\n/**\n * Enforce expectations about types of {@link Feature} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name featureOf\n * @param {Feature} feature a feature with an expected geometry type\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} error if value is not the expected type.\n */\nexport function featureOf(feature, type, name) {\n if (!feature) {\n throw new Error(\"No feature passed\");\n }\n if (!name) {\n throw new Error(\".featureOf() requires a name\");\n }\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type);\n }\n}\n/**\n * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name collectionOf\n * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nexport function collectionOf(featureCollection, type, name) {\n if (!featureCollection) {\n throw new Error(\"No featureCollection passed\");\n }\n if (!name) {\n throw new Error(\".collectionOf() requires a name\");\n }\n if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n throw new Error(\"Invalid input to \" + name + \", FeatureCollection required\");\n }\n for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {\n var feature = _a[_i];\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type);\n }\n }\n}\n/**\n * Get Geometry from Feature or Geometry Object\n *\n * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object\n * @returns {Geometry|null} GeoJSON Geometry Object\n * @throws {Error} if geojson is not a Feature or Geometry Object\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getGeom(point)\n * //={\"type\": \"Point\", \"coordinates\": [110, 40]}\n */\nexport function getGeom(geojson) {\n if (geojson.type === \"Feature\") {\n return geojson.geometry;\n }\n return geojson;\n}\n/**\n * Get GeoJSON object's type, Geometry type is prioritize.\n *\n * @param {GeoJSON} geojson GeoJSON object\n * @param {string} [name=\"geojson\"] name of the variable to display in error message (unused)\n * @returns {string} GeoJSON type\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getType(point)\n * //=\"Point\"\n */\nexport function getType(geojson, _name) {\n if (geojson.type === \"FeatureCollection\") {\n return \"FeatureCollection\";\n }\n if (geojson.type === \"GeometryCollection\") {\n return \"GeometryCollection\";\n }\n if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n return geojson.geometry.type;\n }\n return geojson.type;\n}\n","import polygonClipping from \"polygon-clipping\";\nimport { getGeom } from \"@turf/invariant\";\nimport { multiPolygon, polygon } from \"@turf/helpers\";\n/**\n * Takes two {@link (Multi)Polygon(s)} and returns a combined polygon. If the input polygons are not contiguous, this function returns a {@link MultiPolygon} feature.\n *\n * @name union\n * @param {Feature<Polygon|MultiPolygon>} polygon1 input Polygon feature\n * @param {Feature<Polygon|MultiPolygon>} polygon2 Polygon feature to difference from polygon1\n * @param {Object} [options={}] Optional Parameters\n * @param {Object} [options.properties={}] Translate Properties to output Feature\n * @returns {Feature<(Polygon|MultiPolygon)>} a combined {@link Polygon} or {@link MultiPolygon} feature, or null if the inputs are empty\n * @example\n * var poly1 = turf.polygon([[\n * [-82.574787, 35.594087],\n * [-82.574787, 35.615581],\n * [-82.545261, 35.615581],\n * [-82.545261, 35.594087],\n * [-82.574787, 35.594087]\n * ]], {\"fill\": \"#0f0\"});\n * var poly2 = turf.polygon([[\n * [-82.560024, 35.585153],\n * [-82.560024, 35.602602],\n * [-82.52964, 35.602602],\n * [-82.52964, 35.585153],\n * [-82.560024, 35.585153]\n * ]], {\"fill\": \"#00f\"});\n *\n * var union = turf.union(poly1, poly2);\n *\n * //addToMap\n * var addToMap = [poly1, poly2, union];\n */\nfunction union(poly1, poly2, options) {\n if (options === void 0) { options = {}; }\n var geom1 = getGeom(poly1);\n var geom2 = getGeom(poly2);\n var unioned = polygonClipping.union(geom1.coordinates, geom2.coordinates);\n if (unioned.length === 0)\n return null;\n if (unioned.length === 1)\n return polygon(unioned[0], options.properties);\n else\n return multiPolygon(unioned, options.properties);\n}\nexport default union;\n","import polygonClipping from 'polygon-clipping';\nimport { polygon, multiPolygon } from '@turf/helpers';\nimport { getGeom } from '@turf/invariant';\n\n/**\n * Finds the difference between two {@link Polygon|polygons} by clipping the second polygon from the first.\n *\n * @name difference\n * @param {Feature<Polygon|MultiPolygon>} polygon1 input Polygon feature\n * @param {Feature<Polygon|MultiPolygon>} polygon2 Polygon feature to difference from polygon1\n * @returns {Feature<Polygon|MultiPolygon>|null} a Polygon or MultiPolygon feature showing the area of `polygon1` excluding the area of `polygon2` (if empty returns `null`)\n * @example\n * var polygon1 = turf.polygon([[\n * [128, -26],\n * [141, -26],\n * [141, -21],\n * [128, -21],\n * [128, -26]\n * ]], {\n * \"fill\": \"#F00\",\n * \"fill-opacity\": 0.1\n * });\n * var polygon2 = turf.polygon([[\n * [126, -28],\n * [140, -28],\n * [140, -20],\n * [126, -20],\n * [126, -28]\n * ]], {\n * \"fill\": \"#00F\",\n * \"fill-opacity\": 0.1\n * });\n *\n * var difference = turf.difference(polygon1, polygon2);\n *\n * //addToMap\n * var addToMap = [polygon1, polygon2, difference];\n */\nfunction difference(polygon1, polygon2) {\n var geom1 = getGeom(polygon1);\n var geom2 = getGeom(polygon2);\n var properties = polygon1.properties || {};\n\n var differenced = polygonClipping.difference(\n geom1.coordinates,\n geom2.coordinates\n );\n if (differenced.length === 0) return null;\n if (differenced.length === 1) return polygon(differenced[0], properties);\n return multiPolygon(differenced, properties);\n}\n\nexport default difference;\n","import { feature, lineString, isObject, point } from '@turf/helpers';\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {Array<number>} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n // Handles null Geometry -- Skips this GeoJSON\n if (geojson === null) return;\n var j,\n k,\n l,\n geometry,\n stopG,\n coords,\n geometryMaybeCollection,\n wrapShrink = 0,\n coordIndex = 0,\n isGeometryCollection,\n type = geojson.type,\n isFeatureCollection = type === \"FeatureCollection\",\n isFeature = type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[featureIndex].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[geomIndex]\n : geometryMaybeCollection;\n\n // Handles null Geometry -- Skips this geometry\n if (geometry === null) continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n\n wrapShrink =\n excludeWrapCoord &&\n (geomType === \"Polygon\" || geomType === \"MultiPolygon\")\n ? 1\n : 0;\n\n switch (geomType) {\n case null:\n break;\n case \"Point\":\n if (\n callback(\n coords,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n case \"LineString\":\n case \"MultiPoint\":\n for (j = 0; j < coords.length; j++) {\n if (\n callback(\n coords[j],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n if (geomType === \"MultiPoint\") multiFeatureIndex++;\n }\n if (geomType === \"LineString\") multiFeatureIndex++;\n break;\n case \"Polygon\":\n case \"MultiLineString\":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (\n callback(\n coords[j][k],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n if (geomType === \"MultiLineString\") multiFeatureIndex++;\n if (geomType === \"Polygon\") geometryIndex++;\n }\n if (geomType === \"Polygon\") multiFeatureIndex++;\n break;\n case \"MultiPolygon\":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (\n callback(\n coords[j][k][l],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n geometryIndex++;\n }\n multiFeatureIndex++;\n }\n break;\n case \"GeometryCollection\":\n for (j = 0; j < geometry.geometries.length; j++)\n if (\n coordEach(geometry.geometries[j], callback, excludeWrapCoord) ===\n false\n )\n return false;\n break;\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n }\n}\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Array<number>} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentCoord;\n * });\n */\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(\n geojson,\n function (\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) {\n if (coordIndex === 0 && initialValue === undefined)\n previousValue = currentCoord;\n else\n previousValue = callback(\n previousValue,\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n },\n excludeWrapCoord\n );\n return previousValue;\n}\n\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {Object} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n * //=currentProperties\n * //=featureIndex\n * });\n */\nfunction propEach(geojson, callback) {\n var i;\n switch (geojson.type) {\n case \"FeatureCollection\":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false) break;\n }\n break;\n case \"Feature\":\n callback(geojson.properties, 0);\n break;\n }\n}\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n * //=previousValue\n * //=currentProperties\n * //=featureIndex\n * return currentProperties\n * });\n */\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function (currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentProperties;\n else\n previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature<any>} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n * //=currentFeature\n * //=featureIndex\n * });\n */\nfunction featureEach(geojson, callback) {\n if (geojson.type === \"Feature\") {\n callback(geojson, 0);\n } else if (geojson.type === \"FeatureCollection\") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false) break;\n }\n }\n}\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * return currentFeature\n * });\n */\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function (currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentFeature;\n else previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @returns {Array<Array<number>>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function (coord) {\n coords.push(coord);\n });\n return coords;\n}\n\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array<number>} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * });\n */\nfunction geomEach(geojson, callback) {\n var i,\n j,\n g,\n geometry,\n stopG,\n geometryMaybeCollection,\n isGeometryCollection,\n featureProperties,\n featureBBox,\n featureId,\n featureIndex = 0,\n isFeatureCollection = geojson.type === \"FeatureCollection\",\n isFeature = geojson.type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[i].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n featureProperties = isFeatureCollection\n ? geojson.features[i].properties\n : isFeature\n ? geojson.properties\n : {};\n featureBBox = isFeatureCollection\n ? geojson.features[i].bbox\n : isFeature\n ? geojson.bbox\n : undefined;\n featureId = isFeatureCollection\n ? geojson.features[i].id\n : isFeature\n ? geojson.id\n : undefined;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[g]\n : geometryMaybeCollection;\n\n // Handle null Geometry\n if (geometry === null) {\n if (\n callback(\n null,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n continue;\n }\n switch (geometry.type) {\n case \"Point\":\n case \"LineString\":\n case \"MultiPoint\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\": {\n if (\n callback(\n geometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n break;\n }\n case \"GeometryCollection\": {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (\n callback(\n geometry.geometries[j],\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n }\n break;\n }\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n // Only increase `featureIndex` per each feature\n featureIndex++;\n }\n}\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array<number>} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=previousValue\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * return currentGeometry\n * });\n */\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(\n geojson,\n function (\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentGeometry;\n else\n previousValue = callback(\n previousValue,\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name flattenEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * });\n */\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n // Callback for single geometry\n var type = geometry === null ? null : geometry.type;\n switch (type) {\n case null:\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n if (\n callback(\n feature(geometry, properties, { bbox: bbox, id: id }),\n featureIndex,\n 0\n ) === false\n )\n return false;\n return;\n }\n\n var geomType;\n\n // Callback for multi-geometry\n switch (type) {\n case \"MultiPoint\":\n geomType = \"Point\";\n break;\n case \"MultiLineString\":\n geomType = \"LineString\";\n break;\n case \"MultiPolygon\":\n geomType = \"Polygon\";\n break;\n }\n\n for (\n var multiFeatureIndex = 0;\n multiFeatureIndex < geometry.coordinates.length;\n multiFeatureIndex++\n ) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate,\n };\n if (\n callback(feature(geom, properties), featureIndex, multiFeatureIndex) ===\n false\n )\n return false;\n }\n });\n}\n\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @name flattenReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * return currentFeature\n * });\n */\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(\n geojson,\n function (currentFeature, featureIndex, multiFeatureIndex) {\n if (\n featureIndex === 0 &&\n multiFeatureIndex === 0 &&\n initialValue === undefined\n )\n previousValue = currentFeature;\n else\n previousValue = callback(\n previousValue,\n currentFeature,\n featureIndex,\n multiFeatureIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature<LineString>} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //=currentSegment\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n * total++;\n * });\n */\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0;\n\n // Exclude null Geometries\n if (!feature.geometry) return;\n // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n var type = feature.geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\") return;\n\n // Generate 2-vertex line segments\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (\n coordEach(\n feature,\n function (\n currentCoord,\n coordIndex,\n featureIndexCoord,\n multiPartIndexCoord,\n geometryIndex\n ) {\n // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n if (\n previousCoords === undefined ||\n featureIndex > previousFeatureIndex ||\n multiPartIndexCoord > previousMultiIndex ||\n geometryIndex > prevGeomIndex\n ) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n var currentSegment = lineString(\n [previousCoords, currentCoord],\n feature.properties\n );\n if (\n callback(\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) === false\n )\n return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }\n ) === false\n )\n return false;\n });\n}\n\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature<LineString>} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //= previousSegment\n * //= currentSegment\n * //= featureIndex\n * //= multiFeatureIndex\n * //= geometryIndex\n * //= segmentIndex\n * return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n * previousValue++;\n * return previousValue;\n * }, initialValue);\n */\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(\n geojson,\n function (\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) {\n if (started === false && initialValue === undefined)\n previousValue = currentSegment;\n else\n previousValue = callback(\n previousValue,\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n );\n started = true;\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @name lineEach\n * @param {Geometry|Feature<LineString|Polygon|MultiLineString|MultiPolygon>} geojson object\n * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @example\n * var multiLine = turf.multiLineString([\n * [[26, 37], [35, 45]],\n * [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction lineEach(geojson, callback) {\n // validation\n if (!geojson) throw new Error(\"geojson is required\");\n\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n if (feature.geometry === null) return;\n var type = feature.geometry.type;\n var coords = feature.geometry.coordinates;\n switch (type) {\n case \"LineString\":\n if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false)\n return false;\n break;\n case \"Polygon\":\n for (\n var geometryIndex = 0;\n geometryIndex < coords.length;\n geometryIndex++\n ) {\n if (\n callback(\n lineString(coords[geometryIndex], feature.properties),\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n }\n break;\n }\n });\n}\n\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name lineReduce\n * @param {Geometry|Feature<LineString|Polygon|MultiLineString|MultiPolygon>} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentLine\n * });\n */\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(\n geojson,\n function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentLine;\n else\n previousValue = callback(\n previousValue,\n currentLine,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature<LineString>} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature<LineString<[[10, 10], [50, 30]]>>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature<LineString<[[-10, -10], [-50, -30]]>>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature<LineString<[[-50, -30], [-30, -40]]>>\n */\nfunction findSegment(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find SegmentIndex\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n return lineString(\n [coords[segmentIndex], coords[segmentIndex + 1]],\n properties,\n options\n );\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[geometryIndex][segmentIndex],\n coords[geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][segmentIndex],\n coords[multiFeatureIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex =\n coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][geometryIndex][segmentIndex],\n coords[multiFeatureIndex][geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature<Point>} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature<Point<[10, 10]>>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature<Point<[-10, -10]>>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature<Point<[-30, -40]>>\n */\nfunction findPoint(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find Coord Index\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n return point(coords, properties, options);\n case \"MultiPoint\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n return point(coords[multiFeatureIndex], properties, options);\n case \"LineString\":\n if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n return point(coords[coordIndex], properties, options);\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[geometryIndex].length + coordIndex;\n return point(coords[geometryIndex][coordIndex], properties, options);\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return point(coords[multiFeatureIndex][coordIndex], properties, options);\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0)\n coordIndex =\n coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return point(\n coords[multiFeatureIndex][geometryIndex][coordIndex],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\nexport { coordAll, coordEach, coordReduce, featureEach, featureReduce, findPoint, findSegment, flattenEach, flattenReduce, geomEach, geomReduce, lineEach, lineReduce, propEach, propReduce, segmentEach, segmentReduce };\n","import { coordEach } from \"@turf/meta\";\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {GeoJSON} geojson any GeoJSON object\n * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);\n * var bbox = turf.bbox(line);\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [line, bboxPolygon]\n */\nfunction bbox(geojson) {\n var result = [Infinity, Infinity, -Infinity, -Infinity];\n coordEach(geojson, function (coord) {\n if (result[0] > coord[0]) {\n result[0] = coord[0];\n }\n if (result[1] > coord[1]) {\n result[1] = coord[1];\n }\n if (result[2] < coord[0]) {\n result[2] = coord[0];\n }\n if (result[3] < coord[1]) {\n result[3] = coord[1];\n }\n });\n return result;\n}\nbbox[\"default\"] = bbox;\nexport default bbox;\n","import bbox from \"@turf/bbox\";\nimport { point, } from \"@turf/helpers\";\n/**\n * Takes a {@link Feature} or {@link FeatureCollection} and returns the absolute center point of all features.\n *\n * @name center\n * @param {GeoJSON} geojson GeoJSON to be centered\n * @param {Object} [options={}] Optional parameters\n * @param {Object} [options.properties={}] Translate GeoJSON Properties to Point\n * @param {Object} [options.bbox={}] Translate GeoJSON BBox to Point\n * @param {Object} [options.id={}] Translate GeoJSON Id to Point\n * @returns {Feature<Point>} a Point feature at the absolute center point of all input features\n * @example\n * var features = turf.points([\n * [-97.522259, 35.4691],\n * [-97.502754, 35.463455],\n * [-97.508269, 35.463245]\n * ]);\n *\n * var center = turf.center(features);\n *\n * //addToMap\n * var addToMap = [features, center]\n * center.properties['marker-size'] = 'large';\n * center.properties['marker-color'] = '#000';\n */\nfunction center(geojson, options) {\n if (options === void 0) { options = {}; }\n var ext = bbox(geojson);\n var x = (ext[0] + ext[2]) / 2;\n var y = (ext[1] + ext[3]) / 2;\n return point([x, y], options.properties, options);\n}\nexport default center;\n","/* Polyfill service v3.13.0\n * For detailed credits and licence information see http://github.com/financial-times/polyfill-service\n *\n * - Array.prototype.fill, License: CC0 */\n\nif (!('fill' in Array.prototype)) {\n Object.defineProperty(Array.prototype, 'fill', {\n configurable: true,\n value: function fill (value) {\n if (this === undefined || this === null) {\n throw new TypeError(this + ' is not an object')\n }\n\n var arrayLike = Object(this);\n\n var length = Math.max(Math.min(arrayLike.length, 9007199254740991), 0) || 0;\n\n var relativeStart = 1 in arguments ? parseInt(Number(arguments[1]), 10) || 0 : 0;\n\n relativeStart = relativeStart < 0 ? Math.max(length + relativeStart, 0) : Math.min(relativeStart, length);\n\n var relativeEnd = 2 in arguments && arguments[2] !== undefined ? parseInt(Number(arguments[2]), 10) || 0 : length;\n\n relativeEnd = relativeEnd < 0 ? Math.max(length + arguments[2], 0) : Math.min(relativeEnd, length);\n\n while (relativeStart < relativeEnd) {\n arrayLike[relativeStart] = value;\n\n ++relativeStart;\n }\n\n return arrayLike\n },\n writable: true\n });\n}\n\n/**\n * Polyfill for IE support\n */\nNumber.isFinite = Number.isFinite || function (value) {\n return typeof value === 'number' && isFinite(value)\n};\n\nNumber.isInteger = Number.isInteger || function (val) {\n return typeof val === 'number' &&\n isFinite(val) &&\n Math.floor(val) === val\n};\n\nNumber.parseFloat = Number.parseFloat || parseFloat;\n\nNumber.isNaN = Number.isNaN || function (value) {\n return value !== value // eslint-disable-line\n};\n\n/**\n * Polyfill for IE support\n */\nMath.trunc = Math.trunc || function (x) {\n return x < 0 ? Math.ceil(x) : Math.floor(x)\n};\n\nvar NumberUtil = function NumberUtil () {};\n\nNumberUtil.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nNumberUtil.prototype.getClass = function getClass () {\n return NumberUtil\n};\nNumberUtil.prototype.equalsWithTolerance = function equalsWithTolerance (x1, x2, tolerance) {\n return Math.abs(x1 - x2) <= tolerance\n};\n\nvar IllegalArgumentException = (function (Error) {\n\tfunction IllegalArgumentException (message) {\n\t\tError.call(this, message);\n\t\tthis.name = 'IllegalArgumentException';\n\t\tthis.message = message;\n\t\tthis.stack = (new Error()).stack;\n\t}\n\n\tif ( Error ) IllegalArgumentException.__proto__ = Error;\n\tIllegalArgumentException.prototype = Object.create( Error && Error.prototype );\n\tIllegalArgumentException.prototype.constructor = IllegalArgumentException;\n\n\treturn IllegalArgumentException;\n}(Error));\n\nvar Double = function Double () {};\n\nvar staticAccessors$1 = { MAX_VALUE: { configurable: true } };\n\nDouble.isNaN = function isNaN (n) { return Number.isNaN(n) };\nDouble.doubleToLongBits = function doubleToLongBits (n) { return n };\nDouble.longBitsToDouble = function longBitsToDouble (n) { return n };\nDouble.isInfinite = function isInfinite (n) { return !Number.isFinite(n) };\nstaticAccessors$1.MAX_VALUE.get = function () { return Number.MAX_VALUE };\n\nObject.defineProperties( Double, staticAccessors$1 );\n\nvar Comparable = function Comparable () {};\n\nvar Clonable = function Clonable () {};\n\nvar Comparator = function Comparator () {};\n\nfunction Serializable () {}\n\n// import Assert from '../util/Assert'\n\nvar Coordinate = function Coordinate () {\n this.x = null;\n this.y = null;\n this.z = null;\n if (arguments.length === 0) {\n this.x = 0.0;\n this.y = 0.0;\n this.z = Coordinate.NULL_ORDINATE;\n } else if (arguments.length === 1) {\n var c = arguments[0];\n this.x = c.x;\n this.y = c.y;\n this.z = c.z;\n } else if (arguments.length === 2) {\n this.x = arguments[0];\n this.y = arguments[1];\n this.z = Coordinate.NULL_ORDINATE;\n } else if (arguments.length === 3) {\n this.x = arguments[0];\n this.y = arguments[1];\n this.z = arguments[2];\n }\n};\n\nvar staticAccessors = { DimensionalComparator: { configurable: true },serialVersionUID: { configurable: true },NULL_ORDINATE: { configurable: true },X: { configurable: true },Y: { configurable: true },Z: { configurable: true } };\nCoordinate.prototype.setOrdinate = function setOrdinate (ordinateIndex, value) {\n switch (ordinateIndex) {\n case Coordinate.X:\n this.x = value;\n break\n case Coordinate.Y:\n this.y = value;\n break\n case Coordinate.Z:\n this.z = value;\n break\n default:\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n }\n};\nCoordinate.prototype.equals2D = function equals2D () {\n if (arguments.length === 1) {\n var other = arguments[0];\n if (this.x !== other.x) {\n return false\n }\n if (this.y !== other.y) {\n return false\n }\n return true\n } else if (arguments.length === 2) {\n var c = arguments[0];\n var tolerance = arguments[1];\n if (!NumberUtil.equalsWithTolerance(this.x, c.x, tolerance)) {\n return false\n }\n if (!NumberUtil.equalsWithTolerance(this.y, c.y, tolerance)) {\n return false\n }\n return true\n }\n};\nCoordinate.prototype.getOrdinate = function getOrdinate (ordinateIndex) {\n switch (ordinateIndex) {\n case Coordinate.X:\n return this.x\n case Coordinate.Y:\n return this.y\n case Coordinate.Z:\n return this.z\n default:\n }\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n};\nCoordinate.prototype.equals3D = function equals3D (other) {\n return this.x === other.x &&\n this.y === other.y &&\n ((this.z === other.z || Double.isNaN(this.z)) &&\n Double.isNaN(other.z))\n};\nCoordinate.prototype.equals = function equals (other) {\n if (!(other instanceof Coordinate)) {\n return false\n }\n return this.equals2D(other)\n};\nCoordinate.prototype.equalInZ = function equalInZ (c, tolerance) {\n return NumberUtil.equalsWithTolerance(this.z, c.z, tolerance)\n};\nCoordinate.prototype.compareTo = function compareTo (o) {\n var other = o;\n if (this.x < other.x) { return -1 }\n if (this.x > other.x) { return 1 }\n if (this.y < other.y) { return -1 }\n if (this.y > other.y) { return 1 }\n return 0\n};\nCoordinate.prototype.clone = function clone () {\n // try {\n // var coord = null\n // return coord\n // } catch (e) {\n // if (e instanceof CloneNotSupportedException) {\n // Assert.shouldNeverReachHere(\"this shouldn't happen because this class is Cloneable\")\n // return null\n // } else throw e\n // } finally {}\n};\nCoordinate.prototype.copy = function copy () {\n return new Coordinate(this)\n};\nCoordinate.prototype.toString = function toString () {\n return '(' + this.x + ', ' + this.y + ', ' + this.z + ')'\n};\nCoordinate.prototype.distance3D = function distance3D (c) {\n var dx = this.x - c.x;\n var dy = this.y - c.y;\n var dz = this.z - c.z;\n return Math.sqrt(dx * dx + dy * dy + dz * dz)\n};\nCoordinate.prototype.distance = function distance (c) {\n var dx = this.x - c.x;\n var dy = this.y - c.y;\n return Math.sqrt(dx * dx + dy * dy)\n};\nCoordinate.prototype.hashCode = function hashCode () {\n var result = 17;\n result = 37 * result + Coordinate.hashCode(this.x);\n result = 37 * result + Coordinate.hashCode(this.y);\n return result\n};\nCoordinate.prototype.setCoordinate = function setCoordinate (other) {\n this.x = other.x;\n this.y = other.y;\n this.z = other.z;\n};\nCoordinate.prototype.interfaces_ = function interfaces_ () {\n return [Comparable, Clonable, Serializable]\n};\nCoordinate.prototype.getClass = function getClass () {\n return Coordinate\n};\nCoordinate.hashCode = function hashCode () {\n if (arguments.length === 1) {\n var x = arguments[0];\n var f = Double.doubleToLongBits(x);\n return Math.trunc((f ^ f) >>> 32)\n }\n};\nstaticAccessors.DimensionalComparator.get = function () { return DimensionalComparator };\nstaticAccessors.serialVersionUID.get = function () { return 6683108902428366910 };\nstaticAccessors.NULL_ORDINATE.get = function () { return Double.NaN };\nstaticAccessors.X.get = function () { return 0 };\nstaticAccessors.Y.get = function () { return 1 };\nstaticAccessors.Z.get = function () { return 2 };\n\nObject.defineProperties( Coordinate, staticAccessors );\n\nvar DimensionalComparator = function DimensionalComparator (dimensionsToTest) {\n this._dimensionsToTest = 2;\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n var dimensionsToTest$1 = arguments[0];\n if (dimensionsToTest$1 !== 2 && dimensionsToTest$1 !== 3) { throw new IllegalArgumentException('only 2 or 3 dimensions may be specified') }\n this._dimensionsToTest = dimensionsToTest$1;\n }\n};\nDimensionalComparator.prototype.compare = function compare (o1, o2) {\n var c1 = o1;\n var c2 = o2;\n var compX = DimensionalComparator.compare(c1.x, c2.x);\n if (compX !== 0) { return compX }\n var compY = DimensionalComparator.compare(c1.y, c2.y);\n if (compY !== 0) { return compY }\n if (this._dimensionsToTest <= 2) { return 0 }\n var compZ = DimensionalComparator.compare(c1.z, c2.z);\n return compZ\n};\nDimensionalComparator.prototype.interfaces_ = function interfaces_ () {\n return [Comparator]\n};\nDimensionalComparator.prototype.getClass = function getClass () {\n return DimensionalComparator\n};\nDimensionalComparator.compare = function compare (a, b) {\n if (a < b) { return -1 }\n if (a > b) { return 1 }\n if (Double.isNaN(a)) {\n if (Double.isNaN(b)) { return 0 }\n return -1\n }\n if (Double.isNaN(b)) { return 1 }\n return 0\n};\n\n// import hasInterface from '../../../../hasInterface'\n// import CoordinateSequence from './CoordinateSequence'\n\nvar CoordinateSequenceFactory = function CoordinateSequenceFactory () {};\n\nCoordinateSequenceFactory.prototype.create = function create () {\n // if (arguments.length === 1) {\n // if (arguments[0] instanceof Array) {\n // let coordinates = arguments[0]\n // } else if (hasInterface(arguments[0], CoordinateSequence)) {\n // let coordSeq = arguments[0]\n // }\n // } else if (arguments.length === 2) {\n // let size = arguments[0]\n // let dimension = arguments[1]\n // }\n};\nCoordinateSequenceFactory.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCoordinateSequenceFactory.prototype.getClass = function getClass () {\n return CoordinateSequenceFactory\n};\n\nvar Location = function Location () {};\n\nvar staticAccessors$4 = { INTERIOR: { configurable: true },BOUNDARY: { configurable: true },EXTERIOR: { configurable: true },NONE: { configurable: true } };\n\nLocation.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nLocation.prototype.getClass = function getClass () {\n return Location\n};\nLocation.toLocationSymbol = function toLocationSymbol (locationValue) {\n switch (locationValue) {\n case Location.EXTERIOR:\n return 'e'\n case Location.BOUNDARY:\n return 'b'\n case Location.INTERIOR:\n return 'i'\n case Location.NONE:\n return '-'\n default:\n }\n throw new IllegalArgumentException('Unknown location value: ' + locationValue)\n};\nstaticAccessors$4.INTERIOR.get = function () { return 0 };\nstaticAccessors$4.BOUNDARY.get = function () { return 1 };\nstaticAccessors$4.EXTERIOR.get = function () { return 2 };\nstaticAccessors$4.NONE.get = function () { return -1 };\n\nObject.defineProperties( Location, staticAccessors$4 );\n\nvar hasInterface = function (o, i) {\n return o.interfaces_ && o.interfaces_().indexOf(i) > -1\n};\n\nvar MathUtil = function MathUtil () {};\n\nvar staticAccessors$5 = { LOG_10: { configurable: true } };\n\nMathUtil.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMathUtil.prototype.getClass = function getClass () {\n return MathUtil\n};\nMathUtil.log10 = function log10 (x) {\n var ln = Math.log(x);\n if (Double.isInfinite(ln)) { return ln }\n if (Double.isNaN(ln)) { return ln }\n return ln / MathUtil.LOG_10\n};\nMathUtil.min = function min (v1, v2, v3, v4) {\n var min = v1;\n if (v2 < min) { min = v2; }\n if (v3 < min) { min = v3; }\n if (v4 < min) { min = v4; }\n return min\n};\nMathUtil.clamp = function clamp () {\n if (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number')) {\n var x = arguments[0];\n var min = arguments[1];\n var max = arguments[2];\n if (x < min) { return min }\n if (x > max) { return max }\n return x\n } else if (Number.isInteger(arguments[2]) && (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1]))) {\n var x$1 = arguments[0];\n var min$1 = arguments[1];\n var max$1 = arguments[2];\n if (x$1 < min$1) { return min$1 }\n if (x$1 > max$1) { return max$1 }\n return x$1\n }\n};\nMathUtil.wrap = function wrap (index, max) {\n if (index < 0) {\n return max - -index % max\n }\n return index % max\n};\nMathUtil.max = function max () {\n if (arguments.length === 3) {\n var v1 = arguments[0];\n var v2 = arguments[1];\n var v3 = arguments[2];\n var max = v1;\n if (v2 > max) { max = v2; }\n if (v3 > max) { max = v3; }\n return max\n } else if (arguments.length === 4) {\n var v1$1 = arguments[0];\n var v2$1 = arguments[1];\n var v3$1 = arguments[2];\n var v4 = arguments[3];\n var max$1 = v1$1;\n if (v2$1 > max$1) { max$1 = v2$1; }\n if (v3$1 > max$1) { max$1 = v3$1; }\n if (v4 > max$1) { max$1 = v4; }\n return max$1\n }\n};\nMathUtil.average = function average (x1, x2) {\n return (x1 + x2) / 2.0\n};\nstaticAccessors$5.LOG_10.get = function () { return Math.log(10) };\n\nObject.defineProperties( MathUtil, staticAccessors$5 );\n\nvar StringBuffer = function StringBuffer (str) {\n this.str = str;\n};\nStringBuffer.prototype.append = function append (e) {\n this.str += e;\n};\n\nStringBuffer.prototype.setCharAt = function setCharAt (i, c) {\n this.str = this.str.substr(0, i) + c + this.str.substr(i + 1);\n};\n\nStringBuffer.prototype.toString = function toString (e) {\n return this.str\n};\n\nvar Integer = function Integer (value) {\n this.value = value;\n};\nInteger.prototype.intValue = function intValue () {\n return this.value\n};\nInteger.prototype.compareTo = function compareTo (o) {\n if (this.value < o) { return -1 }\n if (this.value > o) { return 1 }\n return 0\n};\nInteger.isNaN = function isNaN (n) { return Number.isNaN(n) };\n\nvar Character = function Character () {};\n\nCharacter.isWhitespace = function isWhitespace (c) { return ((c <= 32 && c >= 0) || c === 127) };\nCharacter.toUpperCase = function toUpperCase (c) { return c.toUpperCase() };\n\nvar DD = function DD () {\n this._hi = 0.0;\n this._lo = 0.0;\n if (arguments.length === 0) {\n this.init(0.0);\n } else if (arguments.length === 1) {\n if (typeof arguments[0] === 'number') {\n var x = arguments[0];\n this.init(x);\n } else if (arguments[0] instanceof DD) {\n var dd = arguments[0];\n this.init(dd);\n } else if (typeof arguments[0] === 'string') {\n var str = arguments[0];\n DD.call(this, DD.parse(str));\n }\n } else if (arguments.length === 2) {\n var hi = arguments[0];\n var lo = arguments[1];\n this.init(hi, lo);\n }\n};\n\nvar staticAccessors$7 = { PI: { configurable: true },TWO_PI: { configurable: true },PI_2: { configurable: true },E: { configurable: true },NaN: { configurable: true },EPS: { configurable: true },SPLIT: { configurable: true },MAX_PRINT_DIGITS: { configurable: true },TEN: { configurable: true },ONE: { configurable: true },SCI_NOT_EXPONENT_CHAR: { configurable: true },SCI_NOT_ZERO: { configurable: true } };\nDD.prototype.le = function le (y) {\n return (this._hi < y._hi || this._hi === y._hi) && this._lo <= y._lo\n};\nDD.prototype.extractSignificantDigits = function extractSignificantDigits (insertDecimalPoint, magnitude) {\n var y = this.abs();\n var mag = DD.magnitude(y._hi);\n var scale = DD.TEN.pow(mag);\n y = y.divide(scale);\n if (y.gt(DD.TEN)) {\n y = y.divide(DD.TEN);\n mag += 1;\n } else if (y.lt(DD.ONE)) {\n y = y.multiply(DD.TEN);\n mag -= 1;\n }\n var decimalPointPos = mag + 1;\n var buf = new StringBuffer();\n var numDigits = DD.MAX_PRINT_DIGITS - 1;\n for (var i = 0; i <= numDigits; i++) {\n if (insertDecimalPoint && i === decimalPointPos) {\n buf.append('.');\n }\n var digit = Math.trunc(y._hi);\n if (digit < 0) {\n break\n }\n var rebiasBy10 = false;\n var digitChar = 0;\n if (digit > 9) {\n rebiasBy10 = true;\n digitChar = '9';\n } else {\n digitChar = '0' + digit;\n }\n buf.append(digitChar);\n y = y.subtract(DD.valueOf(digit)).multiply(DD.TEN);\n if (rebiasBy10) { y.selfAdd(DD.TEN); }\n var continueExtractingDigits = true;\n var remMag = DD.magnitude(y._hi);\n if (remMag < 0 && Math.abs(remMag) >= numDigits - i) { continueExtractingDigits = false; }\n if (!continueExtractingDigits) { break }\n }\n magnitude[0] = mag;\n return buf.toString()\n};\nDD.prototype.sqr = function sqr () {\n return this.multiply(this)\n};\nDD.prototype.doubleValue = function doubleValue () {\n return this._hi + this._lo\n};\nDD.prototype.subtract = function subtract () {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n return this.add(y.negate())\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n return this.add(-y$1)\n }\n};\nDD.prototype.equals = function equals () {\n if (arguments.length === 1) {\n var y = arguments[0];\n return this._hi === y._hi && this._lo === y._lo\n }\n};\nDD.prototype.isZero = function isZero () {\n return this._hi === 0.0 && this._lo === 0.0\n};\nDD.prototype.selfSubtract = function selfSubtract () {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n if (this.isNaN()) { return this }\n return this.selfAdd(-y._hi, -y._lo)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n if (this.isNaN()) { return this }\n return this.selfAdd(-y$1, 0.0)\n }\n};\nDD.prototype.getSpecialNumberString = function getSpecialNumberString () {\n if (this.isZero()) { return '0.0' }\n if (this.isNaN()) { return 'NaN ' }\n return null\n};\nDD.prototype.min = function min (x) {\n if (this.le(x)) {\n return this\n } else {\n return x\n }\n};\nDD.prototype.selfDivide = function selfDivide () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n return this.selfDivide(y._hi, y._lo)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n return this.selfDivide(y$1, 0.0)\n }\n } else if (arguments.length === 2) {\n var yhi = arguments[0];\n var ylo = arguments[1];\n var hc = null;\n var tc = null;\n var hy = null;\n var ty = null;\n var C = null;\n var c = null;\n var U = null;\n var u = null;\n C = this._hi / yhi;\n c = DD.SPLIT * C;\n hc = c - C;\n u = DD.SPLIT * yhi;\n hc = c - hc;\n tc = C - hc;\n hy = u - yhi;\n U = C * yhi;\n hy = u - hy;\n ty = yhi - hy;\n u = hc * hy - U + hc * ty + tc * hy + tc * ty;\n c = (this._hi - U - u + this._lo - C * ylo) / yhi;\n u = C + c;\n this._hi = u;\n this._lo = C - u + c;\n return this\n }\n};\nDD.prototype.dump = function dump () {\n return 'DD<' + this._hi + ', ' + this._lo + '>'\n};\nDD.prototype.divide = function divide () {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n var hc = null;\n var tc = null;\n var hy = null;\n var ty = null;\n var C = null;\n var c = null;\n var U = null;\n var u = null;\n C = this._hi / y._hi;\n c = DD.SPLIT * C;\n hc = c - C;\n u = DD.SPLIT * y._hi;\n hc = c - hc;\n tc = C - hc;\n hy = u - y._hi;\n U = C * y._hi;\n hy = u - hy;\n ty = y._hi - hy;\n u = hc * hy - U + hc * ty + tc * hy + tc * ty;\n c = (this._hi - U - u + this._lo - C * y._lo) / y._hi;\n u = C + c;\n var zhi = u;\n var zlo = C - u + c;\n return new DD(zhi, zlo)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n if (Double.isNaN(y$1)) { return DD.createNaN() }\n return DD.copy(this).selfDivide(y$1, 0.0)\n }\n};\nDD.prototype.ge = function ge (y) {\n return (this._hi > y._hi || this._hi === y._hi) && this._lo >= y._lo\n};\nDD.prototype.pow = function pow (exp) {\n if (exp === 0.0) { return DD.valueOf(1.0) }\n var r = new DD(this);\n var s = DD.valueOf(1.0);\n var n = Math.abs(exp);\n if (n > 1) {\n while (n > 0) {\n if (n % 2 === 1) {\n s.selfMultiply(r);\n }\n n /= 2;\n if (n > 0) { r = r.sqr(); }\n }\n } else {\n s = r;\n }\n if (exp < 0) { return s.reciprocal() }\n return s\n};\nDD.prototype.ceil = function ceil () {\n if (this.isNaN()) { return DD.NaN }\n var fhi = Math.ceil(this._hi);\n var flo = 0.0;\n if (fhi === this._hi) {\n flo = Math.ceil(this._lo);\n }\n return new DD(fhi, flo)\n};\nDD.prototype.compareTo = function compareTo (o) {\n var other = o;\n if (this._hi < other._hi) { return -1 }\n if (this._hi > other._hi) { return 1 }\n if (this._lo < other._lo) { return -1 }\n if (this._lo > other._lo) { return 1 }\n return 0\n};\nDD.prototype.rint = function rint () {\n if (this.isNaN()) { return this }\n var plus5 = this.add(0.5);\n return plus5.floor()\n};\nDD.prototype.setValue = function setValue () {\n if (arguments[0] instanceof DD) {\n var value = arguments[0];\n this.init(value);\n return this\n } else if (typeof arguments[0] === 'number') {\n var value$1 = arguments[0];\n this.init(value$1);\n return this\n }\n};\nDD.prototype.max = function max (x) {\n if (this.ge(x)) {\n return this\n } else {\n return x\n }\n};\nDD.prototype.sqrt = function sqrt () {\n if (this.isZero()) { return DD.valueOf(0.0) }\n if (this.isNegative()) {\n return DD.NaN\n }\n var x = 1.0 / Math.sqrt(this._hi);\n var ax = this._hi * x;\n var axdd = DD.valueOf(ax);\n var diffSq = this.subtract(axdd.sqr());\n var d2 = diffSq._hi * (x * 0.5);\n return axdd.add(d2)\n};\nDD.prototype.selfAdd = function selfAdd () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n return this.selfAdd(y._hi, y._lo)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n var H = null;\n var h = null;\n var S = null;\n var s = null;\n var e = null;\n var f = null;\n S = this._hi + y$1;\n e = S - this._hi;\n s = S - e;\n s = y$1 - e + (this._hi - s);\n f = s + this._lo;\n H = S + f;\n h = f + (S - H);\n this._hi = H + h;\n this._lo = h + (H - this._hi);\n return this\n }\n } else if (arguments.length === 2) {\n var yhi = arguments[0];\n var ylo = arguments[1];\n var H$1 = null;\n var h$1 = null;\n var T = null;\n var t = null;\n var S$1 = null;\n var s$1 = null;\n var e$1 = null;\n var f$1 = null;\n S$1 = this._hi + yhi;\n T = this._lo + ylo;\n e$1 = S$1 - this._hi;\n f$1 = T - this._lo;\n s$1 = S$1 - e$1;\n t = T - f$1;\n s$1 = yhi - e$1 + (this._hi - s$1);\n t = ylo - f$1 + (this._lo - t);\n e$1 = s$1 + T;\n H$1 = S$1 + e$1;\n h$1 = e$1 + (S$1 - H$1);\n e$1 = t + h$1;\n var zhi = H$1 + e$1;\n var zlo = e$1 + (H$1 - zhi);\n this._hi = zhi;\n this._lo = zlo;\n return this\n }\n};\nDD.prototype.selfMultiply = function selfMultiply () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n return this.selfMultiply(y._hi, y._lo)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n return this.selfMultiply(y$1, 0.0)\n }\n } else if (arguments.length === 2) {\n var yhi = arguments[0];\n var ylo = arguments[1];\n var hx = null;\n var tx = null;\n var hy = null;\n var ty = null;\n var C = null;\n var c = null;\n C = DD.SPLIT * this._hi;\n hx = C - this._hi;\n c = DD.SPLIT * yhi;\n hx = C - hx;\n tx = this._hi - hx;\n hy = c - yhi;\n C = this._hi * yhi;\n hy = c - hy;\n ty = yhi - hy;\n c = hx * hy - C + hx * ty + tx * hy + tx * ty + (this._hi * ylo + this._lo * yhi);\n var zhi = C + c;\n hx = C - zhi;\n var zlo = c + hx;\n this._hi = zhi;\n this._lo = zlo;\n return this\n }\n};\nDD.prototype.selfSqr = function selfSqr () {\n return this.selfMultiply(this)\n};\nDD.prototype.floor = function floor () {\n if (this.isNaN()) { return DD.NaN }\n var fhi = Math.floor(this._hi);\n var flo = 0.0;\n if (fhi === this._hi) {\n flo = Math.floor(this._lo);\n }\n return new DD(fhi, flo)\n};\nDD.prototype.negate = function negate () {\n if (this.isNaN()) { return this }\n return new DD(-this._hi, -this._lo)\n};\nDD.prototype.clone = function clone () {\n // try {\n // return null\n // } catch (ex) {\n // if (ex instanceof CloneNotSupportedException) {\n // return null\n // } else throw ex\n // } finally {}\n};\nDD.prototype.multiply = function multiply () {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n if (y.isNaN()) { return DD.createNaN() }\n return DD.copy(this).selfMultiply(y)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n if (Double.isNaN(y$1)) { return DD.createNaN() }\n return DD.copy(this).selfMultiply(y$1, 0.0)\n }\n};\nDD.prototype.isNaN = function isNaN () {\n return Double.isNaN(this._hi)\n};\nDD.prototype.intValue = function intValue () {\n return Math.trunc(this._hi)\n};\nDD.prototype.toString = function toString () {\n var mag = DD.magnitude(this._hi);\n if (mag >= -3 && mag <= 20) { return this.toStandardNotation() }\n return this.toSciNotation()\n};\nDD.prototype.toStandardNotation = function toStandardNotation () {\n var specialStr = this.getSpecialNumberString();\n if (specialStr !== null) { return specialStr }\n var magnitude = new Array(1).fill(null);\n var sigDigits = this.extractSignificantDigits(true, magnitude);\n var decimalPointPos = magnitude[0] + 1;\n var num = sigDigits;\n if (sigDigits.charAt(0) === '.') {\n num = '0' + sigDigits;\n } else if (decimalPointPos < 0) {\n num = '0.' + DD.stringOfChar('0', -decimalPointPos) + sigDigits;\n } else if (sigDigits.indexOf('.') === -1) {\n var numZeroes = decimalPointPos - sigDigits.length;\n var zeroes = DD.stringOfChar('0', numZeroes);\n num = sigDigits + zeroes + '.0';\n }\n if (this.isNegative()) { return '-' + num }\n return num\n};\nDD.prototype.reciprocal = function reciprocal () {\n var hc = null;\n var tc = null;\n var hy = null;\n var ty = null;\n var C = null;\n var c = null;\n var U = null;\n var u = null;\n C = 1.0 / this._hi;\n c = DD.SPLIT * C;\n hc = c - C;\n u = DD.SPLIT * this._hi;\n hc = c - hc;\n tc = C - hc;\n hy = u - this._hi;\n U = C * this._hi;\n hy = u - hy;\n ty = this._hi - hy;\n u = hc * hy - U + hc * ty + tc * hy + tc * ty;\n c = (1.0 - U - u - C * this._lo) / this._hi;\n var zhi = C + c;\n var zlo = C - zhi + c;\n return new DD(zhi, zlo)\n};\nDD.prototype.toSciNotation = function toSciNotation () {\n if (this.isZero()) { return DD.SCI_NOT_ZERO }\n var specialStr = this.getSpecialNumberString();\n if (specialStr !== null) { return specialStr }\n var magnitude = new Array(1).fill(null);\n var digits = this.extractSignificantDigits(false, magnitude);\n var expStr = DD.SCI_NOT_EXPONENT_CHAR + magnitude[0];\n if (digits.charAt(0) === '0') {\n throw new Error('Found leading zero: ' + digits)\n }\n var trailingDigits = '';\n if (digits.length > 1) { trailingDigits = digits.substring(1); }\n var digitsWithDecimal = digits.charAt(0) + '.' + trailingDigits;\n if (this.isNegative()) { return '-' + digitsWithDecimal + expStr }\n return digitsWithDecimal + expStr\n};\nDD.prototype.abs = function abs () {\n if (this.isNaN()) { return DD.NaN }\n if (this.isNegative()) { return this.negate() }\n return new DD(this)\n};\nDD.prototype.isPositive = function isPositive () {\n return (this._hi > 0.0 || this._hi === 0.0) && this._lo > 0.0\n};\nDD.prototype.lt = function lt (y) {\n return (this._hi < y._hi || this._hi === y._hi) && this._lo < y._lo\n};\nDD.prototype.add = function add () {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n return DD.copy(this).selfAdd(y)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n return DD.copy(this).selfAdd(y$1)\n }\n};\nDD.prototype.init = function init () {\n if (arguments.length === 1) {\n if (typeof arguments[0] === 'number') {\n var x = arguments[0];\n this._hi = x;\n this._lo = 0.0;\n } else if (arguments[0] instanceof DD) {\n var dd = arguments[0];\n this._hi = dd._hi;\n this._lo = dd._lo;\n }\n } else if (arguments.length === 2) {\n var hi = arguments[0];\n var lo = arguments[1];\n this._hi = hi;\n this._lo = lo;\n }\n};\nDD.prototype.gt = function gt (y) {\n return (this._hi > y._hi || this._hi === y._hi) && this._lo > y._lo\n};\nDD.prototype.isNegative = function isNegative () {\n return (this._hi < 0.0 || this._hi === 0.0) && this._lo < 0.0\n};\nDD.prototype.trunc = function trunc () {\n if (this.isNaN()) { return DD.NaN }\n if (this.isPositive()) { return this.floor(); } else { return this.ceil() }\n};\nDD.prototype.signum = function signum () {\n if (this._hi > 0) { return 1 }\n if (this._hi < 0) { return -1 }\n if (this._lo > 0) { return 1 }\n if (this._lo < 0) { return -1 }\n return 0\n};\nDD.prototype.interfaces_ = function interfaces_ () {\n return [Serializable, Comparable, Clonable]\n};\nDD.prototype.getClass = function getClass () {\n return DD\n};\nDD.sqr = function sqr (x) {\n return DD.valueOf(x).selfMultiply(x)\n};\nDD.valueOf = function valueOf () {\n if (typeof arguments[0] === 'string') {\n var str = arguments[0];\n return DD.parse(str)\n } else if (typeof arguments[0] === 'number') {\n var x = arguments[0];\n return new DD(x)\n }\n};\nDD.sqrt = function sqrt (x) {\n return DD.valueOf(x).sqrt()\n};\nDD.parse = function parse (str) {\n var i = 0;\n var strlen = str.length;\n while (Character.isWhitespace(str.charAt(i))) { i++; }\n var isNegative = false;\n if (i < strlen) {\n var signCh = str.charAt(i);\n if (signCh === '-' || signCh === '+') {\n i++;\n if (signCh === '-') { isNegative = true; }\n }\n }\n var val = new DD();\n var numDigits = 0;\n var numBeforeDec = 0;\n var exp = 0;\n while (true) {\n if (i >= strlen) { break }\n var ch = str.charAt(i);\n i++;\n if (Character.isDigit(ch)) {\n var d = ch - '0';\n val.selfMultiply(DD.TEN);\n val.selfAdd(d);\n numDigits++;\n continue\n }\n if (ch === '.') {\n numBeforeDec = numDigits;\n continue\n }\n if (ch === 'e' || ch === 'E') {\n var expStr = str.substring(i);\n try {\n exp = Integer.parseInt(expStr);\n } catch (ex) {\n if (ex instanceof Error) {\n throw new Error('Invalid exponent ' + expStr + ' in string ' + str)\n } else { throw ex }\n } finally {}\n break\n }\n throw new Error(\"Unexpected character '\" + ch + \"' at position \" + i + ' in string ' + str)\n }\n var val2 = val;\n var numDecPlaces = numDigits - numBeforeDec - exp;\n if (numDecPlaces === 0) {\n val2 = val;\n } else if (numDecPlaces > 0) {\n var scale = DD.TEN.pow(numDecPlaces);\n val2 = val.divide(scale);\n } else if (numDecPlaces < 0) {\n var scale$1 = DD.TEN.pow(-numDecPlaces);\n val2 = val.multiply(scale$1);\n }\n if (isNegative) {\n return val2.negate()\n }\n return val2\n};\nDD.createNaN = function createNaN () {\n return new DD(Double.NaN, Double.NaN)\n};\nDD.copy = function copy (dd) {\n return new DD(dd)\n};\nDD.magnitude = function magnitude (x) {\n var xAbs = Math.abs(x);\n var xLog10 = Math.log(xAbs) / Math.log(10);\n var xMag = Math.trunc(Math.floor(xLog10));\n var xApprox = Math.pow(10, xMag);\n if (xApprox * 10 <= xAbs) { xMag += 1; }\n return xMag\n};\nDD.stringOfChar = function stringOfChar (ch, len) {\n var buf = new StringBuffer();\n for (var i = 0; i < len; i++) {\n buf.append(ch);\n }\n return buf.toString()\n};\nstaticAccessors$7.PI.get = function () { return new DD(3.141592653589793116e+00, 1.224646799147353207e-16) };\nstaticAccessors$7.TWO_PI.get = function () { return new DD(6.283185307179586232e+00, 2.449293598294706414e-16) };\nstaticAccessors$7.PI_2.get = function () { return new DD(1.570796326794896558e+00, 6.123233995736766036e-17) };\nstaticAccessors$7.E.get = function () { return new DD(2.718281828459045091e+00, 1.445646891729250158e-16) };\nstaticAccessors$7.NaN.get = function () { return new DD(Double.NaN, Double.NaN) };\nstaticAccessors$7.EPS.get = function () { return 1.23259516440783e-32 };\nstaticAccessors$7.SPLIT.get = function () { return 134217729.0 };\nstaticAccessors$7.MAX_PRINT_DIGITS.get = function () { return 32 };\nstaticAccessors$7.TEN.get = function () { return DD.valueOf(10.0) };\nstaticAccessors$7.ONE.get = function () { return DD.valueOf(1.0) };\nstaticAccessors$7.SCI_NOT_EXPONENT_CHAR.get = function () { return 'E' };\nstaticAccessors$7.SCI_NOT_ZERO.get = function () { return '0.0E0' };\n\nObject.defineProperties( DD, staticAccessors$7 );\n\nvar CGAlgorithmsDD = function CGAlgorithmsDD () {};\n\nvar staticAccessors$6 = { DP_SAFE_EPSILON: { configurable: true } };\n\nCGAlgorithmsDD.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCGAlgorithmsDD.prototype.getClass = function getClass () {\n return CGAlgorithmsDD\n};\nCGAlgorithmsDD.orientationIndex = function orientationIndex (p1, p2, q) {\n var index = CGAlgorithmsDD.orientationIndexFilter(p1, p2, q);\n if (index <= 1) { return index }\n var dx1 = DD.valueOf(p2.x).selfAdd(-p1.x);\n var dy1 = DD.valueOf(p2.y).selfAdd(-p1.y);\n var dx2 = DD.valueOf(q.x).selfAdd(-p2.x);\n var dy2 = DD.valueOf(q.y).selfAdd(-p2.y);\n return dx1.selfMultiply(dy2).selfSubtract(dy1.selfMultiply(dx2)).signum()\n};\nCGAlgorithmsDD.signOfDet2x2 = function signOfDet2x2 (x1, y1, x2, y2) {\n var det = x1.multiply(y2).selfSubtract(y1.multiply(x2));\n return det.signum()\n};\nCGAlgorithmsDD.intersection = function intersection (p1, p2, q1, q2) {\n var denom1 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p2.x).selfSubtract(p1.x));\n var denom2 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p2.y).selfSubtract(p1.y));\n var denom = denom1.subtract(denom2);\n var numx1 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));\n var numx2 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));\n var numx = numx1.subtract(numx2);\n var fracP = numx.selfDivide(denom).doubleValue();\n var x = DD.valueOf(p1.x).selfAdd(DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(fracP)).doubleValue();\n var numy1 = DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));\n var numy2 = DD.valueOf(p2.y).selfSubtract(p1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));\n var numy = numy1.subtract(numy2);\n var fracQ = numy.selfDivide(denom).doubleValue();\n var y = DD.valueOf(q1.y).selfAdd(DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(fracQ)).doubleValue();\n return new Coordinate(x, y)\n};\nCGAlgorithmsDD.orientationIndexFilter = function orientationIndexFilter (pa, pb, pc) {\n var detsum = null;\n var detleft = (pa.x - pc.x) * (pb.y - pc.y);\n var detright = (pa.y - pc.y) * (pb.x - pc.x);\n var det = detleft - detright;\n if (detleft > 0.0) {\n if (detright <= 0.0) {\n return CGAlgorithmsDD.signum(det)\n } else {\n detsum = detleft + detright;\n }\n } else if (detleft < 0.0) {\n if (detright >= 0.0) {\n return CGAlgorithmsDD.signum(det)\n } else {\n detsum = -detleft - detright;\n }\n } else {\n return CGAlgorithmsDD.signum(det)\n }\n var errbound = CGAlgorithmsDD.DP_SAFE_EPSILON * detsum;\n if (det >= errbound || -det >= errbound) {\n return CGAlgorithmsDD.signum(det)\n }\n return 2\n};\nCGAlgorithmsDD.signum = function signum (x) {\n if (x > 0) { return 1 }\n if (x < 0) { return -1 }\n return 0\n};\nstaticAccessors$6.DP_SAFE_EPSILON.get = function () { return 1e-15 };\n\nObject.defineProperties( CGAlgorithmsDD, staticAccessors$6 );\n\nvar CoordinateSequence = function CoordinateSequence () {};\n\nvar staticAccessors$8 = { X: { configurable: true },Y: { configurable: true },Z: { configurable: true },M: { configurable: true } };\n\nstaticAccessors$8.X.get = function () { return 0 };\nstaticAccessors$8.Y.get = function () { return 1 };\nstaticAccessors$8.Z.get = function () { return 2 };\nstaticAccessors$8.M.get = function () { return 3 };\nCoordinateSequence.prototype.setOrdinate = function setOrdinate (index, ordinateIndex, value) {};\nCoordinateSequence.prototype.size = function size () {};\nCoordinateSequence.prototype.getOrdinate = function getOrdinate (index, ordinateIndex) {};\nCoordinateSequence.prototype.getCoordinate = function getCoordinate () {};\nCoordinateSequence.prototype.getCoordinateCopy = function getCoordinateCopy (i) {};\nCoordinateSequence.prototype.getDimension = function getDimension () {};\nCoordinateSequence.prototype.getX = function getX (index) {};\nCoordinateSequence.prototype.clone = function clone () {};\nCoordinateSequence.prototype.expandEnvelope = function expandEnvelope (env) {};\nCoordinateSequence.prototype.copy = function copy () {};\nCoordinateSequence.prototype.getY = function getY (index) {};\nCoordinateSequence.prototype.toCoordinateArray = function toCoordinateArray () {};\nCoordinateSequence.prototype.interfaces_ = function interfaces_ () {\n return [Clonable]\n};\nCoordinateSequence.prototype.getClass = function getClass () {\n return CoordinateSequence\n};\n\nObject.defineProperties( CoordinateSequence, staticAccessors$8 );\n\nvar Exception = function Exception () {};\n\nvar NotRepresentableException = (function (Exception$$1) {\n function NotRepresentableException () {\n Exception$$1.call(this, 'Projective point not representable on the Cartesian plane.');\n }\n\n if ( Exception$$1 ) NotRepresentableException.__proto__ = Exception$$1;\n NotRepresentableException.prototype = Object.create( Exception$$1 && Exception$$1.prototype );\n NotRepresentableException.prototype.constructor = NotRepresentableException;\n NotRepresentableException.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n NotRepresentableException.prototype.getClass = function getClass () {\n return NotRepresentableException\n };\n\n return NotRepresentableException;\n}(Exception));\n\nvar System = function System () {};\n\nSystem.arraycopy = function arraycopy (src, srcPos, dest, destPos, len) {\n var c = 0;\n for (var i = srcPos; i < srcPos + len; i++) {\n dest[destPos + c] = src[i];\n c++;\n }\n};\n\nSystem.getProperty = function getProperty (name) {\n return {\n 'line.separator': '\\n'\n }[name]\n};\n\nvar HCoordinate = function HCoordinate () {\n this.x = null;\n this.y = null;\n this.w = null;\n if (arguments.length === 0) {\n this.x = 0.0;\n this.y = 0.0;\n this.w = 1.0;\n } else if (arguments.length === 1) {\n var p = arguments[0];\n this.x = p.x;\n this.y = p.y;\n this.w = 1.0;\n } else if (arguments.length === 2) {\n if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\n var _x = arguments[0];\n var _y = arguments[1];\n this.x = _x;\n this.y = _y;\n this.w = 1.0;\n } else if (arguments[0] instanceof HCoordinate && arguments[1] instanceof HCoordinate) {\n var p1 = arguments[0];\n var p2 = arguments[1];\n this.x = p1.y * p2.w - p2.y * p1.w;\n this.y = p2.x * p1.w - p1.x * p2.w;\n this.w = p1.x * p2.y - p2.x * p1.y;\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n var p1$1 = arguments[0];\n var p2$1 = arguments[1];\n this.x = p1$1.y - p2$1.y;\n this.y = p2$1.x - p1$1.x;\n this.w = p1$1.x * p2$1.y - p2$1.x * p1$1.y;\n }\n } else if (arguments.length === 3) {\n var _x$1 = arguments[0];\n var _y$1 = arguments[1];\n var _w = arguments[2];\n this.x = _x$1;\n this.y = _y$1;\n this.w = _w;\n } else if (arguments.length === 4) {\n var p1$2 = arguments[0];\n var p2$2 = arguments[1];\n var q1 = arguments[2];\n var q2 = arguments[3];\n var px = p1$2.y - p2$2.y;\n var py = p2$2.x - p1$2.x;\n var pw = p1$2.x * p2$2.y - p2$2.x * p1$2.y;\n var qx = q1.y - q2.y;\n var qy = q2.x - q1.x;\n var qw = q1.x * q2.y - q2.x * q1.y;\n this.x = py * qw - qy * pw;\n this.y = qx * pw - px * qw;\n this.w = px * qy - qx * py;\n }\n};\nHCoordinate.prototype.getY = function getY () {\n var a = this.y / this.w;\n if (Double.isNaN(a) || Double.isInfinite(a)) {\n throw new NotRepresentableException()\n }\n return a\n};\nHCoordinate.prototype.getX = function getX () {\n var a = this.x / this.w;\n if (Double.isNaN(a) || Double.isInfinite(a)) {\n throw new NotRepresentableException()\n }\n return a\n};\nHCoordinate.prototype.getCoordinate = function getCoordinate () {\n var p = new Coordinate();\n p.x = this.getX();\n p.y = this.getY();\n return p\n};\nHCoordinate.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nHCoordinate.prototype.getClass = function getClass () {\n return HCoordinate\n};\nHCoordinate.intersection = function intersection (p1, p2, q1, q2) {\n var px = p1.y - p2.y;\n var py = p2.x - p1.x;\n var pw = p1.x * p2.y - p2.x * p1.y;\n var qx = q1.y - q2.y;\n var qy = q2.x - q1.x;\n var qw = q1.x * q2.y - q2.x * q1.y;\n var x = py * qw - qy * pw;\n var y = qx * pw - px * qw;\n var w = px * qy - qx * py;\n var xInt = x / w;\n var yInt = y / w;\n if (Double.isNaN(xInt) || (Double.isInfinite(xInt) || Double.isNaN(yInt)) || Double.isInfinite(yInt)) {\n throw new NotRepresentableException()\n }\n return new Coordinate(xInt, yInt)\n};\n\nvar Envelope = function Envelope () {\n this._minx = null;\n this._maxx = null;\n this._miny = null;\n this._maxy = null;\n if (arguments.length === 0) {\n this.init();\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n this.init(p.x, p.x, p.y, p.y);\n } else if (arguments[0] instanceof Envelope) {\n var env = arguments[0];\n this.init(env);\n }\n } else if (arguments.length === 2) {\n var p1 = arguments[0];\n var p2 = arguments[1];\n this.init(p1.x, p2.x, p1.y, p2.y);\n } else if (arguments.length === 4) {\n var x1 = arguments[0];\n var x2 = arguments[1];\n var y1 = arguments[2];\n var y2 = arguments[3];\n this.init(x1, x2, y1, y2);\n }\n};\n\nvar staticAccessors$9 = { serialVersionUID: { configurable: true } };\nEnvelope.prototype.getArea = function getArea () {\n return this.getWidth() * this.getHeight()\n};\nEnvelope.prototype.equals = function equals (other) {\n if (!(other instanceof Envelope)) {\n return false\n }\n var otherEnvelope = other;\n if (this.isNull()) {\n return otherEnvelope.isNull()\n }\n return this._maxx === otherEnvelope.getMaxX() && this._maxy === otherEnvelope.getMaxY() && this._minx === otherEnvelope.getMinX() && this._miny === otherEnvelope.getMinY()\n};\nEnvelope.prototype.intersection = function intersection (env) {\n if (this.isNull() || env.isNull() || !this.intersects(env)) { return new Envelope() }\n var intMinX = this._minx > env._minx ? this._minx : env._minx;\n var intMinY = this._miny > env._miny ? this._miny : env._miny;\n var intMaxX = this._maxx < env._maxx ? this._maxx : env._maxx;\n var intMaxY = this._maxy < env._maxy ? this._maxy : env._maxy;\n return new Envelope(intMinX, intMaxX, intMinY, intMaxY)\n};\nEnvelope.prototype.isNull = function isNull () {\n return this._maxx < this._minx\n};\nEnvelope.prototype.getMaxX = function getMaxX () {\n return this._maxx\n};\nEnvelope.prototype.covers = function covers () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n return this.covers(p.x, p.y)\n } else if (arguments[0] instanceof Envelope) {\n var other = arguments[0];\n if (this.isNull() || other.isNull()) {\n return false\n }\n return other.getMinX() >= this._minx && other.getMaxX() <= this._maxx && other.getMinY() >= this._miny && other.getMaxY() <= this._maxy\n }\n } else if (arguments.length === 2) {\n var x = arguments[0];\n var y = arguments[1];\n if (this.isNull()) { return false }\n return x >= this._minx && x <= this._maxx && y >= this._miny && y <= this._maxy\n }\n};\nEnvelope.prototype.intersects = function intersects () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Envelope) {\n var other = arguments[0];\n if (this.isNull() || other.isNull()) {\n return false\n }\n return !(other._minx > this._maxx || other._maxx < this._minx || other._miny > this._maxy || other._maxy < this._miny)\n } else if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n return this.intersects(p.x, p.y)\n }\n } else if (arguments.length === 2) {\n var x = arguments[0];\n var y = arguments[1];\n if (this.isNull()) { return false }\n return !(x > this._maxx || x < this._minx || y > this._maxy || y < this._miny)\n }\n};\nEnvelope.prototype.getMinY = function getMinY () {\n return this._miny\n};\nEnvelope.prototype.getMinX = function getMinX () {\n return this._minx\n};\nEnvelope.prototype.expandToInclude = function expandToInclude () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n this.expandToInclude(p.x, p.y);\n } else if (arguments[0] instanceof Envelope) {\n var other = arguments[0];\n if (other.isNull()) {\n return null\n }\n if (this.isNull()) {\n this._minx = other.getMinX();\n this._maxx = other.getMaxX();\n this._miny = other.getMinY();\n this._maxy = other.getMaxY();\n } else {\n if (other._minx < this._minx) {\n this._minx = other._minx;\n }\n if (other._maxx > this._maxx) {\n this._maxx = other._maxx;\n }\n if (other._miny < this._miny) {\n this._miny = other._miny;\n }\n if (other._maxy > this._maxy) {\n this._maxy = other._maxy;\n }\n }\n }\n } else if (arguments.length === 2) {\n var x = arguments[0];\n var y = arguments[1];\n if (this.isNull()) {\n this._minx = x;\n this._maxx = x;\n this._miny = y;\n this._maxy = y;\n } else {\n if (x < this._minx) {\n this._minx = x;\n }\n if (x > this._maxx) {\n this._maxx = x;\n }\n if (y < this._miny) {\n this._miny = y;\n }\n if (y > this._maxy) {\n this._maxy = y;\n }\n }\n }\n};\nEnvelope.prototype.minExtent = function minExtent () {\n if (this.isNull()) { return 0.0 }\n var w = this.getWidth();\n var h = this.getHeight();\n if (w < h) { return w }\n return h\n};\nEnvelope.prototype.getWidth = function getWidth () {\n if (this.isNull()) {\n return 0\n }\n return this._maxx - this._minx\n};\nEnvelope.prototype.compareTo = function compareTo (o) {\n var env = o;\n if (this.isNull()) {\n if (env.isNull()) { return 0 }\n return -1\n } else {\n if (env.isNull()) { return 1 }\n }\n if (this._minx < env._minx) { return -1 }\n if (this._minx > env._minx) { return 1 }\n if (this._miny < env._miny) { return -1 }\n if (this._miny > env._miny) { return 1 }\n if (this._maxx < env._maxx) { return -1 }\n if (this._maxx > env._maxx) { return 1 }\n if (this._maxy < env._maxy) { return -1 }\n if (this._maxy > env._maxy) { return 1 }\n return 0\n};\nEnvelope.prototype.translate = function translate (transX, transY) {\n if (this.isNull()) {\n return null\n }\n this.init(this.getMinX() + transX, this.getMaxX() + transX, this.getMinY() + transY, this.getMaxY() + transY);\n};\nEnvelope.prototype.toString = function toString () {\n return 'Env[' + this._minx + ' : ' + this._maxx + ', ' + this._miny + ' : ' + this._maxy + ']'\n};\nEnvelope.prototype.setToNull = function setToNull () {\n this._minx = 0;\n this._maxx = -1;\n this._miny = 0;\n this._maxy = -1;\n};\nEnvelope.prototype.getHeight = function getHeight () {\n if (this.isNull()) {\n return 0\n }\n return this._maxy - this._miny\n};\nEnvelope.prototype.maxExtent = function maxExtent () {\n if (this.isNull()) { return 0.0 }\n var w = this.getWidth();\n var h = this.getHeight();\n if (w > h) { return w }\n return h\n};\nEnvelope.prototype.expandBy = function expandBy () {\n if (arguments.length === 1) {\n var distance = arguments[0];\n this.expandBy(distance, distance);\n } else if (arguments.length === 2) {\n var deltaX = arguments[0];\n var deltaY = arguments[1];\n if (this.isNull()) { return null }\n this._minx -= deltaX;\n this._maxx += deltaX;\n this._miny -= deltaY;\n this._maxy += deltaY;\n if (this._minx > this._maxx || this._miny > this._maxy) { this.setToNull(); }\n }\n};\nEnvelope.prototype.contains = function contains () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Envelope) {\n var other = arguments[0];\n return this.covers(other)\n } else if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n return this.covers(p)\n }\n } else if (arguments.length === 2) {\n var x = arguments[0];\n var y = arguments[1];\n return this.covers(x, y)\n }\n};\nEnvelope.prototype.centre = function centre () {\n if (this.isNull()) { return null }\n return new Coordinate((this.getMinX() + this.getMaxX()) / 2.0, (this.getMinY() + this.getMaxY()) / 2.0)\n};\nEnvelope.prototype.init = function init () {\n if (arguments.length === 0) {\n this.setToNull();\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n this.init(p.x, p.x, p.y, p.y);\n } else if (arguments[0] instanceof Envelope) {\n var env = arguments[0];\n this._minx = env._minx;\n this._maxx = env._maxx;\n this._miny = env._miny;\n this._maxy = env._maxy;\n }\n } else if (arguments.length === 2) {\n var p1 = arguments[0];\n var p2 = arguments[1];\n this.init(p1.x, p2.x, p1.y, p2.y);\n } else if (arguments.length === 4) {\n var x1 = arguments[0];\n var x2 = arguments[1];\n var y1 = arguments[2];\n var y2 = arguments[3];\n if (x1 < x2) {\n this._minx = x1;\n this._maxx = x2;\n } else {\n this._minx = x2;\n this._maxx = x1;\n }\n if (y1 < y2) {\n this._miny = y1;\n this._maxy = y2;\n } else {\n this._miny = y2;\n this._maxy = y1;\n }\n }\n};\nEnvelope.prototype.getMaxY = function getMaxY () {\n return this._maxy\n};\nEnvelope.prototype.distance = function distance (env) {\n if (this.intersects(env)) { return 0 }\n var dx = 0.0;\n if (this._maxx < env._minx) { dx = env._minx - this._maxx; } else if (this._minx > env._maxx) { dx = this._minx - env._maxx; }\n var dy = 0.0;\n if (this._maxy < env._miny) { dy = env._miny - this._maxy; } else if (this._miny > env._maxy) { dy = this._miny - env._maxy; }\n if (dx === 0.0) { return dy }\n if (dy === 0.0) { return dx }\n return Math.sqrt(dx * dx + dy * dy)\n};\nEnvelope.prototype.hashCode = function hashCode () {\n var result = 17;\n result = 37 * result + Coordinate.hashCode(this._minx);\n result = 37 * result + Coordinate.hashCode(this._maxx);\n result = 37 * result + Coordinate.hashCode(this._miny);\n result = 37 * result + Coordinate.hashCode(this._maxy);\n return result\n};\nEnvelope.prototype.interfaces_ = function interfaces_ () {\n return [Comparable, Serializable]\n};\nEnvelope.prototype.getClass = function getClass () {\n return Envelope\n};\nEnvelope.intersects = function intersects () {\n if (arguments.length === 3) {\n var p1 = arguments[0];\n var p2 = arguments[1];\n var q = arguments[2];\n if (q.x >= (p1.x < p2.x ? p1.x : p2.x) && q.x <= (p1.x > p2.x ? p1.x : p2.x) && (q.y >= (p1.y < p2.y ? p1.y : p2.y) && q.y <= (p1.y > p2.y ? p1.y : p2.y))) {\n return true\n }\n return false\n } else if (arguments.length === 4) {\n var p1$1 = arguments[0];\n var p2$1 = arguments[1];\n var q1 = arguments[2];\n var q2 = arguments[3];\n var minq = Math.min(q1.x, q2.x);\n var maxq = Math.max(q1.x, q2.x);\n var minp = Math.min(p1$1.x, p2$1.x);\n var maxp = Math.max(p1$1.x, p2$1.x);\n if (minp > maxq) { return false }\n if (maxp < minq) { return false }\n minq = Math.min(q1.y, q2.y);\n maxq = Math.max(q1.y, q2.y);\n minp = Math.min(p1$1.y, p2$1.y);\n maxp = Math.max(p1$1.y, p2$1.y);\n if (minp > maxq) { return false }\n if (maxp < minq) { return false }\n return true\n }\n};\nstaticAccessors$9.serialVersionUID.get = function () { return 5873921885273102420 };\n\nObject.defineProperties( Envelope, staticAccessors$9 );\n\nvar regExes = {\n 'typeStr': /^\\s*(\\w+)\\s*\\(\\s*(.*)\\s*\\)\\s*$/,\n 'emptyTypeStr': /^\\s*(\\w+)\\s*EMPTY\\s*$/,\n 'spaces': /\\s+/,\n 'parenComma': /\\)\\s*,\\s*\\(/,\n 'doubleParenComma': /\\)\\s*\\)\\s*,\\s*\\(\\s*\\(/, // can't use {2} here\n 'trimParens': /^\\s*\\(?(.*?)\\)?\\s*$/\n};\n\n/**\n * Class for reading and writing Well-Known Text.\n *\n * NOTE: Adapted from OpenLayers 2.11 implementation.\n */\n\n/** Create a new parser for WKT\n *\n * @param {GeometryFactory} geometryFactory\n * @return An instance of WKTParser.\n * @constructor\n * @private\n */\nvar WKTParser = function WKTParser (geometryFactory) {\n this.geometryFactory = geometryFactory || new GeometryFactory();\n};\n/**\n * Deserialize a WKT string and return a geometry. Supports WKT for POINT,\n * MULTIPOINT, LINESTRING, LINEARRING, MULTILINESTRING, POLYGON, MULTIPOLYGON,\n * and GEOMETRYCOLLECTION.\n *\n * @param {String} wkt A WKT string.\n * @return {Geometry} A geometry instance.\n * @private\n */\nWKTParser.prototype.read = function read (wkt) {\n var geometry, type, str;\n wkt = wkt.replace(/[\\n\\r]/g, ' ');\n var matches = regExes.typeStr.exec(wkt);\n if (wkt.search('EMPTY') !== -1) {\n matches = regExes.emptyTypeStr.exec(wkt);\n matches[2] = undefined;\n }\n if (matches) {\n type = matches[1].toLowerCase();\n str = matches[2];\n if (parse$1[type]) {\n geometry = parse$1[type].apply(this, [str]);\n }\n }\n\n if (geometry === undefined) { throw new Error('Could not parse WKT ' + wkt) }\n\n return geometry\n};\n\n/**\n * Serialize a geometry into a WKT string.\n *\n * @param {Geometry} geometry A feature or array of features.\n * @return {String} The WKT string representation of the input geometries.\n * @private\n */\nWKTParser.prototype.write = function write (geometry) {\n return this.extractGeometry(geometry)\n};\n\n/**\n * Entry point to construct the WKT for a single Geometry object.\n *\n * @param {Geometry} geometry\n * @return {String} A WKT string of representing the geometry.\n * @private\n */\nWKTParser.prototype.extractGeometry = function extractGeometry (geometry) {\n var type = geometry.getGeometryType().toLowerCase();\n if (!extract$1[type]) {\n return null\n }\n var wktType = type.toUpperCase();\n var data;\n if (geometry.isEmpty()) {\n data = wktType + ' EMPTY';\n } else {\n data = wktType + '(' + extract$1[type].apply(this, [geometry]) + ')';\n }\n return data\n};\n\n/**\n * Object with properties corresponding to the geometry types. Property values\n * are functions that do the actual data extraction.\n * @private\n */\nvar extract$1 = {\n coordinate: function coordinate (coordinate$1) {\n return coordinate$1.x + ' ' + coordinate$1.y\n },\n\n /**\n * Return a space delimited string of point coordinates.\n *\n * @param {Point}\n * point\n * @return {String} A string of coordinates representing the point.\n */\n point: function point (point$1) {\n return extract$1.coordinate.call(this, point$1._coordinates._coordinates[0])\n },\n\n /**\n * Return a comma delimited string of point coordinates from a multipoint.\n *\n * @param {MultiPoint}\n * multipoint\n * @return {String} A string of point coordinate strings representing the\n * multipoint.\n */\n multipoint: function multipoint (multipoint$1) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0, len = multipoint$1._geometries.length; i < len; ++i) {\n array.push('(' + extract$1.point.apply(this$1, [multipoint$1._geometries[i]]) + ')');\n }\n return array.join(',')\n },\n\n /**\n * Return a comma delimited string of point coordinates from a line.\n *\n * @param {LineString} linestring\n * @return {String} A string of point coordinate strings representing the linestring.\n */\n linestring: function linestring (linestring$1) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0, len = linestring$1._points._coordinates.length; i < len; ++i) {\n array.push(extract$1.coordinate.apply(this$1, [linestring$1._points._coordinates[i]]));\n }\n return array.join(',')\n },\n\n linearring: function linearring (linearring$1) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0, len = linearring$1._points._coordinates.length; i < len; ++i) {\n array.push(extract$1.coordinate.apply(this$1, [linearring$1._points._coordinates[i]]));\n }\n return array.join(',')\n },\n\n /**\n * Return a comma delimited string of linestring strings from a\n * multilinestring.\n *\n * @param {MultiLineString} multilinestring\n * @return {String} A string of of linestring strings representing the multilinestring.\n */\n multilinestring: function multilinestring (multilinestring$1) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0, len = multilinestring$1._geometries.length; i < len; ++i) {\n array.push('(' +\n extract$1.linestring.apply(this$1, [multilinestring$1._geometries[i]]) +\n ')');\n }\n return array.join(',')\n },\n\n /**\n * Return a comma delimited string of linear ring arrays from a polygon.\n *\n * @param {Polygon} polygon\n * @return {String} An array of linear ring arrays representing the polygon.\n */\n polygon: function polygon (polygon$1) {\n var this$1 = this;\n\n var array = [];\n array.push('(' + extract$1.linestring.apply(this, [polygon$1._shell]) + ')');\n for (var i = 0, len = polygon$1._holes.length; i < len; ++i) {\n array.push('(' + extract$1.linestring.apply(this$1, [polygon$1._holes[i]]) + ')');\n }\n return array.join(',')\n },\n\n /**\n * Return an array of polygon arrays from a multipolygon.\n *\n * @param {MultiPolygon} multipolygon\n * @return {String} An array of polygon arrays representing the multipolygon.\n */\n multipolygon: function multipolygon (multipolygon$1) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0, len = multipolygon$1._geometries.length; i < len; ++i) {\n array.push('(' + extract$1.polygon.apply(this$1, [multipolygon$1._geometries[i]]) + ')');\n }\n return array.join(',')\n },\n\n /**\n * Return the WKT portion between 'GEOMETRYCOLLECTION(' and ')' for an\n * geometrycollection.\n *\n * @param {GeometryCollection} collection\n * @return {String} internal WKT representation of the collection.\n */\n geometrycollection: function geometrycollection (collection) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0, len = collection._geometries.length; i < len; ++i) {\n array.push(this$1.extractGeometry(collection._geometries[i]));\n }\n return array.join(',')\n }\n};\n\n/**\n * Object with properties corresponding to the geometry types. Property values\n * are functions that do the actual parsing.\n * @private\n */\nvar parse$1 = {\n /**\n * Return point geometry given a point WKT fragment.\n *\n * @param {String} str A WKT fragment representing the point.\n * @return {Point} A point geometry.\n * @private\n */\n point: function point (str) {\n if (str === undefined) {\n return this.geometryFactory.createPoint()\n }\n\n var coords = str.trim().split(regExes.spaces);\n return this.geometryFactory.createPoint(new Coordinate(Number.parseFloat(coords[0]),\n Number.parseFloat(coords[1])))\n },\n\n /**\n * Return a multipoint geometry given a multipoint WKT fragment.\n *\n * @param {String} str A WKT fragment representing the multipoint.\n * @return {Point} A multipoint feature.\n * @private\n */\n multipoint: function multipoint (str) {\n var this$1 = this;\n\n if (str === undefined) {\n return this.geometryFactory.createMultiPoint()\n }\n\n var point;\n var points = str.trim().split(',');\n var components = [];\n for (var i = 0, len = points.length; i < len; ++i) {\n point = points[i].replace(regExes.trimParens, '$1');\n components.push(parse$1.point.apply(this$1, [point]));\n }\n return this.geometryFactory.createMultiPoint(components)\n },\n\n /**\n * Return a linestring geometry given a linestring WKT fragment.\n *\n * @param {String} str A WKT fragment representing the linestring.\n * @return {LineString} A linestring geometry.\n * @private\n */\n linestring: function linestring (str) {\n if (str === undefined) {\n return this.geometryFactory.createLineString()\n }\n\n var points = str.trim().split(',');\n var components = [];\n var coords;\n for (var i = 0, len = points.length; i < len; ++i) {\n coords = points[i].trim().split(regExes.spaces);\n components.push(new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1])));\n }\n return this.geometryFactory.createLineString(components)\n },\n\n /**\n * Return a linearring geometry given a linearring WKT fragment.\n *\n * @param {String} str A WKT fragment representing the linearring.\n * @return {LinearRing} A linearring geometry.\n * @private\n */\n linearring: function linearring (str) {\n if (str === undefined) {\n return this.geometryFactory.createLinearRing()\n }\n\n var points = str.trim().split(',');\n var components = [];\n var coords;\n for (var i = 0, len = points.length; i < len; ++i) {\n coords = points[i].trim().split(regExes.spaces);\n components.push(new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1])));\n }\n return this.geometryFactory.createLinearRing(components)\n },\n\n /**\n * Return a multilinestring geometry given a multilinestring WKT fragment.\n *\n * @param {String} str A WKT fragment representing the multilinestring.\n * @return {MultiLineString} A multilinestring geometry.\n * @private\n */\n multilinestring: function multilinestring (str) {\n var this$1 = this;\n\n if (str === undefined) {\n return this.geometryFactory.createMultiLineString()\n }\n\n var line;\n var lines = str.trim().split(regExes.parenComma);\n var components = [];\n for (var i = 0, len = lines.length; i < len; ++i) {\n line = lines[i].replace(regExes.trimParens, '$1');\n components.push(parse$1.linestring.apply(this$1, [line]));\n }\n return this.geometryFactory.createMultiLineString(components)\n },\n\n /**\n * Return a polygon geometry given a polygon WKT fragment.\n *\n * @param {String} str A WKT fragment representing the polygon.\n * @return {Polygon} A polygon geometry.\n * @private\n */\n polygon: function polygon (str) {\n var this$1 = this;\n\n if (str === undefined) {\n return this.geometryFactory.createPolygon()\n }\n\n var ring, linestring, linearring;\n var rings = str.trim().split(regExes.parenComma);\n var shell;\n var holes = [];\n for (var i = 0, len = rings.length; i < len; ++i) {\n ring = rings[i].replace(regExes.trimParens, '$1');\n linestring = parse$1.linestring.apply(this$1, [ring]);\n linearring = this$1.geometryFactory.createLinearRing(linestring._points);\n if (i === 0) {\n shell = linearring;\n } else {\n holes.push(linearring);\n }\n }\n return this.geometryFactory.createPolygon(shell, holes)\n },\n\n /**\n * Return a multipolygon geometry given a multipolygon WKT fragment.\n *\n * @param {String} str A WKT fragment representing the multipolygon.\n * @return {MultiPolygon} A multipolygon geometry.\n * @private\n */\n multipolygon: function multipolygon (str) {\n var this$1 = this;\n\n if (str === undefined) {\n return this.geometryFactory.createMultiPolygon()\n }\n\n var polygon;\n var polygons = str.trim().split(regExes.doubleParenComma);\n var components = [];\n for (var i = 0, len = polygons.length; i < len; ++i) {\n polygon = polygons[i].replace(regExes.trimParens, '$1');\n components.push(parse$1.polygon.apply(this$1, [polygon]));\n }\n return this.geometryFactory.createMultiPolygon(components)\n },\n\n /**\n * Return a geometrycollection given a geometrycollection WKT fragment.\n *\n * @param {String} str A WKT fragment representing the geometrycollection.\n * @return {GeometryCollection}\n * @private\n */\n geometrycollection: function geometrycollection (str) {\n var this$1 = this;\n\n if (str === undefined) {\n return this.geometryFactory.createGeometryCollection()\n }\n\n // separate components of the collection with |\n str = str.replace(/,\\s*([A-Za-z])/g, '|$1');\n var wktArray = str.trim().split('|');\n var components = [];\n for (var i = 0, len = wktArray.length; i < len; ++i) {\n components.push(this$1.read(wktArray[i]));\n }\n return this.geometryFactory.createGeometryCollection(components)\n }\n};\n\n/**\n * Writes the Well-Known Text representation of a {@link Geometry}. The\n * Well-Known Text format is defined in the <A\n * HREF=\"http://www.opengis.org/techno/specs.htm\"> OGC Simple Features\n * Specification for SQL</A>.\n * <p>\n * The <code>WKTWriter</code> outputs coordinates rounded to the precision\n * model. Only the maximum number of decimal places necessary to represent the\n * ordinates to the required precision will be output.\n * <p>\n * The SFS WKT spec does not define a special tag for {@link LinearRing}s.\n * Under the spec, rings are output as <code>LINESTRING</code>s.\n */\n\n/**\n * @param {GeometryFactory} geometryFactory\n * @constructor\n */\nvar WKTWriter = function WKTWriter (geometryFactory) {\n this.parser = new WKTParser(geometryFactory);\n};\n\n/**\n * Converts a <code>Geometry</code> to its Well-known Text representation.\n *\n * @param {Geometry} geometry a <code>Geometry</code> to process.\n * @return {string} a <Geometry Tagged Text> string (see the OpenGIS Simple\n * Features Specification).\n * @memberof WKTWriter\n */\nWKTWriter.prototype.write = function write (geometry) {\n return this.parser.write(geometry)\n};\n/**\n * Generates the WKT for a <tt>LINESTRING</tt> specified by two\n * {@link Coordinate}s.\n *\n * @param p0 the first coordinate.\n * @param p1 the second coordinate.\n *\n * @return the WKT.\n * @private\n */\nWKTWriter.toLineString = function toLineString (p0, p1) {\n if (arguments.length !== 2) {\n throw new Error('Not implemented')\n }\n return 'LINESTRING ( ' + p0.x + ' ' + p0.y + ', ' + p1.x + ' ' + p1.y + ' )'\n};\n\nvar RuntimeException = (function (Error) {\n function RuntimeException (message) {\n Error.call(this, message);\n this.name = 'RuntimeException';\n this.message = message;\n this.stack = (new Error()).stack;\n }\n\n if ( Error ) RuntimeException.__proto__ = Error;\n RuntimeException.prototype = Object.create( Error && Error.prototype );\n RuntimeException.prototype.constructor = RuntimeException;\n\n return RuntimeException;\n}(Error));\n\nvar AssertionFailedException = (function (RuntimeException$$1) {\n function AssertionFailedException () {\n RuntimeException$$1.call(this);\n if (arguments.length === 0) {\n RuntimeException$$1.call(this);\n } else if (arguments.length === 1) {\n var message = arguments[0];\n RuntimeException$$1.call(this, message);\n }\n }\n\n if ( RuntimeException$$1 ) AssertionFailedException.__proto__ = RuntimeException$$1;\n AssertionFailedException.prototype = Object.create( RuntimeException$$1 && RuntimeException$$1.prototype );\n AssertionFailedException.prototype.constructor = AssertionFailedException;\n AssertionFailedException.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n AssertionFailedException.prototype.getClass = function getClass () {\n return AssertionFailedException\n };\n\n return AssertionFailedException;\n}(RuntimeException));\n\nvar Assert = function Assert () {};\n\nAssert.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nAssert.prototype.getClass = function getClass () {\n return Assert\n};\nAssert.shouldNeverReachHere = function shouldNeverReachHere () {\n if (arguments.length === 0) {\n Assert.shouldNeverReachHere(null);\n } else if (arguments.length === 1) {\n var message = arguments[0];\n throw new AssertionFailedException('Should never reach here' + (message !== null ? ': ' + message : ''))\n }\n};\nAssert.isTrue = function isTrue () {\n var assertion;\n var message;\n if (arguments.length === 1) {\n assertion = arguments[0];\n Assert.isTrue(assertion, null);\n } else if (arguments.length === 2) {\n assertion = arguments[0];\n message = arguments[1];\n if (!assertion) {\n if (message === null) {\n throw new AssertionFailedException()\n } else {\n throw new AssertionFailedException(message)\n }\n }\n }\n};\nAssert.equals = function equals () {\n var expectedValue;\n var actualValue;\n var message;\n if (arguments.length === 2) {\n expectedValue = arguments[0];\n actualValue = arguments[1];\n Assert.equals(expectedValue, actualValue, null);\n } else if (arguments.length === 3) {\n expectedValue = arguments[0];\n actualValue = arguments[1];\n message = arguments[2];\n if (!actualValue.equals(expectedValue)) {\n throw new AssertionFailedException('Expected ' + expectedValue + ' but encountered ' + actualValue + (message !== null ? ': ' + message : ''))\n }\n }\n};\n\nvar LineIntersector = function LineIntersector () {\n this._result = null;\n this._inputLines = Array(2).fill().map(function () { return Array(2); });\n this._intPt = new Array(2).fill(null);\n this._intLineIndex = null;\n this._isProper = null;\n this._pa = null;\n this._pb = null;\n this._precisionModel = null;\n this._intPt[0] = new Coordinate();\n this._intPt[1] = new Coordinate();\n this._pa = this._intPt[0];\n this._pb = this._intPt[1];\n this._result = 0;\n};\n\nvar staticAccessors$10 = { DONT_INTERSECT: { configurable: true },DO_INTERSECT: { configurable: true },COLLINEAR: { configurable: true },NO_INTERSECTION: { configurable: true },POINT_INTERSECTION: { configurable: true },COLLINEAR_INTERSECTION: { configurable: true } };\nLineIntersector.prototype.getIndexAlongSegment = function getIndexAlongSegment (segmentIndex, intIndex) {\n this.computeIntLineIndex();\n return this._intLineIndex[segmentIndex][intIndex]\n};\nLineIntersector.prototype.getTopologySummary = function getTopologySummary () {\n var catBuf = new StringBuffer();\n if (this.isEndPoint()) { catBuf.append(' endpoint'); }\n if (this._isProper) { catBuf.append(' proper'); }\n if (this.isCollinear()) { catBuf.append(' collinear'); }\n return catBuf.toString()\n};\nLineIntersector.prototype.computeIntersection = function computeIntersection (p1, p2, p3, p4) {\n this._inputLines[0][0] = p1;\n this._inputLines[0][1] = p2;\n this._inputLines[1][0] = p3;\n this._inputLines[1][1] = p4;\n this._result = this.computeIntersect(p1, p2, p3, p4);\n};\nLineIntersector.prototype.getIntersectionNum = function getIntersectionNum () {\n return this._result\n};\nLineIntersector.prototype.computeIntLineIndex = function computeIntLineIndex () {\n if (arguments.length === 0) {\n if (this._intLineIndex === null) {\n this._intLineIndex = Array(2).fill().map(function () { return Array(2); });\n this.computeIntLineIndex(0);\n this.computeIntLineIndex(1);\n }\n } else if (arguments.length === 1) {\n var segmentIndex = arguments[0];\n var dist0 = this.getEdgeDistance(segmentIndex, 0);\n var dist1 = this.getEdgeDistance(segmentIndex, 1);\n if (dist0 > dist1) {\n this._intLineIndex[segmentIndex][0] = 0;\n this._intLineIndex[segmentIndex][1] = 1;\n } else {\n this._intLineIndex[segmentIndex][0] = 1;\n this._intLineIndex[segmentIndex][1] = 0;\n }\n }\n};\nLineIntersector.prototype.isProper = function isProper () {\n return this.hasIntersection() && this._isProper\n};\nLineIntersector.prototype.setPrecisionModel = function setPrecisionModel (precisionModel) {\n this._precisionModel = precisionModel;\n};\nLineIntersector.prototype.isInteriorIntersection = function isInteriorIntersection () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n if (this.isInteriorIntersection(0)) { return true }\n if (this.isInteriorIntersection(1)) { return true }\n return false\n } else if (arguments.length === 1) {\n var inputLineIndex = arguments[0];\n for (var i = 0; i < this._result; i++) {\n if (!(this$1._intPt[i].equals2D(this$1._inputLines[inputLineIndex][0]) || this$1._intPt[i].equals2D(this$1._inputLines[inputLineIndex][1]))) {\n return true\n }\n }\n return false\n }\n};\nLineIntersector.prototype.getIntersection = function getIntersection (intIndex) {\n return this._intPt[intIndex]\n};\nLineIntersector.prototype.isEndPoint = function isEndPoint () {\n return this.hasIntersection() && !this._isProper\n};\nLineIntersector.prototype.hasIntersection = function hasIntersection () {\n return this._result !== LineIntersector.NO_INTERSECTION\n};\nLineIntersector.prototype.getEdgeDistance = function getEdgeDistance (segmentIndex, intIndex) {\n var dist = LineIntersector.computeEdgeDistance(this._intPt[intIndex], this._inputLines[segmentIndex][0], this._inputLines[segmentIndex][1]);\n return dist\n};\nLineIntersector.prototype.isCollinear = function isCollinear () {\n return this._result === LineIntersector.COLLINEAR_INTERSECTION\n};\nLineIntersector.prototype.toString = function toString () {\n return WKTWriter.toLineString(this._inputLines[0][0], this._inputLines[0][1]) + ' - ' + WKTWriter.toLineString(this._inputLines[1][0], this._inputLines[1][1]) + this.getTopologySummary()\n};\nLineIntersector.prototype.getEndpoint = function getEndpoint (segmentIndex, ptIndex) {\n return this._inputLines[segmentIndex][ptIndex]\n};\nLineIntersector.prototype.isIntersection = function isIntersection (pt) {\n var this$1 = this;\n\n for (var i = 0; i < this._result; i++) {\n if (this$1._intPt[i].equals2D(pt)) {\n return true\n }\n }\n return false\n};\nLineIntersector.prototype.getIntersectionAlongSegment = function getIntersectionAlongSegment (segmentIndex, intIndex) {\n this.computeIntLineIndex();\n return this._intPt[this._intLineIndex[segmentIndex][intIndex]]\n};\nLineIntersector.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nLineIntersector.prototype.getClass = function getClass () {\n return LineIntersector\n};\nLineIntersector.computeEdgeDistance = function computeEdgeDistance (p, p0, p1) {\n var dx = Math.abs(p1.x - p0.x);\n var dy = Math.abs(p1.y - p0.y);\n var dist = -1.0;\n if (p.equals(p0)) {\n dist = 0.0;\n } else if (p.equals(p1)) {\n if (dx > dy) { dist = dx; } else { dist = dy; }\n } else {\n var pdx = Math.abs(p.x - p0.x);\n var pdy = Math.abs(p.y - p0.y);\n if (dx > dy) { dist = pdx; } else { dist = pdy; }\n if (dist === 0.0 && !p.equals(p0)) {\n dist = Math.max(pdx, pdy);\n }\n }\n Assert.isTrue(!(dist === 0.0 && !p.equals(p0)), 'Bad distance calculation');\n return dist\n};\nLineIntersector.nonRobustComputeEdgeDistance = function nonRobustComputeEdgeDistance (p, p1, p2) {\n var dx = p.x - p1.x;\n var dy = p.y - p1.y;\n var dist = Math.sqrt(dx * dx + dy * dy);\n Assert.isTrue(!(dist === 0.0 && !p.equals(p1)), 'Invalid distance calculation');\n return dist\n};\nstaticAccessors$10.DONT_INTERSECT.get = function () { return 0 };\nstaticAccessors$10.DO_INTERSECT.get = function () { return 1 };\nstaticAccessors$10.COLLINEAR.get = function () { return 2 };\nstaticAccessors$10.NO_INTERSECTION.get = function () { return 0 };\nstaticAccessors$10.POINT_INTERSECTION.get = function () { return 1 };\nstaticAccessors$10.COLLINEAR_INTERSECTION.get = function () { return 2 };\n\nObject.defineProperties( LineIntersector, staticAccessors$10 );\n\nvar RobustLineIntersector = (function (LineIntersector$$1) {\n function RobustLineIntersector () {\n LineIntersector$$1.apply(this, arguments);\n }\n\n if ( LineIntersector$$1 ) RobustLineIntersector.__proto__ = LineIntersector$$1;\n RobustLineIntersector.prototype = Object.create( LineIntersector$$1 && LineIntersector$$1.prototype );\n RobustLineIntersector.prototype.constructor = RobustLineIntersector;\n\n RobustLineIntersector.prototype.isInSegmentEnvelopes = function isInSegmentEnvelopes (intPt) {\n var env0 = new Envelope(this._inputLines[0][0], this._inputLines[0][1]);\n var env1 = new Envelope(this._inputLines[1][0], this._inputLines[1][1]);\n return env0.contains(intPt) && env1.contains(intPt)\n };\n RobustLineIntersector.prototype.computeIntersection = function computeIntersection () {\n if (arguments.length === 3) {\n var p = arguments[0];\n var p1 = arguments[1];\n var p2 = arguments[2];\n this._isProper = false;\n if (Envelope.intersects(p1, p2, p)) {\n if (CGAlgorithms.orientationIndex(p1, p2, p) === 0 && CGAlgorithms.orientationIndex(p2, p1, p) === 0) {\n this._isProper = true;\n if (p.equals(p1) || p.equals(p2)) {\n this._isProper = false;\n }\n this._result = LineIntersector$$1.POINT_INTERSECTION;\n return null\n }\n }\n this._result = LineIntersector$$1.NO_INTERSECTION;\n } else { return LineIntersector$$1.prototype.computeIntersection.apply(this, arguments) }\n };\n RobustLineIntersector.prototype.normalizeToMinimum = function normalizeToMinimum (n1, n2, n3, n4, normPt) {\n normPt.x = this.smallestInAbsValue(n1.x, n2.x, n3.x, n4.x);\n normPt.y = this.smallestInAbsValue(n1.y, n2.y, n3.y, n4.y);\n n1.x -= normPt.x;\n n1.y -= normPt.y;\n n2.x -= normPt.x;\n n2.y -= normPt.y;\n n3.x -= normPt.x;\n n3.y -= normPt.y;\n n4.x -= normPt.x;\n n4.y -= normPt.y;\n };\n RobustLineIntersector.prototype.safeHCoordinateIntersection = function safeHCoordinateIntersection (p1, p2, q1, q2) {\n var intPt = null;\n try {\n intPt = HCoordinate.intersection(p1, p2, q1, q2);\n } catch (e) {\n if (e instanceof NotRepresentableException) {\n intPt = RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2);\n } else { throw e }\n } finally {}\n return intPt\n };\n RobustLineIntersector.prototype.intersection = function intersection (p1, p2, q1, q2) {\n var intPt = this.intersectionWithNormalization(p1, p2, q1, q2);\n if (!this.isInSegmentEnvelopes(intPt)) {\n intPt = new Coordinate(RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2));\n }\n if (this._precisionModel !== null) {\n this._precisionModel.makePrecise(intPt);\n }\n return intPt\n };\n RobustLineIntersector.prototype.smallestInAbsValue = function smallestInAbsValue (x1, x2, x3, x4) {\n var x = x1;\n var xabs = Math.abs(x);\n if (Math.abs(x2) < xabs) {\n x = x2;\n xabs = Math.abs(x2);\n }\n if (Math.abs(x3) < xabs) {\n x = x3;\n xabs = Math.abs(x3);\n }\n if (Math.abs(x4) < xabs) {\n x = x4;\n }\n return x\n };\n RobustLineIntersector.prototype.checkDD = function checkDD (p1, p2, q1, q2, intPt) {\n var intPtDD = CGAlgorithmsDD.intersection(p1, p2, q1, q2);\n var isIn = this.isInSegmentEnvelopes(intPtDD);\n System.out.println('DD in env = ' + isIn + ' --------------------- ' + intPtDD);\n if (intPt.distance(intPtDD) > 0.0001) {\n System.out.println('Distance = ' + intPt.distance(intPtDD));\n }\n };\n RobustLineIntersector.prototype.intersectionWithNormalization = function intersectionWithNormalization (p1, p2, q1, q2) {\n var n1 = new Coordinate(p1);\n var n2 = new Coordinate(p2);\n var n3 = new Coordinate(q1);\n var n4 = new Coordinate(q2);\n var normPt = new Coordinate();\n this.normalizeToEnvCentre(n1, n2, n3, n4, normPt);\n var intPt = this.safeHCoordinateIntersection(n1, n2, n3, n4);\n intPt.x += normPt.x;\n intPt.y += normPt.y;\n return intPt\n };\n RobustLineIntersector.prototype.computeCollinearIntersection = function computeCollinearIntersection (p1, p2, q1, q2) {\n var p1q1p2 = Envelope.intersects(p1, p2, q1);\n var p1q2p2 = Envelope.intersects(p1, p2, q2);\n var q1p1q2 = Envelope.intersects(q1, q2, p1);\n var q1p2q2 = Envelope.intersects(q1, q2, p2);\n if (p1q1p2 && p1q2p2) {\n this._intPt[0] = q1;\n this._intPt[1] = q2;\n return LineIntersector$$1.COLLINEAR_INTERSECTION\n }\n if (q1p1q2 && q1p2q2) {\n this._intPt[0] = p1;\n this._intPt[1] = p2;\n return LineIntersector$$1.COLLINEAR_INTERSECTION\n }\n if (p1q1p2 && q1p1q2) {\n this._intPt[0] = q1;\n this._intPt[1] = p1;\n return q1.equals(p1) && !p1q2p2 && !q1p2q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION\n }\n if (p1q1p2 && q1p2q2) {\n this._intPt[0] = q1;\n this._intPt[1] = p2;\n return q1.equals(p2) && !p1q2p2 && !q1p1q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION\n }\n if (p1q2p2 && q1p1q2) {\n this._intPt[0] = q2;\n this._intPt[1] = p1;\n return q2.equals(p1) && !p1q1p2 && !q1p2q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION\n }\n if (p1q2p2 && q1p2q2) {\n this._intPt[0] = q2;\n this._intPt[1] = p2;\n return q2.equals(p2) && !p1q1p2 && !q1p1q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION\n }\n return LineIntersector$$1.NO_INTERSECTION\n };\n RobustLineIntersector.prototype.normalizeToEnvCentre = function normalizeToEnvCentre (n00, n01, n10, n11, normPt) {\n var minX0 = n00.x < n01.x ? n00.x : n01.x;\n var minY0 = n00.y < n01.y ? n00.y : n01.y;\n var maxX0 = n00.x > n01.x ? n00.x : n01.x;\n var maxY0 = n00.y > n01.y ? n00.y : n01.y;\n var minX1 = n10.x < n11.x ? n10.x : n11.x;\n var minY1 = n10.y < n11.y ? n10.y : n11.y;\n var maxX1 = n10.x > n11.x ? n10.x : n11.x;\n var maxY1 = n10.y > n11.y ? n10.y : n11.y;\n var intMinX = minX0 > minX1 ? minX0 : minX1;\n var intMaxX = maxX0 < maxX1 ? maxX0 : maxX1;\n var intMinY = minY0 > minY1 ? minY0 : minY1;\n var intMaxY = maxY0 < maxY1 ? maxY0 : maxY1;\n var intMidX = (intMinX + intMaxX) / 2.0;\n var intMidY = (intMinY + intMaxY) / 2.0;\n normPt.x = intMidX;\n normPt.y = intMidY;\n n00.x -= normPt.x;\n n00.y -= normPt.y;\n n01.x -= normPt.x;\n n01.y -= normPt.y;\n n10.x -= normPt.x;\n n10.y -= normPt.y;\n n11.x -= normPt.x;\n n11.y -= normPt.y;\n };\n RobustLineIntersector.prototype.computeIntersect = function computeIntersect (p1, p2, q1, q2) {\n this._isProper = false;\n if (!Envelope.intersects(p1, p2, q1, q2)) { return LineIntersector$$1.NO_INTERSECTION }\n var Pq1 = CGAlgorithms.orientationIndex(p1, p2, q1);\n var Pq2 = CGAlgorithms.orientationIndex(p1, p2, q2);\n if ((Pq1 > 0 && Pq2 > 0) || (Pq1 < 0 && Pq2 < 0)) {\n return LineIntersector$$1.NO_INTERSECTION\n }\n var Qp1 = CGAlgorithms.orientationIndex(q1, q2, p1);\n var Qp2 = CGAlgorithms.orientationIndex(q1, q2, p2);\n if ((Qp1 > 0 && Qp2 > 0) || (Qp1 < 0 && Qp2 < 0)) {\n return LineIntersector$$1.NO_INTERSECTION\n }\n var collinear = Pq1 === 0 && Pq2 === 0 && Qp1 === 0 && Qp2 === 0;\n if (collinear) {\n return this.computeCollinearIntersection(p1, p2, q1, q2)\n }\n if (Pq1 === 0 || Pq2 === 0 || Qp1 === 0 || Qp2 === 0) {\n this._isProper = false;\n if (p1.equals2D(q1) || p1.equals2D(q2)) {\n this._intPt[0] = p1;\n } else if (p2.equals2D(q1) || p2.equals2D(q2)) {\n this._intPt[0] = p2;\n } else if (Pq1 === 0) {\n this._intPt[0] = new Coordinate(q1);\n } else if (Pq2 === 0) {\n this._intPt[0] = new Coordinate(q2);\n } else if (Qp1 === 0) {\n this._intPt[0] = new Coordinate(p1);\n } else if (Qp2 === 0) {\n this._intPt[0] = new Coordinate(p2);\n }\n } else {\n this._isProper = true;\n this._intPt[0] = this.intersection(p1, p2, q1, q2);\n }\n return LineIntersector$$1.POINT_INTERSECTION\n };\n RobustLineIntersector.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n RobustLineIntersector.prototype.getClass = function getClass () {\n return RobustLineIntersector\n };\n RobustLineIntersector.nearestEndpoint = function nearestEndpoint (p1, p2, q1, q2) {\n var nearestPt = p1;\n var minDist = CGAlgorithms.distancePointLine(p1, q1, q2);\n var dist = CGAlgorithms.distancePointLine(p2, q1, q2);\n if (dist < minDist) {\n minDist = dist;\n nearestPt = p2;\n }\n dist = CGAlgorithms.distancePointLine(q1, p1, p2);\n if (dist < minDist) {\n minDist = dist;\n nearestPt = q1;\n }\n dist = CGAlgorithms.distancePointLine(q2, p1, p2);\n if (dist < minDist) {\n minDist = dist;\n nearestPt = q2;\n }\n return nearestPt\n };\n\n return RobustLineIntersector;\n}(LineIntersector));\n\nvar RobustDeterminant = function RobustDeterminant () {};\n\nRobustDeterminant.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nRobustDeterminant.prototype.getClass = function getClass () {\n return RobustDeterminant\n};\nRobustDeterminant.orientationIndex = function orientationIndex (p1, p2, q) {\n var dx1 = p2.x - p1.x;\n var dy1 = p2.y - p1.y;\n var dx2 = q.x - p2.x;\n var dy2 = q.y - p2.y;\n return RobustDeterminant.signOfDet2x2(dx1, dy1, dx2, dy2)\n};\nRobustDeterminant.signOfDet2x2 = function signOfDet2x2 (x1, y1, x2, y2) {\n var sign = null;\n var swap = null;\n var k = null;\n sign = 1;\n if (x1 === 0.0 || y2 === 0.0) {\n if (y1 === 0.0 || x2 === 0.0) {\n return 0\n } else if (y1 > 0) {\n if (x2 > 0) {\n return -sign\n } else {\n return sign\n }\n } else {\n if (x2 > 0) {\n return sign\n } else {\n return -sign\n }\n }\n }\n if (y1 === 0.0 || x2 === 0.0) {\n if (y2 > 0) {\n if (x1 > 0) {\n return sign\n } else {\n return -sign\n }\n } else {\n if (x1 > 0) {\n return -sign\n } else {\n return sign\n }\n }\n }\n if (y1 > 0.0) {\n if (y2 > 0.0) {\n if (y1 <= y2) {\n \n } else {\n sign = -sign;\n swap = x1;\n x1 = x2;\n x2 = swap;\n swap = y1;\n y1 = y2;\n y2 = swap;\n }\n } else {\n if (y1 <= -y2) {\n sign = -sign;\n x2 = -x2;\n y2 = -y2;\n } else {\n swap = x1;\n x1 = -x2;\n x2 = swap;\n swap = y1;\n y1 = -y2;\n y2 = swap;\n }\n }\n } else {\n if (y2 > 0.0) {\n if (-y1 <= y2) {\n sign = -sign;\n x1 = -x1;\n y1 = -y1;\n } else {\n swap = -x1;\n x1 = x2;\n x2 = swap;\n swap = -y1;\n y1 = y2;\n y2 = swap;\n }\n } else {\n if (y1 >= y2) {\n x1 = -x1;\n y1 = -y1;\n x2 = -x2;\n y2 = -y2;\n } else {\n sign = -sign;\n swap = -x1;\n x1 = -x2;\n x2 = swap;\n swap = -y1;\n y1 = -y2;\n y2 = swap;\n }\n }\n }\n if (x1 > 0.0) {\n if (x2 > 0.0) {\n if (x1 <= x2) {\n \n } else {\n return sign\n }\n } else {\n return sign\n }\n } else {\n if (x2 > 0.0) {\n return -sign\n } else {\n if (x1 >= x2) {\n sign = -sign;\n x1 = -x1;\n x2 = -x2;\n } else {\n return -sign\n }\n }\n }\n while (true) {\n k = Math.floor(x2 / x1);\n x2 = x2 - k * x1;\n y2 = y2 - k * y1;\n if (y2 < 0.0) {\n return -sign\n }\n if (y2 > y1) {\n return sign\n }\n if (x1 > x2 + x2) {\n if (y1 < y2 + y2) {\n return sign\n }\n } else {\n if (y1 > y2 + y2) {\n return -sign\n } else {\n x2 = x1 - x2;\n y2 = y1 - y2;\n sign = -sign;\n }\n }\n if (y2 === 0.0) {\n if (x2 === 0.0) {\n return 0\n } else {\n return -sign\n }\n }\n if (x2 === 0.0) {\n return sign\n }\n k = Math.floor(x1 / x2);\n x1 = x1 - k * x2;\n y1 = y1 - k * y2;\n if (y1 < 0.0) {\n return sign\n }\n if (y1 > y2) {\n return -sign\n }\n if (x2 > x1 + x1) {\n if (y2 < y1 + y1) {\n return -sign\n }\n } else {\n if (y2 > y1 + y1) {\n return sign\n } else {\n x1 = x2 - x1;\n y1 = y2 - y1;\n sign = -sign;\n }\n }\n if (y1 === 0.0) {\n if (x1 === 0.0) {\n return 0\n } else {\n return sign\n }\n }\n if (x1 === 0.0) {\n return -sign\n }\n }\n};\n\nvar RayCrossingCounter = function RayCrossingCounter () {\n this._p = null;\n this._crossingCount = 0;\n this._isPointOnSegment = false;\n var p = arguments[0];\n this._p = p;\n};\nRayCrossingCounter.prototype.countSegment = function countSegment (p1, p2) {\n if (p1.x < this._p.x && p2.x < this._p.x) { return null }\n if (this._p.x === p2.x && this._p.y === p2.y) {\n this._isPointOnSegment = true;\n return null\n }\n if (p1.y === this._p.y && p2.y === this._p.y) {\n var minx = p1.x;\n var maxx = p2.x;\n if (minx > maxx) {\n minx = p2.x;\n maxx = p1.x;\n }\n if (this._p.x >= minx && this._p.x <= maxx) {\n this._isPointOnSegment = true;\n }\n return null\n }\n if ((p1.y > this._p.y && p2.y <= this._p.y) || (p2.y > this._p.y && p1.y <= this._p.y)) {\n var x1 = p1.x - this._p.x;\n var y1 = p1.y - this._p.y;\n var x2 = p2.x - this._p.x;\n var y2 = p2.y - this._p.y;\n var xIntSign = RobustDeterminant.signOfDet2x2(x1, y1, x2, y2);\n if (xIntSign === 0.0) {\n this._isPointOnSegment = true;\n return null\n }\n if (y2 < y1) { xIntSign = -xIntSign; }\n if (xIntSign > 0.0) {\n this._crossingCount++;\n }\n }\n};\nRayCrossingCounter.prototype.isPointInPolygon = function isPointInPolygon () {\n return this.getLocation() !== Location.EXTERIOR\n};\nRayCrossingCounter.prototype.getLocation = function getLocation () {\n if (this._isPointOnSegment) { return Location.BOUNDARY }\n if (this._crossingCount % 2 === 1) {\n return Location.INTERIOR\n }\n return Location.EXTERIOR\n};\nRayCrossingCounter.prototype.isOnSegment = function isOnSegment () {\n return this._isPointOnSegment\n};\nRayCrossingCounter.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nRayCrossingCounter.prototype.getClass = function getClass () {\n return RayCrossingCounter\n};\nRayCrossingCounter.locatePointInRing = function locatePointInRing () {\n if (arguments[0] instanceof Coordinate && hasInterface(arguments[1], CoordinateSequence)) {\n var p = arguments[0];\n var ring = arguments[1];\n var counter = new RayCrossingCounter(p);\n var p1 = new Coordinate();\n var p2 = new Coordinate();\n for (var i = 1; i < ring.size(); i++) {\n ring.getCoordinate(i, p1);\n ring.getCoordinate(i - 1, p2);\n counter.countSegment(p1, p2);\n if (counter.isOnSegment()) { return counter.getLocation() }\n }\n return counter.getLocation()\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Array) {\n var p$1 = arguments[0];\n var ring$1 = arguments[1];\n var counter$1 = new RayCrossingCounter(p$1);\n for (var i$1 = 1; i$1 < ring$1.length; i$1++) {\n var p1$1 = ring$1[i$1];\n var p2$1 = ring$1[i$1 - 1];\n counter$1.countSegment(p1$1, p2$1);\n if (counter$1.isOnSegment()) { return counter$1.getLocation() }\n }\n return counter$1.getLocation()\n }\n};\n\nvar CGAlgorithms = function CGAlgorithms () {};\n\nvar staticAccessors$3 = { CLOCKWISE: { configurable: true },RIGHT: { configurable: true },COUNTERCLOCKWISE: { configurable: true },LEFT: { configurable: true },COLLINEAR: { configurable: true },STRAIGHT: { configurable: true } };\n\nCGAlgorithms.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCGAlgorithms.prototype.getClass = function getClass () {\n return CGAlgorithms\n};\nCGAlgorithms.orientationIndex = function orientationIndex (p1, p2, q) {\n return CGAlgorithmsDD.orientationIndex(p1, p2, q)\n};\nCGAlgorithms.signedArea = function signedArea () {\n if (arguments[0] instanceof Array) {\n var ring = arguments[0];\n if (ring.length < 3) { return 0.0 }\n var sum = 0.0;\n var x0 = ring[0].x;\n for (var i = 1; i < ring.length - 1; i++) {\n var x = ring[i].x - x0;\n var y1 = ring[i + 1].y;\n var y2 = ring[i - 1].y;\n sum += x * (y2 - y1);\n }\n return sum / 2.0\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n var ring$1 = arguments[0];\n var n = ring$1.size();\n if (n < 3) { return 0.0 }\n var p0 = new Coordinate();\n var p1 = new Coordinate();\n var p2 = new Coordinate();\n ring$1.getCoordinate(0, p1);\n ring$1.getCoordinate(1, p2);\n var x0$1 = p1.x;\n p2.x -= x0$1;\n var sum$1 = 0.0;\n for (var i$1 = 1; i$1 < n - 1; i$1++) {\n p0.y = p1.y;\n p1.x = p2.x;\n p1.y = p2.y;\n ring$1.getCoordinate(i$1 + 1, p2);\n p2.x -= x0$1;\n sum$1 += p1.x * (p0.y - p2.y);\n }\n return sum$1 / 2.0\n }\n};\nCGAlgorithms.distanceLineLine = function distanceLineLine (A, B, C, D) {\n if (A.equals(B)) { return CGAlgorithms.distancePointLine(A, C, D) }\n if (C.equals(D)) { return CGAlgorithms.distancePointLine(D, A, B) }\n var noIntersection = false;\n if (!Envelope.intersects(A, B, C, D)) {\n noIntersection = true;\n } else {\n var denom = (B.x - A.x) * (D.y - C.y) - (B.y - A.y) * (D.x - C.x);\n if (denom === 0) {\n noIntersection = true;\n } else {\n var rNumb = (A.y - C.y) * (D.x - C.x) - (A.x - C.x) * (D.y - C.y);\n var sNum = (A.y - C.y) * (B.x - A.x) - (A.x - C.x) * (B.y - A.y);\n var s = sNum / denom;\n var r = rNumb / denom;\n if (r < 0 || r > 1 || s < 0 || s > 1) {\n noIntersection = true;\n }\n }\n }\n if (noIntersection) {\n return MathUtil.min(CGAlgorithms.distancePointLine(A, C, D), CGAlgorithms.distancePointLine(B, C, D), CGAlgorithms.distancePointLine(C, A, B), CGAlgorithms.distancePointLine(D, A, B))\n }\n return 0.0\n};\nCGAlgorithms.isPointInRing = function isPointInRing (p, ring) {\n return CGAlgorithms.locatePointInRing(p, ring) !== Location.EXTERIOR\n};\nCGAlgorithms.computeLength = function computeLength (pts) {\n var n = pts.size();\n if (n <= 1) { return 0.0 }\n var len = 0.0;\n var p = new Coordinate();\n pts.getCoordinate(0, p);\n var x0 = p.x;\n var y0 = p.y;\n for (var i = 1; i < n; i++) {\n pts.getCoordinate(i, p);\n var x1 = p.x;\n var y1 = p.y;\n var dx = x1 - x0;\n var dy = y1 - y0;\n len += Math.sqrt(dx * dx + dy * dy);\n x0 = x1;\n y0 = y1;\n }\n return len\n};\nCGAlgorithms.isCCW = function isCCW (ring) {\n var nPts = ring.length - 1;\n if (nPts < 3) { throw new IllegalArgumentException('Ring has fewer than 4 points, so orientation cannot be determined') }\n var hiPt = ring[0];\n var hiIndex = 0;\n for (var i = 1; i <= nPts; i++) {\n var p = ring[i];\n if (p.y > hiPt.y) {\n hiPt = p;\n hiIndex = i;\n }\n }\n var iPrev = hiIndex;\n do {\n iPrev = iPrev - 1;\n if (iPrev < 0) { iPrev = nPts; }\n } while (ring[iPrev].equals2D(hiPt) && iPrev !== hiIndex)\n var iNext = hiIndex;\n do {\n iNext = (iNext + 1) % nPts;\n } while (ring[iNext].equals2D(hiPt) && iNext !== hiIndex)\n var prev = ring[iPrev];\n var next = ring[iNext];\n if (prev.equals2D(hiPt) || next.equals2D(hiPt) || prev.equals2D(next)) { return false }\n var disc = CGAlgorithms.computeOrientation(prev, hiPt, next);\n var isCCW = false;\n if (disc === 0) {\n isCCW = prev.x > next.x;\n } else {\n isCCW = disc > 0;\n }\n return isCCW\n};\nCGAlgorithms.locatePointInRing = function locatePointInRing (p, ring) {\n return RayCrossingCounter.locatePointInRing(p, ring)\n};\nCGAlgorithms.distancePointLinePerpendicular = function distancePointLinePerpendicular (p, A, B) {\n var len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);\n var s = ((A.y - p.y) * (B.x - A.x) - (A.x - p.x) * (B.y - A.y)) / len2;\n return Math.abs(s) * Math.sqrt(len2)\n};\nCGAlgorithms.computeOrientation = function computeOrientation (p1, p2, q) {\n return CGAlgorithms.orientationIndex(p1, p2, q)\n};\nCGAlgorithms.distancePointLine = function distancePointLine () {\n if (arguments.length === 2) {\n var p = arguments[0];\n var line = arguments[1];\n if (line.length === 0) { throw new IllegalArgumentException('Line array must contain at least one vertex') }\n var minDistance = p.distance(line[0]);\n for (var i = 0; i < line.length - 1; i++) {\n var dist = CGAlgorithms.distancePointLine(p, line[i], line[i + 1]);\n if (dist < minDistance) {\n minDistance = dist;\n }\n }\n return minDistance\n } else if (arguments.length === 3) {\n var p$1 = arguments[0];\n var A = arguments[1];\n var B = arguments[2];\n if (A.x === B.x && A.y === B.y) { return p$1.distance(A) }\n var len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);\n var r = ((p$1.x - A.x) * (B.x - A.x) + (p$1.y - A.y) * (B.y - A.y)) / len2;\n if (r <= 0.0) { return p$1.distance(A) }\n if (r >= 1.0) { return p$1.distance(B) }\n var s = ((A.y - p$1.y) * (B.x - A.x) - (A.x - p$1.x) * (B.y - A.y)) / len2;\n return Math.abs(s) * Math.sqrt(len2)\n }\n};\nCGAlgorithms.isOnLine = function isOnLine (p, pt) {\n var lineIntersector = new RobustLineIntersector();\n for (var i = 1; i < pt.length; i++) {\n var p0 = pt[i - 1];\n var p1 = pt[i];\n lineIntersector.computeIntersection(p, p0, p1);\n if (lineIntersector.hasIntersection()) {\n return true\n }\n }\n return false\n};\nstaticAccessors$3.CLOCKWISE.get = function () { return -1 };\nstaticAccessors$3.RIGHT.get = function () { return CGAlgorithms.CLOCKWISE };\nstaticAccessors$3.COUNTERCLOCKWISE.get = function () { return 1 };\nstaticAccessors$3.LEFT.get = function () { return CGAlgorithms.COUNTERCLOCKWISE };\nstaticAccessors$3.COLLINEAR.get = function () { return 0 };\nstaticAccessors$3.STRAIGHT.get = function () { return CGAlgorithms.COLLINEAR };\n\nObject.defineProperties( CGAlgorithms, staticAccessors$3 );\n\nvar GeometryComponentFilter = function GeometryComponentFilter () {};\n\nGeometryComponentFilter.prototype.filter = function filter (geom) {};\nGeometryComponentFilter.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryComponentFilter.prototype.getClass = function getClass () {\n return GeometryComponentFilter\n};\n\nvar Geometry = function Geometry () {\n var factory = arguments[0];\n\n this._envelope = null;\n this._factory = null;\n this._SRID = null;\n this._userData = null;\n this._factory = factory;\n this._SRID = factory.getSRID();\n};\n\nvar staticAccessors$11 = { serialVersionUID: { configurable: true },SORTINDEX_POINT: { configurable: true },SORTINDEX_MULTIPOINT: { configurable: true },SORTINDEX_LINESTRING: { configurable: true },SORTINDEX_LINEARRING: { configurable: true },SORTINDEX_MULTILINESTRING: { configurable: true },SORTINDEX_POLYGON: { configurable: true },SORTINDEX_MULTIPOLYGON: { configurable: true },SORTINDEX_GEOMETRYCOLLECTION: { configurable: true },geometryChangedFilter: { configurable: true } };\nGeometry.prototype.isGeometryCollection = function isGeometryCollection () {\n return this.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION\n};\nGeometry.prototype.getFactory = function getFactory () {\n return this._factory\n};\nGeometry.prototype.getGeometryN = function getGeometryN (n) {\n return this\n};\nGeometry.prototype.getArea = function getArea () {\n return 0.0\n};\nGeometry.prototype.isRectangle = function isRectangle () {\n return false\n};\nGeometry.prototype.equals = function equals () {\n if (arguments[0] instanceof Geometry) {\n var g$1 = arguments[0];\n if (g$1 === null) { return false }\n return this.equalsTopo(g$1)\n } else if (arguments[0] instanceof Object) {\n var o = arguments[0];\n if (!(o instanceof Geometry)) { return false }\n var g = o;\n return this.equalsExact(g)\n }\n};\nGeometry.prototype.equalsExact = function equalsExact (other) {\n return this === other || this.equalsExact(other, 0)\n};\nGeometry.prototype.geometryChanged = function geometryChanged () {\n this.apply(Geometry.geometryChangedFilter);\n};\nGeometry.prototype.geometryChangedAction = function geometryChangedAction () {\n this._envelope = null;\n};\nGeometry.prototype.equalsNorm = function equalsNorm (g) {\n if (g === null) { return false }\n return this.norm().equalsExact(g.norm())\n};\nGeometry.prototype.getLength = function getLength () {\n return 0.0\n};\nGeometry.prototype.getNumGeometries = function getNumGeometries () {\n return 1\n};\nGeometry.prototype.compareTo = function compareTo () {\n if (arguments.length === 1) {\n var o = arguments[0];\n var other = o;\n if (this.getSortIndex() !== other.getSortIndex()) {\n return this.getSortIndex() - other.getSortIndex()\n }\n if (this.isEmpty() && other.isEmpty()) {\n return 0\n }\n if (this.isEmpty()) {\n return -1\n }\n if (other.isEmpty()) {\n return 1\n }\n return this.compareToSameClass(o)\n } else if (arguments.length === 2) {\n var other$1 = arguments[0];\n var comp = arguments[1];\n if (this.getSortIndex() !== other$1.getSortIndex()) {\n return this.getSortIndex() - other$1.getSortIndex()\n }\n if (this.isEmpty() && other$1.isEmpty()) {\n return 0\n }\n if (this.isEmpty()) {\n return -1\n }\n if (other$1.isEmpty()) {\n return 1\n }\n return this.compareToSameClass(other$1, comp)\n }\n};\nGeometry.prototype.getUserData = function getUserData () {\n return this._userData\n};\nGeometry.prototype.getSRID = function getSRID () {\n return this._SRID\n};\nGeometry.prototype.getEnvelope = function getEnvelope () {\n return this.getFactory().toGeometry(this.getEnvelopeInternal())\n};\nGeometry.prototype.checkNotGeometryCollection = function checkNotGeometryCollection (g) {\n if (g.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION) {\n throw new IllegalArgumentException('This method does not support GeometryCollection arguments')\n }\n};\nGeometry.prototype.equal = function equal (a, b, tolerance) {\n if (tolerance === 0) {\n return a.equals(b)\n }\n return a.distance(b) <= tolerance\n};\nGeometry.prototype.norm = function norm () {\n var copy = this.copy();\n copy.normalize();\n return copy\n};\nGeometry.prototype.getPrecisionModel = function getPrecisionModel () {\n return this._factory.getPrecisionModel()\n};\nGeometry.prototype.getEnvelopeInternal = function getEnvelopeInternal () {\n if (this._envelope === null) {\n this._envelope = this.computeEnvelopeInternal();\n }\n return new Envelope(this._envelope)\n};\nGeometry.prototype.setSRID = function setSRID (SRID) {\n this._SRID = SRID;\n};\nGeometry.prototype.setUserData = function setUserData (userData) {\n this._userData = userData;\n};\nGeometry.prototype.compare = function compare (a, b) {\n var i = a.iterator();\n var j = b.iterator();\n while (i.hasNext() && j.hasNext()) {\n var aElement = i.next();\n var bElement = j.next();\n var comparison = aElement.compareTo(bElement);\n if (comparison !== 0) {\n return comparison\n }\n }\n if (i.hasNext()) {\n return 1\n }\n if (j.hasNext()) {\n return -1\n }\n return 0\n};\nGeometry.prototype.hashCode = function hashCode () {\n return this.getEnvelopeInternal().hashCode()\n};\nGeometry.prototype.isGeometryCollectionOrDerived = function isGeometryCollectionOrDerived () {\n if (this.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION || this.getSortIndex() === Geometry.SORTINDEX_MULTIPOINT || this.getSortIndex() === Geometry.SORTINDEX_MULTILINESTRING || this.getSortIndex() === Geometry.SORTINDEX_MULTIPOLYGON) {\n return true\n }\n return false\n};\nGeometry.prototype.interfaces_ = function interfaces_ () {\n return [Clonable, Comparable, Serializable]\n};\nGeometry.prototype.getClass = function getClass () {\n return Geometry\n};\nGeometry.hasNonEmptyElements = function hasNonEmptyElements (geometries) {\n for (var i = 0; i < geometries.length; i++) {\n if (!geometries[i].isEmpty()) {\n return true\n }\n }\n return false\n};\nGeometry.hasNullElements = function hasNullElements (array) {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === null) {\n return true\n }\n }\n return false\n};\nstaticAccessors$11.serialVersionUID.get = function () { return 8763622679187376702 };\nstaticAccessors$11.SORTINDEX_POINT.get = function () { return 0 };\nstaticAccessors$11.SORTINDEX_MULTIPOINT.get = function () { return 1 };\nstaticAccessors$11.SORTINDEX_LINESTRING.get = function () { return 2 };\nstaticAccessors$11.SORTINDEX_LINEARRING.get = function () { return 3 };\nstaticAccessors$11.SORTINDEX_MULTILINESTRING.get = function () { return 4 };\nstaticAccessors$11.SORTINDEX_POLYGON.get = function () { return 5 };\nstaticAccessors$11.SORTINDEX_MULTIPOLYGON.get = function () { return 6 };\nstaticAccessors$11.SORTINDEX_GEOMETRYCOLLECTION.get = function () { return 7 };\nstaticAccessors$11.geometryChangedFilter.get = function () { return geometryChangedFilter };\n\nObject.defineProperties( Geometry, staticAccessors$11 );\n\nvar geometryChangedFilter = function geometryChangedFilter () {};\n\ngeometryChangedFilter.interfaces_ = function interfaces_ () {\n return [GeometryComponentFilter]\n};\ngeometryChangedFilter.filter = function filter (geom) {\n geom.geometryChangedAction();\n};\n\nvar CoordinateFilter = function CoordinateFilter () {};\n\nCoordinateFilter.prototype.filter = function filter (coord) {};\nCoordinateFilter.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCoordinateFilter.prototype.getClass = function getClass () {\n return CoordinateFilter\n};\n\nvar BoundaryNodeRule = function BoundaryNodeRule () {};\n\nvar staticAccessors$12 = { Mod2BoundaryNodeRule: { configurable: true },EndPointBoundaryNodeRule: { configurable: true },MultiValentEndPointBoundaryNodeRule: { configurable: true },MonoValentEndPointBoundaryNodeRule: { configurable: true },MOD2_BOUNDARY_RULE: { configurable: true },ENDPOINT_BOUNDARY_RULE: { configurable: true },MULTIVALENT_ENDPOINT_BOUNDARY_RULE: { configurable: true },MONOVALENT_ENDPOINT_BOUNDARY_RULE: { configurable: true },OGC_SFS_BOUNDARY_RULE: { configurable: true } };\n\nBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {};\nBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBoundaryNodeRule.prototype.getClass = function getClass () {\n return BoundaryNodeRule\n};\nstaticAccessors$12.Mod2BoundaryNodeRule.get = function () { return Mod2BoundaryNodeRule };\nstaticAccessors$12.EndPointBoundaryNodeRule.get = function () { return EndPointBoundaryNodeRule };\nstaticAccessors$12.MultiValentEndPointBoundaryNodeRule.get = function () { return MultiValentEndPointBoundaryNodeRule };\nstaticAccessors$12.MonoValentEndPointBoundaryNodeRule.get = function () { return MonoValentEndPointBoundaryNodeRule };\nstaticAccessors$12.MOD2_BOUNDARY_RULE.get = function () { return new Mod2BoundaryNodeRule() };\nstaticAccessors$12.ENDPOINT_BOUNDARY_RULE.get = function () { return new EndPointBoundaryNodeRule() };\nstaticAccessors$12.MULTIVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new MultiValentEndPointBoundaryNodeRule() };\nstaticAccessors$12.MONOVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new MonoValentEndPointBoundaryNodeRule() };\nstaticAccessors$12.OGC_SFS_BOUNDARY_RULE.get = function () { return BoundaryNodeRule.MOD2_BOUNDARY_RULE };\n\nObject.defineProperties( BoundaryNodeRule, staticAccessors$12 );\n\nvar Mod2BoundaryNodeRule = function Mod2BoundaryNodeRule () {};\n\nMod2BoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {\n return boundaryCount % 2 === 1\n};\nMod2BoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {\n return [BoundaryNodeRule]\n};\nMod2BoundaryNodeRule.prototype.getClass = function getClass () {\n return Mod2BoundaryNodeRule\n};\n\nvar EndPointBoundaryNodeRule = function EndPointBoundaryNodeRule () {};\n\nEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {\n return boundaryCount > 0\n};\nEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {\n return [BoundaryNodeRule]\n};\nEndPointBoundaryNodeRule.prototype.getClass = function getClass () {\n return EndPointBoundaryNodeRule\n};\n\nvar MultiValentEndPointBoundaryNodeRule = function MultiValentEndPointBoundaryNodeRule () {};\n\nMultiValentEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {\n return boundaryCount > 1\n};\nMultiValentEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {\n return [BoundaryNodeRule]\n};\nMultiValentEndPointBoundaryNodeRule.prototype.getClass = function getClass () {\n return MultiValentEndPointBoundaryNodeRule\n};\n\nvar MonoValentEndPointBoundaryNodeRule = function MonoValentEndPointBoundaryNodeRule () {};\n\nMonoValentEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {\n return boundaryCount === 1\n};\nMonoValentEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {\n return [BoundaryNodeRule]\n};\nMonoValentEndPointBoundaryNodeRule.prototype.getClass = function getClass () {\n return MonoValentEndPointBoundaryNodeRule\n};\n\n// import Iterator from './Iterator'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Collection.html\n *\n * @constructor\n * @private\n */\nvar Collection = function Collection () {};\n\nCollection.prototype.add = function add () {};\n\n/**\n * Appends all of the elements in the specified collection to the end of this\n * list, in the order that they are returned by the specified collection's\n * iterator (optional operation).\n * @param {javascript.util.Collection} c\n * @return {boolean}\n */\nCollection.prototype.addAll = function addAll () {};\n\n/**\n * Returns true if this collection contains no elements.\n * @return {boolean}\n */\nCollection.prototype.isEmpty = function isEmpty () {};\n\n/**\n * Returns an iterator over the elements in this collection.\n * @return {javascript.util.Iterator}\n */\nCollection.prototype.iterator = function iterator () {};\n\n/**\n * Returns an iterator over the elements in this collection.\n * @return {number}\n */\nCollection.prototype.size = function size () {};\n\n/**\n * Returns an array containing all of the elements in this collection.\n * @return {Array}\n */\nCollection.prototype.toArray = function toArray () {};\n\n/**\n * Removes a single instance of the specified element from this collection if it\n * is present. (optional)\n * @param {Object} e\n * @return {boolean}\n */\nCollection.prototype.remove = function remove () {};\n\n/**\n * @param {string=} message Optional message\n * @extends {Error}\n * @constructor\n * @private\n */\nfunction IndexOutOfBoundsException (message) {\n this.message = message || '';\n}\nIndexOutOfBoundsException.prototype = new Error();\n\n/**\n * @type {string}\n */\nIndexOutOfBoundsException.prototype.name = 'IndexOutOfBoundsException';\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Iterator.html\n * @constructor\n * @private\n */\nvar Iterator = function Iterator () {};\n\nIterator.prototype.hasNext = function hasNext () {};\n\n/**\n * Returns the next element in the iteration.\n * @return {Object}\n */\nIterator.prototype.next = function next () {};\n\n/**\n * Removes from the underlying collection the last element returned by the\n * iterator (optional operation).\n */\nIterator.prototype.remove = function remove () {};\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/List.html\n *\n * @extends {javascript.util.Collection}\n * @constructor\n * @private\n */\nvar List = (function (Collection$$1) {\n function List () {\n Collection$$1.apply(this, arguments);\n }\n\n if ( Collection$$1 ) List.__proto__ = Collection$$1;\n List.prototype = Object.create( Collection$$1 && Collection$$1.prototype );\n List.prototype.constructor = List;\n\n List.prototype.get = function get () { };\n\n /**\n * Replaces the element at the specified position in this list with the\n * specified element (optional operation).\n * @param {number} index\n * @param {Object} e\n * @return {Object}\n */\n List.prototype.set = function set () { };\n\n /**\n * Returns true if this collection contains no elements.\n * @return {boolean}\n */\n List.prototype.isEmpty = function isEmpty () { };\n\n return List;\n}(Collection));\n\n/**\n * @param {string=} message Optional message\n * @extends {Error}\n * @constructor\n * @private\n */\nfunction NoSuchElementException (message) {\n this.message = message || '';\n}\nNoSuchElementException.prototype = new Error();\n\n/**\n * @type {string}\n */\nNoSuchElementException.prototype.name = 'NoSuchElementException';\n\n// import OperationNotSupported from './OperationNotSupported'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html\n *\n * @extends List\n * @private\n */\nvar ArrayList = (function (List$$1) {\n function ArrayList () {\n List$$1.call(this);\n this.array_ = [];\n\n if (arguments[0] instanceof Collection) {\n this.addAll(arguments[0]);\n }\n }\n\n if ( List$$1 ) ArrayList.__proto__ = List$$1;\n ArrayList.prototype = Object.create( List$$1 && List$$1.prototype );\n ArrayList.prototype.constructor = ArrayList;\n\n ArrayList.prototype.ensureCapacity = function ensureCapacity () {};\n ArrayList.prototype.interfaces_ = function interfaces_ () { return [List$$1, Collection] };\n\n /**\n * @override\n */\n ArrayList.prototype.add = function add (e) {\n if (arguments.length === 1) {\n this.array_.push(e);\n } else {\n this.array_.splice(arguments[0], arguments[1]);\n }\n return true\n };\n\n ArrayList.prototype.clear = function clear () {\n this.array_ = [];\n };\n\n /**\n * @override\n */\n ArrayList.prototype.addAll = function addAll (c) {\n var this$1 = this;\n\n for (var i = c.iterator(); i.hasNext();) {\n this$1.add(i.next());\n }\n return true\n };\n\n /**\n * @override\n */\n ArrayList.prototype.set = function set (index, element) {\n var oldElement = this.array_[index];\n this.array_[index] = element;\n return oldElement\n };\n\n /**\n * @override\n */\n ArrayList.prototype.iterator = function iterator () {\n return new Iterator_(this)\n };\n\n /**\n * @override\n */\n ArrayList.prototype.get = function get (index) {\n if (index < 0 || index >= this.size()) {\n throw new IndexOutOfBoundsException()\n }\n\n return this.array_[index]\n };\n\n /**\n * @override\n */\n ArrayList.prototype.isEmpty = function isEmpty () {\n return this.array_.length === 0\n };\n\n /**\n * @override\n */\n ArrayList.prototype.size = function size () {\n return this.array_.length\n };\n\n /**\n * @override\n */\n ArrayList.prototype.toArray = function toArray () {\n var this$1 = this;\n\n var array = [];\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n array.push(this$1.array_[i]);\n }\n\n return array\n };\n\n /**\n * @override\n */\n ArrayList.prototype.remove = function remove (o) {\n var this$1 = this;\n\n var found = false;\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n if (this$1.array_[i] === o) {\n this$1.array_.splice(i, 1);\n found = true;\n break\n }\n }\n\n return found\n };\n\n return ArrayList;\n}(List));\n\n/**\n * @extends {Iterator}\n * @param {ArrayList} arrayList\n * @constructor\n * @private\n */\nvar Iterator_ = (function (Iterator$$1) {\n function Iterator_ (arrayList) {\n Iterator$$1.call(this);\n /**\n * @type {ArrayList}\n * @private\n */\n this.arrayList_ = arrayList;\n /**\n * @type {number}\n * @private\n */\n this.position_ = 0;\n }\n\n if ( Iterator$$1 ) Iterator_.__proto__ = Iterator$$1;\n Iterator_.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );\n Iterator_.prototype.constructor = Iterator_;\n\n /**\n * @override\n */\n Iterator_.prototype.next = function next () {\n if (this.position_ === this.arrayList_.size()) {\n throw new NoSuchElementException()\n }\n return this.arrayList_.get(this.position_++)\n };\n\n /**\n * @override\n */\n Iterator_.prototype.hasNext = function hasNext () {\n if (this.position_ < this.arrayList_.size()) {\n return true\n } else {\n return false\n }\n };\n\n /**\n * TODO: should be in ListIterator\n * @override\n */\n Iterator_.prototype.set = function set (element) {\n return this.arrayList_.set(this.position_ - 1, element)\n };\n\n /**\n * @override\n */\n Iterator_.prototype.remove = function remove () {\n this.arrayList_.remove(this.arrayList_.get(this.position_));\n };\n\n return Iterator_;\n}(Iterator));\n\nvar CoordinateList = (function (ArrayList$$1) {\n function CoordinateList () {\n ArrayList$$1.call(this);\n if (arguments.length === 0) {\n } else if (arguments.length === 1) {\n var coord = arguments[0];\n this.ensureCapacity(coord.length);\n this.add(coord, true);\n } else if (arguments.length === 2) {\n var coord$1 = arguments[0];\n var allowRepeated = arguments[1];\n this.ensureCapacity(coord$1.length);\n this.add(coord$1, allowRepeated);\n }\n }\n\n if ( ArrayList$$1 ) CoordinateList.__proto__ = ArrayList$$1;\n CoordinateList.prototype = Object.create( ArrayList$$1 && ArrayList$$1.prototype );\n CoordinateList.prototype.constructor = CoordinateList;\n\n var staticAccessors = { coordArrayType: { configurable: true } };\n staticAccessors.coordArrayType.get = function () { return new Array(0).fill(null) };\n CoordinateList.prototype.getCoordinate = function getCoordinate (i) {\n return this.get(i)\n };\n CoordinateList.prototype.addAll = function addAll () {\n var this$1 = this;\n\n if (arguments.length === 2) {\n var coll = arguments[0];\n var allowRepeated = arguments[1];\n var isChanged = false;\n for (var i = coll.iterator(); i.hasNext();) {\n this$1.add(i.next(), allowRepeated);\n isChanged = true;\n }\n return isChanged\n } else { return ArrayList$$1.prototype.addAll.apply(this, arguments) }\n };\n CoordinateList.prototype.clone = function clone () {\n var this$1 = this;\n\n var clone = ArrayList$$1.prototype.clone.call(this);\n for (var i = 0; i < this.size(); i++) {\n clone.add(i, this$1.get(i).copy());\n }\n return clone\n };\n CoordinateList.prototype.toCoordinateArray = function toCoordinateArray () {\n return this.toArray(CoordinateList.coordArrayType)\n };\n CoordinateList.prototype.add = function add () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var coord = arguments[0];\n ArrayList$$1.prototype.add.call(this, coord);\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof Array && typeof arguments[1] === 'boolean') {\n var coord$1 = arguments[0];\n var allowRepeated = arguments[1];\n this.add(coord$1, allowRepeated, true);\n return true\n } else if (arguments[0] instanceof Coordinate && typeof arguments[1] === 'boolean') {\n var coord$2 = arguments[0];\n var allowRepeated$1 = arguments[1];\n if (!allowRepeated$1) {\n if (this.size() >= 1) {\n var last = this.get(this.size() - 1);\n if (last.equals2D(coord$2)) { return null }\n }\n }\n ArrayList$$1.prototype.add.call(this, coord$2);\n } else if (arguments[0] instanceof Object && typeof arguments[1] === 'boolean') {\n var obj = arguments[0];\n var allowRepeated$2 = arguments[1];\n this.add(obj, allowRepeated$2);\n return true\n }\n } else if (arguments.length === 3) {\n if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Array && typeof arguments[1] === 'boolean')) {\n var coord$3 = arguments[0];\n var allowRepeated$3 = arguments[1];\n var direction = arguments[2];\n if (direction) {\n for (var i$1 = 0; i$1 < coord$3.length; i$1++) {\n this$1.add(coord$3[i$1], allowRepeated$3);\n }\n } else {\n for (var i$2 = coord$3.length - 1; i$2 >= 0; i$2--) {\n this$1.add(coord$3[i$2], allowRepeated$3);\n }\n }\n return true\n } else if (typeof arguments[2] === 'boolean' && (Number.isInteger(arguments[0]) && arguments[1] instanceof Coordinate)) {\n var i$3 = arguments[0];\n var coord$4 = arguments[1];\n var allowRepeated$4 = arguments[2];\n if (!allowRepeated$4) {\n var size = this.size();\n if (size > 0) {\n if (i$3 > 0) {\n var prev = this.get(i$3 - 1);\n if (prev.equals2D(coord$4)) { return null }\n }\n if (i$3 < size) {\n var next = this.get(i$3);\n if (next.equals2D(coord$4)) { return null }\n }\n }\n }\n ArrayList$$1.prototype.add.call(this, i$3, coord$4);\n }\n } else if (arguments.length === 4) {\n var coord$5 = arguments[0];\n var allowRepeated$5 = arguments[1];\n var start = arguments[2];\n var end = arguments[3];\n var inc = 1;\n if (start > end) { inc = -1; }\n for (var i = start; i !== end; i += inc) {\n this$1.add(coord$5[i], allowRepeated$5);\n }\n return true\n }\n };\n CoordinateList.prototype.closeRing = function closeRing () {\n if (this.size() > 0) { this.add(new Coordinate(this.get(0)), false); }\n };\n CoordinateList.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n CoordinateList.prototype.getClass = function getClass () {\n return CoordinateList\n };\n\n Object.defineProperties( CoordinateList, staticAccessors );\n\n return CoordinateList;\n}(ArrayList));\n\nvar CoordinateArrays = function CoordinateArrays () {};\n\nvar staticAccessors$13 = { ForwardComparator: { configurable: true },BidirectionalComparator: { configurable: true },coordArrayType: { configurable: true } };\n\nstaticAccessors$13.ForwardComparator.get = function () { return ForwardComparator };\nstaticAccessors$13.BidirectionalComparator.get = function () { return BidirectionalComparator };\nstaticAccessors$13.coordArrayType.get = function () { return new Array(0).fill(null) };\n\nCoordinateArrays.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCoordinateArrays.prototype.getClass = function getClass () {\n return CoordinateArrays\n};\nCoordinateArrays.isRing = function isRing (pts) {\n if (pts.length < 4) { return false }\n if (!pts[0].equals2D(pts[pts.length - 1])) { return false }\n return true\n};\nCoordinateArrays.ptNotInList = function ptNotInList (testPts, pts) {\n for (var i = 0; i < testPts.length; i++) {\n var testPt = testPts[i];\n if (CoordinateArrays.indexOf(testPt, pts) < 0) { return testPt }\n }\n return null\n};\nCoordinateArrays.scroll = function scroll (coordinates, firstCoordinate) {\n var i = CoordinateArrays.indexOf(firstCoordinate, coordinates);\n if (i < 0) { return null }\n var newCoordinates = new Array(coordinates.length).fill(null);\n System.arraycopy(coordinates, i, newCoordinates, 0, coordinates.length - i);\n System.arraycopy(coordinates, 0, newCoordinates, coordinates.length - i, i);\n System.arraycopy(newCoordinates, 0, coordinates, 0, coordinates.length);\n};\nCoordinateArrays.equals = function equals () {\n if (arguments.length === 2) {\n var coord1 = arguments[0];\n var coord2 = arguments[1];\n if (coord1 === coord2) { return true }\n if (coord1 === null || coord2 === null) { return false }\n if (coord1.length !== coord2.length) { return false }\n for (var i = 0; i < coord1.length; i++) {\n if (!coord1[i].equals(coord2[i])) { return false }\n }\n return true\n } else if (arguments.length === 3) {\n var coord1$1 = arguments[0];\n var coord2$1 = arguments[1];\n var coordinateComparator = arguments[2];\n if (coord1$1 === coord2$1) { return true }\n if (coord1$1 === null || coord2$1 === null) { return false }\n if (coord1$1.length !== coord2$1.length) { return false }\n for (var i$1 = 0; i$1 < coord1$1.length; i$1++) {\n if (coordinateComparator.compare(coord1$1[i$1], coord2$1[i$1]) !== 0) { return false }\n }\n return true\n }\n};\nCoordinateArrays.intersection = function intersection (coordinates, env) {\n var coordList = new CoordinateList();\n for (var i = 0; i < coordinates.length; i++) {\n if (env.intersects(coordinates[i])) { coordList.add(coordinates[i], true); }\n }\n return coordList.toCoordinateArray()\n};\nCoordinateArrays.hasRepeatedPoints = function hasRepeatedPoints (coord) {\n for (var i = 1; i < coord.length; i++) {\n if (coord[i - 1].equals(coord[i])) {\n return true\n }\n }\n return false\n};\nCoordinateArrays.removeRepeatedPoints = function removeRepeatedPoints (coord) {\n if (!CoordinateArrays.hasRepeatedPoints(coord)) { return coord }\n var coordList = new CoordinateList(coord, false);\n return coordList.toCoordinateArray()\n};\nCoordinateArrays.reverse = function reverse (coord) {\n var last = coord.length - 1;\n var mid = Math.trunc(last / 2);\n for (var i = 0; i <= mid; i++) {\n var tmp = coord[i];\n coord[i] = coord[last - i];\n coord[last - i] = tmp;\n }\n};\nCoordinateArrays.removeNull = function removeNull (coord) {\n var nonNull = 0;\n for (var i = 0; i < coord.length; i++) {\n if (coord[i] !== null) { nonNull++; }\n }\n var newCoord = new Array(nonNull).fill(null);\n if (nonNull === 0) { return newCoord }\n var j = 0;\n for (var i$1 = 0; i$1 < coord.length; i$1++) {\n if (coord[i$1] !== null) { newCoord[j++] = coord[i$1]; }\n }\n return newCoord\n};\nCoordinateArrays.copyDeep = function copyDeep () {\n if (arguments.length === 1) {\n var coordinates = arguments[0];\n var copy = new Array(coordinates.length).fill(null);\n for (var i = 0; i < coordinates.length; i++) {\n copy[i] = new Coordinate(coordinates[i]);\n }\n return copy\n } else if (arguments.length === 5) {\n var src = arguments[0];\n var srcStart = arguments[1];\n var dest = arguments[2];\n var destStart = arguments[3];\n var length = arguments[4];\n for (var i$1 = 0; i$1 < length; i$1++) {\n dest[destStart + i$1] = new Coordinate(src[srcStart + i$1]);\n }\n }\n};\nCoordinateArrays.isEqualReversed = function isEqualReversed (pts1, pts2) {\n for (var i = 0; i < pts1.length; i++) {\n var p1 = pts1[i];\n var p2 = pts2[pts1.length - i - 1];\n if (p1.compareTo(p2) !== 0) { return false }\n }\n return true\n};\nCoordinateArrays.envelope = function envelope (coordinates) {\n var env = new Envelope();\n for (var i = 0; i < coordinates.length; i++) {\n env.expandToInclude(coordinates[i]);\n }\n return env\n};\nCoordinateArrays.toCoordinateArray = function toCoordinateArray (coordList) {\n return coordList.toArray(CoordinateArrays.coordArrayType)\n};\nCoordinateArrays.atLeastNCoordinatesOrNothing = function atLeastNCoordinatesOrNothing (n, c) {\n return c.length >= n ? c : []\n};\nCoordinateArrays.indexOf = function indexOf (coordinate, coordinates) {\n for (var i = 0; i < coordinates.length; i++) {\n if (coordinate.equals(coordinates[i])) {\n return i\n }\n }\n return -1\n};\nCoordinateArrays.increasingDirection = function increasingDirection (pts) {\n for (var i = 0; i < Math.trunc(pts.length / 2); i++) {\n var j = pts.length - 1 - i;\n var comp = pts[i].compareTo(pts[j]);\n if (comp !== 0) { return comp }\n }\n return 1\n};\nCoordinateArrays.compare = function compare (pts1, pts2) {\n var i = 0;\n while (i < pts1.length && i < pts2.length) {\n var compare = pts1[i].compareTo(pts2[i]);\n if (compare !== 0) { return compare }\n i++;\n }\n if (i < pts2.length) { return -1 }\n if (i < pts1.length) { return 1 }\n return 0\n};\nCoordinateArrays.minCoordinate = function minCoordinate (coordinates) {\n var minCoord = null;\n for (var i = 0; i < coordinates.length; i++) {\n if (minCoord === null || minCoord.compareTo(coordinates[i]) > 0) {\n minCoord = coordinates[i];\n }\n }\n return minCoord\n};\nCoordinateArrays.extract = function extract (pts, start, end) {\n start = MathUtil.clamp(start, 0, pts.length);\n end = MathUtil.clamp(end, -1, pts.length);\n var npts = end - start + 1;\n if (end < 0) { npts = 0; }\n if (start >= pts.length) { npts = 0; }\n if (end < start) { npts = 0; }\n var extractPts = new Array(npts).fill(null);\n if (npts === 0) { return extractPts }\n var iPts = 0;\n for (var i = start; i <= end; i++) {\n extractPts[iPts++] = pts[i];\n }\n return extractPts\n};\n\nObject.defineProperties( CoordinateArrays, staticAccessors$13 );\n\nvar ForwardComparator = function ForwardComparator () {};\n\nForwardComparator.prototype.compare = function compare (o1, o2) {\n var pts1 = o1;\n var pts2 = o2;\n return CoordinateArrays.compare(pts1, pts2)\n};\nForwardComparator.prototype.interfaces_ = function interfaces_ () {\n return [Comparator]\n};\nForwardComparator.prototype.getClass = function getClass () {\n return ForwardComparator\n};\n\nvar BidirectionalComparator = function BidirectionalComparator () {};\n\nBidirectionalComparator.prototype.compare = function compare (o1, o2) {\n var pts1 = o1;\n var pts2 = o2;\n if (pts1.length < pts2.length) { return -1 }\n if (pts1.length > pts2.length) { return 1 }\n if (pts1.length === 0) { return 0 }\n var forwardComp = CoordinateArrays.compare(pts1, pts2);\n var isEqualRev = CoordinateArrays.isEqualReversed(pts1, pts2);\n if (isEqualRev) { return 0 }\n return forwardComp\n};\nBidirectionalComparator.prototype.OLDcompare = function OLDcompare (o1, o2) {\n var pts1 = o1;\n var pts2 = o2;\n if (pts1.length < pts2.length) { return -1 }\n if (pts1.length > pts2.length) { return 1 }\n if (pts1.length === 0) { return 0 }\n var dir1 = CoordinateArrays.increasingDirection(pts1);\n var dir2 = CoordinateArrays.increasingDirection(pts2);\n var i1 = dir1 > 0 ? 0 : pts1.length - 1;\n var i2 = dir2 > 0 ? 0 : pts1.length - 1;\n for (var i = 0; i < pts1.length; i++) {\n var comparePt = pts1[i1].compareTo(pts2[i2]);\n if (comparePt !== 0) { return comparePt }\n i1 += dir1;\n i2 += dir2;\n }\n return 0\n};\nBidirectionalComparator.prototype.interfaces_ = function interfaces_ () {\n return [Comparator]\n};\nBidirectionalComparator.prototype.getClass = function getClass () {\n return BidirectionalComparator\n};\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Map.html\n *\n * @constructor\n * @private\n */\nvar Map$1 = function Map () {};\n\nMap$1.prototype.get = function get () {};\n/**\n * Associates the specified value with the specified key in this map (optional\n * operation).\n * @param {Object} key\n * @param {Object} value\n * @return {Object}\n */\nMap$1.prototype.put = function put () {};\n\n/**\n * Returns the number of key-value mappings in this map.\n * @return {number}\n */\nMap$1.prototype.size = function size () {};\n\n/**\n * Returns a Collection view of the values contained in this map.\n * @return {javascript.util.Collection}\n */\nMap$1.prototype.values = function values () {};\n\n/**\n * Returns a {@link Set} view of the mappings contained in this map.\n * The set is backed by the map, so changes to the map are\n * reflected in the set, and vice-versa.If the map is modified\n * while an iteration over the set is in progress (except through\n * the iterator's own <tt>remove</tt> operation, or through the\n * <tt>setValue</tt> operation on a map entry returned by the\n * iterator) the results of the iteration are undefined.The set\n * supports element removal, which removes the corresponding\n * mapping from the map, via the <tt>Iterator.remove</tt>,\n * <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt> and\n * <tt>clear</tt> operations.It does not support the\n * <tt>add</tt> or <tt>addAll</tt> operations.\n *\n * @return {Set} a set view of the mappings contained in this map\n */\nMap$1.prototype.entrySet = function entrySet () {};\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html\n *\n * @extends {Map}\n * @constructor\n * @private\n */\nvar SortedMap = (function (Map) {\n\tfunction SortedMap () {\n\t\tMap.apply(this, arguments);\n\t}if ( Map ) SortedMap.__proto__ = Map;\n\tSortedMap.prototype = Object.create( Map && Map.prototype );\n\tSortedMap.prototype.constructor = SortedMap;\n\n\t\n\n\treturn SortedMap;\n}(Map$1));\n\n/**\n * @param {string=} message Optional message\n * @extends {Error}\n * @constructor\n * @private\n */\nfunction OperationNotSupported (message) {\n this.message = message || '';\n}\nOperationNotSupported.prototype = new Error();\n\n/**\n * @type {string}\n */\nOperationNotSupported.prototype.name = 'OperationNotSupported';\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Set.html\n *\n * @extends {Collection}\n * @constructor\n * @private\n */\nfunction Set() {}\nSet.prototype = new Collection();\n\n\n/**\n * Returns true if this set contains the specified element. More formally,\n * returns true if and only if this set contains an element e such that (o==null ?\n * e==null : o.equals(e)).\n * @param {Object} e\n * @return {boolean}\n */\nSet.prototype.contains = function() {};\n\n/**\n * @see http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html\n *\n * @extends {javascript.util.Set}\n * @constructor\n * @private\n */\nvar HashSet = (function (Set$$1) {\n function HashSet () {\n Set$$1.call(this);\n this.array_ = [];\n\n if (arguments[0] instanceof Collection) {\n this.addAll(arguments[0]);\n }\n }\n\n if ( Set$$1 ) HashSet.__proto__ = Set$$1;\n HashSet.prototype = Object.create( Set$$1 && Set$$1.prototype );\n HashSet.prototype.constructor = HashSet;\n\n /**\n * @override\n */\n HashSet.prototype.contains = function contains (o) {\n var this$1 = this;\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n var e = this$1.array_[i];\n if (e === o) {\n return true\n }\n }\n return false\n };\n\n /**\n * @override\n */\n HashSet.prototype.add = function add (o) {\n if (this.contains(o)) {\n return false\n }\n\n this.array_.push(o);\n\n return true\n };\n\n /**\n * @override\n */\n HashSet.prototype.addAll = function addAll (c) {\n var this$1 = this;\n\n for (var i = c.iterator(); i.hasNext();) {\n this$1.add(i.next());\n }\n return true\n };\n\n /**\n * @override\n */\n HashSet.prototype.remove = function remove (o) {\n // throw new javascript.util.OperationNotSupported()\n throw new Error()\n };\n\n /**\n * @override\n */\n HashSet.prototype.size = function size () {\n return this.array_.length\n };\n\n /**\n * @override\n */\n HashSet.prototype.isEmpty = function isEmpty () {\n return this.array_.length === 0\n };\n\n /**\n * @override\n */\n HashSet.prototype.toArray = function toArray () {\n var this$1 = this;\n\n var array = [];\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n array.push(this$1.array_[i]);\n }\n\n return array\n };\n\n /**\n * @override\n */\n HashSet.prototype.iterator = function iterator () {\n return new Iterator_$1(this)\n };\n\n return HashSet;\n}(Set));\n\n/**\n * @extends {Iterator}\n * @param {HashSet} hashSet\n * @constructor\n * @private\n */\nvar Iterator_$1 = (function (Iterator$$1) {\n function Iterator_ (hashSet) {\n Iterator$$1.call(this);\n /**\n * @type {HashSet}\n * @private\n */\n this.hashSet_ = hashSet;\n /**\n * @type {number}\n * @private\n */\n this.position_ = 0;\n }\n\n if ( Iterator$$1 ) Iterator_.__proto__ = Iterator$$1;\n Iterator_.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );\n Iterator_.prototype.constructor = Iterator_;\n\n /**\n * @override\n */\n Iterator_.prototype.next = function next () {\n if (this.position_ === this.hashSet_.size()) {\n throw new NoSuchElementException()\n }\n return this.hashSet_.array_[this.position_++]\n };\n\n /**\n * @override\n */\n Iterator_.prototype.hasNext = function hasNext () {\n if (this.position_ < this.hashSet_.size()) {\n return true\n } else {\n return false\n }\n };\n\n /**\n * @override\n */\n Iterator_.prototype.remove = function remove () {\n throw new OperationNotSupported()\n };\n\n return Iterator_;\n}(Iterator));\n\nvar BLACK = 0;\nvar RED = 1;\nfunction colorOf (p) { return (p === null ? BLACK : p.color) }\nfunction parentOf (p) { return (p === null ? null : p.parent) }\nfunction setColor (p, c) { if (p !== null) { p.color = c; } }\nfunction leftOf (p) { return (p === null ? null : p.left) }\nfunction rightOf (p) { return (p === null ? null : p.right) }\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html\n *\n * @extends {SortedMap}\n * @constructor\n * @private\n */\nfunction TreeMap () {\n /**\n * @type {Object}\n * @private\n */\n this.root_ = null;\n /**\n * @type {number}\n * @private\n */\n this.size_ = 0;\n}\nTreeMap.prototype = new SortedMap();\n\n/**\n * @override\n */\nTreeMap.prototype.get = function (key) {\n var p = this.root_;\n while (p !== null) {\n var cmp = key['compareTo'](p.key);\n if (cmp < 0) { p = p.left; }\n else if (cmp > 0) { p = p.right; }\n else { return p.value }\n }\n return null\n};\n\n/**\n * @override\n */\nTreeMap.prototype.put = function (key, value) {\n if (this.root_ === null) {\n this.root_ = {\n key: key,\n value: value,\n left: null,\n right: null,\n parent: null,\n color: BLACK,\n getValue: function getValue () { return this.value },\n getKey: function getKey () { return this.key }\n };\n this.size_ = 1;\n return null\n }\n var t = this.root_;\n var parent;\n var cmp;\n do {\n parent = t;\n cmp = key['compareTo'](t.key);\n if (cmp < 0) {\n t = t.left;\n } else if (cmp > 0) {\n t = t.right;\n } else {\n var oldValue = t.value;\n t.value = value;\n return oldValue\n }\n } while (t !== null)\n var e = {\n key: key,\n left: null,\n right: null,\n value: value,\n parent: parent,\n color: BLACK,\n getValue: function getValue () { return this.value },\n getKey: function getKey () { return this.key }\n };\n if (cmp < 0) {\n parent.left = e;\n } else {\n parent.right = e;\n }\n this.fixAfterInsertion(e);\n this.size_++;\n return null\n};\n\n/**\n * @param {Object} x\n */\nTreeMap.prototype.fixAfterInsertion = function (x) {\n var this$1 = this;\n\n x.color = RED;\n while (x != null && x !== this.root_ && x.parent.color === RED) {\n if (parentOf(x) === leftOf(parentOf(parentOf(x)))) {\n var y = rightOf(parentOf(parentOf(x)));\n if (colorOf(y) === RED) {\n setColor(parentOf(x), BLACK);\n setColor(y, BLACK);\n setColor(parentOf(parentOf(x)), RED);\n x = parentOf(parentOf(x));\n } else {\n if (x === rightOf(parentOf(x))) {\n x = parentOf(x);\n this$1.rotateLeft(x);\n }\n setColor(parentOf(x), BLACK);\n setColor(parentOf(parentOf(x)), RED);\n this$1.rotateRight(parentOf(parentOf(x)));\n }\n } else {\n var y$1 = leftOf(parentOf(parentOf(x)));\n if (colorOf(y$1) === RED) {\n setColor(parentOf(x), BLACK);\n setColor(y$1, BLACK);\n setColor(parentOf(parentOf(x)), RED);\n x = parentOf(parentOf(x));\n } else {\n if (x === leftOf(parentOf(x))) {\n x = parentOf(x);\n this$1.rotateRight(x);\n }\n setColor(parentOf(x), BLACK);\n setColor(parentOf(parentOf(x)), RED);\n this$1.rotateLeft(parentOf(parentOf(x)));\n }\n }\n }\n this.root_.color = BLACK;\n};\n\n/**\n * @override\n */\nTreeMap.prototype.values = function () {\n var arrayList = new ArrayList();\n var p = this.getFirstEntry();\n if (p !== null) {\n arrayList.add(p.value);\n while ((p = TreeMap.successor(p)) !== null) {\n arrayList.add(p.value);\n }\n }\n return arrayList\n};\n\n/**\n * @override\n */\nTreeMap.prototype.entrySet = function () {\n var hashSet = new HashSet();\n var p = this.getFirstEntry();\n if (p !== null) {\n hashSet.add(p);\n while ((p = TreeMap.successor(p)) !== null) {\n hashSet.add(p);\n }\n }\n return hashSet\n};\n\n/**\n * @param {Object} p\n */\nTreeMap.prototype.rotateLeft = function (p) {\n if (p != null) {\n var r = p.right;\n p.right = r.left;\n if (r.left != null) { r.left.parent = p; }\n r.parent = p.parent;\n if (p.parent === null) { this.root_ = r; } else if (p.parent.left === p) { p.parent.left = r; } else { p.parent.right = r; }\n r.left = p;\n p.parent = r;\n }\n};\n\n/**\n * @param {Object} p\n */\nTreeMap.prototype.rotateRight = function (p) {\n if (p != null) {\n var l = p.left;\n p.left = l.right;\n if (l.right != null) { l.right.parent = p; }\n l.parent = p.parent;\n if (p.parent === null) { this.root_ = l; } else if (p.parent.right === p) { p.parent.right = l; } else { p.parent.left = l; }\n l.right = p;\n p.parent = l;\n }\n};\n\n/**\n * @return {Object}\n */\nTreeMap.prototype.getFirstEntry = function () {\n var p = this.root_;\n if (p != null) {\n while (p.left != null) {\n p = p.left;\n }\n }\n return p\n};\n\n/**\n * @param {Object} t\n * @return {Object}\n * @private\n */\nTreeMap.successor = function (t) {\n if (t === null) { return null } else if (t.right !== null) {\n var p = t.right;\n while (p.left !== null) {\n p = p.left;\n }\n return p\n } else {\n var p$1 = t.parent;\n var ch = t;\n while (p$1 !== null && ch === p$1.right) {\n ch = p$1;\n p$1 = p$1.parent;\n }\n return p$1\n }\n};\n\n/**\n * @override\n */\nTreeMap.prototype.size = function () {\n return this.size_\n};\n\nvar Lineal = function Lineal () {};\n\nLineal.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nLineal.prototype.getClass = function getClass () {\n return Lineal\n};\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html\n *\n * @extends {Set}\n * @constructor\n * @private\n */\nfunction SortedSet () {}\nSortedSet.prototype = new Set();\n\n// import Iterator from './Iterator'\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html\n *\n * @extends {SortedSet}\n * @constructor\n * @private\n */\nfunction TreeSet () {\n /**\n * @type {Array}\n * @private\n */\n this.array_ = [];\n\n if (arguments[0] instanceof Collection) {\n this.addAll(arguments[0]);\n }\n}\nTreeSet.prototype = new SortedSet();\n\n/**\n * @override\n */\nTreeSet.prototype.contains = function (o) {\n var this$1 = this;\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n var e = this$1.array_[i];\n if (e['compareTo'](o) === 0) {\n return true\n }\n }\n return false\n};\n\n/**\n * @override\n */\nTreeSet.prototype.add = function (o) {\n var this$1 = this;\n\n if (this.contains(o)) {\n return false\n }\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n var e = this$1.array_[i];\n if (e['compareTo'](o) === 1) {\n this$1.array_.splice(i, 0, o);\n return true\n }\n }\n\n this.array_.push(o);\n\n return true\n};\n\n/**\n * @override\n */\nTreeSet.prototype.addAll = function (c) {\n var this$1 = this;\n\n for (var i = c.iterator(); i.hasNext();) {\n this$1.add(i.next());\n }\n return true\n};\n\n/**\n * @override\n */\nTreeSet.prototype.remove = function (e) {\n throw new OperationNotSupported()\n};\n\n/**\n * @override\n */\nTreeSet.prototype.size = function () {\n return this.array_.length\n};\n\n/**\n * @override\n */\nTreeSet.prototype.isEmpty = function () {\n return this.array_.length === 0\n};\n\n/**\n * @override\n */\nTreeSet.prototype.toArray = function () {\n var this$1 = this;\n\n var array = [];\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n array.push(this$1.array_[i]);\n }\n\n return array\n};\n\n/**\n * @override\n */\nTreeSet.prototype.iterator = function () {\n return new Iterator_$2(this)\n};\n\n/**\n * @extends {javascript.util.Iterator}\n * @param {javascript.util.TreeSet} treeSet\n * @constructor\n * @private\n */\nvar Iterator_$2 = function (treeSet) {\n /**\n * @type {javascript.util.TreeSet}\n * @private\n */\n this.treeSet_ = treeSet;\n /**\n * @type {number}\n * @private\n */\n this.position_ = 0;\n};\n\n/**\n * @override\n */\nIterator_$2.prototype.next = function () {\n if (this.position_ === this.treeSet_.size()) {\n throw new NoSuchElementException()\n }\n return this.treeSet_.array_[this.position_++]\n};\n\n/**\n * @override\n */\nIterator_$2.prototype.hasNext = function () {\n if (this.position_ < this.treeSet_.size()) {\n return true\n } else {\n return false\n }\n};\n\n/**\n * @override\n */\nIterator_$2.prototype.remove = function () {\n throw new OperationNotSupported()\n};\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html\n *\n * @constructor\n * @private\n */\nvar Arrays = function Arrays () {};\n\nArrays.sort = function sort () {\n var a = arguments[0];\n var i;\n var t;\n var comparator;\n var compare;\n if (arguments.length === 1) {\n compare = function (a, b) {\n return a.compareTo(b)\n };\n a.sort(compare);\n } else if (arguments.length === 2) {\n comparator = arguments[1];\n compare = function (a, b) {\n return comparator['compare'](a, b)\n };\n a.sort(compare);\n } else if (arguments.length === 3) {\n t = a.slice(arguments[1], arguments[2]);\n t.sort();\n var r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));\n a.splice(0, a.length);\n for (i = 0; i < r.length; i++) {\n a.push(r[i]);\n }\n } else if (arguments.length === 4) {\n t = a.slice(arguments[1], arguments[2]);\n comparator = arguments[3];\n compare = function (a, b) {\n return comparator['compare'](a, b)\n };\n t.sort(compare);\n r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));\n a.splice(0, a.length);\n for (i = 0; i < r.length; i++) {\n a.push(r[i]);\n }\n }\n};\n/**\n * @param {Array} array\n * @return {ArrayList}\n */\nArrays.asList = function asList (array) {\n var arrayList = new ArrayList();\n for (var i = 0, len = array.length; i < len; i++) {\n arrayList.add(array[i]);\n }\n return arrayList\n};\n\nvar Dimension = function Dimension () {};\n\nvar staticAccessors$14 = { P: { configurable: true },L: { configurable: true },A: { configurable: true },FALSE: { configurable: true },TRUE: { configurable: true },DONTCARE: { configurable: true },SYM_FALSE: { configurable: true },SYM_TRUE: { configurable: true },SYM_DONTCARE: { configurable: true },SYM_P: { configurable: true },SYM_L: { configurable: true },SYM_A: { configurable: true } };\n\nstaticAccessors$14.P.get = function () { return 0 };\nstaticAccessors$14.L.get = function () { return 1 };\nstaticAccessors$14.A.get = function () { return 2 };\nstaticAccessors$14.FALSE.get = function () { return -1 };\nstaticAccessors$14.TRUE.get = function () { return -2 };\nstaticAccessors$14.DONTCARE.get = function () { return -3 };\nstaticAccessors$14.SYM_FALSE.get = function () { return 'F' };\nstaticAccessors$14.SYM_TRUE.get = function () { return 'T' };\nstaticAccessors$14.SYM_DONTCARE.get = function () { return '*' };\nstaticAccessors$14.SYM_P.get = function () { return '0' };\nstaticAccessors$14.SYM_L.get = function () { return '1' };\nstaticAccessors$14.SYM_A.get = function () { return '2' };\n\nDimension.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nDimension.prototype.getClass = function getClass () {\n return Dimension\n};\nDimension.toDimensionSymbol = function toDimensionSymbol (dimensionValue) {\n switch (dimensionValue) {\n case Dimension.FALSE:\n return Dimension.SYM_FALSE\n case Dimension.TRUE:\n return Dimension.SYM_TRUE\n case Dimension.DONTCARE:\n return Dimension.SYM_DONTCARE\n case Dimension.P:\n return Dimension.SYM_P\n case Dimension.L:\n return Dimension.SYM_L\n case Dimension.A:\n return Dimension.SYM_A\n default:\n }\n throw new IllegalArgumentException('Unknown dimension value: ' + dimensionValue)\n};\nDimension.toDimensionValue = function toDimensionValue (dimensionSymbol) {\n switch (Character.toUpperCase(dimensionSymbol)) {\n case Dimension.SYM_FALSE:\n return Dimension.FALSE\n case Dimension.SYM_TRUE:\n return Dimension.TRUE\n case Dimension.SYM_DONTCARE:\n return Dimension.DONTCARE\n case Dimension.SYM_P:\n return Dimension.P\n case Dimension.SYM_L:\n return Dimension.L\n case Dimension.SYM_A:\n return Dimension.A\n default:\n }\n throw new IllegalArgumentException('Unknown dimension symbol: ' + dimensionSymbol)\n};\n\nObject.defineProperties( Dimension, staticAccessors$14 );\n\nvar GeometryFilter = function GeometryFilter () {};\n\nGeometryFilter.prototype.filter = function filter (geom) {};\nGeometryFilter.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryFilter.prototype.getClass = function getClass () {\n return GeometryFilter\n};\n\nvar CoordinateSequenceFilter = function CoordinateSequenceFilter () {};\n\nCoordinateSequenceFilter.prototype.filter = function filter (seq, i) {};\nCoordinateSequenceFilter.prototype.isDone = function isDone () {};\nCoordinateSequenceFilter.prototype.isGeometryChanged = function isGeometryChanged () {};\nCoordinateSequenceFilter.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCoordinateSequenceFilter.prototype.getClass = function getClass () {\n return CoordinateSequenceFilter\n};\n\nvar GeometryCollection = (function (Geometry$$1) {\n function GeometryCollection (geometries, factory) {\n Geometry$$1.call(this, factory);\n this._geometries = geometries || [];\n\n if (Geometry$$1.hasNullElements(this._geometries)) {\n throw new IllegalArgumentException('geometries must not contain null elements')\n }\n }\n\n if ( Geometry$$1 ) GeometryCollection.__proto__ = Geometry$$1;\n GeometryCollection.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );\n GeometryCollection.prototype.constructor = GeometryCollection;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n GeometryCollection.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {\n var this$1 = this;\n\n var envelope = new Envelope();\n for (var i = 0; i < this._geometries.length; i++) {\n envelope.expandToInclude(this$1._geometries[i].getEnvelopeInternal());\n }\n return envelope\n };\n GeometryCollection.prototype.getGeometryN = function getGeometryN (n) {\n return this._geometries[n]\n };\n GeometryCollection.prototype.getSortIndex = function getSortIndex () {\n return Geometry$$1.SORTINDEX_GEOMETRYCOLLECTION\n };\n GeometryCollection.prototype.getCoordinates = function getCoordinates () {\n var this$1 = this;\n\n var coordinates = new Array(this.getNumPoints()).fill(null);\n var k = -1;\n for (var i = 0; i < this._geometries.length; i++) {\n var childCoordinates = this$1._geometries[i].getCoordinates();\n for (var j = 0; j < childCoordinates.length; j++) {\n k++;\n coordinates[k] = childCoordinates[j];\n }\n }\n return coordinates\n };\n GeometryCollection.prototype.getArea = function getArea () {\n var this$1 = this;\n\n var area = 0.0;\n for (var i = 0; i < this._geometries.length; i++) {\n area += this$1._geometries[i].getArea();\n }\n return area\n };\n GeometryCollection.prototype.equalsExact = function equalsExact () {\n var this$1 = this;\n\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n var otherCollection = other;\n if (this._geometries.length !== otherCollection._geometries.length) {\n return false\n }\n for (var i = 0; i < this._geometries.length; i++) {\n if (!this$1._geometries[i].equalsExact(otherCollection._geometries[i], tolerance)) {\n return false\n }\n }\n return true\n } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }\n };\n GeometryCollection.prototype.normalize = function normalize () {\n var this$1 = this;\n\n for (var i = 0; i < this._geometries.length; i++) {\n this$1._geometries[i].normalize();\n }\n Arrays.sort(this._geometries);\n };\n GeometryCollection.prototype.getCoordinate = function getCoordinate () {\n if (this.isEmpty()) { return null }\n return this._geometries[0].getCoordinate()\n };\n GeometryCollection.prototype.getBoundaryDimension = function getBoundaryDimension () {\n var this$1 = this;\n\n var dimension = Dimension.FALSE;\n for (var i = 0; i < this._geometries.length; i++) {\n dimension = Math.max(dimension, this$1._geometries[i].getBoundaryDimension());\n }\n return dimension\n };\n GeometryCollection.prototype.getDimension = function getDimension () {\n var this$1 = this;\n\n var dimension = Dimension.FALSE;\n for (var i = 0; i < this._geometries.length; i++) {\n dimension = Math.max(dimension, this$1._geometries[i].getDimension());\n }\n return dimension\n };\n GeometryCollection.prototype.getLength = function getLength () {\n var this$1 = this;\n\n var sum = 0.0;\n for (var i = 0; i < this._geometries.length; i++) {\n sum += this$1._geometries[i].getLength();\n }\n return sum\n };\n GeometryCollection.prototype.getNumPoints = function getNumPoints () {\n var this$1 = this;\n\n var numPoints = 0;\n for (var i = 0; i < this._geometries.length; i++) {\n numPoints += this$1._geometries[i].getNumPoints();\n }\n return numPoints\n };\n GeometryCollection.prototype.getNumGeometries = function getNumGeometries () {\n return this._geometries.length\n };\n GeometryCollection.prototype.reverse = function reverse () {\n var this$1 = this;\n\n var n = this._geometries.length;\n var revGeoms = new Array(n).fill(null);\n for (var i = 0; i < this._geometries.length; i++) {\n revGeoms[i] = this$1._geometries[i].reverse();\n }\n return this.getFactory().createGeometryCollection(revGeoms)\n };\n GeometryCollection.prototype.compareToSameClass = function compareToSameClass () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var o = arguments[0];\n var theseElements = new TreeSet(Arrays.asList(this._geometries));\n var otherElements = new TreeSet(Arrays.asList(o._geometries));\n return this.compare(theseElements, otherElements)\n } else if (arguments.length === 2) {\n var o$1 = arguments[0];\n var comp = arguments[1];\n var gc = o$1;\n var n1 = this.getNumGeometries();\n var n2 = gc.getNumGeometries();\n var i = 0;\n while (i < n1 && i < n2) {\n var thisGeom = this$1.getGeometryN(i);\n var otherGeom = gc.getGeometryN(i);\n var holeComp = thisGeom.compareToSameClass(otherGeom, comp);\n if (holeComp !== 0) { return holeComp }\n i++;\n }\n if (i < n1) { return 1 }\n if (i < n2) { return -1 }\n return 0\n }\n };\n GeometryCollection.prototype.apply = function apply () {\n var this$1 = this;\n\n if (hasInterface(arguments[0], CoordinateFilter)) {\n var filter = arguments[0];\n for (var i = 0; i < this._geometries.length; i++) {\n this$1._geometries[i].apply(filter);\n }\n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n var filter$1 = arguments[0];\n if (this._geometries.length === 0) { return null }\n for (var i$1 = 0; i$1 < this._geometries.length; i$1++) {\n this$1._geometries[i$1].apply(filter$1);\n if (filter$1.isDone()) {\n break\n }\n }\n if (filter$1.isGeometryChanged()) { this.geometryChanged(); }\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n var filter$2 = arguments[0];\n filter$2.filter(this);\n for (var i$2 = 0; i$2 < this._geometries.length; i$2++) {\n this$1._geometries[i$2].apply(filter$2);\n }\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n var filter$3 = arguments[0];\n filter$3.filter(this);\n for (var i$3 = 0; i$3 < this._geometries.length; i$3++) {\n this$1._geometries[i$3].apply(filter$3);\n }\n }\n };\n GeometryCollection.prototype.getBoundary = function getBoundary () {\n this.checkNotGeometryCollection(this);\n Assert.shouldNeverReachHere();\n return null\n };\n GeometryCollection.prototype.clone = function clone () {\n var this$1 = this;\n\n var gc = Geometry$$1.prototype.clone.call(this);\n gc._geometries = new Array(this._geometries.length).fill(null);\n for (var i = 0; i < this._geometries.length; i++) {\n gc._geometries[i] = this$1._geometries[i].clone();\n }\n return gc\n };\n GeometryCollection.prototype.getGeometryType = function getGeometryType () {\n return 'GeometryCollection'\n };\n GeometryCollection.prototype.copy = function copy () {\n var this$1 = this;\n\n var geometries = new Array(this._geometries.length).fill(null);\n for (var i = 0; i < geometries.length; i++) {\n geometries[i] = this$1._geometries[i].copy();\n }\n return new GeometryCollection(geometries, this._factory)\n };\n GeometryCollection.prototype.isEmpty = function isEmpty () {\n var this$1 = this;\n\n for (var i = 0; i < this._geometries.length; i++) {\n if (!this$1._geometries[i].isEmpty()) {\n return false\n }\n }\n return true\n };\n GeometryCollection.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n GeometryCollection.prototype.getClass = function getClass () {\n return GeometryCollection\n };\n staticAccessors.serialVersionUID.get = function () { return -5694727726395021467 };\n\n Object.defineProperties( GeometryCollection, staticAccessors );\n\n return GeometryCollection;\n}(Geometry));\n\nvar MultiLineString = (function (GeometryCollection$$1) {\n function MultiLineString () {\n GeometryCollection$$1.apply(this, arguments);\n }\n\n if ( GeometryCollection$$1 ) MultiLineString.__proto__ = GeometryCollection$$1;\n MultiLineString.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );\n MultiLineString.prototype.constructor = MultiLineString;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n\n MultiLineString.prototype.getSortIndex = function getSortIndex () {\n return Geometry.SORTINDEX_MULTILINESTRING\n };\n MultiLineString.prototype.equalsExact = function equalsExact () {\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)\n } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }\n };\n MultiLineString.prototype.getBoundaryDimension = function getBoundaryDimension () {\n if (this.isClosed()) {\n return Dimension.FALSE\n }\n return 0\n };\n MultiLineString.prototype.isClosed = function isClosed () {\n var this$1 = this;\n\n if (this.isEmpty()) {\n return false\n }\n for (var i = 0; i < this._geometries.length; i++) {\n if (!this$1._geometries[i].isClosed()) {\n return false\n }\n }\n return true\n };\n MultiLineString.prototype.getDimension = function getDimension () {\n return 1\n };\n MultiLineString.prototype.reverse = function reverse () {\n var this$1 = this;\n\n var nLines = this._geometries.length;\n var revLines = new Array(nLines).fill(null);\n for (var i = 0; i < this._geometries.length; i++) {\n revLines[nLines - 1 - i] = this$1._geometries[i].reverse();\n }\n return this.getFactory().createMultiLineString(revLines)\n };\n MultiLineString.prototype.getBoundary = function getBoundary () {\n return new BoundaryOp(this).getBoundary()\n };\n MultiLineString.prototype.getGeometryType = function getGeometryType () {\n return 'MultiLineString'\n };\n MultiLineString.prototype.copy = function copy () {\n var this$1 = this;\n\n var lineStrings = new Array(this._geometries.length).fill(null);\n for (var i = 0; i < lineStrings.length; i++) {\n lineStrings[i] = this$1._geometries[i].copy();\n }\n return new MultiLineString(lineStrings, this._factory)\n };\n MultiLineString.prototype.interfaces_ = function interfaces_ () {\n return [Lineal]\n };\n MultiLineString.prototype.getClass = function getClass () {\n return MultiLineString\n };\n staticAccessors.serialVersionUID.get = function () { return 8166665132445433741 };\n\n Object.defineProperties( MultiLineString, staticAccessors );\n\n return MultiLineString;\n}(GeometryCollection));\n\nvar BoundaryOp = function BoundaryOp () {\n this._geom = null;\n this._geomFact = null;\n this._bnRule = null;\n this._endpointMap = null;\n if (arguments.length === 1) {\n var geom = arguments[0];\n var bnRule = BoundaryNodeRule.MOD2_BOUNDARY_RULE;\n this._geom = geom;\n this._geomFact = geom.getFactory();\n this._bnRule = bnRule;\n } else if (arguments.length === 2) {\n var geom$1 = arguments[0];\n var bnRule$1 = arguments[1];\n this._geom = geom$1;\n this._geomFact = geom$1.getFactory();\n this._bnRule = bnRule$1;\n }\n};\nBoundaryOp.prototype.boundaryMultiLineString = function boundaryMultiLineString (mLine) {\n if (this._geom.isEmpty()) {\n return this.getEmptyMultiPoint()\n }\n var bdyPts = this.computeBoundaryCoordinates(mLine);\n if (bdyPts.length === 1) {\n return this._geomFact.createPoint(bdyPts[0])\n }\n return this._geomFact.createMultiPointFromCoords(bdyPts)\n};\nBoundaryOp.prototype.getBoundary = function getBoundary () {\n if (this._geom instanceof LineString) { return this.boundaryLineString(this._geom) }\n if (this._geom instanceof MultiLineString) { return this.boundaryMultiLineString(this._geom) }\n return this._geom.getBoundary()\n};\nBoundaryOp.prototype.boundaryLineString = function boundaryLineString (line) {\n if (this._geom.isEmpty()) {\n return this.getEmptyMultiPoint()\n }\n if (line.isClosed()) {\n var closedEndpointOnBoundary = this._bnRule.isInBoundary(2);\n if (closedEndpointOnBoundary) {\n return line.getStartPoint()\n } else {\n return this._geomFact.createMultiPoint()\n }\n }\n return this._geomFact.createMultiPoint([line.getStartPoint(), line.getEndPoint()])\n};\nBoundaryOp.prototype.getEmptyMultiPoint = function getEmptyMultiPoint () {\n return this._geomFact.createMultiPoint()\n};\nBoundaryOp.prototype.computeBoundaryCoordinates = function computeBoundaryCoordinates (mLine) {\n var this$1 = this;\n\n var bdyPts = new ArrayList();\n this._endpointMap = new TreeMap();\n for (var i = 0; i < mLine.getNumGeometries(); i++) {\n var line = mLine.getGeometryN(i);\n if (line.getNumPoints() === 0) { continue }\n this$1.addEndpoint(line.getCoordinateN(0));\n this$1.addEndpoint(line.getCoordinateN(line.getNumPoints() - 1));\n }\n for (var it = this._endpointMap.entrySet().iterator(); it.hasNext();) {\n var entry = it.next();\n var counter = entry.getValue();\n var valence = counter.count;\n if (this$1._bnRule.isInBoundary(valence)) {\n bdyPts.add(entry.getKey());\n }\n }\n return CoordinateArrays.toCoordinateArray(bdyPts)\n};\nBoundaryOp.prototype.addEndpoint = function addEndpoint (pt) {\n var counter = this._endpointMap.get(pt);\n if (counter === null) {\n counter = new Counter();\n this._endpointMap.put(pt, counter);\n }\n counter.count++;\n};\nBoundaryOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBoundaryOp.prototype.getClass = function getClass () {\n return BoundaryOp\n};\nBoundaryOp.getBoundary = function getBoundary () {\n if (arguments.length === 1) {\n var g = arguments[0];\n var bop = new BoundaryOp(g);\n return bop.getBoundary()\n } else if (arguments.length === 2) {\n var g$1 = arguments[0];\n var bnRule = arguments[1];\n var bop$1 = new BoundaryOp(g$1, bnRule);\n return bop$1.getBoundary()\n }\n};\n\nvar Counter = function Counter () {\n this.count = null;\n};\nCounter.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCounter.prototype.getClass = function getClass () {\n return Counter\n};\n\n// boundary\n\nfunction PrintStream () {}\n\nfunction StringReader () {}\n\nvar DecimalFormat = function DecimalFormat () {};\n\nfunction ByteArrayOutputStream () {}\n\nfunction IOException () {}\n\nfunction LineNumberReader () {}\n\nvar StringUtil = function StringUtil () {};\n\nvar staticAccessors$15 = { NEWLINE: { configurable: true },SIMPLE_ORDINATE_FORMAT: { configurable: true } };\n\nStringUtil.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nStringUtil.prototype.getClass = function getClass () {\n return StringUtil\n};\nStringUtil.chars = function chars (c, n) {\n var ch = new Array(n).fill(null);\n for (var i = 0; i < n; i++) {\n ch[i] = c;\n }\n return String(ch)\n};\nStringUtil.getStackTrace = function getStackTrace () {\n if (arguments.length === 1) {\n var t = arguments[0];\n var os = new ByteArrayOutputStream();\n var ps = new PrintStream(os);\n t.printStackTrace(ps);\n return os.toString()\n } else if (arguments.length === 2) {\n var t$1 = arguments[0];\n var depth = arguments[1];\n var stackTrace = '';\n var stringReader = new StringReader(StringUtil.getStackTrace(t$1));\n var lineNumberReader = new LineNumberReader(stringReader);\n for (var i = 0; i < depth; i++) {\n try {\n stackTrace += lineNumberReader.readLine() + StringUtil.NEWLINE;\n } catch (e) {\n if (e instanceof IOException) {\n Assert.shouldNeverReachHere();\n } else { throw e }\n } finally {}\n }\n return stackTrace\n }\n};\nStringUtil.split = function split (s, separator) {\n var separatorlen = separator.length;\n var tokenList = new ArrayList();\n var tmpString = '' + s;\n var pos = tmpString.indexOf(separator);\n while (pos >= 0) {\n var token = tmpString.substring(0, pos);\n tokenList.add(token);\n tmpString = tmpString.substring(pos + separatorlen);\n pos = tmpString.indexOf(separator);\n }\n if (tmpString.length > 0) { tokenList.add(tmpString); }\n var res = new Array(tokenList.size()).fill(null);\n for (var i = 0; i < res.length; i++) {\n res[i] = tokenList.get(i);\n }\n return res\n};\nStringUtil.toString = function toString () {\n if (arguments.length === 1) {\n var d = arguments[0];\n return StringUtil.SIMPLE_ORDINATE_FORMAT.format(d)\n }\n};\nStringUtil.spaces = function spaces (n) {\n return StringUtil.chars(' ', n)\n};\nstaticAccessors$15.NEWLINE.get = function () { return System.getProperty('line.separator') };\nstaticAccessors$15.SIMPLE_ORDINATE_FORMAT.get = function () { return new DecimalFormat('0.#') };\n\nObject.defineProperties( StringUtil, staticAccessors$15 );\n\nvar CoordinateSequences = function CoordinateSequences () {};\n\nCoordinateSequences.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCoordinateSequences.prototype.getClass = function getClass () {\n return CoordinateSequences\n};\nCoordinateSequences.copyCoord = function copyCoord (src, srcPos, dest, destPos) {\n var minDim = Math.min(src.getDimension(), dest.getDimension());\n for (var dim = 0; dim < minDim; dim++) {\n dest.setOrdinate(destPos, dim, src.getOrdinate(srcPos, dim));\n }\n};\nCoordinateSequences.isRing = function isRing (seq) {\n var n = seq.size();\n if (n === 0) { return true }\n if (n <= 3) { return false }\n return seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y)\n};\nCoordinateSequences.isEqual = function isEqual (cs1, cs2) {\n var cs1Size = cs1.size();\n var cs2Size = cs2.size();\n if (cs1Size !== cs2Size) { return false }\n var dim = Math.min(cs1.getDimension(), cs2.getDimension());\n for (var i = 0; i < cs1Size; i++) {\n for (var d = 0; d < dim; d++) {\n var v1 = cs1.getOrdinate(i, d);\n var v2 = cs2.getOrdinate(i, d);\n if (cs1.getOrdinate(i, d) === cs2.getOrdinate(i, d)) { continue }\n if (Double.isNaN(v1) && Double.isNaN(v2)) { continue }\n return false\n }\n }\n return true\n};\nCoordinateSequences.extend = function extend (fact, seq, size) {\n var newseq = fact.create(size, seq.getDimension());\n var n = seq.size();\n CoordinateSequences.copy(seq, 0, newseq, 0, n);\n if (n > 0) {\n for (var i = n; i < size; i++) { CoordinateSequences.copy(seq, n - 1, newseq, i, 1); }\n }\n return newseq\n};\nCoordinateSequences.reverse = function reverse (seq) {\n var last = seq.size() - 1;\n var mid = Math.trunc(last / 2);\n for (var i = 0; i <= mid; i++) {\n CoordinateSequences.swap(seq, i, last - i);\n }\n};\nCoordinateSequences.swap = function swap (seq, i, j) {\n if (i === j) { return null }\n for (var dim = 0; dim < seq.getDimension(); dim++) {\n var tmp = seq.getOrdinate(i, dim);\n seq.setOrdinate(i, dim, seq.getOrdinate(j, dim));\n seq.setOrdinate(j, dim, tmp);\n }\n};\nCoordinateSequences.copy = function copy (src, srcPos, dest, destPos, length) {\n for (var i = 0; i < length; i++) {\n CoordinateSequences.copyCoord(src, srcPos + i, dest, destPos + i);\n }\n};\nCoordinateSequences.toString = function toString () {\n if (arguments.length === 1) {\n var cs = arguments[0];\n var size = cs.size();\n if (size === 0) { return '()' }\n var dim = cs.getDimension();\n var buf = new StringBuffer();\n buf.append('(');\n for (var i = 0; i < size; i++) {\n if (i > 0) { buf.append(' '); }\n for (var d = 0; d < dim; d++) {\n if (d > 0) { buf.append(','); }\n buf.append(StringUtil.toString(cs.getOrdinate(i, d)));\n }\n }\n buf.append(')');\n return buf.toString()\n }\n};\nCoordinateSequences.ensureValidRing = function ensureValidRing (fact, seq) {\n var n = seq.size();\n if (n === 0) { return seq }\n if (n <= 3) { return CoordinateSequences.createClosedRing(fact, seq, 4) }\n var isClosed = seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y);\n if (isClosed) { return seq }\n return CoordinateSequences.createClosedRing(fact, seq, n + 1)\n};\nCoordinateSequences.createClosedRing = function createClosedRing (fact, seq, size) {\n var newseq = fact.create(size, seq.getDimension());\n var n = seq.size();\n CoordinateSequences.copy(seq, 0, newseq, 0, n);\n for (var i = n; i < size; i++) { CoordinateSequences.copy(seq, 0, newseq, i, 1); }\n return newseq\n};\n\nvar LineString = (function (Geometry$$1) {\n function LineString (points, factory) {\n Geometry$$1.call(this, factory);\n this._points = null;\n this.init(points);\n }\n\n if ( Geometry$$1 ) LineString.__proto__ = Geometry$$1;\n LineString.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );\n LineString.prototype.constructor = LineString;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n LineString.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {\n if (this.isEmpty()) {\n return new Envelope()\n }\n return this._points.expandEnvelope(new Envelope())\n };\n LineString.prototype.isRing = function isRing () {\n return this.isClosed() && this.isSimple()\n };\n LineString.prototype.getSortIndex = function getSortIndex () {\n return Geometry$$1.SORTINDEX_LINESTRING\n };\n LineString.prototype.getCoordinates = function getCoordinates () {\n return this._points.toCoordinateArray()\n };\n LineString.prototype.equalsExact = function equalsExact () {\n var this$1 = this;\n\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n var otherLineString = other;\n if (this._points.size() !== otherLineString._points.size()) {\n return false\n }\n for (var i = 0; i < this._points.size(); i++) {\n if (!this$1.equal(this$1._points.getCoordinate(i), otherLineString._points.getCoordinate(i), tolerance)) {\n return false\n }\n }\n return true\n } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }\n };\n LineString.prototype.normalize = function normalize () {\n var this$1 = this;\n\n for (var i = 0; i < Math.trunc(this._points.size() / 2); i++) {\n var j = this$1._points.size() - 1 - i;\n if (!this$1._points.getCoordinate(i).equals(this$1._points.getCoordinate(j))) {\n if (this$1._points.getCoordinate(i).compareTo(this$1._points.getCoordinate(j)) > 0) {\n CoordinateSequences.reverse(this$1._points);\n }\n return null\n }\n }\n };\n LineString.prototype.getCoordinate = function getCoordinate () {\n if (this.isEmpty()) { return null }\n return this._points.getCoordinate(0)\n };\n LineString.prototype.getBoundaryDimension = function getBoundaryDimension () {\n if (this.isClosed()) {\n return Dimension.FALSE\n }\n return 0\n };\n LineString.prototype.isClosed = function isClosed () {\n if (this.isEmpty()) {\n return false\n }\n return this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints() - 1))\n };\n LineString.prototype.getEndPoint = function getEndPoint () {\n if (this.isEmpty()) {\n return null\n }\n return this.getPointN(this.getNumPoints() - 1)\n };\n LineString.prototype.getDimension = function getDimension () {\n return 1\n };\n LineString.prototype.getLength = function getLength () {\n return CGAlgorithms.computeLength(this._points)\n };\n LineString.prototype.getNumPoints = function getNumPoints () {\n return this._points.size()\n };\n LineString.prototype.reverse = function reverse () {\n var seq = this._points.copy();\n CoordinateSequences.reverse(seq);\n var revLine = this.getFactory().createLineString(seq);\n return revLine\n };\n LineString.prototype.compareToSameClass = function compareToSameClass () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var o = arguments[0];\n var line = o;\n var i = 0;\n var j = 0;\n while (i < this._points.size() && j < line._points.size()) {\n var comparison = this$1._points.getCoordinate(i).compareTo(line._points.getCoordinate(j));\n if (comparison !== 0) {\n return comparison\n }\n i++;\n j++;\n }\n if (i < this._points.size()) {\n return 1\n }\n if (j < line._points.size()) {\n return -1\n }\n return 0\n } else if (arguments.length === 2) {\n var o$1 = arguments[0];\n var comp = arguments[1];\n var line$1 = o$1;\n return comp.compare(this._points, line$1._points)\n }\n };\n LineString.prototype.apply = function apply () {\n var this$1 = this;\n\n if (hasInterface(arguments[0], CoordinateFilter)) {\n var filter = arguments[0];\n for (var i = 0; i < this._points.size(); i++) {\n filter.filter(this$1._points.getCoordinate(i));\n }\n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n var filter$1 = arguments[0];\n if (this._points.size() === 0) { return null }\n for (var i$1 = 0; i$1 < this._points.size(); i$1++) {\n filter$1.filter(this$1._points, i$1);\n if (filter$1.isDone()) { break }\n }\n if (filter$1.isGeometryChanged()) { this.geometryChanged(); }\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n var filter$2 = arguments[0];\n filter$2.filter(this);\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n var filter$3 = arguments[0];\n filter$3.filter(this);\n }\n };\n LineString.prototype.getBoundary = function getBoundary () {\n return new BoundaryOp(this).getBoundary()\n };\n LineString.prototype.isEquivalentClass = function isEquivalentClass (other) {\n return other instanceof LineString\n };\n LineString.prototype.clone = function clone () {\n var ls = Geometry$$1.prototype.clone.call(this);\n ls._points = this._points.clone();\n return ls\n };\n LineString.prototype.getCoordinateN = function getCoordinateN (n) {\n return this._points.getCoordinate(n)\n };\n LineString.prototype.getGeometryType = function getGeometryType () {\n return 'LineString'\n };\n LineString.prototype.copy = function copy () {\n return new LineString(this._points.copy(), this._factory)\n };\n LineString.prototype.getCoordinateSequence = function getCoordinateSequence () {\n return this._points\n };\n LineString.prototype.isEmpty = function isEmpty () {\n return this._points.size() === 0\n };\n LineString.prototype.init = function init (points) {\n if (points === null) {\n points = this.getFactory().getCoordinateSequenceFactory().create([]);\n }\n if (points.size() === 1) {\n throw new IllegalArgumentException('Invalid number of points in LineString (found ' + points.size() + ' - must be 0 or >= 2)')\n }\n this._points = points;\n };\n LineString.prototype.isCoordinate = function isCoordinate (pt) {\n var this$1 = this;\n\n for (var i = 0; i < this._points.size(); i++) {\n if (this$1._points.getCoordinate(i).equals(pt)) {\n return true\n }\n }\n return false\n };\n LineString.prototype.getStartPoint = function getStartPoint () {\n if (this.isEmpty()) {\n return null\n }\n return this.getPointN(0)\n };\n LineString.prototype.getPointN = function getPointN (n) {\n return this.getFactory().createPoint(this._points.getCoordinate(n))\n };\n LineString.prototype.interfaces_ = function interfaces_ () {\n return [Lineal]\n };\n LineString.prototype.getClass = function getClass () {\n return LineString\n };\n staticAccessors.serialVersionUID.get = function () { return 3110669828065365560 };\n\n Object.defineProperties( LineString, staticAccessors );\n\n return LineString;\n}(Geometry));\n\nvar Puntal = function Puntal () {};\n\nPuntal.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPuntal.prototype.getClass = function getClass () {\n return Puntal\n};\n\nvar Point = (function (Geometry$$1) {\n function Point (coordinates, factory) {\n Geometry$$1.call(this, factory);\n this._coordinates = coordinates || null;\n this.init(this._coordinates);\n }\n\n if ( Geometry$$1 ) Point.__proto__ = Geometry$$1;\n Point.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );\n Point.prototype.constructor = Point;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n Point.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {\n if (this.isEmpty()) {\n return new Envelope()\n }\n var env = new Envelope();\n env.expandToInclude(this._coordinates.getX(0), this._coordinates.getY(0));\n return env\n };\n Point.prototype.getSortIndex = function getSortIndex () {\n return Geometry$$1.SORTINDEX_POINT\n };\n Point.prototype.getCoordinates = function getCoordinates () {\n return this.isEmpty() ? [] : [this.getCoordinate()]\n };\n Point.prototype.equalsExact = function equalsExact () {\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n if (this.isEmpty() && other.isEmpty()) {\n return true\n }\n if (this.isEmpty() !== other.isEmpty()) {\n return false\n }\n return this.equal(other.getCoordinate(), this.getCoordinate(), tolerance)\n } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }\n };\n Point.prototype.normalize = function normalize () {};\n Point.prototype.getCoordinate = function getCoordinate () {\n return this._coordinates.size() !== 0 ? this._coordinates.getCoordinate(0) : null\n };\n Point.prototype.getBoundaryDimension = function getBoundaryDimension () {\n return Dimension.FALSE\n };\n Point.prototype.getDimension = function getDimension () {\n return 0\n };\n Point.prototype.getNumPoints = function getNumPoints () {\n return this.isEmpty() ? 0 : 1\n };\n Point.prototype.reverse = function reverse () {\n return this.copy()\n };\n Point.prototype.getX = function getX () {\n if (this.getCoordinate() === null) {\n throw new Error('getX called on empty Point')\n }\n return this.getCoordinate().x\n };\n Point.prototype.compareToSameClass = function compareToSameClass () {\n if (arguments.length === 1) {\n var other = arguments[0];\n var point$1 = other;\n return this.getCoordinate().compareTo(point$1.getCoordinate())\n } else if (arguments.length === 2) {\n var other$1 = arguments[0];\n var comp = arguments[1];\n var point = other$1;\n return comp.compare(this._coordinates, point._coordinates)\n }\n };\n Point.prototype.apply = function apply () {\n if (hasInterface(arguments[0], CoordinateFilter)) {\n var filter = arguments[0];\n if (this.isEmpty()) {\n return null\n }\n filter.filter(this.getCoordinate());\n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n var filter$1 = arguments[0];\n if (this.isEmpty()) { return null }\n filter$1.filter(this._coordinates, 0);\n if (filter$1.isGeometryChanged()) { this.geometryChanged(); }\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n var filter$2 = arguments[0];\n filter$2.filter(this);\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n var filter$3 = arguments[0];\n filter$3.filter(this);\n }\n };\n Point.prototype.getBoundary = function getBoundary () {\n return this.getFactory().createGeometryCollection(null)\n };\n Point.prototype.clone = function clone () {\n var p = Geometry$$1.prototype.clone.call(this);\n p._coordinates = this._coordinates.clone();\n return p\n };\n Point.prototype.getGeometryType = function getGeometryType () {\n return 'Point'\n };\n Point.prototype.copy = function copy () {\n return new Point(this._coordinates.copy(), this._factory)\n };\n Point.prototype.getCoordinateSequence = function getCoordinateSequence () {\n return this._coordinates\n };\n Point.prototype.getY = function getY () {\n if (this.getCoordinate() === null) {\n throw new Error('getY called on empty Point')\n }\n return this.getCoordinate().y\n };\n Point.prototype.isEmpty = function isEmpty () {\n return this._coordinates.size() === 0\n };\n Point.prototype.init = function init (coordinates) {\n if (coordinates === null) {\n coordinates = this.getFactory().getCoordinateSequenceFactory().create([]);\n }\n Assert.isTrue(coordinates.size() <= 1);\n this._coordinates = coordinates;\n };\n Point.prototype.isSimple = function isSimple () {\n return true\n };\n Point.prototype.interfaces_ = function interfaces_ () {\n return [Puntal]\n };\n Point.prototype.getClass = function getClass () {\n return Point\n };\n staticAccessors.serialVersionUID.get = function () { return 4902022702746614570 };\n\n Object.defineProperties( Point, staticAccessors );\n\n return Point;\n}(Geometry));\n\nvar Polygonal = function Polygonal () {};\n\nPolygonal.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPolygonal.prototype.getClass = function getClass () {\n return Polygonal\n};\n\nvar Polygon = (function (Geometry$$1) {\n function Polygon (shell, holes, factory) {\n Geometry$$1.call(this, factory);\n this._shell = null;\n this._holes = null;\n if (shell === null) {\n shell = this.getFactory().createLinearRing();\n }\n if (holes === null) {\n holes = [];\n }\n if (Geometry$$1.hasNullElements(holes)) {\n throw new IllegalArgumentException('holes must not contain null elements')\n }\n if (shell.isEmpty() && Geometry$$1.hasNonEmptyElements(holes)) {\n throw new IllegalArgumentException('shell is empty but holes are not')\n }\n this._shell = shell;\n this._holes = holes;\n }\n\n if ( Geometry$$1 ) Polygon.__proto__ = Geometry$$1;\n Polygon.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );\n Polygon.prototype.constructor = Polygon;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n Polygon.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {\n return this._shell.getEnvelopeInternal()\n };\n Polygon.prototype.getSortIndex = function getSortIndex () {\n return Geometry$$1.SORTINDEX_POLYGON\n };\n Polygon.prototype.getCoordinates = function getCoordinates () {\n var this$1 = this;\n\n if (this.isEmpty()) {\n return []\n }\n var coordinates = new Array(this.getNumPoints()).fill(null);\n var k = -1;\n var shellCoordinates = this._shell.getCoordinates();\n for (var x = 0; x < shellCoordinates.length; x++) {\n k++;\n coordinates[k] = shellCoordinates[x];\n }\n for (var i = 0; i < this._holes.length; i++) {\n var childCoordinates = this$1._holes[i].getCoordinates();\n for (var j = 0; j < childCoordinates.length; j++) {\n k++;\n coordinates[k] = childCoordinates[j];\n }\n }\n return coordinates\n };\n Polygon.prototype.getArea = function getArea () {\n var this$1 = this;\n\n var area = 0.0;\n area += Math.abs(CGAlgorithms.signedArea(this._shell.getCoordinateSequence()));\n for (var i = 0; i < this._holes.length; i++) {\n area -= Math.abs(CGAlgorithms.signedArea(this$1._holes[i].getCoordinateSequence()));\n }\n return area\n };\n Polygon.prototype.isRectangle = function isRectangle () {\n if (this.getNumInteriorRing() !== 0) { return false }\n if (this._shell === null) { return false }\n if (this._shell.getNumPoints() !== 5) { return false }\n var seq = this._shell.getCoordinateSequence();\n var env = this.getEnvelopeInternal();\n for (var i = 0; i < 5; i++) {\n var x = seq.getX(i);\n if (!(x === env.getMinX() || x === env.getMaxX())) { return false }\n var y = seq.getY(i);\n if (!(y === env.getMinY() || y === env.getMaxY())) { return false }\n }\n var prevX = seq.getX(0);\n var prevY = seq.getY(0);\n for (var i$1 = 1; i$1 <= 4; i$1++) {\n var x$1 = seq.getX(i$1);\n var y$1 = seq.getY(i$1);\n var xChanged = x$1 !== prevX;\n var yChanged = y$1 !== prevY;\n if (xChanged === yChanged) { return false }\n prevX = x$1;\n prevY = y$1;\n }\n return true\n };\n Polygon.prototype.equalsExact = function equalsExact () {\n var this$1 = this;\n\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n var otherPolygon = other;\n var thisShell = this._shell;\n var otherPolygonShell = otherPolygon._shell;\n if (!thisShell.equalsExact(otherPolygonShell, tolerance)) {\n return false\n }\n if (this._holes.length !== otherPolygon._holes.length) {\n return false\n }\n for (var i = 0; i < this._holes.length; i++) {\n if (!this$1._holes[i].equalsExact(otherPolygon._holes[i], tolerance)) {\n return false\n }\n }\n return true\n } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }\n };\n Polygon.prototype.normalize = function normalize () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n this.normalize(this._shell, true);\n for (var i = 0; i < this._holes.length; i++) {\n this$1.normalize(this$1._holes[i], false);\n }\n Arrays.sort(this._holes);\n } else if (arguments.length === 2) {\n var ring = arguments[0];\n var clockwise = arguments[1];\n if (ring.isEmpty()) {\n return null\n }\n var uniqueCoordinates = new Array(ring.getCoordinates().length - 1).fill(null);\n System.arraycopy(ring.getCoordinates(), 0, uniqueCoordinates, 0, uniqueCoordinates.length);\n var minCoordinate = CoordinateArrays.minCoordinate(ring.getCoordinates());\n CoordinateArrays.scroll(uniqueCoordinates, minCoordinate);\n System.arraycopy(uniqueCoordinates, 0, ring.getCoordinates(), 0, uniqueCoordinates.length);\n ring.getCoordinates()[uniqueCoordinates.length] = uniqueCoordinates[0];\n if (CGAlgorithms.isCCW(ring.getCoordinates()) === clockwise) {\n CoordinateArrays.reverse(ring.getCoordinates());\n }\n }\n };\n Polygon.prototype.getCoordinate = function getCoordinate () {\n return this._shell.getCoordinate()\n };\n Polygon.prototype.getNumInteriorRing = function getNumInteriorRing () {\n return this._holes.length\n };\n Polygon.prototype.getBoundaryDimension = function getBoundaryDimension () {\n return 1\n };\n Polygon.prototype.getDimension = function getDimension () {\n return 2\n };\n Polygon.prototype.getLength = function getLength () {\n var this$1 = this;\n\n var len = 0.0;\n len += this._shell.getLength();\n for (var i = 0; i < this._holes.length; i++) {\n len += this$1._holes[i].getLength();\n }\n return len\n };\n Polygon.prototype.getNumPoints = function getNumPoints () {\n var this$1 = this;\n\n var numPoints = this._shell.getNumPoints();\n for (var i = 0; i < this._holes.length; i++) {\n numPoints += this$1._holes[i].getNumPoints();\n }\n return numPoints\n };\n Polygon.prototype.reverse = function reverse () {\n var this$1 = this;\n\n var poly = this.copy();\n poly._shell = this._shell.copy().reverse();\n poly._holes = new Array(this._holes.length).fill(null);\n for (var i = 0; i < this._holes.length; i++) {\n poly._holes[i] = this$1._holes[i].copy().reverse();\n }\n return poly\n };\n Polygon.prototype.convexHull = function convexHull () {\n return this.getExteriorRing().convexHull()\n };\n Polygon.prototype.compareToSameClass = function compareToSameClass () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var o = arguments[0];\n var thisShell = this._shell;\n var otherShell = o._shell;\n return thisShell.compareToSameClass(otherShell)\n } else if (arguments.length === 2) {\n var o$1 = arguments[0];\n var comp = arguments[1];\n var poly = o$1;\n var thisShell$1 = this._shell;\n var otherShell$1 = poly._shell;\n var shellComp = thisShell$1.compareToSameClass(otherShell$1, comp);\n if (shellComp !== 0) { return shellComp }\n var nHole1 = this.getNumInteriorRing();\n var nHole2 = poly.getNumInteriorRing();\n var i = 0;\n while (i < nHole1 && i < nHole2) {\n var thisHole = this$1.getInteriorRingN(i);\n var otherHole = poly.getInteriorRingN(i);\n var holeComp = thisHole.compareToSameClass(otherHole, comp);\n if (holeComp !== 0) { return holeComp }\n i++;\n }\n if (i < nHole1) { return 1 }\n if (i < nHole2) { return -1 }\n return 0\n }\n };\n Polygon.prototype.apply = function apply (filter) {\n var this$1 = this;\n\n if (hasInterface(filter, CoordinateFilter)) {\n this._shell.apply(filter);\n for (var i$1 = 0; i$1 < this._holes.length; i$1++) {\n this$1._holes[i$1].apply(filter);\n }\n } else if (hasInterface(filter, CoordinateSequenceFilter)) {\n this._shell.apply(filter);\n if (!filter.isDone()) {\n for (var i$2 = 0; i$2 < this._holes.length; i$2++) {\n this$1._holes[i$2].apply(filter);\n if (filter.isDone()) { break }\n }\n }\n if (filter.isGeometryChanged()) { this.geometryChanged(); }\n } else if (hasInterface(filter, GeometryFilter)) {\n filter.filter(this);\n } else if (hasInterface(filter, GeometryComponentFilter)) {\n filter.filter(this);\n this._shell.apply(filter);\n for (var i = 0; i < this._holes.length; i++) {\n this$1._holes[i].apply(filter);\n }\n }\n };\n Polygon.prototype.getBoundary = function getBoundary () {\n var this$1 = this;\n\n if (this.isEmpty()) {\n return this.getFactory().createMultiLineString()\n }\n var rings = new Array(this._holes.length + 1).fill(null);\n rings[0] = this._shell;\n for (var i = 0; i < this._holes.length; i++) {\n rings[i + 1] = this$1._holes[i];\n }\n if (rings.length <= 1) { return this.getFactory().createLinearRing(rings[0].getCoordinateSequence()) }\n return this.getFactory().createMultiLineString(rings)\n };\n Polygon.prototype.clone = function clone () {\n var this$1 = this;\n\n var poly = Geometry$$1.prototype.clone.call(this);\n poly._shell = this._shell.clone();\n poly._holes = new Array(this._holes.length).fill(null);\n for (var i = 0; i < this._holes.length; i++) {\n poly._holes[i] = this$1._holes[i].clone();\n }\n return poly\n };\n Polygon.prototype.getGeometryType = function getGeometryType () {\n return 'Polygon'\n };\n Polygon.prototype.copy = function copy () {\n var this$1 = this;\n\n var shell = this._shell.copy();\n var holes = new Array(this._holes.length).fill(null);\n for (var i = 0; i < holes.length; i++) {\n holes[i] = this$1._holes[i].copy();\n }\n return new Polygon(shell, holes, this._factory)\n };\n Polygon.prototype.getExteriorRing = function getExteriorRing () {\n return this._shell\n };\n Polygon.prototype.isEmpty = function isEmpty () {\n return this._shell.isEmpty()\n };\n Polygon.prototype.getInteriorRingN = function getInteriorRingN (n) {\n return this._holes[n]\n };\n Polygon.prototype.interfaces_ = function interfaces_ () {\n return [Polygonal]\n };\n Polygon.prototype.getClass = function getClass () {\n return Polygon\n };\n staticAccessors.serialVersionUID.get = function () { return -3494792200821764533 };\n\n Object.defineProperties( Polygon, staticAccessors );\n\n return Polygon;\n}(Geometry));\n\nvar MultiPoint = (function (GeometryCollection$$1) {\n function MultiPoint () {\n GeometryCollection$$1.apply(this, arguments);\n }\n\n if ( GeometryCollection$$1 ) MultiPoint.__proto__ = GeometryCollection$$1;\n MultiPoint.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );\n MultiPoint.prototype.constructor = MultiPoint;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n\n MultiPoint.prototype.getSortIndex = function getSortIndex () {\n return Geometry.SORTINDEX_MULTIPOINT\n };\n MultiPoint.prototype.isValid = function isValid () {\n return true\n };\n MultiPoint.prototype.equalsExact = function equalsExact () {\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)\n } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }\n };\n MultiPoint.prototype.getCoordinate = function getCoordinate () {\n if (arguments.length === 1) {\n var n = arguments[0];\n return this._geometries[n].getCoordinate()\n } else { return GeometryCollection$$1.prototype.getCoordinate.apply(this, arguments) }\n };\n MultiPoint.prototype.getBoundaryDimension = function getBoundaryDimension () {\n return Dimension.FALSE\n };\n MultiPoint.prototype.getDimension = function getDimension () {\n return 0\n };\n MultiPoint.prototype.getBoundary = function getBoundary () {\n return this.getFactory().createGeometryCollection(null)\n };\n MultiPoint.prototype.getGeometryType = function getGeometryType () {\n return 'MultiPoint'\n };\n MultiPoint.prototype.copy = function copy () {\n var this$1 = this;\n\n var points = new Array(this._geometries.length).fill(null);\n for (var i = 0; i < points.length; i++) {\n points[i] = this$1._geometries[i].copy();\n }\n return new MultiPoint(points, this._factory)\n };\n MultiPoint.prototype.interfaces_ = function interfaces_ () {\n return [Puntal]\n };\n MultiPoint.prototype.getClass = function getClass () {\n return MultiPoint\n };\n staticAccessors.serialVersionUID.get = function () { return -8048474874175355449 };\n\n Object.defineProperties( MultiPoint, staticAccessors );\n\n return MultiPoint;\n}(GeometryCollection));\n\nvar LinearRing = (function (LineString$$1) {\n function LinearRing (points, factory) {\n if (points instanceof Coordinate && factory instanceof GeometryFactory) {\n points = factory.getCoordinateSequenceFactory().create(points);\n }\n LineString$$1.call(this, points, factory);\n this.validateConstruction();\n }\n\n if ( LineString$$1 ) LinearRing.__proto__ = LineString$$1;\n LinearRing.prototype = Object.create( LineString$$1 && LineString$$1.prototype );\n LinearRing.prototype.constructor = LinearRing;\n\n var staticAccessors = { MINIMUM_VALID_SIZE: { configurable: true },serialVersionUID: { configurable: true } };\n LinearRing.prototype.getSortIndex = function getSortIndex () {\n return Geometry.SORTINDEX_LINEARRING\n };\n LinearRing.prototype.getBoundaryDimension = function getBoundaryDimension () {\n return Dimension.FALSE\n };\n LinearRing.prototype.isClosed = function isClosed () {\n if (this.isEmpty()) {\n return true\n }\n return LineString$$1.prototype.isClosed.call(this)\n };\n LinearRing.prototype.reverse = function reverse () {\n var seq = this._points.copy();\n CoordinateSequences.reverse(seq);\n var rev = this.getFactory().createLinearRing(seq);\n return rev\n };\n LinearRing.prototype.validateConstruction = function validateConstruction () {\n if (!this.isEmpty() && !LineString$$1.prototype.isClosed.call(this)) {\n throw new IllegalArgumentException('Points of LinearRing do not form a closed linestring')\n }\n if (this.getCoordinateSequence().size() >= 1 && this.getCoordinateSequence().size() < LinearRing.MINIMUM_VALID_SIZE) {\n throw new IllegalArgumentException('Invalid number of points in LinearRing (found ' + this.getCoordinateSequence().size() + ' - must be 0 or >= 4)')\n }\n };\n LinearRing.prototype.getGeometryType = function getGeometryType () {\n return 'LinearRing'\n };\n LinearRing.prototype.copy = function copy () {\n return new LinearRing(this._points.copy(), this._factory)\n };\n LinearRing.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n LinearRing.prototype.getClass = function getClass () {\n return LinearRing\n };\n staticAccessors.MINIMUM_VALID_SIZE.get = function () { return 4 };\n staticAccessors.serialVersionUID.get = function () { return -4261142084085851829 };\n\n Object.defineProperties( LinearRing, staticAccessors );\n\n return LinearRing;\n}(LineString));\n\nvar MultiPolygon = (function (GeometryCollection$$1) {\n function MultiPolygon () {\n GeometryCollection$$1.apply(this, arguments);\n }\n\n if ( GeometryCollection$$1 ) MultiPolygon.__proto__ = GeometryCollection$$1;\n MultiPolygon.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );\n MultiPolygon.prototype.constructor = MultiPolygon;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n\n MultiPolygon.prototype.getSortIndex = function getSortIndex () {\n return Geometry.SORTINDEX_MULTIPOLYGON\n };\n MultiPolygon.prototype.equalsExact = function equalsExact () {\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)\n } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }\n };\n MultiPolygon.prototype.getBoundaryDimension = function getBoundaryDimension () {\n return 1\n };\n MultiPolygon.prototype.getDimension = function getDimension () {\n return 2\n };\n MultiPolygon.prototype.reverse = function reverse () {\n var this$1 = this;\n\n var n = this._geometries.length;\n var revGeoms = new Array(n).fill(null);\n for (var i = 0; i < this._geometries.length; i++) {\n revGeoms[i] = this$1._geometries[i].reverse();\n }\n return this.getFactory().createMultiPolygon(revGeoms)\n };\n MultiPolygon.prototype.getBoundary = function getBoundary () {\n var this$1 = this;\n\n if (this.isEmpty()) {\n return this.getFactory().createMultiLineString()\n }\n var allRings = new ArrayList();\n for (var i = 0; i < this._geometries.length; i++) {\n var polygon = this$1._geometries[i];\n var rings = polygon.getBoundary();\n for (var j = 0; j < rings.getNumGeometries(); j++) {\n allRings.add(rings.getGeometryN(j));\n }\n }\n var allRingsArray = new Array(allRings.size()).fill(null);\n return this.getFactory().createMultiLineString(allRings.toArray(allRingsArray))\n };\n MultiPolygon.prototype.getGeometryType = function getGeometryType () {\n return 'MultiPolygon'\n };\n MultiPolygon.prototype.copy = function copy () {\n var this$1 = this;\n\n var polygons = new Array(this._geometries.length).fill(null);\n for (var i = 0; i < polygons.length; i++) {\n polygons[i] = this$1._geometries[i].copy();\n }\n return new MultiPolygon(polygons, this._factory)\n };\n MultiPolygon.prototype.interfaces_ = function interfaces_ () {\n return [Polygonal]\n };\n MultiPolygon.prototype.getClass = function getClass () {\n return MultiPolygon\n };\n staticAccessors.serialVersionUID.get = function () { return -551033529766975875 };\n\n Object.defineProperties( MultiPolygon, staticAccessors );\n\n return MultiPolygon;\n}(GeometryCollection));\n\nvar GeometryEditor = function GeometryEditor (factory) {\n this._factory = factory || null;\n this._isUserDataCopied = false;\n};\n\nvar staticAccessors$16 = { NoOpGeometryOperation: { configurable: true },CoordinateOperation: { configurable: true },CoordinateSequenceOperation: { configurable: true } };\nGeometryEditor.prototype.setCopyUserData = function setCopyUserData (isUserDataCopied) {\n this._isUserDataCopied = isUserDataCopied;\n};\nGeometryEditor.prototype.edit = function edit (geometry, operation) {\n if (geometry === null) { return null }\n var result = this.editInternal(geometry, operation);\n if (this._isUserDataCopied) {\n result.setUserData(geometry.getUserData());\n }\n return result\n};\nGeometryEditor.prototype.editInternal = function editInternal (geometry, operation) {\n if (this._factory === null) { this._factory = geometry.getFactory(); }\n if (geometry instanceof GeometryCollection) {\n return this.editGeometryCollection(geometry, operation)\n }\n if (geometry instanceof Polygon) {\n return this.editPolygon(geometry, operation)\n }\n if (geometry instanceof Point) {\n return operation.edit(geometry, this._factory)\n }\n if (geometry instanceof LineString) {\n return operation.edit(geometry, this._factory)\n }\n Assert.shouldNeverReachHere('Unsupported Geometry class: ' + geometry.getClass().getName());\n return null\n};\nGeometryEditor.prototype.editGeometryCollection = function editGeometryCollection (collection, operation) {\n var this$1 = this;\n\n var collectionForType = operation.edit(collection, this._factory);\n var geometries = new ArrayList();\n for (var i = 0; i < collectionForType.getNumGeometries(); i++) {\n var geometry = this$1.edit(collectionForType.getGeometryN(i), operation);\n if (geometry === null || geometry.isEmpty()) {\n continue\n }\n geometries.add(geometry);\n }\n if (collectionForType.getClass() === MultiPoint) {\n return this._factory.createMultiPoint(geometries.toArray([]))\n }\n if (collectionForType.getClass() === MultiLineString) {\n return this._factory.createMultiLineString(geometries.toArray([]))\n }\n if (collectionForType.getClass() === MultiPolygon) {\n return this._factory.createMultiPolygon(geometries.toArray([]))\n }\n return this._factory.createGeometryCollection(geometries.toArray([]))\n};\nGeometryEditor.prototype.editPolygon = function editPolygon (polygon, operation) {\n var this$1 = this;\n\n var newPolygon = operation.edit(polygon, this._factory);\n if (newPolygon === null) { newPolygon = this._factory.createPolygon(null); }\n if (newPolygon.isEmpty()) {\n return newPolygon\n }\n var shell = this.edit(newPolygon.getExteriorRing(), operation);\n if (shell === null || shell.isEmpty()) {\n return this._factory.createPolygon()\n }\n var holes = new ArrayList();\n for (var i = 0; i < newPolygon.getNumInteriorRing(); i++) {\n var hole = this$1.edit(newPolygon.getInteriorRingN(i), operation);\n if (hole === null || hole.isEmpty()) {\n continue\n }\n holes.add(hole);\n }\n return this._factory.createPolygon(shell, holes.toArray([]))\n};\nGeometryEditor.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryEditor.prototype.getClass = function getClass () {\n return GeometryEditor\n};\nGeometryEditor.GeometryEditorOperation = function GeometryEditorOperation () {};\nstaticAccessors$16.NoOpGeometryOperation.get = function () { return NoOpGeometryOperation };\nstaticAccessors$16.CoordinateOperation.get = function () { return CoordinateOperation };\nstaticAccessors$16.CoordinateSequenceOperation.get = function () { return CoordinateSequenceOperation };\n\nObject.defineProperties( GeometryEditor, staticAccessors$16 );\n\nvar NoOpGeometryOperation = function NoOpGeometryOperation () {};\n\nNoOpGeometryOperation.prototype.edit = function edit (geometry, factory) {\n return geometry\n};\nNoOpGeometryOperation.prototype.interfaces_ = function interfaces_ () {\n return [GeometryEditor.GeometryEditorOperation]\n};\nNoOpGeometryOperation.prototype.getClass = function getClass () {\n return NoOpGeometryOperation\n};\n\nvar CoordinateOperation = function CoordinateOperation () {};\n\nCoordinateOperation.prototype.edit = function edit (geometry, factory) {\n var coords = this.editCoordinates(geometry.getCoordinates(), geometry);\n if (coords === null) { return geometry }\n if (geometry instanceof LinearRing) {\n return factory.createLinearRing(coords)\n }\n if (geometry instanceof LineString) {\n return factory.createLineString(coords)\n }\n if (geometry instanceof Point) {\n if (coords.length > 0) {\n return factory.createPoint(coords[0])\n } else {\n return factory.createPoint()\n }\n }\n return geometry\n};\nCoordinateOperation.prototype.interfaces_ = function interfaces_ () {\n return [GeometryEditor.GeometryEditorOperation]\n};\nCoordinateOperation.prototype.getClass = function getClass () {\n return CoordinateOperation\n};\n\nvar CoordinateSequenceOperation = function CoordinateSequenceOperation () {};\n\nCoordinateSequenceOperation.prototype.edit = function edit (geometry, factory) {\n if (geometry instanceof LinearRing) {\n return factory.createLinearRing(this.edit(geometry.getCoordinateSequence(), geometry))\n }\n if (geometry instanceof LineString) {\n return factory.createLineString(this.edit(geometry.getCoordinateSequence(), geometry))\n }\n if (geometry instanceof Point) {\n return factory.createPoint(this.edit(geometry.getCoordinateSequence(), geometry))\n }\n return geometry\n};\nCoordinateSequenceOperation.prototype.interfaces_ = function interfaces_ () {\n return [GeometryEditor.GeometryEditorOperation]\n};\nCoordinateSequenceOperation.prototype.getClass = function getClass () {\n return CoordinateSequenceOperation\n};\n\nvar CoordinateArraySequence = function CoordinateArraySequence () {\n var this$1 = this;\n\n this._dimension = 3;\n this._coordinates = null;\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n this._coordinates = arguments[0];\n this._dimension = 3;\n } else if (Number.isInteger(arguments[0])) {\n var size = arguments[0];\n this._coordinates = new Array(size).fill(null);\n for (var i = 0; i < size; i++) {\n this$1._coordinates[i] = new Coordinate();\n }\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n var coordSeq = arguments[0];\n if (coordSeq === null) {\n this._coordinates = new Array(0).fill(null);\n return null\n }\n this._dimension = coordSeq.getDimension();\n this._coordinates = new Array(coordSeq.size()).fill(null);\n for (var i$1 = 0; i$1 < this._coordinates.length; i$1++) {\n this$1._coordinates[i$1] = coordSeq.getCoordinateCopy(i$1);\n }\n }\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof Array && Number.isInteger(arguments[1])) {\n var coordinates = arguments[0];\n var dimension = arguments[1];\n this._coordinates = coordinates;\n this._dimension = dimension;\n if (coordinates === null) { this._coordinates = new Array(0).fill(null); }\n } else if (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) {\n var size$1 = arguments[0];\n var dimension$1 = arguments[1];\n this._coordinates = new Array(size$1).fill(null);\n this._dimension = dimension$1;\n for (var i$2 = 0; i$2 < size$1; i$2++) {\n this$1._coordinates[i$2] = new Coordinate();\n }\n }\n }\n};\n\nvar staticAccessors$18 = { serialVersionUID: { configurable: true } };\nCoordinateArraySequence.prototype.setOrdinate = function setOrdinate (index, ordinateIndex, value) {\n switch (ordinateIndex) {\n case CoordinateSequence.X:\n this._coordinates[index].x = value;\n break\n case CoordinateSequence.Y:\n this._coordinates[index].y = value;\n break\n case CoordinateSequence.Z:\n this._coordinates[index].z = value;\n break\n default:\n throw new IllegalArgumentException('invalid ordinateIndex')\n }\n};\nCoordinateArraySequence.prototype.size = function size () {\n return this._coordinates.length\n};\nCoordinateArraySequence.prototype.getOrdinate = function getOrdinate (index, ordinateIndex) {\n switch (ordinateIndex) {\n case CoordinateSequence.X:\n return this._coordinates[index].x\n case CoordinateSequence.Y:\n return this._coordinates[index].y\n case CoordinateSequence.Z:\n return this._coordinates[index].z\n default:\n }\n return Double.NaN\n};\nCoordinateArraySequence.prototype.getCoordinate = function getCoordinate () {\n if (arguments.length === 1) {\n var i = arguments[0];\n return this._coordinates[i]\n } else if (arguments.length === 2) {\n var index = arguments[0];\n var coord = arguments[1];\n coord.x = this._coordinates[index].x;\n coord.y = this._coordinates[index].y;\n coord.z = this._coordinates[index].z;\n }\n};\nCoordinateArraySequence.prototype.getCoordinateCopy = function getCoordinateCopy (i) {\n return new Coordinate(this._coordinates[i])\n};\nCoordinateArraySequence.prototype.getDimension = function getDimension () {\n return this._dimension\n};\nCoordinateArraySequence.prototype.getX = function getX (index) {\n return this._coordinates[index].x\n};\nCoordinateArraySequence.prototype.clone = function clone () {\n var this$1 = this;\n\n var cloneCoordinates = new Array(this.size()).fill(null);\n for (var i = 0; i < this._coordinates.length; i++) {\n cloneCoordinates[i] = this$1._coordinates[i].clone();\n }\n return new CoordinateArraySequence(cloneCoordinates, this._dimension)\n};\nCoordinateArraySequence.prototype.expandEnvelope = function expandEnvelope (env) {\n var this$1 = this;\n\n for (var i = 0; i < this._coordinates.length; i++) {\n env.expandToInclude(this$1._coordinates[i]);\n }\n return env\n};\nCoordinateArraySequence.prototype.copy = function copy () {\n var this$1 = this;\n\n var cloneCoordinates = new Array(this.size()).fill(null);\n for (var i = 0; i < this._coordinates.length; i++) {\n cloneCoordinates[i] = this$1._coordinates[i].copy();\n }\n return new CoordinateArraySequence(cloneCoordinates, this._dimension)\n};\nCoordinateArraySequence.prototype.toString = function toString () {\n var this$1 = this;\n\n if (this._coordinates.length > 0) {\n var strBuf = new StringBuffer(17 * this._coordinates.length);\n strBuf.append('(');\n strBuf.append(this._coordinates[0]);\n for (var i = 1; i < this._coordinates.length; i++) {\n strBuf.append(', ');\n strBuf.append(this$1._coordinates[i]);\n }\n strBuf.append(')');\n return strBuf.toString()\n } else {\n return '()'\n }\n};\nCoordinateArraySequence.prototype.getY = function getY (index) {\n return this._coordinates[index].y\n};\nCoordinateArraySequence.prototype.toCoordinateArray = function toCoordinateArray () {\n return this._coordinates\n};\nCoordinateArraySequence.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateSequence, Serializable]\n};\nCoordinateArraySequence.prototype.getClass = function getClass () {\n return CoordinateArraySequence\n};\nstaticAccessors$18.serialVersionUID.get = function () { return -915438501601840650 };\n\nObject.defineProperties( CoordinateArraySequence, staticAccessors$18 );\n\nvar CoordinateArraySequenceFactory = function CoordinateArraySequenceFactory () {};\n\nvar staticAccessors$17 = { serialVersionUID: { configurable: true },instanceObject: { configurable: true } };\n\nCoordinateArraySequenceFactory.prototype.readResolve = function readResolve () {\n return CoordinateArraySequenceFactory.instance()\n};\nCoordinateArraySequenceFactory.prototype.create = function create () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n var coordinates = arguments[0];\n return new CoordinateArraySequence(coordinates)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n var coordSeq = arguments[0];\n return new CoordinateArraySequence(coordSeq)\n }\n } else if (arguments.length === 2) {\n var size = arguments[0];\n var dimension = arguments[1];\n if (dimension > 3) { dimension = 3; }\n if (dimension < 2) { return new CoordinateArraySequence(size) }\n return new CoordinateArraySequence(size, dimension)\n }\n};\nCoordinateArraySequenceFactory.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateSequenceFactory, Serializable]\n};\nCoordinateArraySequenceFactory.prototype.getClass = function getClass () {\n return CoordinateArraySequenceFactory\n};\nCoordinateArraySequenceFactory.instance = function instance () {\n return CoordinateArraySequenceFactory.instanceObject\n};\n\nstaticAccessors$17.serialVersionUID.get = function () { return -4099577099607551657 };\nstaticAccessors$17.instanceObject.get = function () { return new CoordinateArraySequenceFactory() };\n\nObject.defineProperties( CoordinateArraySequenceFactory, staticAccessors$17 );\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/HashMap.html\n *\n * @extends {javascript.util.Map}\n * @constructor\n * @private\n */\nvar HashMap = (function (MapInterface) {\n function HashMap () {\n MapInterface.call(this);\n this.map_ = new Map();\n }\n\n if ( MapInterface ) HashMap.__proto__ = MapInterface;\n HashMap.prototype = Object.create( MapInterface && MapInterface.prototype );\n HashMap.prototype.constructor = HashMap;\n /**\n * @override\n */\n HashMap.prototype.get = function get (key) {\n return this.map_.get(key) || null\n };\n\n /**\n * @override\n */\n HashMap.prototype.put = function put (key, value) {\n this.map_.set(key, value);\n return value\n };\n\n /**\n * @override\n */\n HashMap.prototype.values = function values () {\n var arrayList = new ArrayList();\n var it = this.map_.values();\n var o = it.next();\n while (!o.done) {\n arrayList.add(o.value);\n o = it.next();\n }\n return arrayList\n };\n\n /**\n * @override\n */\n HashMap.prototype.entrySet = function entrySet () {\n var hashSet = new HashSet();\n this.map_.entries().forEach(function (entry) { return hashSet.add(entry); });\n return hashSet\n };\n\n /**\n * @override\n */\n HashMap.prototype.size = function size () {\n return this.map_.size()\n };\n\n return HashMap;\n}(Map$1));\n\nvar PrecisionModel = function PrecisionModel () {\n this._modelType = null;\n this._scale = null;\n if (arguments.length === 0) {\n this._modelType = PrecisionModel.FLOATING;\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Type) {\n var modelType = arguments[0];\n this._modelType = modelType;\n if (modelType === PrecisionModel.FIXED) {\n this.setScale(1.0);\n }\n } else if (typeof arguments[0] === 'number') {\n var scale = arguments[0];\n this._modelType = PrecisionModel.FIXED;\n this.setScale(scale);\n } else if (arguments[0] instanceof PrecisionModel) {\n var pm = arguments[0];\n this._modelType = pm._modelType;\n this._scale = pm._scale;\n }\n }\n};\n\nvar staticAccessors$19 = { serialVersionUID: { configurable: true },maximumPreciseValue: { configurable: true } };\nPrecisionModel.prototype.equals = function equals (other) {\n if (!(other instanceof PrecisionModel)) {\n return false\n }\n var otherPrecisionModel = other;\n return this._modelType === otherPrecisionModel._modelType && this._scale === otherPrecisionModel._scale\n};\nPrecisionModel.prototype.compareTo = function compareTo (o) {\n var other = o;\n var sigDigits = this.getMaximumSignificantDigits();\n var otherSigDigits = other.getMaximumSignificantDigits();\n return new Integer(sigDigits).compareTo(new Integer(otherSigDigits))\n};\nPrecisionModel.prototype.getScale = function getScale () {\n return this._scale\n};\nPrecisionModel.prototype.isFloating = function isFloating () {\n return this._modelType === PrecisionModel.FLOATING || this._modelType === PrecisionModel.FLOATING_SINGLE\n};\nPrecisionModel.prototype.getType = function getType () {\n return this._modelType\n};\nPrecisionModel.prototype.toString = function toString () {\n var description = 'UNKNOWN';\n if (this._modelType === PrecisionModel.FLOATING) {\n description = 'Floating';\n } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n description = 'Floating-Single';\n } else if (this._modelType === PrecisionModel.FIXED) {\n description = 'Fixed (Scale=' + this.getScale() + ')';\n }\n return description\n};\nPrecisionModel.prototype.makePrecise = function makePrecise () {\n if (typeof arguments[0] === 'number') {\n var val = arguments[0];\n if (Double.isNaN(val)) { return val }\n if (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n var floatSingleVal = val;\n return floatSingleVal\n }\n if (this._modelType === PrecisionModel.FIXED) {\n return Math.round(val * this._scale) / this._scale\n }\n return val\n } else if (arguments[0] instanceof Coordinate) {\n var coord = arguments[0];\n if (this._modelType === PrecisionModel.FLOATING) { return null }\n coord.x = this.makePrecise(coord.x);\n coord.y = this.makePrecise(coord.y);\n }\n};\nPrecisionModel.prototype.getMaximumSignificantDigits = function getMaximumSignificantDigits () {\n var maxSigDigits = 16;\n if (this._modelType === PrecisionModel.FLOATING) {\n maxSigDigits = 16;\n } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n maxSigDigits = 6;\n } else if (this._modelType === PrecisionModel.FIXED) {\n maxSigDigits = 1 + Math.trunc(Math.ceil(Math.log(this.getScale()) / Math.log(10)));\n }\n return maxSigDigits\n};\nPrecisionModel.prototype.setScale = function setScale (scale) {\n this._scale = Math.abs(scale);\n};\nPrecisionModel.prototype.interfaces_ = function interfaces_ () {\n return [Serializable, Comparable]\n};\nPrecisionModel.prototype.getClass = function getClass () {\n return PrecisionModel\n};\nPrecisionModel.mostPrecise = function mostPrecise (pm1, pm2) {\n if (pm1.compareTo(pm2) >= 0) { return pm1 }\n return pm2\n};\nstaticAccessors$19.serialVersionUID.get = function () { return 7777263578777803835 };\nstaticAccessors$19.maximumPreciseValue.get = function () { return 9007199254740992.0 };\n\nObject.defineProperties( PrecisionModel, staticAccessors$19 );\n\nvar Type = function Type (name) {\n this._name = name || null;\n Type.nameToTypeMap.put(name, this);\n};\n\nvar staticAccessors$1$1 = { serialVersionUID: { configurable: true },nameToTypeMap: { configurable: true } };\nType.prototype.readResolve = function readResolve () {\n return Type.nameToTypeMap.get(this._name)\n};\nType.prototype.toString = function toString () {\n return this._name\n};\nType.prototype.interfaces_ = function interfaces_ () {\n return [Serializable]\n};\nType.prototype.getClass = function getClass () {\n return Type\n};\nstaticAccessors$1$1.serialVersionUID.get = function () { return -5528602631731589822 };\nstaticAccessors$1$1.nameToTypeMap.get = function () { return new HashMap() };\n\nObject.defineProperties( Type, staticAccessors$1$1 );\n\nPrecisionModel.Type = Type;\nPrecisionModel.FIXED = new Type('FIXED');\nPrecisionModel.FLOATING = new Type('FLOATING');\nPrecisionModel.FLOATING_SINGLE = new Type('FLOATING SINGLE');\n\nvar GeometryFactory = function GeometryFactory () {\n this._precisionModel = new PrecisionModel();\n this._SRID = 0;\n this._coordinateSequenceFactory = GeometryFactory.getDefaultCoordinateSequenceFactory();\n\n if (arguments.length === 0) {\n } else if (arguments.length === 1) {\n if (hasInterface(arguments[0], CoordinateSequenceFactory)) {\n this._coordinateSequenceFactory = arguments[0];\n } else if (arguments[0] instanceof PrecisionModel) {\n this._precisionModel = arguments[0];\n }\n } else if (arguments.length === 2) {\n this._precisionModel = arguments[0];\n this._SRID = arguments[1];\n } else if (arguments.length === 3) {\n this._precisionModel = arguments[0];\n this._SRID = arguments[1];\n this._coordinateSequenceFactory = arguments[2];\n }\n};\n\nvar staticAccessors$2 = { serialVersionUID: { configurable: true } };\nGeometryFactory.prototype.toGeometry = function toGeometry (envelope) {\n if (envelope.isNull()) {\n return this.createPoint(null)\n }\n if (envelope.getMinX() === envelope.getMaxX() && envelope.getMinY() === envelope.getMaxY()) {\n return this.createPoint(new Coordinate(envelope.getMinX(), envelope.getMinY()))\n }\n if (envelope.getMinX() === envelope.getMaxX() || envelope.getMinY() === envelope.getMaxY()) {\n return this.createLineString([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY())])\n }\n return this.createPolygon(this.createLinearRing([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMinY())]), null)\n};\nGeometryFactory.prototype.createLineString = function createLineString (coordinates) {\n if (!coordinates) { return new LineString(this.getCoordinateSequenceFactory().create([]), this) }\n else if (coordinates instanceof Array) { return new LineString(this.getCoordinateSequenceFactory().create(coordinates), this) }\n else if (hasInterface(coordinates, CoordinateSequence)) { return new LineString(coordinates, this) }\n};\nGeometryFactory.prototype.createMultiLineString = function createMultiLineString () {\n if (arguments.length === 0) {\n return new MultiLineString(null, this)\n } else if (arguments.length === 1) {\n var lineStrings = arguments[0];\n return new MultiLineString(lineStrings, this)\n }\n};\nGeometryFactory.prototype.buildGeometry = function buildGeometry (geomList) {\n var geomClass = null;\n var isHeterogeneous = false;\n var hasGeometryCollection = false;\n for (var i = geomList.iterator(); i.hasNext();) {\n var geom = i.next();\n var partClass = geom.getClass();\n if (geomClass === null) {\n geomClass = partClass;\n }\n if (partClass !== geomClass) {\n isHeterogeneous = true;\n }\n if (geom.isGeometryCollectionOrDerived()) { hasGeometryCollection = true; }\n }\n if (geomClass === null) {\n return this.createGeometryCollection()\n }\n if (isHeterogeneous || hasGeometryCollection) {\n return this.createGeometryCollection(GeometryFactory.toGeometryArray(geomList))\n }\n var geom0 = geomList.iterator().next();\n var isCollection = geomList.size() > 1;\n if (isCollection) {\n if (geom0 instanceof Polygon) {\n return this.createMultiPolygon(GeometryFactory.toPolygonArray(geomList))\n } else if (geom0 instanceof LineString) {\n return this.createMultiLineString(GeometryFactory.toLineStringArray(geomList))\n } else if (geom0 instanceof Point) {\n return this.createMultiPoint(GeometryFactory.toPointArray(geomList))\n }\n Assert.shouldNeverReachHere('Unhandled class: ' + geom0.getClass().getName());\n }\n return geom0\n};\nGeometryFactory.prototype.createMultiPointFromCoords = function createMultiPointFromCoords (coordinates) {\n return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)\n};\nGeometryFactory.prototype.createPoint = function createPoint () {\n if (arguments.length === 0) {\n return this.createPoint(this.getCoordinateSequenceFactory().create([]))\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n var coordinate = arguments[0];\n return this.createPoint(coordinate !== null ? this.getCoordinateSequenceFactory().create([coordinate]) : null)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n var coordinates = arguments[0];\n return new Point(coordinates, this)\n }\n }\n};\nGeometryFactory.prototype.getCoordinateSequenceFactory = function getCoordinateSequenceFactory () {\n return this._coordinateSequenceFactory\n};\nGeometryFactory.prototype.createPolygon = function createPolygon () {\n if (arguments.length === 0) {\n return new Polygon(null, null, this)\n } else if (arguments.length === 1) {\n if (hasInterface(arguments[0], CoordinateSequence)) {\n var coordinates = arguments[0];\n return this.createPolygon(this.createLinearRing(coordinates))\n } else if (arguments[0] instanceof Array) {\n var coordinates$1 = arguments[0];\n return this.createPolygon(this.createLinearRing(coordinates$1))\n } else if (arguments[0] instanceof LinearRing) {\n var shell = arguments[0];\n return this.createPolygon(shell, null)\n }\n } else if (arguments.length === 2) {\n var shell$1 = arguments[0];\n var holes = arguments[1];\n return new Polygon(shell$1, holes, this)\n }\n};\nGeometryFactory.prototype.getSRID = function getSRID () {\n return this._SRID\n};\nGeometryFactory.prototype.createGeometryCollection = function createGeometryCollection () {\n if (arguments.length === 0) {\n return new GeometryCollection(null, this)\n } else if (arguments.length === 1) {\n var geometries = arguments[0];\n return new GeometryCollection(geometries, this)\n }\n};\nGeometryFactory.prototype.createGeometry = function createGeometry (g) {\n var editor = new GeometryEditor(this);\n return editor.edit(g, {\n edit: function () {\n if (arguments.length === 2) {\n var coordSeq = arguments[0];\n // const geometry = arguments[1]\n return this._coordinateSequenceFactory.create(coordSeq)\n }\n }\n })\n};\nGeometryFactory.prototype.getPrecisionModel = function getPrecisionModel () {\n return this._precisionModel\n};\nGeometryFactory.prototype.createLinearRing = function createLinearRing () {\n if (arguments.length === 0) {\n return this.createLinearRing(this.getCoordinateSequenceFactory().create([]))\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n var coordinates = arguments[0];\n return this.createLinearRing(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n var coordinates$1 = arguments[0];\n return new LinearRing(coordinates$1, this)\n }\n }\n};\nGeometryFactory.prototype.createMultiPolygon = function createMultiPolygon () {\n if (arguments.length === 0) {\n return new MultiPolygon(null, this)\n } else if (arguments.length === 1) {\n var polygons = arguments[0];\n return new MultiPolygon(polygons, this)\n }\n};\nGeometryFactory.prototype.createMultiPoint = function createMultiPoint () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n return new MultiPoint(null, this)\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n var point = arguments[0];\n return new MultiPoint(point, this)\n } else if (arguments[0] instanceof Array) {\n var coordinates = arguments[0];\n return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n var coordinates$1 = arguments[0];\n if (coordinates$1 === null) {\n return this.createMultiPoint(new Array(0).fill(null))\n }\n var points = new Array(coordinates$1.size()).fill(null);\n for (var i = 0; i < coordinates$1.size(); i++) {\n var ptSeq = this$1.getCoordinateSequenceFactory().create(1, coordinates$1.getDimension());\n CoordinateSequences.copy(coordinates$1, i, ptSeq, 0, 1);\n points[i] = this$1.createPoint(ptSeq);\n }\n return this.createMultiPoint(points)\n }\n }\n};\nGeometryFactory.prototype.interfaces_ = function interfaces_ () {\n return [Serializable]\n};\nGeometryFactory.prototype.getClass = function getClass () {\n return GeometryFactory\n};\nGeometryFactory.toMultiPolygonArray = function toMultiPolygonArray (multiPolygons) {\n var multiPolygonArray = new Array(multiPolygons.size()).fill(null);\n return multiPolygons.toArray(multiPolygonArray)\n};\nGeometryFactory.toGeometryArray = function toGeometryArray (geometries) {\n if (geometries === null) { return null }\n var geometryArray = new Array(geometries.size()).fill(null);\n return geometries.toArray(geometryArray)\n};\nGeometryFactory.getDefaultCoordinateSequenceFactory = function getDefaultCoordinateSequenceFactory () {\n return CoordinateArraySequenceFactory.instance()\n};\nGeometryFactory.toMultiLineStringArray = function toMultiLineStringArray (multiLineStrings) {\n var multiLineStringArray = new Array(multiLineStrings.size()).fill(null);\n return multiLineStrings.toArray(multiLineStringArray)\n};\nGeometryFactory.toLineStringArray = function toLineStringArray (lineStrings) {\n var lineStringArray = new Array(lineStrings.size()).fill(null);\n return lineStrings.toArray(lineStringArray)\n};\nGeometryFactory.toMultiPointArray = function toMultiPointArray (multiPoints) {\n var multiPointArray = new Array(multiPoints.size()).fill(null);\n return multiPoints.toArray(multiPointArray)\n};\nGeometryFactory.toLinearRingArray = function toLinearRingArray (linearRings) {\n var linearRingArray = new Array(linearRings.size()).fill(null);\n return linearRings.toArray(linearRingArray)\n};\nGeometryFactory.toPointArray = function toPointArray (points) {\n var pointArray = new Array(points.size()).fill(null);\n return points.toArray(pointArray)\n};\nGeometryFactory.toPolygonArray = function toPolygonArray (polygons) {\n var polygonArray = new Array(polygons.size()).fill(null);\n return polygons.toArray(polygonArray)\n};\nGeometryFactory.createPointFromInternalCoord = function createPointFromInternalCoord (coord, exemplar) {\n exemplar.getPrecisionModel().makePrecise(coord);\n return exemplar.getFactory().createPoint(coord)\n};\nstaticAccessors$2.serialVersionUID.get = function () { return -6820524753094095635 };\n\nObject.defineProperties( GeometryFactory, staticAccessors$2 );\n\nvar geometryTypes = ['Point', 'MultiPoint', 'LineString', 'MultiLineString', 'Polygon', 'MultiPolygon'];\n\n/**\n * Class for reading and writing Well-Known Text.Create a new parser for GeoJSON\n * NOTE: Adapted from OpenLayers 2.11 implementation.\n */\n\n/**\n * Create a new parser for GeoJSON\n *\n * @param {GeometryFactory} geometryFactory\n * @return An instance of GeoJsonParser.\n * @constructor\n * @private\n */\nvar GeoJSONParser = function GeoJSONParser (geometryFactory) {\n this.geometryFactory = geometryFactory || new GeometryFactory();\n};\n/**\n * Deserialize a GeoJSON object and return the Geometry or Feature(Collection) with JSTS Geometries\n *\n * @param {}\n * A GeoJSON object.\n * @return {} A Geometry instance or object representing a Feature(Collection) with Geometry instances.\n * @private\n */\nGeoJSONParser.prototype.read = function read (json) {\n var obj;\n if (typeof json === 'string') {\n obj = JSON.parse(json);\n } else {\n obj = json;\n }\n\n var type = obj.type;\n\n if (!parse[type]) {\n throw new Error('Unknown GeoJSON type: ' + obj.type)\n }\n\n if (geometryTypes.indexOf(type) !== -1) {\n return parse[type].apply(this, [obj.coordinates])\n } else if (type === 'GeometryCollection') {\n return parse[type].apply(this, [obj.geometries])\n }\n\n // feature or feature collection\n return parse[type].apply(this, [obj])\n};\n\n/**\n * Serialize a Geometry object into GeoJSON\n *\n * @param {Geometry}\n * geometry A Geometry or array of Geometries.\n * @return {Object} A GeoJSON object represting the input Geometry/Geometries.\n * @private\n */\nGeoJSONParser.prototype.write = function write (geometry) {\n var type = geometry.getGeometryType();\n\n if (!extract[type]) {\n throw new Error('Geometry is not supported')\n }\n\n return extract[type].apply(this, [geometry])\n};\n\nvar parse = {\n /**\n * Parse a GeoJSON Feature object\n *\n * @param {Object}\n * obj Object to parse.\n *\n * @return {Object} Feature with geometry/bbox converted to JSTS Geometries.\n */\n Feature: function (obj) {\n var feature = {};\n\n // copy features\n for (var key in obj) {\n feature[key] = obj[key];\n }\n\n // parse geometry\n if (obj.geometry) {\n var type = obj.geometry.type;\n if (!parse[type]) {\n throw new Error('Unknown GeoJSON type: ' + obj.type)\n }\n feature.geometry = this.read(obj.geometry);\n }\n\n // bbox\n if (obj.bbox) {\n feature.bbox = parse.bbox.apply(this, [obj.bbox]);\n }\n\n return feature\n },\n\n /**\n * Parse a GeoJSON FeatureCollection object\n *\n * @param {Object}\n * obj Object to parse.\n *\n * @return {Object} FeatureCollection with geometry/bbox converted to JSTS Geometries.\n */\n FeatureCollection: function (obj) {\n var this$1 = this;\n\n var featureCollection = {};\n\n if (obj.features) {\n featureCollection.features = [];\n\n for (var i = 0; i < obj.features.length; ++i) {\n featureCollection.features.push(this$1.read(obj.features[i]));\n }\n }\n\n if (obj.bbox) {\n featureCollection.bbox = this.parse.bbox.apply(this, [obj.bbox]);\n }\n\n return featureCollection\n },\n\n /**\n * Convert the ordinates in an array to an array of Coordinates\n *\n * @param {Array}\n * array Array with {Number}s.\n *\n * @return {Array} Array with Coordinates.\n */\n coordinates: function (array) {\n var coordinates = [];\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i];\n coordinates.push(new Coordinate(sub[0], sub[1]));\n }\n return coordinates\n },\n\n /**\n * Convert the bbox to a LinearRing\n *\n * @param {Array}\n * array Array with [xMin, yMin, xMax, yMax].\n *\n * @return {Array} Array with Coordinates.\n */\n bbox: function (array) {\n return this.geometryFactory.createLinearRing([\n new Coordinate(array[0], array[1]),\n new Coordinate(array[2], array[1]),\n new Coordinate(array[2], array[3]),\n new Coordinate(array[0], array[3]),\n new Coordinate(array[0], array[1])\n ])\n },\n\n /**\n * Convert an Array with ordinates to a Point\n *\n * @param {Array}\n * array Array with ordinates.\n *\n * @return {Point} Point.\n */\n Point: function (array) {\n var coordinate = new Coordinate(array[0], array[1]);\n return this.geometryFactory.createPoint(coordinate)\n },\n\n /**\n * Convert an Array with coordinates to a MultiPoint\n *\n * @param {Array}\n * array Array with coordinates.\n *\n * @return {MultiPoint} MultiPoint.\n */\n MultiPoint: function (array) {\n var this$1 = this;\n\n var points = [];\n for (var i = 0; i < array.length; ++i) {\n points.push(parse.Point.apply(this$1, [array[i]]));\n }\n return this.geometryFactory.createMultiPoint(points)\n },\n\n /**\n * Convert an Array with coordinates to a LineString\n *\n * @param {Array}\n * array Array with coordinates.\n *\n * @return {LineString} LineString.\n */\n LineString: function (array) {\n var coordinates = parse.coordinates.apply(this, [array]);\n return this.geometryFactory.createLineString(coordinates)\n },\n\n /**\n * Convert an Array with coordinates to a MultiLineString\n *\n * @param {Array}\n * array Array with coordinates.\n *\n * @return {MultiLineString} MultiLineString.\n */\n MultiLineString: function (array) {\n var this$1 = this;\n\n var lineStrings = [];\n for (var i = 0; i < array.length; ++i) {\n lineStrings.push(parse.LineString.apply(this$1, [array[i]]));\n }\n return this.geometryFactory.createMultiLineString(lineStrings)\n },\n\n /**\n * Convert an Array to a Polygon\n *\n * @param {Array}\n * array Array with shell and holes.\n *\n * @return {Polygon} Polygon.\n */\n Polygon: function (array) {\n var this$1 = this;\n\n var shellCoordinates = parse.coordinates.apply(this, [array[0]]);\n var shell = this.geometryFactory.createLinearRing(shellCoordinates);\n var holes = [];\n for (var i = 1; i < array.length; ++i) {\n var hole = array[i];\n var coordinates = parse.coordinates.apply(this$1, [hole]);\n var linearRing = this$1.geometryFactory.createLinearRing(coordinates);\n holes.push(linearRing);\n }\n return this.geometryFactory.createPolygon(shell, holes)\n },\n\n /**\n * Convert an Array to a MultiPolygon\n *\n * @param {Array}\n * array Array of arrays with shell and rings.\n *\n * @return {MultiPolygon} MultiPolygon.\n */\n MultiPolygon: function (array) {\n var this$1 = this;\n\n var polygons = [];\n for (var i = 0; i < array.length; ++i) {\n var polygon = array[i];\n polygons.push(parse.Polygon.apply(this$1, [polygon]));\n }\n return this.geometryFactory.createMultiPolygon(polygons)\n },\n\n /**\n * Convert an Array to a GeometryCollection\n *\n * @param {Array}\n * array Array of GeoJSON geometries.\n *\n * @return {GeometryCollection} GeometryCollection.\n */\n GeometryCollection: function (array) {\n var this$1 = this;\n\n var geometries = [];\n for (var i = 0; i < array.length; ++i) {\n var geometry = array[i];\n geometries.push(this$1.read(geometry));\n }\n return this.geometryFactory.createGeometryCollection(geometries)\n }\n};\n\nvar extract = {\n /**\n * Convert a Coordinate to an Array\n *\n * @param {Coordinate}\n * coordinate Coordinate to convert.\n *\n * @return {Array} Array of ordinates.\n */\n coordinate: function (coordinate) {\n return [coordinate.x, coordinate.y]\n },\n\n /**\n * Convert a Point to a GeoJSON object\n *\n * @param {Point}\n * point Point to convert.\n *\n * @return {Array} Array of 2 ordinates (paired to a coordinate).\n */\n Point: function (point) {\n var array = extract.coordinate.apply(this, [point.getCoordinate()]);\n return {\n type: 'Point',\n coordinates: array\n }\n },\n\n /**\n * Convert a MultiPoint to a GeoJSON object\n *\n * @param {MultiPoint}\n * multipoint MultiPoint to convert.\n *\n * @return {Array} Array of coordinates.\n */\n MultiPoint: function (multipoint) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0; i < multipoint._geometries.length; ++i) {\n var point = multipoint._geometries[i];\n var geoJson = extract.Point.apply(this$1, [point]);\n array.push(geoJson.coordinates);\n }\n return {\n type: 'MultiPoint',\n coordinates: array\n }\n },\n\n /**\n * Convert a LineString to a GeoJSON object\n *\n * @param {LineString}\n * linestring LineString to convert.\n *\n * @return {Array} Array of coordinates.\n */\n LineString: function (linestring) {\n var this$1 = this;\n\n var array = [];\n var coordinates = linestring.getCoordinates();\n for (var i = 0; i < coordinates.length; ++i) {\n var coordinate = coordinates[i];\n array.push(extract.coordinate.apply(this$1, [coordinate]));\n }\n return {\n type: 'LineString',\n coordinates: array\n }\n },\n\n /**\n * Convert a MultiLineString to a GeoJSON object\n *\n * @param {MultiLineString}\n * multilinestring MultiLineString to convert.\n *\n * @return {Array} Array of Array of coordinates.\n */\n MultiLineString: function (multilinestring) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0; i < multilinestring._geometries.length; ++i) {\n var linestring = multilinestring._geometries[i];\n var geoJson = extract.LineString.apply(this$1, [linestring]);\n array.push(geoJson.coordinates);\n }\n return {\n type: 'MultiLineString',\n coordinates: array\n }\n },\n\n /**\n * Convert a Polygon to a GeoJSON object\n *\n * @param {Polygon}\n * polygon Polygon to convert.\n *\n * @return {Array} Array with shell, holes.\n */\n Polygon: function (polygon) {\n var this$1 = this;\n\n var array = [];\n var shellGeoJson = extract.LineString.apply(this, [polygon._shell]);\n array.push(shellGeoJson.coordinates);\n for (var i = 0; i < polygon._holes.length; ++i) {\n var hole = polygon._holes[i];\n var holeGeoJson = extract.LineString.apply(this$1, [hole]);\n array.push(holeGeoJson.coordinates);\n }\n return {\n type: 'Polygon',\n coordinates: array\n }\n },\n\n /**\n * Convert a MultiPolygon to a GeoJSON object\n *\n * @param {MultiPolygon}\n * multipolygon MultiPolygon to convert.\n *\n * @return {Array} Array of polygons.\n */\n MultiPolygon: function (multipolygon) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0; i < multipolygon._geometries.length; ++i) {\n var polygon = multipolygon._geometries[i];\n var geoJson = extract.Polygon.apply(this$1, [polygon]);\n array.push(geoJson.coordinates);\n }\n return {\n type: 'MultiPolygon',\n coordinates: array\n }\n },\n\n /**\n * Convert a GeometryCollection to a GeoJSON object\n *\n * @param {GeometryCollection}\n * collection GeometryCollection to convert.\n *\n * @return {Array} Array of geometries.\n */\n GeometryCollection: function (collection) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0; i < collection._geometries.length; ++i) {\n var geometry = collection._geometries[i];\n var type = geometry.getGeometryType();\n array.push(extract[type].apply(this$1, [geometry]));\n }\n return {\n type: 'GeometryCollection',\n geometries: array\n }\n }\n};\n\n/**\n * Converts a geometry in GeoJSON to a {@link Geometry}.\n */\n\n/**\n * A <code>GeoJSONReader</code> is parameterized by a <code>GeometryFactory</code>,\n * to allow it to create <code>Geometry</code> objects of the appropriate\n * implementation. In particular, the <code>GeometryFactory</code> determines\n * the <code>PrecisionModel</code> and <code>SRID</code> that is used.\n *\n * @param {GeometryFactory} geometryFactory\n * @constructor\n */\nvar GeoJSONReader = function GeoJSONReader (geometryFactory) {\n this.geometryFactory = geometryFactory || new GeometryFactory();\n this.precisionModel = this.geometryFactory.getPrecisionModel();\n this.parser = new GeoJSONParser(this.geometryFactory);\n};\n/**\n * Reads a GeoJSON representation of a {@link Geometry}\n *\n * Will also parse GeoJSON Features/FeatureCollections as custom objects.\n *\n * @param {Object|String} geoJson a GeoJSON Object or String.\n * @return {Geometry|Object} a <code>Geometry or Feature/FeatureCollection representation.</code>\n * @memberof GeoJSONReader\n */\nGeoJSONReader.prototype.read = function read (geoJson) {\n var geometry = this.parser.read(geoJson);\n\n if (this.precisionModel.getType() === PrecisionModel.FIXED) {\n this.reducePrecision(geometry);\n }\n\n return geometry\n};\n\n// NOTE: this is a hack\nGeoJSONReader.prototype.reducePrecision = function reducePrecision (geometry) {\n var this$1 = this;\n\n var i, len;\n\n if (geometry.coordinate) {\n this.precisionModel.makePrecise(geometry.coordinate);\n } else if (geometry.points) {\n for (i = 0, len = geometry.points.length; i < len; i++) {\n this$1.precisionModel.makePrecise(geometry.points[i]);\n }\n } else if (geometry.geometries) {\n for (i = 0, len = geometry.geometries.length; i < len; i++) {\n this$1.reducePrecision(geometry.geometries[i]);\n }\n }\n};\n\n/**\n * @module GeoJSONWriter\n */\n\n/**\n * Writes the GeoJSON representation of a {@link Geometry}. The\n * The GeoJSON format is defined <A\n * HREF=\"http://geojson.org/geojson-spec.html\">here</A>.\n */\n\n/**\n * The <code>GeoJSONWriter</code> outputs coordinates rounded to the precision\n * model. Only the maximum number of decimal places necessary to represent the\n * ordinates to the required precision will be output.\n *\n * @param {GeometryFactory} geometryFactory\n * @constructor\n */\nvar GeoJSONWriter = function GeoJSONWriter () {\n this.parser = new GeoJSONParser(this.geometryFactory);\n};\n/**\n * Converts a <code>Geometry</code> to its GeoJSON representation.\n *\n * @param {Geometry}\n * geometry a <code>Geometry</code> to process.\n * @return {Object} The GeoJSON representation of the Geometry.\n * @memberof GeoJSONWriter\n */\nGeoJSONWriter.prototype.write = function write (geometry) {\n return this.parser.write(geometry)\n};\n\n/* eslint-disable no-undef */\n\n// io\n\nvar Position = function Position () {};\n\nvar staticAccessors$20 = { ON: { configurable: true },LEFT: { configurable: true },RIGHT: { configurable: true } };\n\nPosition.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPosition.prototype.getClass = function getClass () {\n return Position\n};\nPosition.opposite = function opposite (position) {\n if (position === Position.LEFT) { return Position.RIGHT }\n if (position === Position.RIGHT) { return Position.LEFT }\n return position\n};\nstaticAccessors$20.ON.get = function () { return 0 };\nstaticAccessors$20.LEFT.get = function () { return 1 };\nstaticAccessors$20.RIGHT.get = function () { return 2 };\n\nObject.defineProperties( Position, staticAccessors$20 );\n\n/**\n * @param {string=} message Optional message\n * @extends {Error}\n * @constructor\n * @private\n */\nfunction EmptyStackException (message) {\n this.message = message || '';\n}\nEmptyStackException.prototype = new Error();\n\n/**\n * @type {string}\n */\nEmptyStackException.prototype.name = 'EmptyStackException';\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Stack.html\n *\n * @extends {List}\n * @constructor\n * @private\n */\nfunction Stack () {\n /**\n * @type {Array}\n * @private\n */\n this.array_ = [];\n}\nStack.prototype = new List();\n\n/**\n * @override\n */\nStack.prototype.add = function (e) {\n this.array_.push(e);\n return true\n};\n\n/**\n * @override\n */\nStack.prototype.get = function (index) {\n if (index < 0 || index >= this.size()) {\n throw new Error()\n }\n\n return this.array_[index]\n};\n\n/**\n * Pushes an item onto the top of this stack.\n * @param {Object} e\n * @return {Object}\n */\nStack.prototype.push = function (e) {\n this.array_.push(e);\n return e\n};\n\n/**\n * Pushes an item onto the top of this stack.\n * @param {Object} e\n * @return {Object}\n */\nStack.prototype.pop = function (e) {\n if (this.array_.length === 0) {\n throw new EmptyStackException()\n }\n\n return this.array_.pop()\n};\n\n/**\n * Looks at the object at the top of this stack without removing it from the\n * stack.\n * @return {Object}\n */\nStack.prototype.peek = function () {\n if (this.array_.length === 0) {\n throw new EmptyStackException()\n }\n\n return this.array_[this.array_.length - 1]\n};\n\n/**\n * Tests if this stack is empty.\n * @return {boolean} true if and only if this stack contains no items; false\n * otherwise.\n */\nStack.prototype.empty = function () {\n if (this.array_.length === 0) {\n return true\n } else {\n return false\n }\n};\n\n/**\n * @return {boolean}\n */\nStack.prototype.isEmpty = function () {\n return this.empty()\n};\n\n/**\n * Returns the 1-based position where an object is on this stack. If the object\n * o occurs as an item in this stack, this method returns the distance from the\n * top of the stack of the occurrence nearest the top of the stack; the topmost\n * item on the stack is considered to be at distance 1. The equals method is\n * used to compare o to the items in this stack.\n *\n * NOTE: does not currently actually use equals. (=== is used)\n *\n * @param {Object} o\n * @return {number} the 1-based position from the top of the stack where the\n * object is located; the return value -1 indicates that the object is\n * not on the stack.\n */\nStack.prototype.search = function (o) {\n return this.array_.indexOf(o)\n};\n\n/**\n * @return {number}\n * @export\n */\nStack.prototype.size = function () {\n return this.array_.length\n};\n\n/**\n * @return {Array}\n */\nStack.prototype.toArray = function () {\n var this$1 = this;\n\n var array = [];\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n array.push(this$1.array_[i]);\n }\n\n return array\n};\n\nvar RightmostEdgeFinder = function RightmostEdgeFinder () {\n this._minIndex = -1;\n this._minCoord = null;\n this._minDe = null;\n this._orientedDe = null;\n};\nRightmostEdgeFinder.prototype.getCoordinate = function getCoordinate () {\n return this._minCoord\n};\nRightmostEdgeFinder.prototype.getRightmostSide = function getRightmostSide (de, index) {\n var side = this.getRightmostSideOfSegment(de, index);\n if (side < 0) { side = this.getRightmostSideOfSegment(de, index - 1); }\n if (side < 0) {\n this._minCoord = null;\n this.checkForRightmostCoordinate(de);\n }\n return side\n};\nRightmostEdgeFinder.prototype.findRightmostEdgeAtVertex = function findRightmostEdgeAtVertex () {\n var pts = this._minDe.getEdge().getCoordinates();\n Assert.isTrue(this._minIndex > 0 && this._minIndex < pts.length, 'rightmost point expected to be interior vertex of edge');\n var pPrev = pts[this._minIndex - 1];\n var pNext = pts[this._minIndex + 1];\n var orientation = CGAlgorithms.computeOrientation(this._minCoord, pNext, pPrev);\n var usePrev = false;\n if (pPrev.y < this._minCoord.y && pNext.y < this._minCoord.y && orientation === CGAlgorithms.COUNTERCLOCKWISE) {\n usePrev = true;\n } else if (pPrev.y > this._minCoord.y && pNext.y > this._minCoord.y && orientation === CGAlgorithms.CLOCKWISE) {\n usePrev = true;\n }\n if (usePrev) {\n this._minIndex = this._minIndex - 1;\n }\n};\nRightmostEdgeFinder.prototype.getRightmostSideOfSegment = function getRightmostSideOfSegment (de, i) {\n var e = de.getEdge();\n var coord = e.getCoordinates();\n if (i < 0 || i + 1 >= coord.length) { return -1 }\n if (coord[i].y === coord[i + 1].y) { return -1 }\n var pos = Position.LEFT;\n if (coord[i].y < coord[i + 1].y) { pos = Position.RIGHT; }\n return pos\n};\nRightmostEdgeFinder.prototype.getEdge = function getEdge () {\n return this._orientedDe\n};\nRightmostEdgeFinder.prototype.checkForRightmostCoordinate = function checkForRightmostCoordinate (de) {\n var this$1 = this;\n\n var coord = de.getEdge().getCoordinates();\n for (var i = 0; i < coord.length - 1; i++) {\n if (this$1._minCoord === null || coord[i].x > this$1._minCoord.x) {\n this$1._minDe = de;\n this$1._minIndex = i;\n this$1._minCoord = coord[i];\n }\n }\n};\nRightmostEdgeFinder.prototype.findRightmostEdgeAtNode = function findRightmostEdgeAtNode () {\n var node = this._minDe.getNode();\n var star = node.getEdges();\n this._minDe = star.getRightmostEdge();\n if (!this._minDe.isForward()) {\n this._minDe = this._minDe.getSym();\n this._minIndex = this._minDe.getEdge().getCoordinates().length - 1;\n }\n};\nRightmostEdgeFinder.prototype.findEdge = function findEdge (dirEdgeList) {\n var this$1 = this;\n\n for (var i = dirEdgeList.iterator(); i.hasNext();) {\n var de = i.next();\n if (!de.isForward()) { continue }\n this$1.checkForRightmostCoordinate(de);\n }\n Assert.isTrue(this._minIndex !== 0 || this._minCoord.equals(this._minDe.getCoordinate()), 'inconsistency in rightmost processing');\n if (this._minIndex === 0) {\n this.findRightmostEdgeAtNode();\n } else {\n this.findRightmostEdgeAtVertex();\n }\n this._orientedDe = this._minDe;\n var rightmostSide = this.getRightmostSide(this._minDe, this._minIndex);\n if (rightmostSide === Position.LEFT) {\n this._orientedDe = this._minDe.getSym();\n }\n};\nRightmostEdgeFinder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nRightmostEdgeFinder.prototype.getClass = function getClass () {\n return RightmostEdgeFinder\n};\n\nvar TopologyException = (function (RuntimeException$$1) {\n function TopologyException (msg, pt) {\n RuntimeException$$1.call(this, TopologyException.msgWithCoord(msg, pt));\n this.pt = pt ? new Coordinate(pt) : null;\n this.name = 'TopologyException';\n }\n\n if ( RuntimeException$$1 ) TopologyException.__proto__ = RuntimeException$$1;\n TopologyException.prototype = Object.create( RuntimeException$$1 && RuntimeException$$1.prototype );\n TopologyException.prototype.constructor = TopologyException;\n TopologyException.prototype.getCoordinate = function getCoordinate () {\n return this.pt\n };\n TopologyException.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n TopologyException.prototype.getClass = function getClass () {\n return TopologyException\n };\n TopologyException.msgWithCoord = function msgWithCoord (msg, pt) {\n if (!pt) { return msg + ' [ ' + pt + ' ]' }\n return msg\n };\n\n return TopologyException;\n}(RuntimeException));\n\nvar LinkedList = function LinkedList () {\n this.array_ = [];\n};\nLinkedList.prototype.addLast = function addLast (e) {\n this.array_.push(e);\n};\nLinkedList.prototype.removeFirst = function removeFirst () {\n return this.array_.shift()\n};\nLinkedList.prototype.isEmpty = function isEmpty () {\n return this.array_.length === 0\n};\n\nvar BufferSubgraph = function BufferSubgraph () {\n this._finder = null;\n this._dirEdgeList = new ArrayList();\n this._nodes = new ArrayList();\n this._rightMostCoord = null;\n this._env = null;\n this._finder = new RightmostEdgeFinder();\n};\nBufferSubgraph.prototype.clearVisitedEdges = function clearVisitedEdges () {\n for (var it = this._dirEdgeList.iterator(); it.hasNext();) {\n var de = it.next();\n de.setVisited(false);\n }\n};\nBufferSubgraph.prototype.getRightmostCoordinate = function getRightmostCoordinate () {\n return this._rightMostCoord\n};\nBufferSubgraph.prototype.computeNodeDepth = function computeNodeDepth (n) {\n var this$1 = this;\n\n var startEdge = null;\n for (var i = n.getEdges().iterator(); i.hasNext();) {\n var de = i.next();\n if (de.isVisited() || de.getSym().isVisited()) {\n startEdge = de;\n break\n }\n }\n if (startEdge === null) { throw new TopologyException('unable to find edge to compute depths at ' + n.getCoordinate()) }\n n.getEdges().computeDepths(startEdge);\n for (var i$1 = n.getEdges().iterator(); i$1.hasNext();) {\n var de$1 = i$1.next();\n de$1.setVisited(true);\n this$1.copySymDepths(de$1);\n }\n};\nBufferSubgraph.prototype.computeDepth = function computeDepth (outsideDepth) {\n this.clearVisitedEdges();\n var de = this._finder.getEdge();\n // const n = de.getNode()\n // const label = de.getLabel()\n de.setEdgeDepths(Position.RIGHT, outsideDepth);\n this.copySymDepths(de);\n this.computeDepths(de);\n};\nBufferSubgraph.prototype.create = function create (node) {\n this.addReachable(node);\n this._finder.findEdge(this._dirEdgeList);\n this._rightMostCoord = this._finder.getCoordinate();\n};\nBufferSubgraph.prototype.findResultEdges = function findResultEdges () {\n for (var it = this._dirEdgeList.iterator(); it.hasNext();) {\n var de = it.next();\n if (de.getDepth(Position.RIGHT) >= 1 && de.getDepth(Position.LEFT) <= 0 && !de.isInteriorAreaEdge()) {\n de.setInResult(true);\n }\n }\n};\nBufferSubgraph.prototype.computeDepths = function computeDepths (startEdge) {\n var this$1 = this;\n\n var nodesVisited = new HashSet();\n var nodeQueue = new LinkedList();\n var startNode = startEdge.getNode();\n nodeQueue.addLast(startNode);\n nodesVisited.add(startNode);\n startEdge.setVisited(true);\n while (!nodeQueue.isEmpty()) {\n var n = nodeQueue.removeFirst();\n nodesVisited.add(n);\n this$1.computeNodeDepth(n);\n for (var i = n.getEdges().iterator(); i.hasNext();) {\n var de = i.next();\n var sym = de.getSym();\n if (sym.isVisited()) { continue }\n var adjNode = sym.getNode();\n if (!nodesVisited.contains(adjNode)) {\n nodeQueue.addLast(adjNode);\n nodesVisited.add(adjNode);\n }\n }\n }\n};\nBufferSubgraph.prototype.compareTo = function compareTo (o) {\n var graph = o;\n if (this._rightMostCoord.x < graph._rightMostCoord.x) {\n return -1\n }\n if (this._rightMostCoord.x > graph._rightMostCoord.x) {\n return 1\n }\n return 0\n};\nBufferSubgraph.prototype.getEnvelope = function getEnvelope () {\n if (this._env === null) {\n var edgeEnv = new Envelope();\n for (var it = this._dirEdgeList.iterator(); it.hasNext();) {\n var dirEdge = it.next();\n var pts = dirEdge.getEdge().getCoordinates();\n for (var i = 0; i < pts.length - 1; i++) {\n edgeEnv.expandToInclude(pts[i]);\n }\n }\n this._env = edgeEnv;\n }\n return this._env\n};\nBufferSubgraph.prototype.addReachable = function addReachable (startNode) {\n var this$1 = this;\n\n var nodeStack = new Stack();\n nodeStack.add(startNode);\n while (!nodeStack.empty()) {\n var node = nodeStack.pop();\n this$1.add(node, nodeStack);\n }\n};\nBufferSubgraph.prototype.copySymDepths = function copySymDepths (de) {\n var sym = de.getSym();\n sym.setDepth(Position.LEFT, de.getDepth(Position.RIGHT));\n sym.setDepth(Position.RIGHT, de.getDepth(Position.LEFT));\n};\nBufferSubgraph.prototype.add = function add (node, nodeStack) {\n var this$1 = this;\n\n node.setVisited(true);\n this._nodes.add(node);\n for (var i = node.getEdges().iterator(); i.hasNext();) {\n var de = i.next();\n this$1._dirEdgeList.add(de);\n var sym = de.getSym();\n var symNode = sym.getNode();\n if (!symNode.isVisited()) { nodeStack.push(symNode); }\n }\n};\nBufferSubgraph.prototype.getNodes = function getNodes () {\n return this._nodes\n};\nBufferSubgraph.prototype.getDirectedEdges = function getDirectedEdges () {\n return this._dirEdgeList\n};\nBufferSubgraph.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nBufferSubgraph.prototype.getClass = function getClass () {\n return BufferSubgraph\n};\n\nvar TopologyLocation = function TopologyLocation () {\n var this$1 = this;\n\n this.location = null;\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n var location = arguments[0];\n this.init(location.length);\n } else if (Number.isInteger(arguments[0])) {\n var on = arguments[0];\n this.init(1);\n this.location[Position.ON] = on;\n } else if (arguments[0] instanceof TopologyLocation) {\n var gl = arguments[0];\n this.init(gl.location.length);\n if (gl !== null) {\n for (var i = 0; i < this.location.length; i++) {\n this$1.location[i] = gl.location[i];\n }\n }\n }\n } else if (arguments.length === 3) {\n var on$1 = arguments[0];\n var left = arguments[1];\n var right = arguments[2];\n this.init(3);\n this.location[Position.ON] = on$1;\n this.location[Position.LEFT] = left;\n this.location[Position.RIGHT] = right;\n }\n};\nTopologyLocation.prototype.setAllLocations = function setAllLocations (locValue) {\n var this$1 = this;\n\n for (var i = 0; i < this.location.length; i++) {\n this$1.location[i] = locValue;\n }\n};\nTopologyLocation.prototype.isNull = function isNull () {\n var this$1 = this;\n\n for (var i = 0; i < this.location.length; i++) {\n if (this$1.location[i] !== Location.NONE) { return false }\n }\n return true\n};\nTopologyLocation.prototype.setAllLocationsIfNull = function setAllLocationsIfNull (locValue) {\n var this$1 = this;\n\n for (var i = 0; i < this.location.length; i++) {\n if (this$1.location[i] === Location.NONE) { this$1.location[i] = locValue; }\n }\n};\nTopologyLocation.prototype.isLine = function isLine () {\n return this.location.length === 1\n};\nTopologyLocation.prototype.merge = function merge (gl) {\n var this$1 = this;\n\n if (gl.location.length > this.location.length) {\n var newLoc = new Array(3).fill(null);\n newLoc[Position.ON] = this.location[Position.ON];\n newLoc[Position.LEFT] = Location.NONE;\n newLoc[Position.RIGHT] = Location.NONE;\n this.location = newLoc;\n }\n for (var i = 0; i < this.location.length; i++) {\n if (this$1.location[i] === Location.NONE && i < gl.location.length) { this$1.location[i] = gl.location[i]; }\n }\n};\nTopologyLocation.prototype.getLocations = function getLocations () {\n return this.location\n};\nTopologyLocation.prototype.flip = function flip () {\n if (this.location.length <= 1) { return null }\n var temp = this.location[Position.LEFT];\n this.location[Position.LEFT] = this.location[Position.RIGHT];\n this.location[Position.RIGHT] = temp;\n};\nTopologyLocation.prototype.toString = function toString () {\n var buf = new StringBuffer();\n if (this.location.length > 1) { buf.append(Location.toLocationSymbol(this.location[Position.LEFT])); }\n buf.append(Location.toLocationSymbol(this.location[Position.ON]));\n if (this.location.length > 1) { buf.append(Location.toLocationSymbol(this.location[Position.RIGHT])); }\n return buf.toString()\n};\nTopologyLocation.prototype.setLocations = function setLocations (on, left, right) {\n this.location[Position.ON] = on;\n this.location[Position.LEFT] = left;\n this.location[Position.RIGHT] = right;\n};\nTopologyLocation.prototype.get = function get (posIndex) {\n if (posIndex < this.location.length) { return this.location[posIndex] }\n return Location.NONE\n};\nTopologyLocation.prototype.isArea = function isArea () {\n return this.location.length > 1\n};\nTopologyLocation.prototype.isAnyNull = function isAnyNull () {\n var this$1 = this;\n\n for (var i = 0; i < this.location.length; i++) {\n if (this$1.location[i] === Location.NONE) { return true }\n }\n return false\n};\nTopologyLocation.prototype.setLocation = function setLocation () {\n if (arguments.length === 1) {\n var locValue = arguments[0];\n this.setLocation(Position.ON, locValue);\n } else if (arguments.length === 2) {\n var locIndex = arguments[0];\n var locValue$1 = arguments[1];\n this.location[locIndex] = locValue$1;\n }\n};\nTopologyLocation.prototype.init = function init (size) {\n this.location = new Array(size).fill(null);\n this.setAllLocations(Location.NONE);\n};\nTopologyLocation.prototype.isEqualOnSide = function isEqualOnSide (le, locIndex) {\n return this.location[locIndex] === le.location[locIndex]\n};\nTopologyLocation.prototype.allPositionsEqual = function allPositionsEqual (loc) {\n var this$1 = this;\n\n for (var i = 0; i < this.location.length; i++) {\n if (this$1.location[i] !== loc) { return false }\n }\n return true\n};\nTopologyLocation.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nTopologyLocation.prototype.getClass = function getClass () {\n return TopologyLocation\n};\n\nvar Label = function Label () {\n this.elt = new Array(2).fill(null);\n if (arguments.length === 1) {\n if (Number.isInteger(arguments[0])) {\n var onLoc = arguments[0];\n this.elt[0] = new TopologyLocation(onLoc);\n this.elt[1] = new TopologyLocation(onLoc);\n } else if (arguments[0] instanceof Label) {\n var lbl = arguments[0];\n this.elt[0] = new TopologyLocation(lbl.elt[0]);\n this.elt[1] = new TopologyLocation(lbl.elt[1]);\n }\n } else if (arguments.length === 2) {\n var geomIndex = arguments[0];\n var onLoc$1 = arguments[1];\n this.elt[0] = new TopologyLocation(Location.NONE);\n this.elt[1] = new TopologyLocation(Location.NONE);\n this.elt[geomIndex].setLocation(onLoc$1);\n } else if (arguments.length === 3) {\n var onLoc$2 = arguments[0];\n var leftLoc = arguments[1];\n var rightLoc = arguments[2];\n this.elt[0] = new TopologyLocation(onLoc$2, leftLoc, rightLoc);\n this.elt[1] = new TopologyLocation(onLoc$2, leftLoc, rightLoc);\n } else if (arguments.length === 4) {\n var geomIndex$1 = arguments[0];\n var onLoc$3 = arguments[1];\n var leftLoc$1 = arguments[2];\n var rightLoc$1 = arguments[3];\n this.elt[0] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE);\n this.elt[1] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE);\n this.elt[geomIndex$1].setLocations(onLoc$3, leftLoc$1, rightLoc$1);\n }\n};\nLabel.prototype.getGeometryCount = function getGeometryCount () {\n var count = 0;\n if (!this.elt[0].isNull()) { count++; }\n if (!this.elt[1].isNull()) { count++; }\n return count\n};\nLabel.prototype.setAllLocations = function setAllLocations (geomIndex, location) {\n this.elt[geomIndex].setAllLocations(location);\n};\nLabel.prototype.isNull = function isNull (geomIndex) {\n return this.elt[geomIndex].isNull()\n};\nLabel.prototype.setAllLocationsIfNull = function setAllLocationsIfNull () {\n if (arguments.length === 1) {\n var location = arguments[0];\n this.setAllLocationsIfNull(0, location);\n this.setAllLocationsIfNull(1, location);\n } else if (arguments.length === 2) {\n var geomIndex = arguments[0];\n var location$1 = arguments[1];\n this.elt[geomIndex].setAllLocationsIfNull(location$1);\n }\n};\nLabel.prototype.isLine = function isLine (geomIndex) {\n return this.elt[geomIndex].isLine()\n};\nLabel.prototype.merge = function merge (lbl) {\n var this$1 = this;\n\n for (var i = 0; i < 2; i++) {\n if (this$1.elt[i] === null && lbl.elt[i] !== null) {\n this$1.elt[i] = new TopologyLocation(lbl.elt[i]);\n } else {\n this$1.elt[i].merge(lbl.elt[i]);\n }\n }\n};\nLabel.prototype.flip = function flip () {\n this.elt[0].flip();\n this.elt[1].flip();\n};\nLabel.prototype.getLocation = function getLocation () {\n if (arguments.length === 1) {\n var geomIndex = arguments[0];\n return this.elt[geomIndex].get(Position.ON)\n } else if (arguments.length === 2) {\n var geomIndex$1 = arguments[0];\n var posIndex = arguments[1];\n return this.elt[geomIndex$1].get(posIndex)\n }\n};\nLabel.prototype.toString = function toString () {\n var buf = new StringBuffer();\n if (this.elt[0] !== null) {\n buf.append('A:');\n buf.append(this.elt[0].toString());\n }\n if (this.elt[1] !== null) {\n buf.append(' B:');\n buf.append(this.elt[1].toString());\n }\n return buf.toString()\n};\nLabel.prototype.isArea = function isArea () {\n if (arguments.length === 0) {\n return this.elt[0].isArea() || this.elt[1].isArea()\n } else if (arguments.length === 1) {\n var geomIndex = arguments[0];\n return this.elt[geomIndex].isArea()\n }\n};\nLabel.prototype.isAnyNull = function isAnyNull (geomIndex) {\n return this.elt[geomIndex].isAnyNull()\n};\nLabel.prototype.setLocation = function setLocation () {\n if (arguments.length === 2) {\n var geomIndex = arguments[0];\n var location = arguments[1];\n this.elt[geomIndex].setLocation(Position.ON, location);\n } else if (arguments.length === 3) {\n var geomIndex$1 = arguments[0];\n var posIndex = arguments[1];\n var location$1 = arguments[2];\n this.elt[geomIndex$1].setLocation(posIndex, location$1);\n }\n};\nLabel.prototype.isEqualOnSide = function isEqualOnSide (lbl, side) {\n return this.elt[0].isEqualOnSide(lbl.elt[0], side) && this.elt[1].isEqualOnSide(lbl.elt[1], side)\n};\nLabel.prototype.allPositionsEqual = function allPositionsEqual (geomIndex, loc) {\n return this.elt[geomIndex].allPositionsEqual(loc)\n};\nLabel.prototype.toLine = function toLine (geomIndex) {\n if (this.elt[geomIndex].isArea()) { this.elt[geomIndex] = new TopologyLocation(this.elt[geomIndex].location[0]); }\n};\nLabel.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nLabel.prototype.getClass = function getClass () {\n return Label\n};\nLabel.toLineLabel = function toLineLabel (label) {\n var lineLabel = new Label(Location.NONE);\n for (var i = 0; i < 2; i++) {\n lineLabel.setLocation(i, label.getLocation(i));\n }\n return lineLabel\n};\n\nvar EdgeRing = function EdgeRing () {\n this._startDe = null;\n this._maxNodeDegree = -1;\n this._edges = new ArrayList();\n this._pts = new ArrayList();\n this._label = new Label(Location.NONE);\n this._ring = null;\n this._isHole = null;\n this._shell = null;\n this._holes = new ArrayList();\n this._geometryFactory = null;\n var start = arguments[0];\n var geometryFactory = arguments[1];\n this._geometryFactory = geometryFactory;\n this.computePoints(start);\n this.computeRing();\n};\nEdgeRing.prototype.computeRing = function computeRing () {\n var this$1 = this;\n\n if (this._ring !== null) { return null }\n var coord = new Array(this._pts.size()).fill(null);\n for (var i = 0; i < this._pts.size(); i++) {\n coord[i] = this$1._pts.get(i);\n }\n this._ring = this._geometryFactory.createLinearRing(coord);\n this._isHole = CGAlgorithms.isCCW(this._ring.getCoordinates());\n};\nEdgeRing.prototype.isIsolated = function isIsolated () {\n return this._label.getGeometryCount() === 1\n};\nEdgeRing.prototype.computePoints = function computePoints (start) {\n var this$1 = this;\n\n this._startDe = start;\n var de = start;\n var isFirstEdge = true;\n do {\n if (de === null) { throw new TopologyException('Found null DirectedEdge') }\n if (de.getEdgeRing() === this$1) { throw new TopologyException('Directed Edge visited twice during ring-building at ' + de.getCoordinate()) }\n this$1._edges.add(de);\n var label = de.getLabel();\n Assert.isTrue(label.isArea());\n this$1.mergeLabel(label);\n this$1.addPoints(de.getEdge(), de.isForward(), isFirstEdge);\n isFirstEdge = false;\n this$1.setEdgeRing(de, this$1);\n de = this$1.getNext(de);\n } while (de !== this._startDe)\n};\nEdgeRing.prototype.getLinearRing = function getLinearRing () {\n return this._ring\n};\nEdgeRing.prototype.getCoordinate = function getCoordinate (i) {\n return this._pts.get(i)\n};\nEdgeRing.prototype.computeMaxNodeDegree = function computeMaxNodeDegree () {\n var this$1 = this;\n\n this._maxNodeDegree = 0;\n var de = this._startDe;\n do {\n var node = de.getNode();\n var degree = node.getEdges().getOutgoingDegree(this$1);\n if (degree > this$1._maxNodeDegree) { this$1._maxNodeDegree = degree; }\n de = this$1.getNext(de);\n } while (de !== this._startDe)\n this._maxNodeDegree *= 2;\n};\nEdgeRing.prototype.addPoints = function addPoints (edge, isForward, isFirstEdge) {\n var this$1 = this;\n\n var edgePts = edge.getCoordinates();\n if (isForward) {\n var startIndex = 1;\n if (isFirstEdge) { startIndex = 0; }\n for (var i = startIndex; i < edgePts.length; i++) {\n this$1._pts.add(edgePts[i]);\n }\n } else {\n var startIndex$1 = edgePts.length - 2;\n if (isFirstEdge) { startIndex$1 = edgePts.length - 1; }\n for (var i$1 = startIndex$1; i$1 >= 0; i$1--) {\n this$1._pts.add(edgePts[i$1]);\n }\n }\n};\nEdgeRing.prototype.isHole = function isHole () {\n return this._isHole\n};\nEdgeRing.prototype.setInResult = function setInResult () {\n var de = this._startDe;\n do {\n de.getEdge().setInResult(true);\n de = de.getNext();\n } while (de !== this._startDe)\n};\nEdgeRing.prototype.containsPoint = function containsPoint (p) {\n var shell = this.getLinearRing();\n var env = shell.getEnvelopeInternal();\n if (!env.contains(p)) { return false }\n if (!CGAlgorithms.isPointInRing(p, shell.getCoordinates())) { return false }\n for (var i = this._holes.iterator(); i.hasNext();) {\n var hole = i.next();\n if (hole.containsPoint(p)) { return false }\n }\n return true\n};\nEdgeRing.prototype.addHole = function addHole (ring) {\n this._holes.add(ring);\n};\nEdgeRing.prototype.isShell = function isShell () {\n return this._shell === null\n};\nEdgeRing.prototype.getLabel = function getLabel () {\n return this._label\n};\nEdgeRing.prototype.getEdges = function getEdges () {\n return this._edges\n};\nEdgeRing.prototype.getMaxNodeDegree = function getMaxNodeDegree () {\n if (this._maxNodeDegree < 0) { this.computeMaxNodeDegree(); }\n return this._maxNodeDegree\n};\nEdgeRing.prototype.getShell = function getShell () {\n return this._shell\n};\nEdgeRing.prototype.mergeLabel = function mergeLabel () {\n if (arguments.length === 1) {\n var deLabel = arguments[0];\n this.mergeLabel(deLabel, 0);\n this.mergeLabel(deLabel, 1);\n } else if (arguments.length === 2) {\n var deLabel$1 = arguments[0];\n var geomIndex = arguments[1];\n var loc = deLabel$1.getLocation(geomIndex, Position.RIGHT);\n if (loc === Location.NONE) { return null }\n if (this._label.getLocation(geomIndex) === Location.NONE) {\n this._label.setLocation(geomIndex, loc);\n return null\n }\n }\n};\nEdgeRing.prototype.setShell = function setShell (shell) {\n this._shell = shell;\n if (shell !== null) { shell.addHole(this); }\n};\nEdgeRing.prototype.toPolygon = function toPolygon (geometryFactory) {\n var this$1 = this;\n\n var holeLR = new Array(this._holes.size()).fill(null);\n for (var i = 0; i < this._holes.size(); i++) {\n holeLR[i] = this$1._holes.get(i).getLinearRing();\n }\n var poly = geometryFactory.createPolygon(this.getLinearRing(), holeLR);\n return poly\n};\nEdgeRing.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nEdgeRing.prototype.getClass = function getClass () {\n return EdgeRing\n};\n\nvar MinimalEdgeRing = (function (EdgeRing$$1) {\n function MinimalEdgeRing () {\n var start = arguments[0];\n var geometryFactory = arguments[1];\n EdgeRing$$1.call(this, start, geometryFactory);\n }\n\n if ( EdgeRing$$1 ) MinimalEdgeRing.__proto__ = EdgeRing$$1;\n MinimalEdgeRing.prototype = Object.create( EdgeRing$$1 && EdgeRing$$1.prototype );\n MinimalEdgeRing.prototype.constructor = MinimalEdgeRing;\n MinimalEdgeRing.prototype.setEdgeRing = function setEdgeRing (de, er) {\n de.setMinEdgeRing(er);\n };\n MinimalEdgeRing.prototype.getNext = function getNext (de) {\n return de.getNextMin()\n };\n MinimalEdgeRing.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n MinimalEdgeRing.prototype.getClass = function getClass () {\n return MinimalEdgeRing\n };\n\n return MinimalEdgeRing;\n}(EdgeRing));\n\nvar MaximalEdgeRing = (function (EdgeRing$$1) {\n function MaximalEdgeRing () {\n var start = arguments[0];\n var geometryFactory = arguments[1];\n EdgeRing$$1.call(this, start, geometryFactory);\n }\n\n if ( EdgeRing$$1 ) MaximalEdgeRing.__proto__ = EdgeRing$$1;\n MaximalEdgeRing.prototype = Object.create( EdgeRing$$1 && EdgeRing$$1.prototype );\n MaximalEdgeRing.prototype.constructor = MaximalEdgeRing;\n MaximalEdgeRing.prototype.buildMinimalRings = function buildMinimalRings () {\n var this$1 = this;\n\n var minEdgeRings = new ArrayList();\n var de = this._startDe;\n do {\n if (de.getMinEdgeRing() === null) {\n var minEr = new MinimalEdgeRing(de, this$1._geometryFactory);\n minEdgeRings.add(minEr);\n }\n de = de.getNext();\n } while (de !== this._startDe)\n return minEdgeRings\n };\n MaximalEdgeRing.prototype.setEdgeRing = function setEdgeRing (de, er) {\n de.setEdgeRing(er);\n };\n MaximalEdgeRing.prototype.linkDirectedEdgesForMinimalEdgeRings = function linkDirectedEdgesForMinimalEdgeRings () {\n var this$1 = this;\n\n var de = this._startDe;\n do {\n var node = de.getNode();\n node.getEdges().linkMinimalDirectedEdges(this$1);\n de = de.getNext();\n } while (de !== this._startDe)\n };\n MaximalEdgeRing.prototype.getNext = function getNext (de) {\n return de.getNext()\n };\n MaximalEdgeRing.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n MaximalEdgeRing.prototype.getClass = function getClass () {\n return MaximalEdgeRing\n };\n\n return MaximalEdgeRing;\n}(EdgeRing));\n\nvar GraphComponent = function GraphComponent () {\n this._label = null;\n this._isInResult = false;\n this._isCovered = false;\n this._isCoveredSet = false;\n this._isVisited = false;\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n var label = arguments[0];\n this._label = label;\n }\n};\nGraphComponent.prototype.setVisited = function setVisited (isVisited) {\n this._isVisited = isVisited;\n};\nGraphComponent.prototype.setInResult = function setInResult (isInResult) {\n this._isInResult = isInResult;\n};\nGraphComponent.prototype.isCovered = function isCovered () {\n return this._isCovered\n};\nGraphComponent.prototype.isCoveredSet = function isCoveredSet () {\n return this._isCoveredSet\n};\nGraphComponent.prototype.setLabel = function setLabel (label) {\n this._label = label;\n};\nGraphComponent.prototype.getLabel = function getLabel () {\n return this._label\n};\nGraphComponent.prototype.setCovered = function setCovered (isCovered) {\n this._isCovered = isCovered;\n this._isCoveredSet = true;\n};\nGraphComponent.prototype.updateIM = function updateIM (im) {\n Assert.isTrue(this._label.getGeometryCount() >= 2, 'found partial label');\n this.computeIM(im);\n};\nGraphComponent.prototype.isInResult = function isInResult () {\n return this._isInResult\n};\nGraphComponent.prototype.isVisited = function isVisited () {\n return this._isVisited\n};\nGraphComponent.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGraphComponent.prototype.getClass = function getClass () {\n return GraphComponent\n};\n\nvar Node = (function (GraphComponent$$1) {\n function Node () {\n GraphComponent$$1.call(this);\n this._coord = null;\n this._edges = null;\n var coord = arguments[0];\n var edges = arguments[1];\n this._coord = coord;\n this._edges = edges;\n this._label = new Label(0, Location.NONE);\n }\n\n if ( GraphComponent$$1 ) Node.__proto__ = GraphComponent$$1;\n Node.prototype = Object.create( GraphComponent$$1 && GraphComponent$$1.prototype );\n Node.prototype.constructor = Node;\n Node.prototype.isIncidentEdgeInResult = function isIncidentEdgeInResult () {\n for (var it = this.getEdges().getEdges().iterator(); it.hasNext();) {\n var de = it.next();\n if (de.getEdge().isInResult()) { return true }\n }\n return false\n };\n Node.prototype.isIsolated = function isIsolated () {\n return this._label.getGeometryCount() === 1\n };\n Node.prototype.getCoordinate = function getCoordinate () {\n return this._coord\n };\n Node.prototype.print = function print (out) {\n out.println('node ' + this._coord + ' lbl: ' + this._label);\n };\n Node.prototype.computeIM = function computeIM (im) {};\n Node.prototype.computeMergedLocation = function computeMergedLocation (label2, eltIndex) {\n var loc = Location.NONE;\n loc = this._label.getLocation(eltIndex);\n if (!label2.isNull(eltIndex)) {\n var nLoc = label2.getLocation(eltIndex);\n if (loc !== Location.BOUNDARY) { loc = nLoc; }\n }\n return loc\n };\n Node.prototype.setLabel = function setLabel () {\n if (arguments.length === 2) {\n var argIndex = arguments[0];\n var onLocation = arguments[1];\n if (this._label === null) {\n this._label = new Label(argIndex, onLocation);\n } else { this._label.setLocation(argIndex, onLocation); }\n } else { return GraphComponent$$1.prototype.setLabel.apply(this, arguments) }\n };\n Node.prototype.getEdges = function getEdges () {\n return this._edges\n };\n Node.prototype.mergeLabel = function mergeLabel () {\n var this$1 = this;\n\n if (arguments[0] instanceof Node) {\n var n = arguments[0];\n this.mergeLabel(n._label);\n } else if (arguments[0] instanceof Label) {\n var label2 = arguments[0];\n for (var i = 0; i < 2; i++) {\n var loc = this$1.computeMergedLocation(label2, i);\n var thisLoc = this$1._label.getLocation(i);\n if (thisLoc === Location.NONE) { this$1._label.setLocation(i, loc); }\n }\n }\n };\n Node.prototype.add = function add (e) {\n this._edges.insert(e);\n e.setNode(this);\n };\n Node.prototype.setLabelBoundary = function setLabelBoundary (argIndex) {\n if (this._label === null) { return null }\n var loc = Location.NONE;\n if (this._label !== null) { loc = this._label.getLocation(argIndex); }\n var newLoc = null;\n switch (loc) {\n case Location.BOUNDARY:\n newLoc = Location.INTERIOR;\n break\n case Location.INTERIOR:\n newLoc = Location.BOUNDARY;\n break\n default:\n newLoc = Location.BOUNDARY;\n break\n }\n this._label.setLocation(argIndex, newLoc);\n };\n Node.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n Node.prototype.getClass = function getClass () {\n return Node\n };\n\n return Node;\n}(GraphComponent));\n\nvar NodeMap = function NodeMap () {\n this.nodeMap = new TreeMap();\n this.nodeFact = null;\n var nodeFact = arguments[0];\n this.nodeFact = nodeFact;\n};\nNodeMap.prototype.find = function find (coord) {\n return this.nodeMap.get(coord)\n};\nNodeMap.prototype.addNode = function addNode () {\n if (arguments[0] instanceof Coordinate) {\n var coord = arguments[0];\n var node = this.nodeMap.get(coord);\n if (node === null) {\n node = this.nodeFact.createNode(coord);\n this.nodeMap.put(coord, node);\n }\n return node\n } else if (arguments[0] instanceof Node) {\n var n = arguments[0];\n var node$1 = this.nodeMap.get(n.getCoordinate());\n if (node$1 === null) {\n this.nodeMap.put(n.getCoordinate(), n);\n return n\n }\n node$1.mergeLabel(n);\n return node$1\n }\n};\nNodeMap.prototype.print = function print (out) {\n for (var it = this.iterator(); it.hasNext();) {\n var n = it.next();\n n.print(out);\n }\n};\nNodeMap.prototype.iterator = function iterator () {\n return this.nodeMap.values().iterator()\n};\nNodeMap.prototype.values = function values () {\n return this.nodeMap.values()\n};\nNodeMap.prototype.getBoundaryNodes = function getBoundaryNodes (geomIndex) {\n var bdyNodes = new ArrayList();\n for (var i = this.iterator(); i.hasNext();) {\n var node = i.next();\n if (node.getLabel().getLocation(geomIndex) === Location.BOUNDARY) { bdyNodes.add(node); }\n }\n return bdyNodes\n};\nNodeMap.prototype.add = function add (e) {\n var p = e.getCoordinate();\n var n = this.addNode(p);\n n.add(e);\n};\nNodeMap.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nNodeMap.prototype.getClass = function getClass () {\n return NodeMap\n};\n\nvar Quadrant = function Quadrant () {};\n\nvar staticAccessors$21 = { NE: { configurable: true },NW: { configurable: true },SW: { configurable: true },SE: { configurable: true } };\n\nQuadrant.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nQuadrant.prototype.getClass = function getClass () {\n return Quadrant\n};\nQuadrant.isNorthern = function isNorthern (quad) {\n return quad === Quadrant.NE || quad === Quadrant.NW\n};\nQuadrant.isOpposite = function isOpposite (quad1, quad2) {\n if (quad1 === quad2) { return false }\n var diff = (quad1 - quad2 + 4) % 4;\n if (diff === 2) { return true }\n return false\n};\nQuadrant.commonHalfPlane = function commonHalfPlane (quad1, quad2) {\n if (quad1 === quad2) { return quad1 }\n var diff = (quad1 - quad2 + 4) % 4;\n if (diff === 2) { return -1 }\n var min = quad1 < quad2 ? quad1 : quad2;\n var max = quad1 > quad2 ? quad1 : quad2;\n if (min === 0 && max === 3) { return 3 }\n return min\n};\nQuadrant.isInHalfPlane = function isInHalfPlane (quad, halfPlane) {\n if (halfPlane === Quadrant.SE) {\n return quad === Quadrant.SE || quad === Quadrant.SW\n }\n return quad === halfPlane || quad === halfPlane + 1\n};\nQuadrant.quadrant = function quadrant () {\n if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\n var dx = arguments[0];\n var dy = arguments[1];\n if (dx === 0.0 && dy === 0.0) { throw new IllegalArgumentException('Cannot compute the quadrant for point ( ' + dx + ', ' + dy + ' )') }\n if (dx >= 0.0) {\n if (dy >= 0.0) { return Quadrant.NE; } else { return Quadrant.SE }\n } else {\n if (dy >= 0.0) { return Quadrant.NW; } else { return Quadrant.SW }\n }\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n if (p1.x === p0.x && p1.y === p0.y) { throw new IllegalArgumentException('Cannot compute the quadrant for two identical points ' + p0) }\n if (p1.x >= p0.x) {\n if (p1.y >= p0.y) { return Quadrant.NE; } else { return Quadrant.SE }\n } else {\n if (p1.y >= p0.y) { return Quadrant.NW; } else { return Quadrant.SW }\n }\n }\n};\nstaticAccessors$21.NE.get = function () { return 0 };\nstaticAccessors$21.NW.get = function () { return 1 };\nstaticAccessors$21.SW.get = function () { return 2 };\nstaticAccessors$21.SE.get = function () { return 3 };\n\nObject.defineProperties( Quadrant, staticAccessors$21 );\n\nvar EdgeEnd = function EdgeEnd () {\n this._edge = null;\n this._label = null;\n this._node = null;\n this._p0 = null;\n this._p1 = null;\n this._dx = null;\n this._dy = null;\n this._quadrant = null;\n if (arguments.length === 1) {\n var edge = arguments[0];\n this._edge = edge;\n } else if (arguments.length === 3) {\n var edge$1 = arguments[0];\n var p0 = arguments[1];\n var p1 = arguments[2];\n var label = null;\n this._edge = edge$1;\n this.init(p0, p1);\n this._label = label;\n } else if (arguments.length === 4) {\n var edge$2 = arguments[0];\n var p0$1 = arguments[1];\n var p1$1 = arguments[2];\n var label$1 = arguments[3];\n this._edge = edge$2;\n this.init(p0$1, p1$1);\n this._label = label$1;\n }\n};\nEdgeEnd.prototype.compareDirection = function compareDirection (e) {\n if (this._dx === e._dx && this._dy === e._dy) { return 0 }\n if (this._quadrant > e._quadrant) { return 1 }\n if (this._quadrant < e._quadrant) { return -1 }\n return CGAlgorithms.computeOrientation(e._p0, e._p1, this._p1)\n};\nEdgeEnd.prototype.getDy = function getDy () {\n return this._dy\n};\nEdgeEnd.prototype.getCoordinate = function getCoordinate () {\n return this._p0\n};\nEdgeEnd.prototype.setNode = function setNode (node) {\n this._node = node;\n};\nEdgeEnd.prototype.print = function print (out) {\n var angle = Math.atan2(this._dy, this._dx);\n var className = this.getClass().getName();\n var lastDotPos = className.lastIndexOf('.');\n var name = className.substring(lastDotPos + 1);\n out.print(' ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + ' ' + this._label);\n};\nEdgeEnd.prototype.compareTo = function compareTo (obj) {\n var e = obj;\n return this.compareDirection(e)\n};\nEdgeEnd.prototype.getDirectedCoordinate = function getDirectedCoordinate () {\n return this._p1\n};\nEdgeEnd.prototype.getDx = function getDx () {\n return this._dx\n};\nEdgeEnd.prototype.getLabel = function getLabel () {\n return this._label\n};\nEdgeEnd.prototype.getEdge = function getEdge () {\n return this._edge\n};\nEdgeEnd.prototype.getQuadrant = function getQuadrant () {\n return this._quadrant\n};\nEdgeEnd.prototype.getNode = function getNode () {\n return this._node\n};\nEdgeEnd.prototype.toString = function toString () {\n var angle = Math.atan2(this._dy, this._dx);\n var className = this.getClass().getName();\n var lastDotPos = className.lastIndexOf('.');\n var name = className.substring(lastDotPos + 1);\n return ' ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + ' ' + this._label\n};\nEdgeEnd.prototype.computeLabel = function computeLabel (boundaryNodeRule) {};\nEdgeEnd.prototype.init = function init (p0, p1) {\n this._p0 = p0;\n this._p1 = p1;\n this._dx = p1.x - p0.x;\n this._dy = p1.y - p0.y;\n this._quadrant = Quadrant.quadrant(this._dx, this._dy);\n Assert.isTrue(!(this._dx === 0 && this._dy === 0), 'EdgeEnd with identical endpoints found');\n};\nEdgeEnd.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nEdgeEnd.prototype.getClass = function getClass () {\n return EdgeEnd\n};\n\nvar DirectedEdge = (function (EdgeEnd$$1) {\n function DirectedEdge () {\n var edge = arguments[0];\n var isForward = arguments[1];\n EdgeEnd$$1.call(this, edge);\n this._isForward = null;\n this._isInResult = false;\n this._isVisited = false;\n this._sym = null;\n this._next = null;\n this._nextMin = null;\n this._edgeRing = null;\n this._minEdgeRing = null;\n this._depth = [0, -999, -999];\n this._isForward = isForward;\n if (isForward) {\n this.init(edge.getCoordinate(0), edge.getCoordinate(1));\n } else {\n var n = edge.getNumPoints() - 1;\n this.init(edge.getCoordinate(n), edge.getCoordinate(n - 1));\n }\n this.computeDirectedLabel();\n }\n\n if ( EdgeEnd$$1 ) DirectedEdge.__proto__ = EdgeEnd$$1;\n DirectedEdge.prototype = Object.create( EdgeEnd$$1 && EdgeEnd$$1.prototype );\n DirectedEdge.prototype.constructor = DirectedEdge;\n DirectedEdge.prototype.getNextMin = function getNextMin () {\n return this._nextMin\n };\n DirectedEdge.prototype.getDepth = function getDepth (position) {\n return this._depth[position]\n };\n DirectedEdge.prototype.setVisited = function setVisited (isVisited) {\n this._isVisited = isVisited;\n };\n DirectedEdge.prototype.computeDirectedLabel = function computeDirectedLabel () {\n this._label = new Label(this._edge.getLabel());\n if (!this._isForward) { this._label.flip(); }\n };\n DirectedEdge.prototype.getNext = function getNext () {\n return this._next\n };\n DirectedEdge.prototype.setDepth = function setDepth (position, depthVal) {\n if (this._depth[position] !== -999) {\n if (this._depth[position] !== depthVal) { throw new TopologyException('assigned depths do not match', this.getCoordinate()) }\n }\n this._depth[position] = depthVal;\n };\n DirectedEdge.prototype.isInteriorAreaEdge = function isInteriorAreaEdge () {\n var this$1 = this;\n\n var isInteriorAreaEdge = true;\n for (var i = 0; i < 2; i++) {\n if (!(this$1._label.isArea(i) && this$1._label.getLocation(i, Position.LEFT) === Location.INTERIOR && this$1._label.getLocation(i, Position.RIGHT) === Location.INTERIOR)) {\n isInteriorAreaEdge = false;\n }\n }\n return isInteriorAreaEdge\n };\n DirectedEdge.prototype.setNextMin = function setNextMin (nextMin) {\n this._nextMin = nextMin;\n };\n DirectedEdge.prototype.print = function print (out) {\n EdgeEnd$$1.prototype.print.call(this, out);\n out.print(' ' + this._depth[Position.LEFT] + '/' + this._depth[Position.RIGHT]);\n out.print(' (' + this.getDepthDelta() + ')');\n if (this._isInResult) { out.print(' inResult'); }\n };\n DirectedEdge.prototype.setMinEdgeRing = function setMinEdgeRing (minEdgeRing) {\n this._minEdgeRing = minEdgeRing;\n };\n DirectedEdge.prototype.isLineEdge = function isLineEdge () {\n var isLine = this._label.isLine(0) || this._label.isLine(1);\n var isExteriorIfArea0 = !this._label.isArea(0) || this._label.allPositionsEqual(0, Location.EXTERIOR);\n var isExteriorIfArea1 = !this._label.isArea(1) || this._label.allPositionsEqual(1, Location.EXTERIOR);\n return isLine && isExteriorIfArea0 && isExteriorIfArea1\n };\n DirectedEdge.prototype.setEdgeRing = function setEdgeRing (edgeRing) {\n this._edgeRing = edgeRing;\n };\n DirectedEdge.prototype.getMinEdgeRing = function getMinEdgeRing () {\n return this._minEdgeRing\n };\n DirectedEdge.prototype.getDepthDelta = function getDepthDelta () {\n var depthDelta = this._edge.getDepthDelta();\n if (!this._isForward) { depthDelta = -depthDelta; }\n return depthDelta\n };\n DirectedEdge.prototype.setInResult = function setInResult (isInResult) {\n this._isInResult = isInResult;\n };\n DirectedEdge.prototype.getSym = function getSym () {\n return this._sym\n };\n DirectedEdge.prototype.isForward = function isForward () {\n return this._isForward\n };\n DirectedEdge.prototype.getEdge = function getEdge () {\n return this._edge\n };\n DirectedEdge.prototype.printEdge = function printEdge (out) {\n this.print(out);\n out.print(' ');\n if (this._isForward) { this._edge.print(out); } else { this._edge.printReverse(out); }\n };\n DirectedEdge.prototype.setSym = function setSym (de) {\n this._sym = de;\n };\n DirectedEdge.prototype.setVisitedEdge = function setVisitedEdge (isVisited) {\n this.setVisited(isVisited);\n this._sym.setVisited(isVisited);\n };\n DirectedEdge.prototype.setEdgeDepths = function setEdgeDepths (position, depth) {\n var depthDelta = this.getEdge().getDepthDelta();\n if (!this._isForward) { depthDelta = -depthDelta; }\n var directionFactor = 1;\n if (position === Position.LEFT) { directionFactor = -1; }\n var oppositePos = Position.opposite(position);\n var delta = depthDelta * directionFactor;\n var oppositeDepth = depth + delta;\n this.setDepth(position, depth);\n this.setDepth(oppositePos, oppositeDepth);\n };\n DirectedEdge.prototype.getEdgeRing = function getEdgeRing () {\n return this._edgeRing\n };\n DirectedEdge.prototype.isInResult = function isInResult () {\n return this._isInResult\n };\n DirectedEdge.prototype.setNext = function setNext (next) {\n this._next = next;\n };\n DirectedEdge.prototype.isVisited = function isVisited () {\n return this._isVisited\n };\n DirectedEdge.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n DirectedEdge.prototype.getClass = function getClass () {\n return DirectedEdge\n };\n DirectedEdge.depthFactor = function depthFactor (currLocation, nextLocation) {\n if (currLocation === Location.EXTERIOR && nextLocation === Location.INTERIOR) { return 1; } else if (currLocation === Location.INTERIOR && nextLocation === Location.EXTERIOR) { return -1 }\n return 0\n };\n\n return DirectedEdge;\n}(EdgeEnd));\n\nvar NodeFactory = function NodeFactory () {};\n\nNodeFactory.prototype.createNode = function createNode (coord) {\n return new Node(coord, null)\n};\nNodeFactory.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nNodeFactory.prototype.getClass = function getClass () {\n return NodeFactory\n};\n\nvar PlanarGraph = function PlanarGraph () {\n this._edges = new ArrayList();\n this._nodes = null;\n this._edgeEndList = new ArrayList();\n if (arguments.length === 0) {\n this._nodes = new NodeMap(new NodeFactory());\n } else if (arguments.length === 1) {\n var nodeFact = arguments[0];\n this._nodes = new NodeMap(nodeFact);\n }\n};\nPlanarGraph.prototype.printEdges = function printEdges (out) {\n var this$1 = this;\n\n out.println('Edges:');\n for (var i = 0; i < this._edges.size(); i++) {\n out.println('edge ' + i + ':');\n var e = this$1._edges.get(i);\n e.print(out);\n e.eiList.print(out);\n }\n};\nPlanarGraph.prototype.find = function find (coord) {\n return this._nodes.find(coord)\n};\nPlanarGraph.prototype.addNode = function addNode () {\n if (arguments[0] instanceof Node) {\n var node = arguments[0];\n return this._nodes.addNode(node)\n } else if (arguments[0] instanceof Coordinate) {\n var coord = arguments[0];\n return this._nodes.addNode(coord)\n }\n};\nPlanarGraph.prototype.getNodeIterator = function getNodeIterator () {\n return this._nodes.iterator()\n};\nPlanarGraph.prototype.linkResultDirectedEdges = function linkResultDirectedEdges () {\n for (var nodeit = this._nodes.iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n node.getEdges().linkResultDirectedEdges();\n }\n};\nPlanarGraph.prototype.debugPrintln = function debugPrintln (o) {\n System.out.println(o);\n};\nPlanarGraph.prototype.isBoundaryNode = function isBoundaryNode (geomIndex, coord) {\n var node = this._nodes.find(coord);\n if (node === null) { return false }\n var label = node.getLabel();\n if (label !== null && label.getLocation(geomIndex) === Location.BOUNDARY) { return true }\n return false\n};\nPlanarGraph.prototype.linkAllDirectedEdges = function linkAllDirectedEdges () {\n for (var nodeit = this._nodes.iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n node.getEdges().linkAllDirectedEdges();\n }\n};\nPlanarGraph.prototype.matchInSameDirection = function matchInSameDirection (p0, p1, ep0, ep1) {\n if (!p0.equals(ep0)) { return false }\n if (CGAlgorithms.computeOrientation(p0, p1, ep1) === CGAlgorithms.COLLINEAR && Quadrant.quadrant(p0, p1) === Quadrant.quadrant(ep0, ep1)) { return true }\n return false\n};\nPlanarGraph.prototype.getEdgeEnds = function getEdgeEnds () {\n return this._edgeEndList\n};\nPlanarGraph.prototype.debugPrint = function debugPrint (o) {\n System.out.print(o);\n};\nPlanarGraph.prototype.getEdgeIterator = function getEdgeIterator () {\n return this._edges.iterator()\n};\nPlanarGraph.prototype.findEdgeInSameDirection = function findEdgeInSameDirection (p0, p1) {\n var this$1 = this;\n\n for (var i = 0; i < this._edges.size(); i++) {\n var e = this$1._edges.get(i);\n var eCoord = e.getCoordinates();\n if (this$1.matchInSameDirection(p0, p1, eCoord[0], eCoord[1])) { return e }\n if (this$1.matchInSameDirection(p0, p1, eCoord[eCoord.length - 1], eCoord[eCoord.length - 2])) { return e }\n }\n return null\n};\nPlanarGraph.prototype.insertEdge = function insertEdge (e) {\n this._edges.add(e);\n};\nPlanarGraph.prototype.findEdgeEnd = function findEdgeEnd (e) {\n for (var i = this.getEdgeEnds().iterator(); i.hasNext();) {\n var ee = i.next();\n if (ee.getEdge() === e) { return ee }\n }\n return null\n};\nPlanarGraph.prototype.addEdges = function addEdges (edgesToAdd) {\n var this$1 = this;\n\n for (var it = edgesToAdd.iterator(); it.hasNext();) {\n var e = it.next();\n this$1._edges.add(e);\n var de1 = new DirectedEdge(e, true);\n var de2 = new DirectedEdge(e, false);\n de1.setSym(de2);\n de2.setSym(de1);\n this$1.add(de1);\n this$1.add(de2);\n }\n};\nPlanarGraph.prototype.add = function add (e) {\n this._nodes.add(e);\n this._edgeEndList.add(e);\n};\nPlanarGraph.prototype.getNodes = function getNodes () {\n return this._nodes.values()\n};\nPlanarGraph.prototype.findEdge = function findEdge (p0, p1) {\n var this$1 = this;\n\n for (var i = 0; i < this._edges.size(); i++) {\n var e = this$1._edges.get(i);\n var eCoord = e.getCoordinates();\n if (p0.equals(eCoord[0]) && p1.equals(eCoord[1])) { return e }\n }\n return null\n};\nPlanarGraph.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPlanarGraph.prototype.getClass = function getClass () {\n return PlanarGraph\n};\nPlanarGraph.linkResultDirectedEdges = function linkResultDirectedEdges (nodes) {\n for (var nodeit = nodes.iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n node.getEdges().linkResultDirectedEdges();\n }\n};\n\nvar PolygonBuilder = function PolygonBuilder () {\n this._geometryFactory = null;\n this._shellList = new ArrayList();\n var geometryFactory = arguments[0];\n this._geometryFactory = geometryFactory;\n};\nPolygonBuilder.prototype.sortShellsAndHoles = function sortShellsAndHoles (edgeRings, shellList, freeHoleList) {\n for (var it = edgeRings.iterator(); it.hasNext();) {\n var er = it.next();\n if (er.isHole()) {\n freeHoleList.add(er);\n } else {\n shellList.add(er);\n }\n }\n};\nPolygonBuilder.prototype.computePolygons = function computePolygons (shellList) {\n var this$1 = this;\n\n var resultPolyList = new ArrayList();\n for (var it = shellList.iterator(); it.hasNext();) {\n var er = it.next();\n var poly = er.toPolygon(this$1._geometryFactory);\n resultPolyList.add(poly);\n }\n return resultPolyList\n};\nPolygonBuilder.prototype.placeFreeHoles = function placeFreeHoles (shellList, freeHoleList) {\n var this$1 = this;\n\n for (var it = freeHoleList.iterator(); it.hasNext();) {\n var hole = it.next();\n if (hole.getShell() === null) {\n var shell = this$1.findEdgeRingContaining(hole, shellList);\n if (shell === null) { throw new TopologyException('unable to assign hole to a shell', hole.getCoordinate(0)) }\n hole.setShell(shell);\n }\n }\n};\nPolygonBuilder.prototype.buildMinimalEdgeRings = function buildMinimalEdgeRings (maxEdgeRings, shellList, freeHoleList) {\n var this$1 = this;\n\n var edgeRings = new ArrayList();\n for (var it = maxEdgeRings.iterator(); it.hasNext();) {\n var er = it.next();\n if (er.getMaxNodeDegree() > 2) {\n er.linkDirectedEdgesForMinimalEdgeRings();\n var minEdgeRings = er.buildMinimalRings();\n var shell = this$1.findShell(minEdgeRings);\n if (shell !== null) {\n this$1.placePolygonHoles(shell, minEdgeRings);\n shellList.add(shell);\n } else {\n freeHoleList.addAll(minEdgeRings);\n }\n } else {\n edgeRings.add(er);\n }\n }\n return edgeRings\n};\nPolygonBuilder.prototype.containsPoint = function containsPoint (p) {\n for (var it = this._shellList.iterator(); it.hasNext();) {\n var er = it.next();\n if (er.containsPoint(p)) { return true }\n }\n return false\n};\nPolygonBuilder.prototype.buildMaximalEdgeRings = function buildMaximalEdgeRings (dirEdges) {\n var this$1 = this;\n\n var maxEdgeRings = new ArrayList();\n for (var it = dirEdges.iterator(); it.hasNext();) {\n var de = it.next();\n if (de.isInResult() && de.getLabel().isArea()) {\n if (de.getEdgeRing() === null) {\n var er = new MaximalEdgeRing(de, this$1._geometryFactory);\n maxEdgeRings.add(er);\n er.setInResult();\n }\n }\n }\n return maxEdgeRings\n};\nPolygonBuilder.prototype.placePolygonHoles = function placePolygonHoles (shell, minEdgeRings) {\n for (var it = minEdgeRings.iterator(); it.hasNext();) {\n var er = it.next();\n if (er.isHole()) {\n er.setShell(shell);\n }\n }\n};\nPolygonBuilder.prototype.getPolygons = function getPolygons () {\n var resultPolyList = this.computePolygons(this._shellList);\n return resultPolyList\n};\nPolygonBuilder.prototype.findEdgeRingContaining = function findEdgeRingContaining (testEr, shellList) {\n var testRing = testEr.getLinearRing();\n var testEnv = testRing.getEnvelopeInternal();\n var testPt = testRing.getCoordinateN(0);\n var minShell = null;\n var minEnv = null;\n for (var it = shellList.iterator(); it.hasNext();) {\n var tryShell = it.next();\n var tryRing = tryShell.getLinearRing();\n var tryEnv = tryRing.getEnvelopeInternal();\n if (minShell !== null) { minEnv = minShell.getLinearRing().getEnvelopeInternal(); }\n var isContained = false;\n if (tryEnv.contains(testEnv) && CGAlgorithms.isPointInRing(testPt, tryRing.getCoordinates())) { isContained = true; }\n if (isContained) {\n if (minShell === null || minEnv.contains(tryEnv)) {\n minShell = tryShell;\n }\n }\n }\n return minShell\n};\nPolygonBuilder.prototype.findShell = function findShell (minEdgeRings) {\n var shellCount = 0;\n var shell = null;\n for (var it = minEdgeRings.iterator(); it.hasNext();) {\n var er = it.next();\n if (!er.isHole()) {\n shell = er;\n shellCount++;\n }\n }\n Assert.isTrue(shellCount <= 1, 'found two shells in MinimalEdgeRing list');\n return shell\n};\nPolygonBuilder.prototype.add = function add () {\n if (arguments.length === 1) {\n var graph = arguments[0];\n this.add(graph.getEdgeEnds(), graph.getNodes());\n } else if (arguments.length === 2) {\n var dirEdges = arguments[0];\n var nodes = arguments[1];\n PlanarGraph.linkResultDirectedEdges(nodes);\n var maxEdgeRings = this.buildMaximalEdgeRings(dirEdges);\n var freeHoleList = new ArrayList();\n var edgeRings = this.buildMinimalEdgeRings(maxEdgeRings, this._shellList, freeHoleList);\n this.sortShellsAndHoles(edgeRings, this._shellList, freeHoleList);\n this.placeFreeHoles(this._shellList, freeHoleList);\n }\n};\nPolygonBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPolygonBuilder.prototype.getClass = function getClass () {\n return PolygonBuilder\n};\n\nvar Boundable = function Boundable () {};\n\nBoundable.prototype.getBounds = function getBounds () {};\nBoundable.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBoundable.prototype.getClass = function getClass () {\n return Boundable\n};\n\nvar ItemBoundable = function ItemBoundable () {\n this._bounds = null;\n this._item = null;\n var bounds = arguments[0];\n var item = arguments[1];\n this._bounds = bounds;\n this._item = item;\n};\nItemBoundable.prototype.getItem = function getItem () {\n return this._item\n};\nItemBoundable.prototype.getBounds = function getBounds () {\n return this._bounds\n};\nItemBoundable.prototype.interfaces_ = function interfaces_ () {\n return [Boundable, Serializable]\n};\nItemBoundable.prototype.getClass = function getClass () {\n return ItemBoundable\n};\n\nvar PriorityQueue = function PriorityQueue () {\n this._size = null;\n this._items = null;\n this._size = 0;\n this._items = new ArrayList();\n this._items.add(null);\n};\nPriorityQueue.prototype.poll = function poll () {\n if (this.isEmpty()) { return null }\n var minItem = this._items.get(1);\n this._items.set(1, this._items.get(this._size));\n this._size -= 1;\n this.reorder(1);\n return minItem\n};\nPriorityQueue.prototype.size = function size () {\n return this._size\n};\nPriorityQueue.prototype.reorder = function reorder (hole) {\n var this$1 = this;\n\n var child = null;\n var tmp = this._items.get(hole);\n for (; hole * 2 <= this._size; hole = child) {\n child = hole * 2;\n if (child !== this$1._size && this$1._items.get(child + 1).compareTo(this$1._items.get(child)) < 0) { child++; }\n if (this$1._items.get(child).compareTo(tmp) < 0) { this$1._items.set(hole, this$1._items.get(child)); } else { break }\n }\n this._items.set(hole, tmp);\n};\nPriorityQueue.prototype.clear = function clear () {\n this._size = 0;\n this._items.clear();\n};\nPriorityQueue.prototype.isEmpty = function isEmpty () {\n return this._size === 0\n};\nPriorityQueue.prototype.add = function add (x) {\n var this$1 = this;\n\n this._items.add(null);\n this._size += 1;\n var hole = this._size;\n this._items.set(0, x);\n for (; x.compareTo(this._items.get(Math.trunc(hole / 2))) < 0; hole /= 2) {\n this$1._items.set(hole, this$1._items.get(Math.trunc(hole / 2)));\n }\n this._items.set(hole, x);\n};\nPriorityQueue.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPriorityQueue.prototype.getClass = function getClass () {\n return PriorityQueue\n};\n\nvar ItemVisitor = function ItemVisitor () {};\n\nItemVisitor.prototype.visitItem = function visitItem (item) {};\nItemVisitor.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nItemVisitor.prototype.getClass = function getClass () {\n return ItemVisitor\n};\n\nvar SpatialIndex = function SpatialIndex () {};\n\nSpatialIndex.prototype.insert = function insert (itemEnv, item) {};\nSpatialIndex.prototype.remove = function remove (itemEnv, item) {};\nSpatialIndex.prototype.query = function query () {\n // if (arguments.length === 1) {\n // const searchEnv = arguments[0]\n // } else if (arguments.length === 2) {\n // const searchEnv = arguments[0]\n // const visitor = arguments[1]\n // }\n};\nSpatialIndex.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSpatialIndex.prototype.getClass = function getClass () {\n return SpatialIndex\n};\n\nvar AbstractNode = function AbstractNode () {\n this._childBoundables = new ArrayList();\n this._bounds = null;\n this._level = null;\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n var level = arguments[0];\n this._level = level;\n }\n};\n\nvar staticAccessors$22 = { serialVersionUID: { configurable: true } };\nAbstractNode.prototype.getLevel = function getLevel () {\n return this._level\n};\nAbstractNode.prototype.size = function size () {\n return this._childBoundables.size()\n};\nAbstractNode.prototype.getChildBoundables = function getChildBoundables () {\n return this._childBoundables\n};\nAbstractNode.prototype.addChildBoundable = function addChildBoundable (childBoundable) {\n Assert.isTrue(this._bounds === null);\n this._childBoundables.add(childBoundable);\n};\nAbstractNode.prototype.isEmpty = function isEmpty () {\n return this._childBoundables.isEmpty()\n};\nAbstractNode.prototype.getBounds = function getBounds () {\n if (this._bounds === null) {\n this._bounds = this.computeBounds();\n }\n return this._bounds\n};\nAbstractNode.prototype.interfaces_ = function interfaces_ () {\n return [Boundable, Serializable]\n};\nAbstractNode.prototype.getClass = function getClass () {\n return AbstractNode\n};\nstaticAccessors$22.serialVersionUID.get = function () { return 6493722185909573708 };\n\nObject.defineProperties( AbstractNode, staticAccessors$22 );\n\nvar Collections = function Collections () {};\n\nCollections.reverseOrder = function reverseOrder () {\n return {\n compare: function compare (a, b) {\n return b.compareTo(a)\n }\n }\n};\nCollections.min = function min (l) {\n Collections.sort(l);\n return l.get(0)\n};\nCollections.sort = function sort (l, c) {\n var a = l.toArray();\n if (c) {\n Arrays.sort(a, c);\n } else {\n Arrays.sort(a);\n }\n var i = l.iterator();\n for (var pos = 0, alen = a.length; pos < alen; pos++) {\n i.next();\n i.set(a[pos]);\n }\n};\nCollections.singletonList = function singletonList (o) {\n var arrayList = new ArrayList();\n arrayList.add(o);\n return arrayList\n};\n\nvar BoundablePair = function BoundablePair () {\n this._boundable1 = null;\n this._boundable2 = null;\n this._distance = null;\n this._itemDistance = null;\n var boundable1 = arguments[0];\n var boundable2 = arguments[1];\n var itemDistance = arguments[2];\n this._boundable1 = boundable1;\n this._boundable2 = boundable2;\n this._itemDistance = itemDistance;\n this._distance = this.distance();\n};\nBoundablePair.prototype.expandToQueue = function expandToQueue (priQ, minDistance) {\n var isComp1 = BoundablePair.isComposite(this._boundable1);\n var isComp2 = BoundablePair.isComposite(this._boundable2);\n if (isComp1 && isComp2) {\n if (BoundablePair.area(this._boundable1) > BoundablePair.area(this._boundable2)) {\n this.expand(this._boundable1, this._boundable2, priQ, minDistance);\n return null\n } else {\n this.expand(this._boundable2, this._boundable1, priQ, minDistance);\n return null\n }\n } else if (isComp1) {\n this.expand(this._boundable1, this._boundable2, priQ, minDistance);\n return null\n } else if (isComp2) {\n this.expand(this._boundable2, this._boundable1, priQ, minDistance);\n return null\n }\n throw new IllegalArgumentException('neither boundable is composite')\n};\nBoundablePair.prototype.isLeaves = function isLeaves () {\n return !(BoundablePair.isComposite(this._boundable1) || BoundablePair.isComposite(this._boundable2))\n};\nBoundablePair.prototype.compareTo = function compareTo (o) {\n var nd = o;\n if (this._distance < nd._distance) { return -1 }\n if (this._distance > nd._distance) { return 1 }\n return 0\n};\nBoundablePair.prototype.expand = function expand (bndComposite, bndOther, priQ, minDistance) {\n var this$1 = this;\n\n var children = bndComposite.getChildBoundables();\n for (var i = children.iterator(); i.hasNext();) {\n var child = i.next();\n var bp = new BoundablePair(child, bndOther, this$1._itemDistance);\n if (bp.getDistance() < minDistance) {\n priQ.add(bp);\n }\n }\n};\nBoundablePair.prototype.getBoundable = function getBoundable (i) {\n if (i === 0) { return this._boundable1 }\n return this._boundable2\n};\nBoundablePair.prototype.getDistance = function getDistance () {\n return this._distance\n};\nBoundablePair.prototype.distance = function distance () {\n if (this.isLeaves()) {\n return this._itemDistance.distance(this._boundable1, this._boundable2)\n }\n return this._boundable1.getBounds().distance(this._boundable2.getBounds())\n};\nBoundablePair.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nBoundablePair.prototype.getClass = function getClass () {\n return BoundablePair\n};\nBoundablePair.area = function area (b) {\n return b.getBounds().getArea()\n};\nBoundablePair.isComposite = function isComposite (item) {\n return item instanceof AbstractNode\n};\n\nvar AbstractSTRtree = function AbstractSTRtree () {\n this._root = null;\n this._built = false;\n this._itemBoundables = new ArrayList();\n this._nodeCapacity = null;\n if (arguments.length === 0) {\n var nodeCapacity = AbstractSTRtree.DEFAULT_NODE_CAPACITY;\n this._nodeCapacity = nodeCapacity;\n } else if (arguments.length === 1) {\n var nodeCapacity$1 = arguments[0];\n Assert.isTrue(nodeCapacity$1 > 1, 'Node capacity must be greater than 1');\n this._nodeCapacity = nodeCapacity$1;\n }\n};\n\nvar staticAccessors$23 = { IntersectsOp: { configurable: true },serialVersionUID: { configurable: true },DEFAULT_NODE_CAPACITY: { configurable: true } };\nAbstractSTRtree.prototype.getNodeCapacity = function getNodeCapacity () {\n return this._nodeCapacity\n};\nAbstractSTRtree.prototype.lastNode = function lastNode (nodes) {\n return nodes.get(nodes.size() - 1)\n};\nAbstractSTRtree.prototype.size = function size () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n if (this.isEmpty()) {\n return 0\n }\n this.build();\n return this.size(this._root)\n } else if (arguments.length === 1) {\n var node = arguments[0];\n var size = 0;\n for (var i = node.getChildBoundables().iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (childBoundable instanceof AbstractNode) {\n size += this$1.size(childBoundable);\n } else if (childBoundable instanceof ItemBoundable) {\n size += 1;\n }\n }\n return size\n }\n};\nAbstractSTRtree.prototype.removeItem = function removeItem (node, item) {\n var childToRemove = null;\n for (var i = node.getChildBoundables().iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (childBoundable instanceof ItemBoundable) {\n if (childBoundable.getItem() === item) { childToRemove = childBoundable; }\n }\n }\n if (childToRemove !== null) {\n node.getChildBoundables().remove(childToRemove);\n return true\n }\n return false\n};\nAbstractSTRtree.prototype.itemsTree = function itemsTree () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n this.build();\n var valuesTree = this.itemsTree(this._root);\n if (valuesTree === null) { return new ArrayList() }\n return valuesTree\n } else if (arguments.length === 1) {\n var node = arguments[0];\n var valuesTreeForNode = new ArrayList();\n for (var i = node.getChildBoundables().iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (childBoundable instanceof AbstractNode) {\n var valuesTreeForChild = this$1.itemsTree(childBoundable);\n if (valuesTreeForChild !== null) { valuesTreeForNode.add(valuesTreeForChild); }\n } else if (childBoundable instanceof ItemBoundable) {\n valuesTreeForNode.add(childBoundable.getItem());\n } else {\n Assert.shouldNeverReachHere();\n }\n }\n if (valuesTreeForNode.size() <= 0) { return null }\n return valuesTreeForNode\n }\n};\nAbstractSTRtree.prototype.insert = function insert (bounds, item) {\n Assert.isTrue(!this._built, 'Cannot insert items into an STR packed R-tree after it has been built.');\n this._itemBoundables.add(new ItemBoundable(bounds, item));\n};\nAbstractSTRtree.prototype.boundablesAtLevel = function boundablesAtLevel () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var level = arguments[0];\n var boundables = new ArrayList();\n this.boundablesAtLevel(level, this._root, boundables);\n return boundables\n } else if (arguments.length === 3) {\n var level$1 = arguments[0];\n var top = arguments[1];\n var boundables$1 = arguments[2];\n Assert.isTrue(level$1 > -2);\n if (top.getLevel() === level$1) {\n boundables$1.add(top);\n return null\n }\n for (var i = top.getChildBoundables().iterator(); i.hasNext();) {\n var boundable = i.next();\n if (boundable instanceof AbstractNode) {\n this$1.boundablesAtLevel(level$1, boundable, boundables$1);\n } else {\n Assert.isTrue(boundable instanceof ItemBoundable);\n if (level$1 === -1) {\n boundables$1.add(boundable);\n }\n }\n }\n return null\n }\n};\nAbstractSTRtree.prototype.query = function query () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var searchBounds = arguments[0];\n this.build();\n var matches = new ArrayList();\n if (this.isEmpty()) {\n return matches\n }\n if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) {\n this.query(searchBounds, this._root, matches);\n }\n return matches\n } else if (arguments.length === 2) {\n var searchBounds$1 = arguments[0];\n var visitor = arguments[1];\n this.build();\n if (this.isEmpty()) {\n return null\n }\n if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds$1)) {\n this.query(searchBounds$1, this._root, visitor);\n }\n } else if (arguments.length === 3) {\n if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {\n var searchBounds$2 = arguments[0];\n var node = arguments[1];\n var visitor$1 = arguments[2];\n var childBoundables = node.getChildBoundables();\n for (var i = 0; i < childBoundables.size(); i++) {\n var childBoundable = childBoundables.get(i);\n if (!this$1.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds$2)) {\n continue\n }\n if (childBoundable instanceof AbstractNode) {\n this$1.query(searchBounds$2, childBoundable, visitor$1);\n } else if (childBoundable instanceof ItemBoundable) {\n visitor$1.visitItem(childBoundable.getItem());\n } else {\n Assert.shouldNeverReachHere();\n }\n }\n } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {\n var searchBounds$3 = arguments[0];\n var node$1 = arguments[1];\n var matches$1 = arguments[2];\n var childBoundables$1 = node$1.getChildBoundables();\n for (var i$1 = 0; i$1 < childBoundables$1.size(); i$1++) {\n var childBoundable$1 = childBoundables$1.get(i$1);\n if (!this$1.getIntersectsOp().intersects(childBoundable$1.getBounds(), searchBounds$3)) {\n continue\n }\n if (childBoundable$1 instanceof AbstractNode) {\n this$1.query(searchBounds$3, childBoundable$1, matches$1);\n } else if (childBoundable$1 instanceof ItemBoundable) {\n matches$1.add(childBoundable$1.getItem());\n } else {\n Assert.shouldNeverReachHere();\n }\n }\n }\n }\n};\nAbstractSTRtree.prototype.build = function build () {\n if (this._built) { return null }\n this._root = this._itemBoundables.isEmpty() ? this.createNode(0) : this.createHigherLevels(this._itemBoundables, -1);\n this._itemBoundables = null;\n this._built = true;\n};\nAbstractSTRtree.prototype.getRoot = function getRoot () {\n this.build();\n return this._root\n};\nAbstractSTRtree.prototype.remove = function remove () {\n var this$1 = this;\n\n if (arguments.length === 2) {\n var searchBounds = arguments[0];\n var item = arguments[1];\n this.build();\n if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) {\n return this.remove(searchBounds, this._root, item)\n }\n return false\n } else if (arguments.length === 3) {\n var searchBounds$1 = arguments[0];\n var node = arguments[1];\n var item$1 = arguments[2];\n var found = this.removeItem(node, item$1);\n if (found) { return true }\n var childToPrune = null;\n for (var i = node.getChildBoundables().iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (!this$1.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds$1)) {\n continue\n }\n if (childBoundable instanceof AbstractNode) {\n found = this$1.remove(searchBounds$1, childBoundable, item$1);\n if (found) {\n childToPrune = childBoundable;\n break\n }\n }\n }\n if (childToPrune !== null) {\n if (childToPrune.getChildBoundables().isEmpty()) {\n node.getChildBoundables().remove(childToPrune);\n }\n }\n return found\n }\n};\nAbstractSTRtree.prototype.createHigherLevels = function createHigherLevels (boundablesOfALevel, level) {\n Assert.isTrue(!boundablesOfALevel.isEmpty());\n var parentBoundables = this.createParentBoundables(boundablesOfALevel, level + 1);\n if (parentBoundables.size() === 1) {\n return parentBoundables.get(0)\n }\n return this.createHigherLevels(parentBoundables, level + 1)\n};\nAbstractSTRtree.prototype.depth = function depth () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n if (this.isEmpty()) {\n return 0\n }\n this.build();\n return this.depth(this._root)\n } else if (arguments.length === 1) {\n var node = arguments[0];\n var maxChildDepth = 0;\n for (var i = node.getChildBoundables().iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (childBoundable instanceof AbstractNode) {\n var childDepth = this$1.depth(childBoundable);\n if (childDepth > maxChildDepth) { maxChildDepth = childDepth; }\n }\n }\n return maxChildDepth + 1\n }\n};\nAbstractSTRtree.prototype.createParentBoundables = function createParentBoundables (childBoundables, newLevel) {\n var this$1 = this;\n\n Assert.isTrue(!childBoundables.isEmpty());\n var parentBoundables = new ArrayList();\n parentBoundables.add(this.createNode(newLevel));\n var sortedChildBoundables = new ArrayList(childBoundables);\n Collections.sort(sortedChildBoundables, this.getComparator());\n for (var i = sortedChildBoundables.iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (this$1.lastNode(parentBoundables).getChildBoundables().size() === this$1.getNodeCapacity()) {\n parentBoundables.add(this$1.createNode(newLevel));\n }\n this$1.lastNode(parentBoundables).addChildBoundable(childBoundable);\n }\n return parentBoundables\n};\nAbstractSTRtree.prototype.isEmpty = function isEmpty () {\n if (!this._built) { return this._itemBoundables.isEmpty() }\n return this._root.isEmpty()\n};\nAbstractSTRtree.prototype.interfaces_ = function interfaces_ () {\n return [Serializable]\n};\nAbstractSTRtree.prototype.getClass = function getClass () {\n return AbstractSTRtree\n};\nAbstractSTRtree.compareDoubles = function compareDoubles (a, b) {\n return a > b ? 1 : a < b ? -1 : 0\n};\nstaticAccessors$23.IntersectsOp.get = function () { return IntersectsOp };\nstaticAccessors$23.serialVersionUID.get = function () { return -3886435814360241337 };\nstaticAccessors$23.DEFAULT_NODE_CAPACITY.get = function () { return 10 };\n\nObject.defineProperties( AbstractSTRtree, staticAccessors$23 );\n\nvar IntersectsOp = function IntersectsOp () {};\n\nvar ItemDistance = function ItemDistance () {};\n\nItemDistance.prototype.distance = function distance (item1, item2) {};\nItemDistance.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nItemDistance.prototype.getClass = function getClass () {\n return ItemDistance\n};\n\nvar STRtree = (function (AbstractSTRtree$$1) {\n function STRtree (nodeCapacity) {\n nodeCapacity = nodeCapacity || STRtree.DEFAULT_NODE_CAPACITY;\n AbstractSTRtree$$1.call(this, nodeCapacity);\n }\n\n if ( AbstractSTRtree$$1 ) STRtree.__proto__ = AbstractSTRtree$$1;\n STRtree.prototype = Object.create( AbstractSTRtree$$1 && AbstractSTRtree$$1.prototype );\n STRtree.prototype.constructor = STRtree;\n\n var staticAccessors = { STRtreeNode: { configurable: true },serialVersionUID: { configurable: true },xComparator: { configurable: true },yComparator: { configurable: true },intersectsOp: { configurable: true },DEFAULT_NODE_CAPACITY: { configurable: true } };\n STRtree.prototype.createParentBoundablesFromVerticalSlices = function createParentBoundablesFromVerticalSlices (verticalSlices, newLevel) {\n var this$1 = this;\n\n Assert.isTrue(verticalSlices.length > 0);\n var parentBoundables = new ArrayList();\n for (var i = 0; i < verticalSlices.length; i++) {\n parentBoundables.addAll(this$1.createParentBoundablesFromVerticalSlice(verticalSlices[i], newLevel));\n }\n return parentBoundables\n };\n STRtree.prototype.createNode = function createNode (level) {\n return new STRtreeNode(level)\n };\n STRtree.prototype.size = function size () {\n if (arguments.length === 0) {\n return AbstractSTRtree$$1.prototype.size.call(this)\n } else { return AbstractSTRtree$$1.prototype.size.apply(this, arguments) }\n };\n STRtree.prototype.insert = function insert () {\n if (arguments.length === 2) {\n var itemEnv = arguments[0];\n var item = arguments[1];\n if (itemEnv.isNull()) {\n return null\n }\n AbstractSTRtree$$1.prototype.insert.call(this, itemEnv, item);\n } else { return AbstractSTRtree$$1.prototype.insert.apply(this, arguments) }\n };\n STRtree.prototype.getIntersectsOp = function getIntersectsOp () {\n return STRtree.intersectsOp\n };\n STRtree.prototype.verticalSlices = function verticalSlices (childBoundables, sliceCount) {\n var sliceCapacity = Math.trunc(Math.ceil(childBoundables.size() / sliceCount));\n var slices = new Array(sliceCount).fill(null);\n var i = childBoundables.iterator();\n for (var j = 0; j < sliceCount; j++) {\n slices[j] = new ArrayList();\n var boundablesAddedToSlice = 0;\n while (i.hasNext() && boundablesAddedToSlice < sliceCapacity) {\n var childBoundable = i.next();\n slices[j].add(childBoundable);\n boundablesAddedToSlice++;\n }\n }\n return slices\n };\n STRtree.prototype.query = function query () {\n if (arguments.length === 1) {\n var searchEnv = arguments[0];\n return AbstractSTRtree$$1.prototype.query.call(this, searchEnv)\n } else if (arguments.length === 2) {\n var searchEnv$1 = arguments[0];\n var visitor = arguments[1];\n AbstractSTRtree$$1.prototype.query.call(this, searchEnv$1, visitor);\n } else if (arguments.length === 3) {\n if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {\n var searchBounds = arguments[0];\n var node = arguments[1];\n var visitor$1 = arguments[2];\n AbstractSTRtree$$1.prototype.query.call(this, searchBounds, node, visitor$1);\n } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {\n var searchBounds$1 = arguments[0];\n var node$1 = arguments[1];\n var matches = arguments[2];\n AbstractSTRtree$$1.prototype.query.call(this, searchBounds$1, node$1, matches);\n }\n }\n };\n STRtree.prototype.getComparator = function getComparator () {\n return STRtree.yComparator\n };\n STRtree.prototype.createParentBoundablesFromVerticalSlice = function createParentBoundablesFromVerticalSlice (childBoundables, newLevel) {\n return AbstractSTRtree$$1.prototype.createParentBoundables.call(this, childBoundables, newLevel)\n };\n STRtree.prototype.remove = function remove () {\n if (arguments.length === 2) {\n var itemEnv = arguments[0];\n var item = arguments[1];\n return AbstractSTRtree$$1.prototype.remove.call(this, itemEnv, item)\n } else { return AbstractSTRtree$$1.prototype.remove.apply(this, arguments) }\n };\n STRtree.prototype.depth = function depth () {\n if (arguments.length === 0) {\n return AbstractSTRtree$$1.prototype.depth.call(this)\n } else { return AbstractSTRtree$$1.prototype.depth.apply(this, arguments) }\n };\n STRtree.prototype.createParentBoundables = function createParentBoundables (childBoundables, newLevel) {\n Assert.isTrue(!childBoundables.isEmpty());\n var minLeafCount = Math.trunc(Math.ceil(childBoundables.size() / this.getNodeCapacity()));\n var sortedChildBoundables = new ArrayList(childBoundables);\n Collections.sort(sortedChildBoundables, STRtree.xComparator);\n var verticalSlices = this.verticalSlices(sortedChildBoundables, Math.trunc(Math.ceil(Math.sqrt(minLeafCount))));\n return this.createParentBoundablesFromVerticalSlices(verticalSlices, newLevel)\n };\n STRtree.prototype.nearestNeighbour = function nearestNeighbour () {\n if (arguments.length === 1) {\n if (hasInterface(arguments[0], ItemDistance)) {\n var itemDist = arguments[0];\n var bp = new BoundablePair(this.getRoot(), this.getRoot(), itemDist);\n return this.nearestNeighbour(bp)\n } else if (arguments[0] instanceof BoundablePair) {\n var initBndPair = arguments[0];\n return this.nearestNeighbour(initBndPair, Double.POSITIVE_INFINITY)\n }\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof STRtree && hasInterface(arguments[1], ItemDistance)) {\n var tree = arguments[0];\n var itemDist$1 = arguments[1];\n var bp$1 = new BoundablePair(this.getRoot(), tree.getRoot(), itemDist$1);\n return this.nearestNeighbour(bp$1)\n } else if (arguments[0] instanceof BoundablePair && typeof arguments[1] === 'number') {\n var initBndPair$1 = arguments[0];\n var maxDistance = arguments[1];\n var distanceLowerBound = maxDistance;\n var minPair = null;\n var priQ = new PriorityQueue();\n priQ.add(initBndPair$1);\n while (!priQ.isEmpty() && distanceLowerBound > 0.0) {\n var bndPair = priQ.poll();\n var currentDistance = bndPair.getDistance();\n if (currentDistance >= distanceLowerBound) { break }\n if (bndPair.isLeaves()) {\n distanceLowerBound = currentDistance;\n minPair = bndPair;\n } else {\n bndPair.expandToQueue(priQ, distanceLowerBound);\n }\n }\n return [minPair.getBoundable(0).getItem(), minPair.getBoundable(1).getItem()]\n }\n } else if (arguments.length === 3) {\n var env = arguments[0];\n var item = arguments[1];\n var itemDist$2 = arguments[2];\n var bnd = new ItemBoundable(env, item);\n var bp$2 = new BoundablePair(this.getRoot(), bnd, itemDist$2);\n return this.nearestNeighbour(bp$2)[0]\n }\n };\n STRtree.prototype.interfaces_ = function interfaces_ () {\n return [SpatialIndex, Serializable]\n };\n STRtree.prototype.getClass = function getClass () {\n return STRtree\n };\n STRtree.centreX = function centreX (e) {\n return STRtree.avg(e.getMinX(), e.getMaxX())\n };\n STRtree.avg = function avg (a, b) {\n return (a + b) / 2\n };\n STRtree.centreY = function centreY (e) {\n return STRtree.avg(e.getMinY(), e.getMaxY())\n };\n staticAccessors.STRtreeNode.get = function () { return STRtreeNode };\n staticAccessors.serialVersionUID.get = function () { return 259274702368956900 };\n staticAccessors.xComparator.get = function () {\n return {\n interfaces_: function () {\n return [Comparator]\n },\n compare: function (o1, o2) {\n return AbstractSTRtree$$1.compareDoubles(STRtree.centreX(o1.getBounds()), STRtree.centreX(o2.getBounds()))\n }\n }\n };\n staticAccessors.yComparator.get = function () {\n return {\n interfaces_: function () {\n return [Comparator]\n },\n compare: function (o1, o2) {\n return AbstractSTRtree$$1.compareDoubles(STRtree.centreY(o1.getBounds()), STRtree.centreY(o2.getBounds()))\n }\n }\n };\n staticAccessors.intersectsOp.get = function () {\n return {\n interfaces_: function () {\n return [AbstractSTRtree$$1.IntersectsOp]\n },\n intersects: function (aBounds, bBounds) {\n return aBounds.intersects(bBounds)\n }\n }\n };\n staticAccessors.DEFAULT_NODE_CAPACITY.get = function () { return 10 };\n\n Object.defineProperties( STRtree, staticAccessors );\n\n return STRtree;\n}(AbstractSTRtree));\n\nvar STRtreeNode = (function (AbstractNode$$1) {\n function STRtreeNode () {\n var level = arguments[0];\n AbstractNode$$1.call(this, level);\n }\n\n if ( AbstractNode$$1 ) STRtreeNode.__proto__ = AbstractNode$$1;\n STRtreeNode.prototype = Object.create( AbstractNode$$1 && AbstractNode$$1.prototype );\n STRtreeNode.prototype.constructor = STRtreeNode;\n STRtreeNode.prototype.computeBounds = function computeBounds () {\n var bounds = null;\n for (var i = this.getChildBoundables().iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (bounds === null) {\n bounds = new Envelope(childBoundable.getBounds());\n } else {\n bounds.expandToInclude(childBoundable.getBounds());\n }\n }\n return bounds\n };\n STRtreeNode.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n STRtreeNode.prototype.getClass = function getClass () {\n return STRtreeNode\n };\n\n return STRtreeNode;\n}(AbstractNode));\n\nvar SegmentPointComparator = function SegmentPointComparator () {};\n\nSegmentPointComparator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSegmentPointComparator.prototype.getClass = function getClass () {\n return SegmentPointComparator\n};\nSegmentPointComparator.relativeSign = function relativeSign (x0, x1) {\n if (x0 < x1) { return -1 }\n if (x0 > x1) { return 1 }\n return 0\n};\nSegmentPointComparator.compare = function compare (octant, p0, p1) {\n if (p0.equals2D(p1)) { return 0 }\n var xSign = SegmentPointComparator.relativeSign(p0.x, p1.x);\n var ySign = SegmentPointComparator.relativeSign(p0.y, p1.y);\n switch (octant) {\n case 0:\n return SegmentPointComparator.compareValue(xSign, ySign)\n case 1:\n return SegmentPointComparator.compareValue(ySign, xSign)\n case 2:\n return SegmentPointComparator.compareValue(ySign, -xSign)\n case 3:\n return SegmentPointComparator.compareValue(-xSign, ySign)\n case 4:\n return SegmentPointComparator.compareValue(-xSign, -ySign)\n case 5:\n return SegmentPointComparator.compareValue(-ySign, -xSign)\n case 6:\n return SegmentPointComparator.compareValue(-ySign, xSign)\n case 7:\n return SegmentPointComparator.compareValue(xSign, -ySign)\n default:\n }\n Assert.shouldNeverReachHere('invalid octant value');\n return 0\n};\nSegmentPointComparator.compareValue = function compareValue (compareSign0, compareSign1) {\n if (compareSign0 < 0) { return -1 }\n if (compareSign0 > 0) { return 1 }\n if (compareSign1 < 0) { return -1 }\n if (compareSign1 > 0) { return 1 }\n return 0\n};\n\nvar SegmentNode = function SegmentNode () {\n this._segString = null;\n this.coord = null;\n this.segmentIndex = null;\n this._segmentOctant = null;\n this._isInterior = null;\n var segString = arguments[0];\n var coord = arguments[1];\n var segmentIndex = arguments[2];\n var segmentOctant = arguments[3];\n this._segString = segString;\n this.coord = new Coordinate(coord);\n this.segmentIndex = segmentIndex;\n this._segmentOctant = segmentOctant;\n this._isInterior = !coord.equals2D(segString.getCoordinate(segmentIndex));\n};\nSegmentNode.prototype.getCoordinate = function getCoordinate () {\n return this.coord\n};\nSegmentNode.prototype.print = function print (out) {\n out.print(this.coord);\n out.print(' seg # = ' + this.segmentIndex);\n};\nSegmentNode.prototype.compareTo = function compareTo (obj) {\n var other = obj;\n if (this.segmentIndex < other.segmentIndex) { return -1 }\n if (this.segmentIndex > other.segmentIndex) { return 1 }\n if (this.coord.equals2D(other.coord)) { return 0 }\n return SegmentPointComparator.compare(this._segmentOctant, this.coord, other.coord)\n};\nSegmentNode.prototype.isEndPoint = function isEndPoint (maxSegmentIndex) {\n if (this.segmentIndex === 0 && !this._isInterior) { return true }\n if (this.segmentIndex === maxSegmentIndex) { return true }\n return false\n};\nSegmentNode.prototype.isInterior = function isInterior () {\n return this._isInterior\n};\nSegmentNode.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nSegmentNode.prototype.getClass = function getClass () {\n return SegmentNode\n};\n\n// import Iterator from '../../../../java/util/Iterator'\nvar SegmentNodeList = function SegmentNodeList () {\n this._nodeMap = new TreeMap();\n this._edge = null;\n var edge = arguments[0];\n this._edge = edge;\n};\nSegmentNodeList.prototype.getSplitCoordinates = function getSplitCoordinates () {\n var this$1 = this;\n\n var coordList = new CoordinateList();\n this.addEndpoints();\n var it = this.iterator();\n var eiPrev = it.next();\n while (it.hasNext()) {\n var ei = it.next();\n this$1.addEdgeCoordinates(eiPrev, ei, coordList);\n eiPrev = ei;\n }\n return coordList.toCoordinateArray()\n};\nSegmentNodeList.prototype.addCollapsedNodes = function addCollapsedNodes () {\n var this$1 = this;\n\n var collapsedVertexIndexes = new ArrayList();\n this.findCollapsesFromInsertedNodes(collapsedVertexIndexes);\n this.findCollapsesFromExistingVertices(collapsedVertexIndexes);\n for (var it = collapsedVertexIndexes.iterator(); it.hasNext();) {\n var vertexIndex = it.next().intValue();\n this$1.add(this$1._edge.getCoordinate(vertexIndex), vertexIndex);\n }\n};\nSegmentNodeList.prototype.print = function print (out) {\n out.println('Intersections:');\n for (var it = this.iterator(); it.hasNext();) {\n var ei = it.next();\n ei.print(out);\n }\n};\nSegmentNodeList.prototype.findCollapsesFromExistingVertices = function findCollapsesFromExistingVertices (collapsedVertexIndexes) {\n var this$1 = this;\n\n for (var i = 0; i < this._edge.size() - 2; i++) {\n var p0 = this$1._edge.getCoordinate(i);\n // const p1 = this._edge.getCoordinate(i + 1)\n var p2 = this$1._edge.getCoordinate(i + 2);\n if (p0.equals2D(p2)) {\n collapsedVertexIndexes.add(new Integer(i + 1));\n }\n }\n};\nSegmentNodeList.prototype.addEdgeCoordinates = function addEdgeCoordinates (ei0, ei1, coordList) {\n var this$1 = this;\n\n // let npts = ei1.segmentIndex - ei0.segmentIndex + 2\n var lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);\n var useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);\n // if (!useIntPt1) {\n // npts--\n // }\n // const ipt = 0\n coordList.add(new Coordinate(ei0.coord), false);\n for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {\n coordList.add(this$1._edge.getCoordinate(i));\n }\n if (useIntPt1) {\n coordList.add(new Coordinate(ei1.coord));\n }\n};\nSegmentNodeList.prototype.iterator = function iterator () {\n return this._nodeMap.values().iterator()\n};\nSegmentNodeList.prototype.addSplitEdges = function addSplitEdges (edgeList) {\n var this$1 = this;\n\n this.addEndpoints();\n this.addCollapsedNodes();\n var it = this.iterator();\n var eiPrev = it.next();\n while (it.hasNext()) {\n var ei = it.next();\n var newEdge = this$1.createSplitEdge(eiPrev, ei);\n edgeList.add(newEdge);\n eiPrev = ei;\n }\n};\nSegmentNodeList.prototype.findCollapseIndex = function findCollapseIndex (ei0, ei1, collapsedVertexIndex) {\n if (!ei0.coord.equals2D(ei1.coord)) { return false }\n var numVerticesBetween = ei1.segmentIndex - ei0.segmentIndex;\n if (!ei1.isInterior()) {\n numVerticesBetween--;\n }\n if (numVerticesBetween === 1) {\n collapsedVertexIndex[0] = ei0.segmentIndex + 1;\n return true\n }\n return false\n};\nSegmentNodeList.prototype.findCollapsesFromInsertedNodes = function findCollapsesFromInsertedNodes (collapsedVertexIndexes) {\n var this$1 = this;\n\n var collapsedVertexIndex = new Array(1).fill(null);\n var it = this.iterator();\n var eiPrev = it.next();\n while (it.hasNext()) {\n var ei = it.next();\n var isCollapsed = this$1.findCollapseIndex(eiPrev, ei, collapsedVertexIndex);\n if (isCollapsed) { collapsedVertexIndexes.add(new Integer(collapsedVertexIndex[0])); }\n eiPrev = ei;\n }\n};\nSegmentNodeList.prototype.getEdge = function getEdge () {\n return this._edge\n};\nSegmentNodeList.prototype.addEndpoints = function addEndpoints () {\n var maxSegIndex = this._edge.size() - 1;\n this.add(this._edge.getCoordinate(0), 0);\n this.add(this._edge.getCoordinate(maxSegIndex), maxSegIndex);\n};\nSegmentNodeList.prototype.createSplitEdge = function createSplitEdge (ei0, ei1) {\n var this$1 = this;\n\n var npts = ei1.segmentIndex - ei0.segmentIndex + 2;\n var lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);\n var useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);\n if (!useIntPt1) {\n npts--;\n }\n var pts = new Array(npts).fill(null);\n var ipt = 0;\n pts[ipt++] = new Coordinate(ei0.coord);\n for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {\n pts[ipt++] = this$1._edge.getCoordinate(i);\n }\n if (useIntPt1) { pts[ipt] = new Coordinate(ei1.coord); }\n return new NodedSegmentString(pts, this._edge.getData())\n};\nSegmentNodeList.prototype.add = function add (intPt, segmentIndex) {\n var eiNew = new SegmentNode(this._edge, intPt, segmentIndex, this._edge.getSegmentOctant(segmentIndex));\n var ei = this._nodeMap.get(eiNew);\n if (ei !== null) {\n Assert.isTrue(ei.coord.equals2D(intPt), 'Found equal nodes with different coordinates');\n return ei\n }\n this._nodeMap.put(eiNew, eiNew);\n return eiNew\n};\nSegmentNodeList.prototype.checkSplitEdgesCorrectness = function checkSplitEdgesCorrectness (splitEdges) {\n var edgePts = this._edge.getCoordinates();\n var split0 = splitEdges.get(0);\n var pt0 = split0.getCoordinate(0);\n if (!pt0.equals2D(edgePts[0])) { throw new RuntimeException('bad split edge start point at ' + pt0) }\n var splitn = splitEdges.get(splitEdges.size() - 1);\n var splitnPts = splitn.getCoordinates();\n var ptn = splitnPts[splitnPts.length - 1];\n if (!ptn.equals2D(edgePts[edgePts.length - 1])) { throw new RuntimeException('bad split edge end point at ' + ptn) }\n};\nSegmentNodeList.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSegmentNodeList.prototype.getClass = function getClass () {\n return SegmentNodeList\n};\n\n\n\n// class NodeVertexIterator {\n// constructor () {\n// this._nodeList = null\n// this._edge = null\n// this._nodeIt = null\n// this._currNode = null\n// this._nextNode = null\n// this._currSegIndex = 0\n// let nodeList = arguments[0]\n// this._nodeList = nodeList\n// this._edge = nodeList.getEdge()\n// this._nodeIt = nodeList.iterator()\n// this.readNextNode()\n// }\n// next () {\n// if (this._currNode === null) {\n// this._currNode = this._nextNode\n// this._currSegIndex = this._currNode.segmentIndex\n// this.readNextNode()\n// return this._currNode\n// }\n// if (this._nextNode === null) return null\n// if (this._nextNode.segmentIndex === this._currNode.segmentIndex) {\n// this._currNode = this._nextNode\n// this._currSegIndex = this._currNode.segmentIndex\n// this.readNextNode()\n// return this._currNode\n// }\n// if (this._nextNode.segmentIndex > this._currNode.segmentIndex) {}\n// return null\n// }\n// remove () {\n// // throw new UnsupportedOperationException(this.getClass().getName())\n// }\n// hasNext () {\n// if (this._nextNode === null) return false\n// return true\n// }\n// readNextNode () {\n// if (this._nodeIt.hasNext()) this._nextNode = this._nodeIt.next(); else this._nextNode = null\n// }\n// interfaces_ () {\n// return [Iterator]\n// }\n// getClass () {\n// return NodeVertexIterator\n// }\n// }\n\nvar Octant = function Octant () {};\n\nOctant.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOctant.prototype.getClass = function getClass () {\n return Octant\n};\nOctant.octant = function octant () {\n if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\n var dx = arguments[0];\n var dy = arguments[1];\n if (dx === 0.0 && dy === 0.0) { throw new IllegalArgumentException('Cannot compute the octant for point ( ' + dx + ', ' + dy + ' )') }\n var adx = Math.abs(dx);\n var ady = Math.abs(dy);\n if (dx >= 0) {\n if (dy >= 0) {\n if (adx >= ady) { return 0; } else { return 1 }\n } else {\n if (adx >= ady) { return 7; } else { return 6 }\n }\n } else {\n if (dy >= 0) {\n if (adx >= ady) { return 3; } else { return 2 }\n } else {\n if (adx >= ady) { return 4; } else { return 5 }\n }\n }\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n var dx$1 = p1.x - p0.x;\n var dy$1 = p1.y - p0.y;\n if (dx$1 === 0.0 && dy$1 === 0.0) { throw new IllegalArgumentException('Cannot compute the octant for two identical points ' + p0) }\n return Octant.octant(dx$1, dy$1)\n }\n};\n\nvar SegmentString = function SegmentString () {};\n\nSegmentString.prototype.getCoordinates = function getCoordinates () {};\nSegmentString.prototype.size = function size () {};\nSegmentString.prototype.getCoordinate = function getCoordinate (i) {};\nSegmentString.prototype.isClosed = function isClosed () {};\nSegmentString.prototype.setData = function setData (data) {};\nSegmentString.prototype.getData = function getData () {};\nSegmentString.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSegmentString.prototype.getClass = function getClass () {\n return SegmentString\n};\n\nvar NodableSegmentString = function NodableSegmentString () {};\n\nNodableSegmentString.prototype.addIntersection = function addIntersection (intPt, segmentIndex) {};\nNodableSegmentString.prototype.interfaces_ = function interfaces_ () {\n return [SegmentString]\n};\nNodableSegmentString.prototype.getClass = function getClass () {\n return NodableSegmentString\n};\n\nvar NodedSegmentString = function NodedSegmentString () {\n this._nodeList = new SegmentNodeList(this);\n this._pts = null;\n this._data = null;\n var pts = arguments[0];\n var data = arguments[1];\n this._pts = pts;\n this._data = data;\n};\nNodedSegmentString.prototype.getCoordinates = function getCoordinates () {\n return this._pts\n};\nNodedSegmentString.prototype.size = function size () {\n return this._pts.length\n};\nNodedSegmentString.prototype.getCoordinate = function getCoordinate (i) {\n return this._pts[i]\n};\nNodedSegmentString.prototype.isClosed = function isClosed () {\n return this._pts[0].equals(this._pts[this._pts.length - 1])\n};\nNodedSegmentString.prototype.getSegmentOctant = function getSegmentOctant (index) {\n if (index === this._pts.length - 1) { return -1 }\n return this.safeOctant(this.getCoordinate(index), this.getCoordinate(index + 1))\n};\nNodedSegmentString.prototype.setData = function setData (data) {\n this._data = data;\n};\nNodedSegmentString.prototype.safeOctant = function safeOctant (p0, p1) {\n if (p0.equals2D(p1)) { return 0 }\n return Octant.octant(p0, p1)\n};\nNodedSegmentString.prototype.getData = function getData () {\n return this._data\n};\nNodedSegmentString.prototype.addIntersection = function addIntersection () {\n if (arguments.length === 2) {\n var intPt$1 = arguments[0];\n var segmentIndex = arguments[1];\n this.addIntersectionNode(intPt$1, segmentIndex);\n } else if (arguments.length === 4) {\n var li = arguments[0];\n var segmentIndex$1 = arguments[1];\n // const geomIndex = arguments[2]\n var intIndex = arguments[3];\n var intPt = new Coordinate(li.getIntersection(intIndex));\n this.addIntersection(intPt, segmentIndex$1);\n }\n};\nNodedSegmentString.prototype.toString = function toString () {\n return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))\n};\nNodedSegmentString.prototype.getNodeList = function getNodeList () {\n return this._nodeList\n};\nNodedSegmentString.prototype.addIntersectionNode = function addIntersectionNode (intPt, segmentIndex) {\n var normalizedSegmentIndex = segmentIndex;\n var nextSegIndex = normalizedSegmentIndex + 1;\n if (nextSegIndex < this._pts.length) {\n var nextPt = this._pts[nextSegIndex];\n if (intPt.equals2D(nextPt)) {\n normalizedSegmentIndex = nextSegIndex;\n }\n }\n var ei = this._nodeList.add(intPt, normalizedSegmentIndex);\n return ei\n};\nNodedSegmentString.prototype.addIntersections = function addIntersections (li, segmentIndex, geomIndex) {\n var this$1 = this;\n\n for (var i = 0; i < li.getIntersectionNum(); i++) {\n this$1.addIntersection(li, segmentIndex, geomIndex, i);\n }\n};\nNodedSegmentString.prototype.interfaces_ = function interfaces_ () {\n return [NodableSegmentString]\n};\nNodedSegmentString.prototype.getClass = function getClass () {\n return NodedSegmentString\n};\nNodedSegmentString.getNodedSubstrings = function getNodedSubstrings () {\n if (arguments.length === 1) {\n var segStrings = arguments[0];\n var resultEdgelist = new ArrayList();\n NodedSegmentString.getNodedSubstrings(segStrings, resultEdgelist);\n return resultEdgelist\n } else if (arguments.length === 2) {\n var segStrings$1 = arguments[0];\n var resultEdgelist$1 = arguments[1];\n for (var i = segStrings$1.iterator(); i.hasNext();) {\n var ss = i.next();\n ss.getNodeList().addSplitEdges(resultEdgelist$1);\n }\n }\n};\n\nvar LineSegment = function LineSegment () {\n this.p0 = null;\n this.p1 = null;\n if (arguments.length === 0) {\n this.p0 = new Coordinate();\n this.p1 = new Coordinate();\n } else if (arguments.length === 1) {\n var ls = arguments[0];\n this.p0 = new Coordinate(ls.p0);\n this.p1 = new Coordinate(ls.p1);\n } else if (arguments.length === 2) {\n this.p0 = arguments[0];\n this.p1 = arguments[1];\n } else if (arguments.length === 4) {\n var x0 = arguments[0];\n var y0 = arguments[1];\n var x1 = arguments[2];\n var y1 = arguments[3];\n this.p0 = new Coordinate(x0, y0);\n this.p1 = new Coordinate(x1, y1);\n }\n};\n\nvar staticAccessors$24 = { serialVersionUID: { configurable: true } };\nLineSegment.prototype.minX = function minX () {\n return Math.min(this.p0.x, this.p1.x)\n};\nLineSegment.prototype.orientationIndex = function orientationIndex () {\n if (arguments[0] instanceof LineSegment) {\n var seg = arguments[0];\n var orient0 = CGAlgorithms.orientationIndex(this.p0, this.p1, seg.p0);\n var orient1 = CGAlgorithms.orientationIndex(this.p0, this.p1, seg.p1);\n if (orient0 >= 0 && orient1 >= 0) { return Math.max(orient0, orient1) }\n if (orient0 <= 0 && orient1 <= 0) { return Math.max(orient0, orient1) }\n return 0\n } else if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n return CGAlgorithms.orientationIndex(this.p0, this.p1, p)\n }\n};\nLineSegment.prototype.toGeometry = function toGeometry (geomFactory) {\n return geomFactory.createLineString([this.p0, this.p1])\n};\nLineSegment.prototype.isVertical = function isVertical () {\n return this.p0.x === this.p1.x\n};\nLineSegment.prototype.equals = function equals (o) {\n if (!(o instanceof LineSegment)) {\n return false\n }\n var other = o;\n return this.p0.equals(other.p0) && this.p1.equals(other.p1)\n};\nLineSegment.prototype.intersection = function intersection (line) {\n var li = new RobustLineIntersector();\n li.computeIntersection(this.p0, this.p1, line.p0, line.p1);\n if (li.hasIntersection()) { return li.getIntersection(0) }\n return null\n};\nLineSegment.prototype.project = function project () {\n if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n if (p.equals(this.p0) || p.equals(this.p1)) { return new Coordinate(p) }\n var r = this.projectionFactor(p);\n var coord = new Coordinate();\n coord.x = this.p0.x + r * (this.p1.x - this.p0.x);\n coord.y = this.p0.y + r * (this.p1.y - this.p0.y);\n return coord\n } else if (arguments[0] instanceof LineSegment) {\n var seg = arguments[0];\n var pf0 = this.projectionFactor(seg.p0);\n var pf1 = this.projectionFactor(seg.p1);\n if (pf0 >= 1.0 && pf1 >= 1.0) { return null }\n if (pf0 <= 0.0 && pf1 <= 0.0) { return null }\n var newp0 = this.project(seg.p0);\n if (pf0 < 0.0) { newp0 = this.p0; }\n if (pf0 > 1.0) { newp0 = this.p1; }\n var newp1 = this.project(seg.p1);\n if (pf1 < 0.0) { newp1 = this.p0; }\n if (pf1 > 1.0) { newp1 = this.p1; }\n return new LineSegment(newp0, newp1)\n }\n};\nLineSegment.prototype.normalize = function normalize () {\n if (this.p1.compareTo(this.p0) < 0) { this.reverse(); }\n};\nLineSegment.prototype.angle = function angle () {\n return Math.atan2(this.p1.y - this.p0.y, this.p1.x - this.p0.x)\n};\nLineSegment.prototype.getCoordinate = function getCoordinate (i) {\n if (i === 0) { return this.p0 }\n return this.p1\n};\nLineSegment.prototype.distancePerpendicular = function distancePerpendicular (p) {\n return CGAlgorithms.distancePointLinePerpendicular(p, this.p0, this.p1)\n};\nLineSegment.prototype.minY = function minY () {\n return Math.min(this.p0.y, this.p1.y)\n};\nLineSegment.prototype.midPoint = function midPoint () {\n return LineSegment.midPoint(this.p0, this.p1)\n};\nLineSegment.prototype.projectionFactor = function projectionFactor (p) {\n if (p.equals(this.p0)) { return 0.0 }\n if (p.equals(this.p1)) { return 1.0 }\n var dx = this.p1.x - this.p0.x;\n var dy = this.p1.y - this.p0.y;\n var len = dx * dx + dy * dy;\n if (len <= 0.0) { return Double.NaN }\n var r = ((p.x - this.p0.x) * dx + (p.y - this.p0.y) * dy) / len;\n return r\n};\nLineSegment.prototype.closestPoints = function closestPoints (line) {\n var intPt = this.intersection(line);\n if (intPt !== null) {\n return [intPt, intPt]\n }\n var closestPt = new Array(2).fill(null);\n var minDistance = Double.MAX_VALUE;\n var dist = null;\n var close00 = this.closestPoint(line.p0);\n minDistance = close00.distance(line.p0);\n closestPt[0] = close00;\n closestPt[1] = line.p0;\n var close01 = this.closestPoint(line.p1);\n dist = close01.distance(line.p1);\n if (dist < minDistance) {\n minDistance = dist;\n closestPt[0] = close01;\n closestPt[1] = line.p1;\n }\n var close10 = line.closestPoint(this.p0);\n dist = close10.distance(this.p0);\n if (dist < minDistance) {\n minDistance = dist;\n closestPt[0] = this.p0;\n closestPt[1] = close10;\n }\n var close11 = line.closestPoint(this.p1);\n dist = close11.distance(this.p1);\n if (dist < minDistance) {\n minDistance = dist;\n closestPt[0] = this.p1;\n closestPt[1] = close11;\n }\n return closestPt\n};\nLineSegment.prototype.closestPoint = function closestPoint (p) {\n var factor = this.projectionFactor(p);\n if (factor > 0 && factor < 1) {\n return this.project(p)\n }\n var dist0 = this.p0.distance(p);\n var dist1 = this.p1.distance(p);\n if (dist0 < dist1) { return this.p0 }\n return this.p1\n};\nLineSegment.prototype.maxX = function maxX () {\n return Math.max(this.p0.x, this.p1.x)\n};\nLineSegment.prototype.getLength = function getLength () {\n return this.p0.distance(this.p1)\n};\nLineSegment.prototype.compareTo = function compareTo (o) {\n var other = o;\n var comp0 = this.p0.compareTo(other.p0);\n if (comp0 !== 0) { return comp0 }\n return this.p1.compareTo(other.p1)\n};\nLineSegment.prototype.reverse = function reverse () {\n var temp = this.p0;\n this.p0 = this.p1;\n this.p1 = temp;\n};\nLineSegment.prototype.equalsTopo = function equalsTopo (other) {\n return this.p0.equals(other.p0) &&\n (this.p1.equals(other.p1) || this.p0.equals(other.p1)) &&\n this.p1.equals(other.p0)\n};\nLineSegment.prototype.lineIntersection = function lineIntersection (line) {\n try {\n var intPt = HCoordinate.intersection(this.p0, this.p1, line.p0, line.p1);\n return intPt\n } catch (ex) {\n if (ex instanceof NotRepresentableException) {} else { throw ex }\n } finally {}\n return null\n};\nLineSegment.prototype.maxY = function maxY () {\n return Math.max(this.p0.y, this.p1.y)\n};\nLineSegment.prototype.pointAlongOffset = function pointAlongOffset (segmentLengthFraction, offsetDistance) {\n var segx = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x);\n var segy = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y);\n var dx = this.p1.x - this.p0.x;\n var dy = this.p1.y - this.p0.y;\n var len = Math.sqrt(dx * dx + dy * dy);\n var ux = 0.0;\n var uy = 0.0;\n if (offsetDistance !== 0.0) {\n if (len <= 0.0) { throw new Error('Cannot compute offset from zero-length line segment') }\n ux = offsetDistance * dx / len;\n uy = offsetDistance * dy / len;\n }\n var offsetx = segx - uy;\n var offsety = segy + ux;\n var coord = new Coordinate(offsetx, offsety);\n return coord\n};\nLineSegment.prototype.setCoordinates = function setCoordinates () {\n if (arguments.length === 1) {\n var ls = arguments[0];\n this.setCoordinates(ls.p0, ls.p1);\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n this.p0.x = p0.x;\n this.p0.y = p0.y;\n this.p1.x = p1.x;\n this.p1.y = p1.y;\n }\n};\nLineSegment.prototype.segmentFraction = function segmentFraction (inputPt) {\n var segFrac = this.projectionFactor(inputPt);\n if (segFrac < 0.0) { segFrac = 0.0; } else if (segFrac > 1.0 || Double.isNaN(segFrac)) { segFrac = 1.0; }\n return segFrac\n};\nLineSegment.prototype.toString = function toString () {\n return 'LINESTRING( ' + this.p0.x + ' ' + this.p0.y + ', ' + this.p1.x + ' ' + this.p1.y + ')'\n};\nLineSegment.prototype.isHorizontal = function isHorizontal () {\n return this.p0.y === this.p1.y\n};\nLineSegment.prototype.distance = function distance () {\n if (arguments[0] instanceof LineSegment) {\n var ls = arguments[0];\n return CGAlgorithms.distanceLineLine(this.p0, this.p1, ls.p0, ls.p1)\n } else if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n return CGAlgorithms.distancePointLine(p, this.p0, this.p1)\n }\n};\nLineSegment.prototype.pointAlong = function pointAlong (segmentLengthFraction) {\n var coord = new Coordinate();\n coord.x = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x);\n coord.y = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y);\n return coord\n};\nLineSegment.prototype.hashCode = function hashCode () {\n var bits0 = Double.doubleToLongBits(this.p0.x);\n bits0 ^= Double.doubleToLongBits(this.p0.y) * 31;\n var hash0 = Math.trunc(bits0) ^ Math.trunc(bits0 >> 32);\n var bits1 = Double.doubleToLongBits(this.p1.x);\n bits1 ^= Double.doubleToLongBits(this.p1.y) * 31;\n var hash1 = Math.trunc(bits1) ^ Math.trunc(bits1 >> 32);\n return hash0 ^ hash1\n};\nLineSegment.prototype.interfaces_ = function interfaces_ () {\n return [Comparable, Serializable]\n};\nLineSegment.prototype.getClass = function getClass () {\n return LineSegment\n};\nLineSegment.midPoint = function midPoint (p0, p1) {\n return new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2)\n};\nstaticAccessors$24.serialVersionUID.get = function () { return 3252005833466256227 };\n\nObject.defineProperties( LineSegment, staticAccessors$24 );\n\nvar MonotoneChainOverlapAction = function MonotoneChainOverlapAction () {\n this.tempEnv1 = new Envelope();\n this.tempEnv2 = new Envelope();\n this._overlapSeg1 = new LineSegment();\n this._overlapSeg2 = new LineSegment();\n};\nMonotoneChainOverlapAction.prototype.overlap = function overlap () {\n if (arguments.length === 2) {\n // const seg1 = arguments[0]\n // const seg2 = arguments[1]\n } else if (arguments.length === 4) {\n var mc1 = arguments[0];\n var start1 = arguments[1];\n var mc2 = arguments[2];\n var start2 = arguments[3];\n mc1.getLineSegment(start1, this._overlapSeg1);\n mc2.getLineSegment(start2, this._overlapSeg2);\n this.overlap(this._overlapSeg1, this._overlapSeg2);\n }\n};\nMonotoneChainOverlapAction.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChainOverlapAction.prototype.getClass = function getClass () {\n return MonotoneChainOverlapAction\n};\n\nvar MonotoneChain = function MonotoneChain () {\n this._pts = null;\n this._start = null;\n this._end = null;\n this._env = null;\n this._context = null;\n this._id = null;\n var pts = arguments[0];\n var start = arguments[1];\n var end = arguments[2];\n var context = arguments[3];\n this._pts = pts;\n this._start = start;\n this._end = end;\n this._context = context;\n};\nMonotoneChain.prototype.getLineSegment = function getLineSegment (index, ls) {\n ls.p0 = this._pts[index];\n ls.p1 = this._pts[index + 1];\n};\nMonotoneChain.prototype.computeSelect = function computeSelect (searchEnv, start0, end0, mcs) {\n var p0 = this._pts[start0];\n var p1 = this._pts[end0];\n mcs.tempEnv1.init(p0, p1);\n if (end0 - start0 === 1) {\n mcs.select(this, start0);\n return null\n }\n if (!searchEnv.intersects(mcs.tempEnv1)) { return null }\n var mid = Math.trunc((start0 + end0) / 2);\n if (start0 < mid) {\n this.computeSelect(searchEnv, start0, mid, mcs);\n }\n if (mid < end0) {\n this.computeSelect(searchEnv, mid, end0, mcs);\n }\n};\nMonotoneChain.prototype.getCoordinates = function getCoordinates () {\n var this$1 = this;\n\n var coord = new Array(this._end - this._start + 1).fill(null);\n var index = 0;\n for (var i = this._start; i <= this._end; i++) {\n coord[index++] = this$1._pts[i];\n }\n return coord\n};\nMonotoneChain.prototype.computeOverlaps = function computeOverlaps (mc, mco) {\n this.computeOverlapsInternal(this._start, this._end, mc, mc._start, mc._end, mco);\n};\nMonotoneChain.prototype.setId = function setId (id) {\n this._id = id;\n};\nMonotoneChain.prototype.select = function select (searchEnv, mcs) {\n this.computeSelect(searchEnv, this._start, this._end, mcs);\n};\nMonotoneChain.prototype.getEnvelope = function getEnvelope () {\n if (this._env === null) {\n var p0 = this._pts[this._start];\n var p1 = this._pts[this._end];\n this._env = new Envelope(p0, p1);\n }\n return this._env\n};\nMonotoneChain.prototype.getEndIndex = function getEndIndex () {\n return this._end\n};\nMonotoneChain.prototype.getStartIndex = function getStartIndex () {\n return this._start\n};\nMonotoneChain.prototype.getContext = function getContext () {\n return this._context\n};\nMonotoneChain.prototype.getId = function getId () {\n return this._id\n};\nMonotoneChain.prototype.computeOverlapsInternal = function computeOverlapsInternal (start0, end0, mc, start1, end1, mco) {\n var p00 = this._pts[start0];\n var p01 = this._pts[end0];\n var p10 = mc._pts[start1];\n var p11 = mc._pts[end1];\n if (end0 - start0 === 1 && end1 - start1 === 1) {\n mco.overlap(this, start0, mc, start1);\n return null\n }\n mco.tempEnv1.init(p00, p01);\n mco.tempEnv2.init(p10, p11);\n if (!mco.tempEnv1.intersects(mco.tempEnv2)) { return null }\n var mid0 = Math.trunc((start0 + end0) / 2);\n var mid1 = Math.trunc((start1 + end1) / 2);\n if (start0 < mid0) {\n if (start1 < mid1) { this.computeOverlapsInternal(start0, mid0, mc, start1, mid1, mco); }\n if (mid1 < end1) { this.computeOverlapsInternal(start0, mid0, mc, mid1, end1, mco); }\n }\n if (mid0 < end0) {\n if (start1 < mid1) { this.computeOverlapsInternal(mid0, end0, mc, start1, mid1, mco); }\n if (mid1 < end1) { this.computeOverlapsInternal(mid0, end0, mc, mid1, end1, mco); }\n }\n};\nMonotoneChain.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChain.prototype.getClass = function getClass () {\n return MonotoneChain\n};\n\nvar MonotoneChainBuilder = function MonotoneChainBuilder () {};\n\nMonotoneChainBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChainBuilder.prototype.getClass = function getClass () {\n return MonotoneChainBuilder\n};\nMonotoneChainBuilder.getChainStartIndices = function getChainStartIndices (pts) {\n var start = 0;\n var startIndexList = new ArrayList();\n startIndexList.add(new Integer(start));\n do {\n var last = MonotoneChainBuilder.findChainEnd(pts, start);\n startIndexList.add(new Integer(last));\n start = last;\n } while (start < pts.length - 1)\n var startIndex = MonotoneChainBuilder.toIntArray(startIndexList);\n return startIndex\n};\nMonotoneChainBuilder.findChainEnd = function findChainEnd (pts, start) {\n var safeStart = start;\n while (safeStart < pts.length - 1 && pts[safeStart].equals2D(pts[safeStart + 1])) {\n safeStart++;\n }\n if (safeStart >= pts.length - 1) {\n return pts.length - 1\n }\n var chainQuad = Quadrant.quadrant(pts[safeStart], pts[safeStart + 1]);\n var last = start + 1;\n while (last < pts.length) {\n if (!pts[last - 1].equals2D(pts[last])) {\n var quad = Quadrant.quadrant(pts[last - 1], pts[last]);\n if (quad !== chainQuad) { break }\n }\n last++;\n }\n return last - 1\n};\nMonotoneChainBuilder.getChains = function getChains () {\n if (arguments.length === 1) {\n var pts = arguments[0];\n return MonotoneChainBuilder.getChains(pts, null)\n } else if (arguments.length === 2) {\n var pts$1 = arguments[0];\n var context = arguments[1];\n var mcList = new ArrayList();\n var startIndex = MonotoneChainBuilder.getChainStartIndices(pts$1);\n for (var i = 0; i < startIndex.length - 1; i++) {\n var mc = new MonotoneChain(pts$1, startIndex[i], startIndex[i + 1], context);\n mcList.add(mc);\n }\n return mcList\n }\n};\nMonotoneChainBuilder.toIntArray = function toIntArray (list) {\n var array = new Array(list.size()).fill(null);\n for (var i = 0; i < array.length; i++) {\n array[i] = list.get(i).intValue();\n }\n return array\n};\n\nvar Noder = function Noder () {};\n\nNoder.prototype.computeNodes = function computeNodes (segStrings) {};\nNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {};\nNoder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nNoder.prototype.getClass = function getClass () {\n return Noder\n};\n\nvar SinglePassNoder = function SinglePassNoder () {\n this._segInt = null;\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n var segInt = arguments[0];\n this.setSegmentIntersector(segInt);\n }\n};\nSinglePassNoder.prototype.setSegmentIntersector = function setSegmentIntersector (segInt) {\n this._segInt = segInt;\n};\nSinglePassNoder.prototype.interfaces_ = function interfaces_ () {\n return [Noder]\n};\nSinglePassNoder.prototype.getClass = function getClass () {\n return SinglePassNoder\n};\n\nvar MCIndexNoder = (function (SinglePassNoder$$1) {\n function MCIndexNoder (si) {\n if (si) { SinglePassNoder$$1.call(this, si); }\n else { SinglePassNoder$$1.call(this); }\n this._monoChains = new ArrayList();\n this._index = new STRtree();\n this._idCounter = 0;\n this._nodedSegStrings = null;\n this._nOverlaps = 0;\n }\n\n if ( SinglePassNoder$$1 ) MCIndexNoder.__proto__ = SinglePassNoder$$1;\n MCIndexNoder.prototype = Object.create( SinglePassNoder$$1 && SinglePassNoder$$1.prototype );\n MCIndexNoder.prototype.constructor = MCIndexNoder;\n\n var staticAccessors = { SegmentOverlapAction: { configurable: true } };\n MCIndexNoder.prototype.getMonotoneChains = function getMonotoneChains () {\n return this._monoChains\n };\n MCIndexNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {\n return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)\n };\n MCIndexNoder.prototype.getIndex = function getIndex () {\n return this._index\n };\n MCIndexNoder.prototype.add = function add (segStr) {\n var this$1 = this;\n\n var segChains = MonotoneChainBuilder.getChains(segStr.getCoordinates(), segStr);\n for (var i = segChains.iterator(); i.hasNext();) {\n var mc = i.next();\n mc.setId(this$1._idCounter++);\n this$1._index.insert(mc.getEnvelope(), mc);\n this$1._monoChains.add(mc);\n }\n };\n MCIndexNoder.prototype.computeNodes = function computeNodes (inputSegStrings) {\n var this$1 = this;\n\n this._nodedSegStrings = inputSegStrings;\n for (var i = inputSegStrings.iterator(); i.hasNext();) {\n this$1.add(i.next());\n }\n this.intersectChains();\n };\n MCIndexNoder.prototype.intersectChains = function intersectChains () {\n var this$1 = this;\n\n var overlapAction = new SegmentOverlapAction(this._segInt);\n for (var i = this._monoChains.iterator(); i.hasNext();) {\n var queryChain = i.next();\n var overlapChains = this$1._index.query(queryChain.getEnvelope());\n for (var j = overlapChains.iterator(); j.hasNext();) {\n var testChain = j.next();\n if (testChain.getId() > queryChain.getId()) {\n queryChain.computeOverlaps(testChain, overlapAction);\n this$1._nOverlaps++;\n }\n if (this$1._segInt.isDone()) { return null }\n }\n }\n };\n MCIndexNoder.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n MCIndexNoder.prototype.getClass = function getClass () {\n return MCIndexNoder\n };\n staticAccessors.SegmentOverlapAction.get = function () { return SegmentOverlapAction };\n\n Object.defineProperties( MCIndexNoder, staticAccessors );\n\n return MCIndexNoder;\n}(SinglePassNoder));\n\nvar SegmentOverlapAction = (function (MonotoneChainOverlapAction$$1) {\n function SegmentOverlapAction () {\n MonotoneChainOverlapAction$$1.call(this);\n this._si = null;\n var si = arguments[0];\n this._si = si;\n }\n\n if ( MonotoneChainOverlapAction$$1 ) SegmentOverlapAction.__proto__ = MonotoneChainOverlapAction$$1;\n SegmentOverlapAction.prototype = Object.create( MonotoneChainOverlapAction$$1 && MonotoneChainOverlapAction$$1.prototype );\n SegmentOverlapAction.prototype.constructor = SegmentOverlapAction;\n SegmentOverlapAction.prototype.overlap = function overlap () {\n if (arguments.length === 4) {\n var mc1 = arguments[0];\n var start1 = arguments[1];\n var mc2 = arguments[2];\n var start2 = arguments[3];\n var ss1 = mc1.getContext();\n var ss2 = mc2.getContext();\n this._si.processIntersections(ss1, start1, ss2, start2);\n } else { return MonotoneChainOverlapAction$$1.prototype.overlap.apply(this, arguments) }\n };\n SegmentOverlapAction.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n SegmentOverlapAction.prototype.getClass = function getClass () {\n return SegmentOverlapAction\n };\n\n return SegmentOverlapAction;\n}(MonotoneChainOverlapAction));\n\nvar BufferParameters = function BufferParameters () {\n this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;\n this._endCapStyle = BufferParameters.CAP_ROUND;\n this._joinStyle = BufferParameters.JOIN_ROUND;\n this._mitreLimit = BufferParameters.DEFAULT_MITRE_LIMIT;\n this._isSingleSided = false;\n this._simplifyFactor = BufferParameters.DEFAULT_SIMPLIFY_FACTOR;\n\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n var quadrantSegments = arguments[0];\n this.setQuadrantSegments(quadrantSegments);\n } else if (arguments.length === 2) {\n var quadrantSegments$1 = arguments[0];\n var endCapStyle = arguments[1];\n this.setQuadrantSegments(quadrantSegments$1);\n this.setEndCapStyle(endCapStyle);\n } else if (arguments.length === 4) {\n var quadrantSegments$2 = arguments[0];\n var endCapStyle$1 = arguments[1];\n var joinStyle = arguments[2];\n var mitreLimit = arguments[3];\n this.setQuadrantSegments(quadrantSegments$2);\n this.setEndCapStyle(endCapStyle$1);\n this.setJoinStyle(joinStyle);\n this.setMitreLimit(mitreLimit);\n }\n};\n\nvar staticAccessors$25 = { CAP_ROUND: { configurable: true },CAP_FLAT: { configurable: true },CAP_SQUARE: { configurable: true },JOIN_ROUND: { configurable: true },JOIN_MITRE: { configurable: true },JOIN_BEVEL: { configurable: true },DEFAULT_QUADRANT_SEGMENTS: { configurable: true },DEFAULT_MITRE_LIMIT: { configurable: true },DEFAULT_SIMPLIFY_FACTOR: { configurable: true } };\nBufferParameters.prototype.getEndCapStyle = function getEndCapStyle () {\n return this._endCapStyle\n};\nBufferParameters.prototype.isSingleSided = function isSingleSided () {\n return this._isSingleSided\n};\nBufferParameters.prototype.setQuadrantSegments = function setQuadrantSegments (quadSegs) {\n this._quadrantSegments = quadSegs;\n if (this._quadrantSegments === 0) { this._joinStyle = BufferParameters.JOIN_BEVEL; }\n if (this._quadrantSegments < 0) {\n this._joinStyle = BufferParameters.JOIN_MITRE;\n this._mitreLimit = Math.abs(this._quadrantSegments);\n }\n if (quadSegs <= 0) {\n this._quadrantSegments = 1;\n }\n if (this._joinStyle !== BufferParameters.JOIN_ROUND) {\n this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;\n }\n};\nBufferParameters.prototype.getJoinStyle = function getJoinStyle () {\n return this._joinStyle\n};\nBufferParameters.prototype.setJoinStyle = function setJoinStyle (joinStyle) {\n this._joinStyle = joinStyle;\n};\nBufferParameters.prototype.setSimplifyFactor = function setSimplifyFactor (simplifyFactor) {\n this._simplifyFactor = simplifyFactor < 0 ? 0 : simplifyFactor;\n};\nBufferParameters.prototype.getSimplifyFactor = function getSimplifyFactor () {\n return this._simplifyFactor\n};\nBufferParameters.prototype.getQuadrantSegments = function getQuadrantSegments () {\n return this._quadrantSegments\n};\nBufferParameters.prototype.setEndCapStyle = function setEndCapStyle (endCapStyle) {\n this._endCapStyle = endCapStyle;\n};\nBufferParameters.prototype.getMitreLimit = function getMitreLimit () {\n return this._mitreLimit\n};\nBufferParameters.prototype.setMitreLimit = function setMitreLimit (mitreLimit) {\n this._mitreLimit = mitreLimit;\n};\nBufferParameters.prototype.setSingleSided = function setSingleSided (isSingleSided) {\n this._isSingleSided = isSingleSided;\n};\nBufferParameters.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferParameters.prototype.getClass = function getClass () {\n return BufferParameters\n};\nBufferParameters.bufferDistanceError = function bufferDistanceError (quadSegs) {\n var alpha = Math.PI / 2.0 / quadSegs;\n return 1 - Math.cos(alpha / 2.0)\n};\nstaticAccessors$25.CAP_ROUND.get = function () { return 1 };\nstaticAccessors$25.CAP_FLAT.get = function () { return 2 };\nstaticAccessors$25.CAP_SQUARE.get = function () { return 3 };\nstaticAccessors$25.JOIN_ROUND.get = function () { return 1 };\nstaticAccessors$25.JOIN_MITRE.get = function () { return 2 };\nstaticAccessors$25.JOIN_BEVEL.get = function () { return 3 };\nstaticAccessors$25.DEFAULT_QUADRANT_SEGMENTS.get = function () { return 8 };\nstaticAccessors$25.DEFAULT_MITRE_LIMIT.get = function () { return 5.0 };\nstaticAccessors$25.DEFAULT_SIMPLIFY_FACTOR.get = function () { return 0.01 };\n\nObject.defineProperties( BufferParameters, staticAccessors$25 );\n\nvar BufferInputLineSimplifier = function BufferInputLineSimplifier (inputLine) {\n this._distanceTol = null;\n this._isDeleted = null;\n this._angleOrientation = CGAlgorithms.COUNTERCLOCKWISE;\n this._inputLine = inputLine || null;\n};\n\nvar staticAccessors$26 = { INIT: { configurable: true },DELETE: { configurable: true },KEEP: { configurable: true },NUM_PTS_TO_CHECK: { configurable: true } };\nBufferInputLineSimplifier.prototype.isDeletable = function isDeletable (i0, i1, i2, distanceTol) {\n var p0 = this._inputLine[i0];\n var p1 = this._inputLine[i1];\n var p2 = this._inputLine[i2];\n if (!this.isConcave(p0, p1, p2)) { return false }\n if (!this.isShallow(p0, p1, p2, distanceTol)) { return false }\n return this.isShallowSampled(p0, p1, i0, i2, distanceTol)\n};\nBufferInputLineSimplifier.prototype.deleteShallowConcavities = function deleteShallowConcavities () {\n var this$1 = this;\n\n var index = 1;\n // const maxIndex = this._inputLine.length - 1\n var midIndex = this.findNextNonDeletedIndex(index);\n var lastIndex = this.findNextNonDeletedIndex(midIndex);\n var isChanged = false;\n while (lastIndex < this._inputLine.length) {\n var isMiddleVertexDeleted = false;\n if (this$1.isDeletable(index, midIndex, lastIndex, this$1._distanceTol)) {\n this$1._isDeleted[midIndex] = BufferInputLineSimplifier.DELETE;\n isMiddleVertexDeleted = true;\n isChanged = true;\n }\n if (isMiddleVertexDeleted) { index = lastIndex; } else { index = midIndex; }\n midIndex = this$1.findNextNonDeletedIndex(index);\n lastIndex = this$1.findNextNonDeletedIndex(midIndex);\n }\n return isChanged\n};\nBufferInputLineSimplifier.prototype.isShallowConcavity = function isShallowConcavity (p0, p1, p2, distanceTol) {\n var orientation = CGAlgorithms.computeOrientation(p0, p1, p2);\n var isAngleToSimplify = orientation === this._angleOrientation;\n if (!isAngleToSimplify) { return false }\n var dist = CGAlgorithms.distancePointLine(p1, p0, p2);\n return dist < distanceTol\n};\nBufferInputLineSimplifier.prototype.isShallowSampled = function isShallowSampled (p0, p2, i0, i2, distanceTol) {\n var this$1 = this;\n\n var inc = Math.trunc((i2 - i0) / BufferInputLineSimplifier.NUM_PTS_TO_CHECK);\n if (inc <= 0) { inc = 1; }\n for (var i = i0; i < i2; i += inc) {\n if (!this$1.isShallow(p0, p2, this$1._inputLine[i], distanceTol)) { return false }\n }\n return true\n};\nBufferInputLineSimplifier.prototype.isConcave = function isConcave (p0, p1, p2) {\n var orientation = CGAlgorithms.computeOrientation(p0, p1, p2);\n var isConcave = orientation === this._angleOrientation;\n return isConcave\n};\nBufferInputLineSimplifier.prototype.simplify = function simplify (distanceTol) {\n var this$1 = this;\n\n this._distanceTol = Math.abs(distanceTol);\n if (distanceTol < 0) { this._angleOrientation = CGAlgorithms.CLOCKWISE; }\n this._isDeleted = new Array(this._inputLine.length).fill(null);\n var isChanged = false;\n do {\n isChanged = this$1.deleteShallowConcavities();\n } while (isChanged)\n return this.collapseLine()\n};\nBufferInputLineSimplifier.prototype.findNextNonDeletedIndex = function findNextNonDeletedIndex (index) {\n var next = index + 1;\n while (next < this._inputLine.length && this._isDeleted[next] === BufferInputLineSimplifier.DELETE) { next++; }\n return next\n};\nBufferInputLineSimplifier.prototype.isShallow = function isShallow (p0, p1, p2, distanceTol) {\n var dist = CGAlgorithms.distancePointLine(p1, p0, p2);\n return dist < distanceTol\n};\nBufferInputLineSimplifier.prototype.collapseLine = function collapseLine () {\n var this$1 = this;\n\n var coordList = new CoordinateList();\n for (var i = 0; i < this._inputLine.length; i++) {\n if (this$1._isDeleted[i] !== BufferInputLineSimplifier.DELETE) { coordList.add(this$1._inputLine[i]); }\n }\n return coordList.toCoordinateArray()\n};\nBufferInputLineSimplifier.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferInputLineSimplifier.prototype.getClass = function getClass () {\n return BufferInputLineSimplifier\n};\nBufferInputLineSimplifier.simplify = function simplify (inputLine, distanceTol) {\n var simp = new BufferInputLineSimplifier(inputLine);\n return simp.simplify(distanceTol)\n};\nstaticAccessors$26.INIT.get = function () { return 0 };\nstaticAccessors$26.DELETE.get = function () { return 1 };\nstaticAccessors$26.KEEP.get = function () { return 1 };\nstaticAccessors$26.NUM_PTS_TO_CHECK.get = function () { return 10 };\n\nObject.defineProperties( BufferInputLineSimplifier, staticAccessors$26 );\n\nvar OffsetSegmentString = function OffsetSegmentString () {\n this._ptList = null;\n this._precisionModel = null;\n this._minimimVertexDistance = 0.0;\n this._ptList = new ArrayList();\n};\n\nvar staticAccessors$28 = { COORDINATE_ARRAY_TYPE: { configurable: true } };\nOffsetSegmentString.prototype.getCoordinates = function getCoordinates () {\n var coord = this._ptList.toArray(OffsetSegmentString.COORDINATE_ARRAY_TYPE);\n return coord\n};\nOffsetSegmentString.prototype.setPrecisionModel = function setPrecisionModel (precisionModel) {\n this._precisionModel = precisionModel;\n};\nOffsetSegmentString.prototype.addPt = function addPt (pt) {\n var bufPt = new Coordinate(pt);\n this._precisionModel.makePrecise(bufPt);\n if (this.isRedundant(bufPt)) { return null }\n this._ptList.add(bufPt);\n};\nOffsetSegmentString.prototype.revere = function revere () {};\nOffsetSegmentString.prototype.addPts = function addPts (pt, isForward) {\n var this$1 = this;\n\n if (isForward) {\n for (var i = 0; i < pt.length; i++) {\n this$1.addPt(pt[i]);\n }\n } else {\n for (var i$1 = pt.length - 1; i$1 >= 0; i$1--) {\n this$1.addPt(pt[i$1]);\n }\n }\n};\nOffsetSegmentString.prototype.isRedundant = function isRedundant (pt) {\n if (this._ptList.size() < 1) { return false }\n var lastPt = this._ptList.get(this._ptList.size() - 1);\n var ptDist = pt.distance(lastPt);\n if (ptDist < this._minimimVertexDistance) { return true }\n return false\n};\nOffsetSegmentString.prototype.toString = function toString () {\n var fact = new GeometryFactory();\n var line = fact.createLineString(this.getCoordinates());\n return line.toString()\n};\nOffsetSegmentString.prototype.closeRing = function closeRing () {\n if (this._ptList.size() < 1) { return null }\n var startPt = new Coordinate(this._ptList.get(0));\n var lastPt = this._ptList.get(this._ptList.size() - 1);\n // const last2Pt = null\n // if (this._ptList.size() >= 2) last2Pt = this._ptList.get(this._ptList.size() - 2)\n if (startPt.equals(lastPt)) { return null }\n this._ptList.add(startPt);\n};\nOffsetSegmentString.prototype.setMinimumVertexDistance = function setMinimumVertexDistance (minimimVertexDistance) {\n this._minimimVertexDistance = minimimVertexDistance;\n};\nOffsetSegmentString.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOffsetSegmentString.prototype.getClass = function getClass () {\n return OffsetSegmentString\n};\nstaticAccessors$28.COORDINATE_ARRAY_TYPE.get = function () { return new Array(0).fill(null) };\n\nObject.defineProperties( OffsetSegmentString, staticAccessors$28 );\n\nvar Angle = function Angle () {};\n\nvar staticAccessors$29 = { PI_TIMES_2: { configurable: true },PI_OVER_2: { configurable: true },PI_OVER_4: { configurable: true },COUNTERCLOCKWISE: { configurable: true },CLOCKWISE: { configurable: true },NONE: { configurable: true } };\n\nAngle.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nAngle.prototype.getClass = function getClass () {\n return Angle\n};\nAngle.toDegrees = function toDegrees (radians) {\n return radians * 180 / Math.PI\n};\nAngle.normalize = function normalize (angle) {\n while (angle > Math.PI) { angle -= Angle.PI_TIMES_2; }\n while (angle <= -Math.PI) { angle += Angle.PI_TIMES_2; }\n return angle\n};\nAngle.angle = function angle () {\n if (arguments.length === 1) {\n var p = arguments[0];\n return Math.atan2(p.y, p.x)\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n var dx = p1.x - p0.x;\n var dy = p1.y - p0.y;\n return Math.atan2(dy, dx)\n }\n};\nAngle.isAcute = function isAcute (p0, p1, p2) {\n var dx0 = p0.x - p1.x;\n var dy0 = p0.y - p1.y;\n var dx1 = p2.x - p1.x;\n var dy1 = p2.y - p1.y;\n var dotprod = dx0 * dx1 + dy0 * dy1;\n return dotprod > 0\n};\nAngle.isObtuse = function isObtuse (p0, p1, p2) {\n var dx0 = p0.x - p1.x;\n var dy0 = p0.y - p1.y;\n var dx1 = p2.x - p1.x;\n var dy1 = p2.y - p1.y;\n var dotprod = dx0 * dx1 + dy0 * dy1;\n return dotprod < 0\n};\nAngle.interiorAngle = function interiorAngle (p0, p1, p2) {\n var anglePrev = Angle.angle(p1, p0);\n var angleNext = Angle.angle(p1, p2);\n return Math.abs(angleNext - anglePrev)\n};\nAngle.normalizePositive = function normalizePositive (angle) {\n if (angle < 0.0) {\n while (angle < 0.0) { angle += Angle.PI_TIMES_2; }\n if (angle >= Angle.PI_TIMES_2) { angle = 0.0; }\n } else {\n while (angle >= Angle.PI_TIMES_2) { angle -= Angle.PI_TIMES_2; }\n if (angle < 0.0) { angle = 0.0; }\n }\n return angle\n};\nAngle.angleBetween = function angleBetween (tip1, tail, tip2) {\n var a1 = Angle.angle(tail, tip1);\n var a2 = Angle.angle(tail, tip2);\n return Angle.diff(a1, a2)\n};\nAngle.diff = function diff (ang1, ang2) {\n var delAngle = null;\n if (ang1 < ang2) {\n delAngle = ang2 - ang1;\n } else {\n delAngle = ang1 - ang2;\n }\n if (delAngle > Math.PI) {\n delAngle = 2 * Math.PI - delAngle;\n }\n return delAngle\n};\nAngle.toRadians = function toRadians (angleDegrees) {\n return angleDegrees * Math.PI / 180.0\n};\nAngle.getTurn = function getTurn (ang1, ang2) {\n var crossproduct = Math.sin(ang2 - ang1);\n if (crossproduct > 0) {\n return Angle.COUNTERCLOCKWISE\n }\n if (crossproduct < 0) {\n return Angle.CLOCKWISE\n }\n return Angle.NONE\n};\nAngle.angleBetweenOriented = function angleBetweenOriented (tip1, tail, tip2) {\n var a1 = Angle.angle(tail, tip1);\n var a2 = Angle.angle(tail, tip2);\n var angDel = a2 - a1;\n if (angDel <= -Math.PI) { return angDel + Angle.PI_TIMES_2 }\n if (angDel > Math.PI) { return angDel - Angle.PI_TIMES_2 }\n return angDel\n};\nstaticAccessors$29.PI_TIMES_2.get = function () { return 2.0 * Math.PI };\nstaticAccessors$29.PI_OVER_2.get = function () { return Math.PI / 2.0 };\nstaticAccessors$29.PI_OVER_4.get = function () { return Math.PI / 4.0 };\nstaticAccessors$29.COUNTERCLOCKWISE.get = function () { return CGAlgorithms.COUNTERCLOCKWISE };\nstaticAccessors$29.CLOCKWISE.get = function () { return CGAlgorithms.CLOCKWISE };\nstaticAccessors$29.NONE.get = function () { return CGAlgorithms.COLLINEAR };\n\nObject.defineProperties( Angle, staticAccessors$29 );\n\nvar OffsetSegmentGenerator = function OffsetSegmentGenerator () {\n this._maxCurveSegmentError = 0.0;\n this._filletAngleQuantum = null;\n this._closingSegLengthFactor = 1;\n this._segList = null;\n this._distance = 0.0;\n this._precisionModel = null;\n this._bufParams = null;\n this._li = null;\n this._s0 = null;\n this._s1 = null;\n this._s2 = null;\n this._seg0 = new LineSegment();\n this._seg1 = new LineSegment();\n this._offset0 = new LineSegment();\n this._offset1 = new LineSegment();\n this._side = 0;\n this._hasNarrowConcaveAngle = false;\n var precisionModel = arguments[0];\n var bufParams = arguments[1];\n var distance = arguments[2];\n this._precisionModel = precisionModel;\n this._bufParams = bufParams;\n this._li = new RobustLineIntersector();\n this._filletAngleQuantum = Math.PI / 2.0 / bufParams.getQuadrantSegments();\n if (bufParams.getQuadrantSegments() >= 8 && bufParams.getJoinStyle() === BufferParameters.JOIN_ROUND) { this._closingSegLengthFactor = OffsetSegmentGenerator.MAX_CLOSING_SEG_LEN_FACTOR; }\n this.init(distance);\n};\n\nvar staticAccessors$27 = { OFFSET_SEGMENT_SEPARATION_FACTOR: { configurable: true },INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR: { configurable: true },CURVE_VERTEX_SNAP_DISTANCE_FACTOR: { configurable: true },MAX_CLOSING_SEG_LEN_FACTOR: { configurable: true } };\nOffsetSegmentGenerator.prototype.addNextSegment = function addNextSegment (p, addStartPoint) {\n this._s0 = this._s1;\n this._s1 = this._s2;\n this._s2 = p;\n this._seg0.setCoordinates(this._s0, this._s1);\n this.computeOffsetSegment(this._seg0, this._side, this._distance, this._offset0);\n this._seg1.setCoordinates(this._s1, this._s2);\n this.computeOffsetSegment(this._seg1, this._side, this._distance, this._offset1);\n if (this._s1.equals(this._s2)) { return null }\n var orientation = CGAlgorithms.computeOrientation(this._s0, this._s1, this._s2);\n var outsideTurn = (orientation === CGAlgorithms.CLOCKWISE && this._side === Position.LEFT) || (orientation === CGAlgorithms.COUNTERCLOCKWISE && this._side === Position.RIGHT);\n if (orientation === 0) {\n this.addCollinear(addStartPoint);\n } else if (outsideTurn) {\n this.addOutsideTurn(orientation, addStartPoint);\n } else {\n this.addInsideTurn(orientation, addStartPoint);\n }\n};\nOffsetSegmentGenerator.prototype.addLineEndCap = function addLineEndCap (p0, p1) {\n var seg = new LineSegment(p0, p1);\n var offsetL = new LineSegment();\n this.computeOffsetSegment(seg, Position.LEFT, this._distance, offsetL);\n var offsetR = new LineSegment();\n this.computeOffsetSegment(seg, Position.RIGHT, this._distance, offsetR);\n var dx = p1.x - p0.x;\n var dy = p1.y - p0.y;\n var angle = Math.atan2(dy, dx);\n switch (this._bufParams.getEndCapStyle()) {\n case BufferParameters.CAP_ROUND:\n this._segList.addPt(offsetL.p1);\n this.addFilletArc(p1, angle + Math.PI / 2, angle - Math.PI / 2, CGAlgorithms.CLOCKWISE, this._distance);\n this._segList.addPt(offsetR.p1);\n break\n case BufferParameters.CAP_FLAT:\n this._segList.addPt(offsetL.p1);\n this._segList.addPt(offsetR.p1);\n break\n case BufferParameters.CAP_SQUARE:\n var squareCapSideOffset = new Coordinate();\n squareCapSideOffset.x = Math.abs(this._distance) * Math.cos(angle);\n squareCapSideOffset.y = Math.abs(this._distance) * Math.sin(angle);\n var squareCapLOffset = new Coordinate(offsetL.p1.x + squareCapSideOffset.x, offsetL.p1.y + squareCapSideOffset.y);\n var squareCapROffset = new Coordinate(offsetR.p1.x + squareCapSideOffset.x, offsetR.p1.y + squareCapSideOffset.y);\n this._segList.addPt(squareCapLOffset);\n this._segList.addPt(squareCapROffset);\n break\n default:\n }\n};\nOffsetSegmentGenerator.prototype.getCoordinates = function getCoordinates () {\n var pts = this._segList.getCoordinates();\n return pts\n};\nOffsetSegmentGenerator.prototype.addMitreJoin = function addMitreJoin (p, offset0, offset1, distance) {\n var isMitreWithinLimit = true;\n var intPt = null;\n try {\n intPt = HCoordinate.intersection(offset0.p0, offset0.p1, offset1.p0, offset1.p1);\n var mitreRatio = distance <= 0.0 ? 1.0 : intPt.distance(p) / Math.abs(distance);\n if (mitreRatio > this._bufParams.getMitreLimit()) { isMitreWithinLimit = false; }\n } catch (ex) {\n if (ex instanceof NotRepresentableException) {\n intPt = new Coordinate(0, 0);\n isMitreWithinLimit = false;\n } else { throw ex }\n } finally {}\n if (isMitreWithinLimit) {\n this._segList.addPt(intPt);\n } else {\n this.addLimitedMitreJoin(offset0, offset1, distance, this._bufParams.getMitreLimit());\n }\n};\nOffsetSegmentGenerator.prototype.addFilletCorner = function addFilletCorner (p, p0, p1, direction, radius) {\n var dx0 = p0.x - p.x;\n var dy0 = p0.y - p.y;\n var startAngle = Math.atan2(dy0, dx0);\n var dx1 = p1.x - p.x;\n var dy1 = p1.y - p.y;\n var endAngle = Math.atan2(dy1, dx1);\n if (direction === CGAlgorithms.CLOCKWISE) {\n if (startAngle <= endAngle) { startAngle += 2.0 * Math.PI; }\n } else {\n if (startAngle >= endAngle) { startAngle -= 2.0 * Math.PI; }\n }\n this._segList.addPt(p0);\n this.addFilletArc(p, startAngle, endAngle, direction, radius);\n this._segList.addPt(p1);\n};\nOffsetSegmentGenerator.prototype.addOutsideTurn = function addOutsideTurn (orientation, addStartPoint) {\n if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.OFFSET_SEGMENT_SEPARATION_FACTOR) {\n this._segList.addPt(this._offset0.p1);\n return null\n }\n if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {\n this.addMitreJoin(this._s1, this._offset0, this._offset1, this._distance);\n } else if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL) {\n this.addBevelJoin(this._offset0, this._offset1);\n } else {\n if (addStartPoint) { this._segList.addPt(this._offset0.p1); }\n this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, orientation, this._distance);\n this._segList.addPt(this._offset1.p0);\n }\n};\nOffsetSegmentGenerator.prototype.createSquare = function createSquare (p) {\n this._segList.addPt(new Coordinate(p.x + this._distance, p.y + this._distance));\n this._segList.addPt(new Coordinate(p.x + this._distance, p.y - this._distance));\n this._segList.addPt(new Coordinate(p.x - this._distance, p.y - this._distance));\n this._segList.addPt(new Coordinate(p.x - this._distance, p.y + this._distance));\n this._segList.closeRing();\n};\nOffsetSegmentGenerator.prototype.addSegments = function addSegments (pt, isForward) {\n this._segList.addPts(pt, isForward);\n};\nOffsetSegmentGenerator.prototype.addFirstSegment = function addFirstSegment () {\n this._segList.addPt(this._offset1.p0);\n};\nOffsetSegmentGenerator.prototype.addLastSegment = function addLastSegment () {\n this._segList.addPt(this._offset1.p1);\n};\nOffsetSegmentGenerator.prototype.initSideSegments = function initSideSegments (s1, s2, side) {\n this._s1 = s1;\n this._s2 = s2;\n this._side = side;\n this._seg1.setCoordinates(s1, s2);\n this.computeOffsetSegment(this._seg1, side, this._distance, this._offset1);\n};\nOffsetSegmentGenerator.prototype.addLimitedMitreJoin = function addLimitedMitreJoin (offset0, offset1, distance, mitreLimit) {\n var basePt = this._seg0.p1;\n var ang0 = Angle.angle(basePt, this._seg0.p0);\n // const ang1 = Angle.angle(basePt, this._seg1.p1)\n var angDiff = Angle.angleBetweenOriented(this._seg0.p0, basePt, this._seg1.p1);\n var angDiffHalf = angDiff / 2;\n var midAng = Angle.normalize(ang0 + angDiffHalf);\n var mitreMidAng = Angle.normalize(midAng + Math.PI);\n var mitreDist = mitreLimit * distance;\n var bevelDelta = mitreDist * Math.abs(Math.sin(angDiffHalf));\n var bevelHalfLen = distance - bevelDelta;\n var bevelMidX = basePt.x + mitreDist * Math.cos(mitreMidAng);\n var bevelMidY = basePt.y + mitreDist * Math.sin(mitreMidAng);\n var bevelMidPt = new Coordinate(bevelMidX, bevelMidY);\n var mitreMidLine = new LineSegment(basePt, bevelMidPt);\n var bevelEndLeft = mitreMidLine.pointAlongOffset(1.0, bevelHalfLen);\n var bevelEndRight = mitreMidLine.pointAlongOffset(1.0, -bevelHalfLen);\n if (this._side === Position.LEFT) {\n this._segList.addPt(bevelEndLeft);\n this._segList.addPt(bevelEndRight);\n } else {\n this._segList.addPt(bevelEndRight);\n this._segList.addPt(bevelEndLeft);\n }\n};\nOffsetSegmentGenerator.prototype.computeOffsetSegment = function computeOffsetSegment (seg, side, distance, offset) {\n var sideSign = side === Position.LEFT ? 1 : -1;\n var dx = seg.p1.x - seg.p0.x;\n var dy = seg.p1.y - seg.p0.y;\n var len = Math.sqrt(dx * dx + dy * dy);\n var ux = sideSign * distance * dx / len;\n var uy = sideSign * distance * dy / len;\n offset.p0.x = seg.p0.x - uy;\n offset.p0.y = seg.p0.y + ux;\n offset.p1.x = seg.p1.x - uy;\n offset.p1.y = seg.p1.y + ux;\n};\nOffsetSegmentGenerator.prototype.addFilletArc = function addFilletArc (p, startAngle, endAngle, direction, radius) {\n var this$1 = this;\n\n var directionFactor = direction === CGAlgorithms.CLOCKWISE ? -1 : 1;\n var totalAngle = Math.abs(startAngle - endAngle);\n var nSegs = Math.trunc(totalAngle / this._filletAngleQuantum + 0.5);\n if (nSegs < 1) { return null }\n var initAngle = 0.0;\n var currAngleInc = totalAngle / nSegs;\n var currAngle = initAngle;\n var pt = new Coordinate();\n while (currAngle < totalAngle) {\n var angle = startAngle + directionFactor * currAngle;\n pt.x = p.x + radius * Math.cos(angle);\n pt.y = p.y + radius * Math.sin(angle);\n this$1._segList.addPt(pt);\n currAngle += currAngleInc;\n }\n};\nOffsetSegmentGenerator.prototype.addInsideTurn = function addInsideTurn (orientation, addStartPoint) {\n this._li.computeIntersection(this._offset0.p0, this._offset0.p1, this._offset1.p0, this._offset1.p1);\n if (this._li.hasIntersection()) {\n this._segList.addPt(this._li.getIntersection(0));\n } else {\n this._hasNarrowConcaveAngle = true;\n if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR) {\n this._segList.addPt(this._offset0.p1);\n } else {\n this._segList.addPt(this._offset0.p1);\n if (this._closingSegLengthFactor > 0) {\n var mid0 = new Coordinate((this._closingSegLengthFactor * this._offset0.p1.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset0.p1.y + this._s1.y) / (this._closingSegLengthFactor + 1));\n this._segList.addPt(mid0);\n var mid1 = new Coordinate((this._closingSegLengthFactor * this._offset1.p0.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset1.p0.y + this._s1.y) / (this._closingSegLengthFactor + 1));\n this._segList.addPt(mid1);\n } else {\n this._segList.addPt(this._s1);\n }\n this._segList.addPt(this._offset1.p0);\n }\n }\n};\nOffsetSegmentGenerator.prototype.createCircle = function createCircle (p) {\n var pt = new Coordinate(p.x + this._distance, p.y);\n this._segList.addPt(pt);\n this.addFilletArc(p, 0.0, 2.0 * Math.PI, -1, this._distance);\n this._segList.closeRing();\n};\nOffsetSegmentGenerator.prototype.addBevelJoin = function addBevelJoin (offset0, offset1) {\n this._segList.addPt(offset0.p1);\n this._segList.addPt(offset1.p0);\n};\nOffsetSegmentGenerator.prototype.init = function init (distance) {\n this._distance = distance;\n this._maxCurveSegmentError = distance * (1 - Math.cos(this._filletAngleQuantum / 2.0));\n this._segList = new OffsetSegmentString();\n this._segList.setPrecisionModel(this._precisionModel);\n this._segList.setMinimumVertexDistance(distance * OffsetSegmentGenerator.CURVE_VERTEX_SNAP_DISTANCE_FACTOR);\n};\nOffsetSegmentGenerator.prototype.addCollinear = function addCollinear (addStartPoint) {\n this._li.computeIntersection(this._s0, this._s1, this._s1, this._s2);\n var numInt = this._li.getIntersectionNum();\n if (numInt >= 2) {\n if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL || this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {\n if (addStartPoint) { this._segList.addPt(this._offset0.p1); }\n this._segList.addPt(this._offset1.p0);\n } else {\n this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, CGAlgorithms.CLOCKWISE, this._distance);\n }\n }\n};\nOffsetSegmentGenerator.prototype.closeRing = function closeRing () {\n this._segList.closeRing();\n};\nOffsetSegmentGenerator.prototype.hasNarrowConcaveAngle = function hasNarrowConcaveAngle () {\n return this._hasNarrowConcaveAngle\n};\nOffsetSegmentGenerator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOffsetSegmentGenerator.prototype.getClass = function getClass () {\n return OffsetSegmentGenerator\n};\nstaticAccessors$27.OFFSET_SEGMENT_SEPARATION_FACTOR.get = function () { return 1.0E-3 };\nstaticAccessors$27.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1.0E-3 };\nstaticAccessors$27.CURVE_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1.0E-6 };\nstaticAccessors$27.MAX_CLOSING_SEG_LEN_FACTOR.get = function () { return 80 };\n\nObject.defineProperties( OffsetSegmentGenerator, staticAccessors$27 );\n\nvar OffsetCurveBuilder = function OffsetCurveBuilder () {\n this._distance = 0.0;\n this._precisionModel = null;\n this._bufParams = null;\n var precisionModel = arguments[0];\n var bufParams = arguments[1];\n this._precisionModel = precisionModel;\n this._bufParams = bufParams;\n};\nOffsetCurveBuilder.prototype.getOffsetCurve = function getOffsetCurve (inputPts, distance) {\n this._distance = distance;\n if (distance === 0.0) { return null }\n var isRightSide = distance < 0.0;\n var posDistance = Math.abs(distance);\n var segGen = this.getSegGen(posDistance);\n if (inputPts.length <= 1) {\n this.computePointCurve(inputPts[0], segGen);\n } else {\n this.computeOffsetCurve(inputPts, isRightSide, segGen);\n }\n var curvePts = segGen.getCoordinates();\n if (isRightSide) { CoordinateArrays.reverse(curvePts); }\n return curvePts\n};\nOffsetCurveBuilder.prototype.computeSingleSidedBufferCurve = function computeSingleSidedBufferCurve (inputPts, isRightSide, segGen) {\n var distTol = this.simplifyTolerance(this._distance);\n if (isRightSide) {\n segGen.addSegments(inputPts, true);\n var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);\n var n2 = simp2.length - 1;\n segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);\n segGen.addFirstSegment();\n for (var i = n2 - 2; i >= 0; i--) {\n segGen.addNextSegment(simp2[i], true);\n }\n } else {\n segGen.addSegments(inputPts, false);\n var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);\n var n1 = simp1.length - 1;\n segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);\n segGen.addFirstSegment();\n for (var i$1 = 2; i$1 <= n1; i$1++) {\n segGen.addNextSegment(simp1[i$1], true);\n }\n }\n segGen.addLastSegment();\n segGen.closeRing();\n};\nOffsetCurveBuilder.prototype.computeRingBufferCurve = function computeRingBufferCurve (inputPts, side, segGen) {\n var distTol = this.simplifyTolerance(this._distance);\n if (side === Position.RIGHT) { distTol = -distTol; }\n var simp = BufferInputLineSimplifier.simplify(inputPts, distTol);\n var n = simp.length - 1;\n segGen.initSideSegments(simp[n - 1], simp[0], side);\n for (var i = 1; i <= n; i++) {\n var addStartPoint = i !== 1;\n segGen.addNextSegment(simp[i], addStartPoint);\n }\n segGen.closeRing();\n};\nOffsetCurveBuilder.prototype.computeLineBufferCurve = function computeLineBufferCurve (inputPts, segGen) {\n var distTol = this.simplifyTolerance(this._distance);\n var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);\n var n1 = simp1.length - 1;\n segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);\n for (var i = 2; i <= n1; i++) {\n segGen.addNextSegment(simp1[i], true);\n }\n segGen.addLastSegment();\n segGen.addLineEndCap(simp1[n1 - 1], simp1[n1]);\n var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);\n var n2 = simp2.length - 1;\n segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);\n for (var i$1 = n2 - 2; i$1 >= 0; i$1--) {\n segGen.addNextSegment(simp2[i$1], true);\n }\n segGen.addLastSegment();\n segGen.addLineEndCap(simp2[1], simp2[0]);\n segGen.closeRing();\n};\nOffsetCurveBuilder.prototype.computePointCurve = function computePointCurve (pt, segGen) {\n switch (this._bufParams.getEndCapStyle()) {\n case BufferParameters.CAP_ROUND:\n segGen.createCircle(pt);\n break\n case BufferParameters.CAP_SQUARE:\n segGen.createSquare(pt);\n break\n default:\n }\n};\nOffsetCurveBuilder.prototype.getLineCurve = function getLineCurve (inputPts, distance) {\n this._distance = distance;\n if (distance < 0.0 && !this._bufParams.isSingleSided()) { return null }\n if (distance === 0.0) { return null }\n var posDistance = Math.abs(distance);\n var segGen = this.getSegGen(posDistance);\n if (inputPts.length <= 1) {\n this.computePointCurve(inputPts[0], segGen);\n } else {\n if (this._bufParams.isSingleSided()) {\n var isRightSide = distance < 0.0;\n this.computeSingleSidedBufferCurve(inputPts, isRightSide, segGen);\n } else { this.computeLineBufferCurve(inputPts, segGen); }\n }\n var lineCoord = segGen.getCoordinates();\n return lineCoord\n};\nOffsetCurveBuilder.prototype.getBufferParameters = function getBufferParameters () {\n return this._bufParams\n};\nOffsetCurveBuilder.prototype.simplifyTolerance = function simplifyTolerance (bufDistance) {\n return bufDistance * this._bufParams.getSimplifyFactor()\n};\nOffsetCurveBuilder.prototype.getRingCurve = function getRingCurve (inputPts, side, distance) {\n this._distance = distance;\n if (inputPts.length <= 2) { return this.getLineCurve(inputPts, distance) }\n if (distance === 0.0) {\n return OffsetCurveBuilder.copyCoordinates(inputPts)\n }\n var segGen = this.getSegGen(distance);\n this.computeRingBufferCurve(inputPts, side, segGen);\n return segGen.getCoordinates()\n};\nOffsetCurveBuilder.prototype.computeOffsetCurve = function computeOffsetCurve (inputPts, isRightSide, segGen) {\n var distTol = this.simplifyTolerance(this._distance);\n if (isRightSide) {\n var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);\n var n2 = simp2.length - 1;\n segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);\n segGen.addFirstSegment();\n for (var i = n2 - 2; i >= 0; i--) {\n segGen.addNextSegment(simp2[i], true);\n }\n } else {\n var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);\n var n1 = simp1.length - 1;\n segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);\n segGen.addFirstSegment();\n for (var i$1 = 2; i$1 <= n1; i$1++) {\n segGen.addNextSegment(simp1[i$1], true);\n }\n }\n segGen.addLastSegment();\n};\nOffsetCurveBuilder.prototype.getSegGen = function getSegGen (distance) {\n return new OffsetSegmentGenerator(this._precisionModel, this._bufParams, distance)\n};\nOffsetCurveBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOffsetCurveBuilder.prototype.getClass = function getClass () {\n return OffsetCurveBuilder\n};\nOffsetCurveBuilder.copyCoordinates = function copyCoordinates (pts) {\n var copy = new Array(pts.length).fill(null);\n for (var i = 0; i < copy.length; i++) {\n copy[i] = new Coordinate(pts[i]);\n }\n return copy\n};\n\nvar SubgraphDepthLocater = function SubgraphDepthLocater () {\n this._subgraphs = null;\n this._seg = new LineSegment();\n this._cga = new CGAlgorithms();\n var subgraphs = arguments[0];\n this._subgraphs = subgraphs;\n};\n\nvar staticAccessors$30 = { DepthSegment: { configurable: true } };\nSubgraphDepthLocater.prototype.findStabbedSegments = function findStabbedSegments () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var stabbingRayLeftPt = arguments[0];\n var stabbedSegments = new ArrayList();\n for (var i = this._subgraphs.iterator(); i.hasNext();) {\n var bsg = i.next();\n var env = bsg.getEnvelope();\n if (stabbingRayLeftPt.y < env.getMinY() || stabbingRayLeftPt.y > env.getMaxY()) { continue }\n this$1.findStabbedSegments(stabbingRayLeftPt, bsg.getDirectedEdges(), stabbedSegments);\n }\n return stabbedSegments\n } else if (arguments.length === 3) {\n if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && arguments[1] instanceof DirectedEdge)) {\n var stabbingRayLeftPt$1 = arguments[0];\n var dirEdge = arguments[1];\n var stabbedSegments$1 = arguments[2];\n var pts = dirEdge.getEdge().getCoordinates();\n for (var i$1 = 0; i$1 < pts.length - 1; i$1++) {\n this$1._seg.p0 = pts[i$1];\n this$1._seg.p1 = pts[i$1 + 1];\n if (this$1._seg.p0.y > this$1._seg.p1.y) { this$1._seg.reverse(); }\n var maxx = Math.max(this$1._seg.p0.x, this$1._seg.p1.x);\n if (maxx < stabbingRayLeftPt$1.x) { continue }\n if (this$1._seg.isHorizontal()) { continue }\n if (stabbingRayLeftPt$1.y < this$1._seg.p0.y || stabbingRayLeftPt$1.y > this$1._seg.p1.y) { continue }\n if (CGAlgorithms.computeOrientation(this$1._seg.p0, this$1._seg.p1, stabbingRayLeftPt$1) === CGAlgorithms.RIGHT) { continue }\n var depth = dirEdge.getDepth(Position.LEFT);\n if (!this$1._seg.p0.equals(pts[i$1])) { depth = dirEdge.getDepth(Position.RIGHT); }\n var ds = new DepthSegment(this$1._seg, depth);\n stabbedSegments$1.add(ds);\n }\n } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && hasInterface(arguments[1], List))) {\n var stabbingRayLeftPt$2 = arguments[0];\n var dirEdges = arguments[1];\n var stabbedSegments$2 = arguments[2];\n for (var i$2 = dirEdges.iterator(); i$2.hasNext();) {\n var de = i$2.next();\n if (!de.isForward()) { continue }\n this$1.findStabbedSegments(stabbingRayLeftPt$2, de, stabbedSegments$2);\n }\n }\n }\n};\nSubgraphDepthLocater.prototype.getDepth = function getDepth (p) {\n var stabbedSegments = this.findStabbedSegments(p);\n if (stabbedSegments.size() === 0) { return 0 }\n var ds = Collections.min(stabbedSegments);\n return ds._leftDepth\n};\nSubgraphDepthLocater.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSubgraphDepthLocater.prototype.getClass = function getClass () {\n return SubgraphDepthLocater\n};\nstaticAccessors$30.DepthSegment.get = function () { return DepthSegment };\n\nObject.defineProperties( SubgraphDepthLocater, staticAccessors$30 );\n\nvar DepthSegment = function DepthSegment () {\n this._upwardSeg = null;\n this._leftDepth = null;\n var seg = arguments[0];\n var depth = arguments[1];\n this._upwardSeg = new LineSegment(seg);\n this._leftDepth = depth;\n};\nDepthSegment.prototype.compareTo = function compareTo (obj) {\n var other = obj;\n if (this._upwardSeg.minX() >= other._upwardSeg.maxX()) { return 1 }\n if (this._upwardSeg.maxX() <= other._upwardSeg.minX()) { return -1 }\n var orientIndex = this._upwardSeg.orientationIndex(other._upwardSeg);\n if (orientIndex !== 0) { return orientIndex }\n orientIndex = -1 * other._upwardSeg.orientationIndex(this._upwardSeg);\n if (orientIndex !== 0) { return orientIndex }\n return this._upwardSeg.compareTo(other._upwardSeg)\n};\nDepthSegment.prototype.compareX = function compareX (seg0, seg1) {\n var compare0 = seg0.p0.compareTo(seg1.p0);\n if (compare0 !== 0) { return compare0 }\n return seg0.p1.compareTo(seg1.p1)\n};\nDepthSegment.prototype.toString = function toString () {\n return this._upwardSeg.toString()\n};\nDepthSegment.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nDepthSegment.prototype.getClass = function getClass () {\n return DepthSegment\n};\n\nvar Triangle = function Triangle (p0, p1, p2) {\n this.p0 = p0 || null;\n this.p1 = p1 || null;\n this.p2 = p2 || null;\n};\nTriangle.prototype.area = function area () {\n return Triangle.area(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.signedArea = function signedArea () {\n return Triangle.signedArea(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.interpolateZ = function interpolateZ (p) {\n if (p === null) { throw new IllegalArgumentException('Supplied point is null.') }\n return Triangle.interpolateZ(p, this.p0, this.p1, this.p2)\n};\nTriangle.prototype.longestSideLength = function longestSideLength () {\n return Triangle.longestSideLength(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.isAcute = function isAcute () {\n return Triangle.isAcute(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.circumcentre = function circumcentre () {\n return Triangle.circumcentre(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.area3D = function area3D () {\n return Triangle.area3D(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.centroid = function centroid () {\n return Triangle.centroid(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.inCentre = function inCentre () {\n return Triangle.inCentre(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nTriangle.prototype.getClass = function getClass () {\n return Triangle\n};\nTriangle.area = function area (a, b, c) {\n return Math.abs(((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2)\n};\nTriangle.signedArea = function signedArea (a, b, c) {\n return ((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2\n};\nTriangle.det = function det (m00, m01, m10, m11) {\n return m00 * m11 - m01 * m10\n};\nTriangle.interpolateZ = function interpolateZ (p, v0, v1, v2) {\n var x0 = v0.x;\n var y0 = v0.y;\n var a = v1.x - x0;\n var b = v2.x - x0;\n var c = v1.y - y0;\n var d = v2.y - y0;\n var det = a * d - b * c;\n var dx = p.x - x0;\n var dy = p.y - y0;\n var t = (d * dx - b * dy) / det;\n var u = (-c * dx + a * dy) / det;\n var z = v0.z + t * (v1.z - v0.z) + u * (v2.z - v0.z);\n return z\n};\nTriangle.longestSideLength = function longestSideLength (a, b, c) {\n var lenAB = a.distance(b);\n var lenBC = b.distance(c);\n var lenCA = c.distance(a);\n var maxLen = lenAB;\n if (lenBC > maxLen) { maxLen = lenBC; }\n if (lenCA > maxLen) { maxLen = lenCA; }\n return maxLen\n};\nTriangle.isAcute = function isAcute (a, b, c) {\n if (!Angle.isAcute(a, b, c)) { return false }\n if (!Angle.isAcute(b, c, a)) { return false }\n if (!Angle.isAcute(c, a, b)) { return false }\n return true\n};\nTriangle.circumcentre = function circumcentre (a, b, c) {\n var cx = c.x;\n var cy = c.y;\n var ax = a.x - cx;\n var ay = a.y - cy;\n var bx = b.x - cx;\n var by = b.y - cy;\n var denom = 2 * Triangle.det(ax, ay, bx, by);\n var numx = Triangle.det(ay, ax * ax + ay * ay, by, bx * bx + by * by);\n var numy = Triangle.det(ax, ax * ax + ay * ay, bx, bx * bx + by * by);\n var ccx = cx - numx / denom;\n var ccy = cy + numy / denom;\n return new Coordinate(ccx, ccy)\n};\nTriangle.perpendicularBisector = function perpendicularBisector (a, b) {\n var dx = b.x - a.x;\n var dy = b.y - a.y;\n var l1 = new HCoordinate(a.x + dx / 2.0, a.y + dy / 2.0, 1.0);\n var l2 = new HCoordinate(a.x - dy + dx / 2.0, a.y + dx + dy / 2.0, 1.0);\n return new HCoordinate(l1, l2)\n};\nTriangle.angleBisector = function angleBisector (a, b, c) {\n var len0 = b.distance(a);\n var len2 = b.distance(c);\n var frac = len0 / (len0 + len2);\n var dx = c.x - a.x;\n var dy = c.y - a.y;\n var splitPt = new Coordinate(a.x + frac * dx, a.y + frac * dy);\n return splitPt\n};\nTriangle.area3D = function area3D (a, b, c) {\n var ux = b.x - a.x;\n var uy = b.y - a.y;\n var uz = b.z - a.z;\n var vx = c.x - a.x;\n var vy = c.y - a.y;\n var vz = c.z - a.z;\n var crossx = uy * vz - uz * vy;\n var crossy = uz * vx - ux * vz;\n var crossz = ux * vy - uy * vx;\n var absSq = crossx * crossx + crossy * crossy + crossz * crossz;\n var area3D = Math.sqrt(absSq) / 2;\n return area3D\n};\nTriangle.centroid = function centroid (a, b, c) {\n var x = (a.x + b.x + c.x) / 3;\n var y = (a.y + b.y + c.y) / 3;\n return new Coordinate(x, y)\n};\nTriangle.inCentre = function inCentre (a, b, c) {\n var len0 = b.distance(c);\n var len1 = a.distance(c);\n var len2 = a.distance(b);\n var circum = len0 + len1 + len2;\n var inCentreX = (len0 * a.x + len1 * b.x + len2 * c.x) / circum;\n var inCentreY = (len0 * a.y + len1 * b.y + len2 * c.y) / circum;\n return new Coordinate(inCentreX, inCentreY)\n};\n\nvar OffsetCurveSetBuilder = function OffsetCurveSetBuilder () {\n this._inputGeom = null;\n this._distance = null;\n this._curveBuilder = null;\n this._curveList = new ArrayList();\n var inputGeom = arguments[0];\n var distance = arguments[1];\n var curveBuilder = arguments[2];\n this._inputGeom = inputGeom;\n this._distance = distance;\n this._curveBuilder = curveBuilder;\n};\nOffsetCurveSetBuilder.prototype.addPoint = function addPoint (p) {\n if (this._distance <= 0.0) { return null }\n var coord = p.getCoordinates();\n var curve = this._curveBuilder.getLineCurve(coord, this._distance);\n this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);\n};\nOffsetCurveSetBuilder.prototype.addPolygon = function addPolygon (p) {\n var this$1 = this;\n\n var offsetDistance = this._distance;\n var offsetSide = Position.LEFT;\n if (this._distance < 0.0) {\n offsetDistance = -this._distance;\n offsetSide = Position.RIGHT;\n }\n var shell = p.getExteriorRing();\n var shellCoord = CoordinateArrays.removeRepeatedPoints(shell.getCoordinates());\n if (this._distance < 0.0 && this.isErodedCompletely(shell, this._distance)) { return null }\n if (this._distance <= 0.0 && shellCoord.length < 3) { return null }\n this.addPolygonRing(shellCoord, offsetDistance, offsetSide, Location.EXTERIOR, Location.INTERIOR);\n for (var i = 0; i < p.getNumInteriorRing(); i++) {\n var hole = p.getInteriorRingN(i);\n var holeCoord = CoordinateArrays.removeRepeatedPoints(hole.getCoordinates());\n if (this$1._distance > 0.0 && this$1.isErodedCompletely(hole, -this$1._distance)) { continue }\n this$1.addPolygonRing(holeCoord, offsetDistance, Position.opposite(offsetSide), Location.INTERIOR, Location.EXTERIOR);\n }\n};\nOffsetCurveSetBuilder.prototype.isTriangleErodedCompletely = function isTriangleErodedCompletely (triangleCoord, bufferDistance) {\n var tri = new Triangle(triangleCoord[0], triangleCoord[1], triangleCoord[2]);\n var inCentre = tri.inCentre();\n var distToCentre = CGAlgorithms.distancePointLine(inCentre, tri.p0, tri.p1);\n return distToCentre < Math.abs(bufferDistance)\n};\nOffsetCurveSetBuilder.prototype.addLineString = function addLineString (line) {\n if (this._distance <= 0.0 && !this._curveBuilder.getBufferParameters().isSingleSided()) { return null }\n var coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());\n var curve = this._curveBuilder.getLineCurve(coord, this._distance);\n this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);\n};\nOffsetCurveSetBuilder.prototype.addCurve = function addCurve (coord, leftLoc, rightLoc) {\n if (coord === null || coord.length < 2) { return null }\n var e = new NodedSegmentString(coord, new Label(0, Location.BOUNDARY, leftLoc, rightLoc));\n this._curveList.add(e);\n};\nOffsetCurveSetBuilder.prototype.getCurves = function getCurves () {\n this.add(this._inputGeom);\n return this._curveList\n};\nOffsetCurveSetBuilder.prototype.addPolygonRing = function addPolygonRing (coord, offsetDistance, side, cwLeftLoc, cwRightLoc) {\n if (offsetDistance === 0.0 && coord.length < LinearRing.MINIMUM_VALID_SIZE) { return null }\n var leftLoc = cwLeftLoc;\n var rightLoc = cwRightLoc;\n if (coord.length >= LinearRing.MINIMUM_VALID_SIZE && CGAlgorithms.isCCW(coord)) {\n leftLoc = cwRightLoc;\n rightLoc = cwLeftLoc;\n side = Position.opposite(side);\n }\n var curve = this._curveBuilder.getRingCurve(coord, side, offsetDistance);\n this.addCurve(curve, leftLoc, rightLoc);\n};\nOffsetCurveSetBuilder.prototype.add = function add (g) {\n if (g.isEmpty()) { return null }\n if (g instanceof Polygon) { this.addPolygon(g); }\n else if (g instanceof LineString) { this.addLineString(g); }\n else if (g instanceof Point) { this.addPoint(g); }\n else if (g instanceof MultiPoint) { this.addCollection(g); }\n else if (g instanceof MultiLineString) { this.addCollection(g); }\n else if (g instanceof MultiPolygon) { this.addCollection(g); }\n else if (g instanceof GeometryCollection) { this.addCollection(g); }\n // else throw new UnsupportedOperationException(g.getClass().getName())\n};\nOffsetCurveSetBuilder.prototype.isErodedCompletely = function isErodedCompletely (ring, bufferDistance) {\n var ringCoord = ring.getCoordinates();\n // const minDiam = 0.0\n if (ringCoord.length < 4) { return bufferDistance < 0 }\n if (ringCoord.length === 4) { return this.isTriangleErodedCompletely(ringCoord, bufferDistance) }\n var env = ring.getEnvelopeInternal();\n var envMinDimension = Math.min(env.getHeight(), env.getWidth());\n if (bufferDistance < 0.0 && 2 * Math.abs(bufferDistance) > envMinDimension) { return true }\n return false\n};\nOffsetCurveSetBuilder.prototype.addCollection = function addCollection (gc) {\n var this$1 = this;\n\n for (var i = 0; i < gc.getNumGeometries(); i++) {\n var g = gc.getGeometryN(i);\n this$1.add(g);\n }\n};\nOffsetCurveSetBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOffsetCurveSetBuilder.prototype.getClass = function getClass () {\n return OffsetCurveSetBuilder\n};\n\nvar PointOnGeometryLocator = function PointOnGeometryLocator () {};\n\nPointOnGeometryLocator.prototype.locate = function locate (p) {};\nPointOnGeometryLocator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPointOnGeometryLocator.prototype.getClass = function getClass () {\n return PointOnGeometryLocator\n};\n\nvar GeometryCollectionIterator = function GeometryCollectionIterator () {\n this._parent = null;\n this._atStart = null;\n this._max = null;\n this._index = null;\n this._subcollectionIterator = null;\n var parent = arguments[0];\n this._parent = parent;\n this._atStart = true;\n this._index = 0;\n this._max = parent.getNumGeometries();\n};\nGeometryCollectionIterator.prototype.next = function next () {\n if (this._atStart) {\n this._atStart = false;\n if (GeometryCollectionIterator.isAtomic(this._parent)) { this._index++; }\n return this._parent\n }\n if (this._subcollectionIterator !== null) {\n if (this._subcollectionIterator.hasNext()) {\n return this._subcollectionIterator.next()\n } else {\n this._subcollectionIterator = null;\n }\n }\n if (this._index >= this._max) {\n throw new NoSuchElementException()\n }\n var obj = this._parent.getGeometryN(this._index++);\n if (obj instanceof GeometryCollection) {\n this._subcollectionIterator = new GeometryCollectionIterator(obj);\n return this._subcollectionIterator.next()\n }\n return obj\n};\nGeometryCollectionIterator.prototype.remove = function remove () {\n throw new Error(this.getClass().getName())\n};\nGeometryCollectionIterator.prototype.hasNext = function hasNext () {\n if (this._atStart) {\n return true\n }\n if (this._subcollectionIterator !== null) {\n if (this._subcollectionIterator.hasNext()) {\n return true\n }\n this._subcollectionIterator = null;\n }\n if (this._index >= this._max) {\n return false\n }\n return true\n};\nGeometryCollectionIterator.prototype.interfaces_ = function interfaces_ () {\n return [Iterator]\n};\nGeometryCollectionIterator.prototype.getClass = function getClass () {\n return GeometryCollectionIterator\n};\nGeometryCollectionIterator.isAtomic = function isAtomic (geom) {\n return !(geom instanceof GeometryCollection)\n};\n\nvar SimplePointInAreaLocator = function SimplePointInAreaLocator () {\n this._geom = null;\n var geom = arguments[0];\n this._geom = geom;\n};\nSimplePointInAreaLocator.prototype.locate = function locate (p) {\n return SimplePointInAreaLocator.locate(p, this._geom)\n};\nSimplePointInAreaLocator.prototype.interfaces_ = function interfaces_ () {\n return [PointOnGeometryLocator]\n};\nSimplePointInAreaLocator.prototype.getClass = function getClass () {\n return SimplePointInAreaLocator\n};\nSimplePointInAreaLocator.isPointInRing = function isPointInRing (p, ring) {\n if (!ring.getEnvelopeInternal().intersects(p)) { return false }\n return CGAlgorithms.isPointInRing(p, ring.getCoordinates())\n};\nSimplePointInAreaLocator.containsPointInPolygon = function containsPointInPolygon (p, poly) {\n if (poly.isEmpty()) { return false }\n var shell = poly.getExteriorRing();\n if (!SimplePointInAreaLocator.isPointInRing(p, shell)) { return false }\n for (var i = 0; i < poly.getNumInteriorRing(); i++) {\n var hole = poly.getInteriorRingN(i);\n if (SimplePointInAreaLocator.isPointInRing(p, hole)) { return false }\n }\n return true\n};\nSimplePointInAreaLocator.containsPoint = function containsPoint (p, geom) {\n if (geom instanceof Polygon) {\n return SimplePointInAreaLocator.containsPointInPolygon(p, geom)\n } else if (geom instanceof GeometryCollection) {\n var geomi = new GeometryCollectionIterator(geom);\n while (geomi.hasNext()) {\n var g2 = geomi.next();\n if (g2 !== geom) { if (SimplePointInAreaLocator.containsPoint(p, g2)) { return true } }\n }\n }\n return false\n};\nSimplePointInAreaLocator.locate = function locate (p, geom) {\n if (geom.isEmpty()) { return Location.EXTERIOR }\n if (SimplePointInAreaLocator.containsPoint(p, geom)) { return Location.INTERIOR }\n return Location.EXTERIOR\n};\n\nvar EdgeEndStar = function EdgeEndStar () {\n this._edgeMap = new TreeMap();\n this._edgeList = null;\n this._ptInAreaLocation = [Location.NONE, Location.NONE];\n};\nEdgeEndStar.prototype.getNextCW = function getNextCW (ee) {\n this.getEdges();\n var i = this._edgeList.indexOf(ee);\n var iNextCW = i - 1;\n if (i === 0) { iNextCW = this._edgeList.size() - 1; }\n return this._edgeList.get(iNextCW)\n};\nEdgeEndStar.prototype.propagateSideLabels = function propagateSideLabels (geomIndex) {\n var startLoc = Location.NONE;\n for (var it = this.iterator(); it.hasNext();) {\n var e = it.next();\n var label = e.getLabel();\n if (label.isArea(geomIndex) && label.getLocation(geomIndex, Position.LEFT) !== Location.NONE) { startLoc = label.getLocation(geomIndex, Position.LEFT); }\n }\n if (startLoc === Location.NONE) { return null }\n var currLoc = startLoc;\n for (var it$1 = this.iterator(); it$1.hasNext();) {\n var e$1 = it$1.next();\n var label$1 = e$1.getLabel();\n if (label$1.getLocation(geomIndex, Position.ON) === Location.NONE) { label$1.setLocation(geomIndex, Position.ON, currLoc); }\n if (label$1.isArea(geomIndex)) {\n var leftLoc = label$1.getLocation(geomIndex, Position.LEFT);\n var rightLoc = label$1.getLocation(geomIndex, Position.RIGHT);\n if (rightLoc !== Location.NONE) {\n if (rightLoc !== currLoc) { throw new TopologyException('side location conflict', e$1.getCoordinate()) }\n if (leftLoc === Location.NONE) {\n Assert.shouldNeverReachHere('found single null side (at ' + e$1.getCoordinate() + ')');\n }\n currLoc = leftLoc;\n } else {\n Assert.isTrue(label$1.getLocation(geomIndex, Position.LEFT) === Location.NONE, 'found single null side');\n label$1.setLocation(geomIndex, Position.RIGHT, currLoc);\n label$1.setLocation(geomIndex, Position.LEFT, currLoc);\n }\n }\n }\n};\nEdgeEndStar.prototype.getCoordinate = function getCoordinate () {\n var it = this.iterator();\n if (!it.hasNext()) { return null }\n var e = it.next();\n return e.getCoordinate()\n};\nEdgeEndStar.prototype.print = function print (out) {\n System.out.println('EdgeEndStar: ' + this.getCoordinate());\n for (var it = this.iterator(); it.hasNext();) {\n var e = it.next();\n e.print(out);\n }\n};\nEdgeEndStar.prototype.isAreaLabelsConsistent = function isAreaLabelsConsistent (geomGraph) {\n this.computeEdgeEndLabels(geomGraph.getBoundaryNodeRule());\n return this.checkAreaLabelsConsistent(0)\n};\nEdgeEndStar.prototype.checkAreaLabelsConsistent = function checkAreaLabelsConsistent (geomIndex) {\n var edges = this.getEdges();\n if (edges.size() <= 0) { return true }\n var lastEdgeIndex = edges.size() - 1;\n var startLabel = edges.get(lastEdgeIndex).getLabel();\n var startLoc = startLabel.getLocation(geomIndex, Position.LEFT);\n Assert.isTrue(startLoc !== Location.NONE, 'Found unlabelled area edge');\n var currLoc = startLoc;\n for (var it = this.iterator(); it.hasNext();) {\n var e = it.next();\n var label = e.getLabel();\n Assert.isTrue(label.isArea(geomIndex), 'Found non-area edge');\n var leftLoc = label.getLocation(geomIndex, Position.LEFT);\n var rightLoc = label.getLocation(geomIndex, Position.RIGHT);\n if (leftLoc === rightLoc) {\n return false\n }\n if (rightLoc !== currLoc) {\n return false\n }\n currLoc = leftLoc;\n }\n return true\n};\nEdgeEndStar.prototype.findIndex = function findIndex (eSearch) {\n var this$1 = this;\n\n this.iterator();\n for (var i = 0; i < this._edgeList.size(); i++) {\n var e = this$1._edgeList.get(i);\n if (e === eSearch) { return i }\n }\n return -1\n};\nEdgeEndStar.prototype.iterator = function iterator () {\n return this.getEdges().iterator()\n};\nEdgeEndStar.prototype.getEdges = function getEdges () {\n if (this._edgeList === null) {\n this._edgeList = new ArrayList(this._edgeMap.values());\n }\n return this._edgeList\n};\nEdgeEndStar.prototype.getLocation = function getLocation (geomIndex, p, geom) {\n if (this._ptInAreaLocation[geomIndex] === Location.NONE) {\n this._ptInAreaLocation[geomIndex] = SimplePointInAreaLocator.locate(p, geom[geomIndex].getGeometry());\n }\n return this._ptInAreaLocation[geomIndex]\n};\nEdgeEndStar.prototype.toString = function toString () {\n var buf = new StringBuffer();\n buf.append('EdgeEndStar: ' + this.getCoordinate());\n buf.append('\\n');\n for (var it = this.iterator(); it.hasNext();) {\n var e = it.next();\n buf.append(e);\n buf.append('\\n');\n }\n return buf.toString()\n};\nEdgeEndStar.prototype.computeEdgeEndLabels = function computeEdgeEndLabels (boundaryNodeRule) {\n for (var it = this.iterator(); it.hasNext();) {\n var ee = it.next();\n ee.computeLabel(boundaryNodeRule);\n }\n};\nEdgeEndStar.prototype.computeLabelling = function computeLabelling (geomGraph) {\n var this$1 = this;\n\n this.computeEdgeEndLabels(geomGraph[0].getBoundaryNodeRule());\n this.propagateSideLabels(0);\n this.propagateSideLabels(1);\n var hasDimensionalCollapseEdge = [false, false];\n for (var it = this.iterator(); it.hasNext();) {\n var e = it.next();\n var label = e.getLabel();\n for (var geomi = 0; geomi < 2; geomi++) {\n if (label.isLine(geomi) && label.getLocation(geomi) === Location.BOUNDARY) { hasDimensionalCollapseEdge[geomi] = true; }\n }\n }\n for (var it$1 = this.iterator(); it$1.hasNext();) {\n var e$1 = it$1.next();\n var label$1 = e$1.getLabel();\n for (var geomi$1 = 0; geomi$1 < 2; geomi$1++) {\n if (label$1.isAnyNull(geomi$1)) {\n var loc = Location.NONE;\n if (hasDimensionalCollapseEdge[geomi$1]) {\n loc = Location.EXTERIOR;\n } else {\n var p = e$1.getCoordinate();\n loc = this$1.getLocation(geomi$1, p, geomGraph);\n }\n label$1.setAllLocationsIfNull(geomi$1, loc);\n }\n }\n }\n};\nEdgeEndStar.prototype.getDegree = function getDegree () {\n return this._edgeMap.size()\n};\nEdgeEndStar.prototype.insertEdgeEnd = function insertEdgeEnd (e, obj) {\n this._edgeMap.put(e, obj);\n this._edgeList = null;\n};\nEdgeEndStar.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nEdgeEndStar.prototype.getClass = function getClass () {\n return EdgeEndStar\n};\n\nvar DirectedEdgeStar = (function (EdgeEndStar$$1) {\n function DirectedEdgeStar () {\n EdgeEndStar$$1.call(this);\n this._resultAreaEdgeList = null;\n this._label = null;\n this._SCANNING_FOR_INCOMING = 1;\n this._LINKING_TO_OUTGOING = 2;\n }\n\n if ( EdgeEndStar$$1 ) DirectedEdgeStar.__proto__ = EdgeEndStar$$1;\n DirectedEdgeStar.prototype = Object.create( EdgeEndStar$$1 && EdgeEndStar$$1.prototype );\n DirectedEdgeStar.prototype.constructor = DirectedEdgeStar;\n DirectedEdgeStar.prototype.linkResultDirectedEdges = function linkResultDirectedEdges () {\n var this$1 = this;\n\n this.getResultAreaEdges();\n var firstOut = null;\n var incoming = null;\n var state = this._SCANNING_FOR_INCOMING;\n for (var i = 0; i < this._resultAreaEdgeList.size(); i++) {\n var nextOut = this$1._resultAreaEdgeList.get(i);\n var nextIn = nextOut.getSym();\n if (!nextOut.getLabel().isArea()) { continue }\n if (firstOut === null && nextOut.isInResult()) { firstOut = nextOut; }\n switch (state) {\n case this$1._SCANNING_FOR_INCOMING:\n if (!nextIn.isInResult()) { continue }\n incoming = nextIn;\n state = this$1._LINKING_TO_OUTGOING;\n break\n case this$1._LINKING_TO_OUTGOING:\n if (!nextOut.isInResult()) { continue }\n incoming.setNext(nextOut);\n state = this$1._SCANNING_FOR_INCOMING;\n break\n default:\n }\n }\n if (state === this._LINKING_TO_OUTGOING) {\n if (firstOut === null) { throw new TopologyException('no outgoing dirEdge found', this.getCoordinate()) }\n Assert.isTrue(firstOut.isInResult(), 'unable to link last incoming dirEdge');\n incoming.setNext(firstOut);\n }\n };\n DirectedEdgeStar.prototype.insert = function insert (ee) {\n var de = ee;\n this.insertEdgeEnd(de, de);\n };\n DirectedEdgeStar.prototype.getRightmostEdge = function getRightmostEdge () {\n var edges = this.getEdges();\n var size = edges.size();\n if (size < 1) { return null }\n var de0 = edges.get(0);\n if (size === 1) { return de0 }\n var deLast = edges.get(size - 1);\n var quad0 = de0.getQuadrant();\n var quad1 = deLast.getQuadrant();\n if (Quadrant.isNorthern(quad0) && Quadrant.isNorthern(quad1)) { return de0; } else if (!Quadrant.isNorthern(quad0) && !Quadrant.isNorthern(quad1)) { return deLast; } else {\n // const nonHorizontalEdge = null\n if (de0.getDy() !== 0) { return de0; } else if (deLast.getDy() !== 0) { return deLast }\n }\n Assert.shouldNeverReachHere('found two horizontal edges incident on node');\n return null\n };\n DirectedEdgeStar.prototype.print = function print (out) {\n System.out.println('DirectedEdgeStar: ' + this.getCoordinate());\n for (var it = this.iterator(); it.hasNext();) {\n var de = it.next();\n out.print('out ');\n de.print(out);\n out.println();\n out.print('in ');\n de.getSym().print(out);\n out.println();\n }\n };\n DirectedEdgeStar.prototype.getResultAreaEdges = function getResultAreaEdges () {\n var this$1 = this;\n\n if (this._resultAreaEdgeList !== null) { return this._resultAreaEdgeList }\n this._resultAreaEdgeList = new ArrayList();\n for (var it = this.iterator(); it.hasNext();) {\n var de = it.next();\n if (de.isInResult() || de.getSym().isInResult()) { this$1._resultAreaEdgeList.add(de); }\n }\n return this._resultAreaEdgeList\n };\n DirectedEdgeStar.prototype.updateLabelling = function updateLabelling (nodeLabel) {\n for (var it = this.iterator(); it.hasNext();) {\n var de = it.next();\n var label = de.getLabel();\n label.setAllLocationsIfNull(0, nodeLabel.getLocation(0));\n label.setAllLocationsIfNull(1, nodeLabel.getLocation(1));\n }\n };\n DirectedEdgeStar.prototype.linkAllDirectedEdges = function linkAllDirectedEdges () {\n var this$1 = this;\n\n this.getEdges();\n var prevOut = null;\n var firstIn = null;\n for (var i = this._edgeList.size() - 1; i >= 0; i--) {\n var nextOut = this$1._edgeList.get(i);\n var nextIn = nextOut.getSym();\n if (firstIn === null) { firstIn = nextIn; }\n if (prevOut !== null) { nextIn.setNext(prevOut); }\n prevOut = nextOut;\n }\n firstIn.setNext(prevOut);\n };\n DirectedEdgeStar.prototype.computeDepths = function computeDepths () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var de = arguments[0];\n var edgeIndex = this.findIndex(de);\n // const label = de.getLabel()\n var startDepth = de.getDepth(Position.LEFT);\n var targetLastDepth = de.getDepth(Position.RIGHT);\n var nextDepth = this.computeDepths(edgeIndex + 1, this._edgeList.size(), startDepth);\n var lastDepth = this.computeDepths(0, edgeIndex, nextDepth);\n if (lastDepth !== targetLastDepth) { throw new TopologyException('depth mismatch at ' + de.getCoordinate()) }\n } else if (arguments.length === 3) {\n var startIndex = arguments[0];\n var endIndex = arguments[1];\n var startDepth$1 = arguments[2];\n var currDepth = startDepth$1;\n for (var i = startIndex; i < endIndex; i++) {\n var nextDe = this$1._edgeList.get(i);\n // const label = nextDe.getLabel()\n nextDe.setEdgeDepths(Position.RIGHT, currDepth);\n currDepth = nextDe.getDepth(Position.LEFT);\n }\n return currDepth\n }\n };\n DirectedEdgeStar.prototype.mergeSymLabels = function mergeSymLabels () {\n for (var it = this.iterator(); it.hasNext();) {\n var de = it.next();\n var label = de.getLabel();\n label.merge(de.getSym().getLabel());\n }\n };\n DirectedEdgeStar.prototype.linkMinimalDirectedEdges = function linkMinimalDirectedEdges (er) {\n var this$1 = this;\n\n var firstOut = null;\n var incoming = null;\n var state = this._SCANNING_FOR_INCOMING;\n for (var i = this._resultAreaEdgeList.size() - 1; i >= 0; i--) {\n var nextOut = this$1._resultAreaEdgeList.get(i);\n var nextIn = nextOut.getSym();\n if (firstOut === null && nextOut.getEdgeRing() === er) { firstOut = nextOut; }\n switch (state) {\n case this$1._SCANNING_FOR_INCOMING:\n if (nextIn.getEdgeRing() !== er) { continue }\n incoming = nextIn;\n state = this$1._LINKING_TO_OUTGOING;\n break\n case this$1._LINKING_TO_OUTGOING:\n if (nextOut.getEdgeRing() !== er) { continue }\n incoming.setNextMin(nextOut);\n state = this$1._SCANNING_FOR_INCOMING;\n break\n default:\n }\n }\n if (state === this._LINKING_TO_OUTGOING) {\n Assert.isTrue(firstOut !== null, 'found null for first outgoing dirEdge');\n Assert.isTrue(firstOut.getEdgeRing() === er, 'unable to link last incoming dirEdge');\n incoming.setNextMin(firstOut);\n }\n };\n DirectedEdgeStar.prototype.getOutgoingDegree = function getOutgoingDegree () {\n if (arguments.length === 0) {\n var degree = 0;\n for (var it = this.iterator(); it.hasNext();) {\n var de = it.next();\n if (de.isInResult()) { degree++; }\n }\n return degree\n } else if (arguments.length === 1) {\n var er = arguments[0];\n var degree$1 = 0;\n for (var it$1 = this.iterator(); it$1.hasNext();) {\n var de$1 = it$1.next();\n if (de$1.getEdgeRing() === er) { degree$1++; }\n }\n return degree$1\n }\n };\n DirectedEdgeStar.prototype.getLabel = function getLabel () {\n return this._label\n };\n DirectedEdgeStar.prototype.findCoveredLineEdges = function findCoveredLineEdges () {\n var startLoc = Location.NONE;\n for (var it = this.iterator(); it.hasNext();) {\n var nextOut = it.next();\n var nextIn = nextOut.getSym();\n if (!nextOut.isLineEdge()) {\n if (nextOut.isInResult()) {\n startLoc = Location.INTERIOR;\n break\n }\n if (nextIn.isInResult()) {\n startLoc = Location.EXTERIOR;\n break\n }\n }\n }\n if (startLoc === Location.NONE) { return null }\n var currLoc = startLoc;\n for (var it$1 = this.iterator(); it$1.hasNext();) {\n var nextOut$1 = it$1.next();\n var nextIn$1 = nextOut$1.getSym();\n if (nextOut$1.isLineEdge()) {\n nextOut$1.getEdge().setCovered(currLoc === Location.INTERIOR);\n } else {\n if (nextOut$1.isInResult()) { currLoc = Location.EXTERIOR; }\n if (nextIn$1.isInResult()) { currLoc = Location.INTERIOR; }\n }\n }\n };\n DirectedEdgeStar.prototype.computeLabelling = function computeLabelling (geom) {\n var this$1 = this;\n\n EdgeEndStar$$1.prototype.computeLabelling.call(this, geom);\n this._label = new Label(Location.NONE);\n for (var it = this.iterator(); it.hasNext();) {\n var ee = it.next();\n var e = ee.getEdge();\n var eLabel = e.getLabel();\n for (var i = 0; i < 2; i++) {\n var eLoc = eLabel.getLocation(i);\n if (eLoc === Location.INTERIOR || eLoc === Location.BOUNDARY) { this$1._label.setLocation(i, Location.INTERIOR); }\n }\n }\n };\n DirectedEdgeStar.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n DirectedEdgeStar.prototype.getClass = function getClass () {\n return DirectedEdgeStar\n };\n\n return DirectedEdgeStar;\n}(EdgeEndStar));\n\nvar OverlayNodeFactory = (function (NodeFactory$$1) {\n function OverlayNodeFactory () {\n NodeFactory$$1.apply(this, arguments);\n }\n\n if ( NodeFactory$$1 ) OverlayNodeFactory.__proto__ = NodeFactory$$1;\n OverlayNodeFactory.prototype = Object.create( NodeFactory$$1 && NodeFactory$$1.prototype );\n OverlayNodeFactory.prototype.constructor = OverlayNodeFactory;\n\n OverlayNodeFactory.prototype.createNode = function createNode (coord) {\n return new Node(coord, new DirectedEdgeStar())\n };\n OverlayNodeFactory.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n OverlayNodeFactory.prototype.getClass = function getClass () {\n return OverlayNodeFactory\n };\n\n return OverlayNodeFactory;\n}(NodeFactory));\n\nvar OrientedCoordinateArray = function OrientedCoordinateArray () {\n this._pts = null;\n this._orientation = null;\n var pts = arguments[0];\n this._pts = pts;\n this._orientation = OrientedCoordinateArray.orientation(pts);\n};\nOrientedCoordinateArray.prototype.compareTo = function compareTo (o1) {\n var oca = o1;\n var comp = OrientedCoordinateArray.compareOriented(this._pts, this._orientation, oca._pts, oca._orientation);\n return comp\n};\nOrientedCoordinateArray.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nOrientedCoordinateArray.prototype.getClass = function getClass () {\n return OrientedCoordinateArray\n};\nOrientedCoordinateArray.orientation = function orientation (pts) {\n return CoordinateArrays.increasingDirection(pts) === 1\n};\nOrientedCoordinateArray.compareOriented = function compareOriented (pts1, orientation1, pts2, orientation2) {\n var dir1 = orientation1 ? 1 : -1;\n var dir2 = orientation2 ? 1 : -1;\n var limit1 = orientation1 ? pts1.length : -1;\n var limit2 = orientation2 ? pts2.length : -1;\n var i1 = orientation1 ? 0 : pts1.length - 1;\n var i2 = orientation2 ? 0 : pts2.length - 1;\n // const comp = 0\n while (true) {\n var compPt = pts1[i1].compareTo(pts2[i2]);\n if (compPt !== 0) { return compPt }\n i1 += dir1;\n i2 += dir2;\n var done1 = i1 === limit1;\n var done2 = i2 === limit2;\n if (done1 && !done2) { return -1 }\n if (!done1 && done2) { return 1 }\n if (done1 && done2) { return 0 }\n }\n};\n\nvar EdgeList = function EdgeList () {\n this._edges = new ArrayList();\n this._ocaMap = new TreeMap();\n};\nEdgeList.prototype.print = function print (out) {\n var this$1 = this;\n\n out.print('MULTILINESTRING ( ');\n for (var j = 0; j < this._edges.size(); j++) {\n var e = this$1._edges.get(j);\n if (j > 0) { out.print(','); }\n out.print('(');\n var pts = e.getCoordinates();\n for (var i = 0; i < pts.length; i++) {\n if (i > 0) { out.print(','); }\n out.print(pts[i].x + ' ' + pts[i].y);\n }\n out.println(')');\n }\n out.print(') ');\n};\nEdgeList.prototype.addAll = function addAll (edgeColl) {\n var this$1 = this;\n\n for (var i = edgeColl.iterator(); i.hasNext();) {\n this$1.add(i.next());\n }\n};\nEdgeList.prototype.findEdgeIndex = function findEdgeIndex (e) {\n var this$1 = this;\n\n for (var i = 0; i < this._edges.size(); i++) {\n if (this$1._edges.get(i).equals(e)) { return i }\n }\n return -1\n};\nEdgeList.prototype.iterator = function iterator () {\n return this._edges.iterator()\n};\nEdgeList.prototype.getEdges = function getEdges () {\n return this._edges\n};\nEdgeList.prototype.get = function get (i) {\n return this._edges.get(i)\n};\nEdgeList.prototype.findEqualEdge = function findEqualEdge (e) {\n var oca = new OrientedCoordinateArray(e.getCoordinates());\n var matchEdge = this._ocaMap.get(oca);\n return matchEdge\n};\nEdgeList.prototype.add = function add (e) {\n this._edges.add(e);\n var oca = new OrientedCoordinateArray(e.getCoordinates());\n this._ocaMap.put(oca, e);\n};\nEdgeList.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nEdgeList.prototype.getClass = function getClass () {\n return EdgeList\n};\n\nvar SegmentIntersector = function SegmentIntersector () {};\n\nSegmentIntersector.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {};\nSegmentIntersector.prototype.isDone = function isDone () {};\nSegmentIntersector.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSegmentIntersector.prototype.getClass = function getClass () {\n return SegmentIntersector\n};\n\nvar IntersectionAdder = function IntersectionAdder () {\n this._hasIntersection = false;\n this._hasProper = false;\n this._hasProperInterior = false;\n this._hasInterior = false;\n this._properIntersectionPoint = null;\n this._li = null;\n this._isSelfIntersection = null;\n this.numIntersections = 0;\n this.numInteriorIntersections = 0;\n this.numProperIntersections = 0;\n this.numTests = 0;\n var li = arguments[0];\n this._li = li;\n};\nIntersectionAdder.prototype.isTrivialIntersection = function isTrivialIntersection (e0, segIndex0, e1, segIndex1) {\n if (e0 === e1) {\n if (this._li.getIntersectionNum() === 1) {\n if (IntersectionAdder.isAdjacentSegments(segIndex0, segIndex1)) { return true }\n if (e0.isClosed()) {\n var maxSegIndex = e0.size() - 1;\n if ((segIndex0 === 0 && segIndex1 === maxSegIndex) ||\n (segIndex1 === 0 && segIndex0 === maxSegIndex)) {\n return true\n }\n }\n }\n }\n return false\n};\nIntersectionAdder.prototype.getProperIntersectionPoint = function getProperIntersectionPoint () {\n return this._properIntersectionPoint\n};\nIntersectionAdder.prototype.hasProperInteriorIntersection = function hasProperInteriorIntersection () {\n return this._hasProperInterior\n};\nIntersectionAdder.prototype.getLineIntersector = function getLineIntersector () {\n return this._li\n};\nIntersectionAdder.prototype.hasProperIntersection = function hasProperIntersection () {\n return this._hasProper\n};\nIntersectionAdder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {\n if (e0 === e1 && segIndex0 === segIndex1) { return null }\n this.numTests++;\n var p00 = e0.getCoordinates()[segIndex0];\n var p01 = e0.getCoordinates()[segIndex0 + 1];\n var p10 = e1.getCoordinates()[segIndex1];\n var p11 = e1.getCoordinates()[segIndex1 + 1];\n this._li.computeIntersection(p00, p01, p10, p11);\n if (this._li.hasIntersection()) {\n this.numIntersections++;\n if (this._li.isInteriorIntersection()) {\n this.numInteriorIntersections++;\n this._hasInterior = true;\n }\n if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {\n this._hasIntersection = true;\n e0.addIntersections(this._li, segIndex0, 0);\n e1.addIntersections(this._li, segIndex1, 1);\n if (this._li.isProper()) {\n this.numProperIntersections++;\n this._hasProper = true;\n this._hasProperInterior = true;\n }\n }\n }\n};\nIntersectionAdder.prototype.hasIntersection = function hasIntersection () {\n return this._hasIntersection\n};\nIntersectionAdder.prototype.isDone = function isDone () {\n return false\n};\nIntersectionAdder.prototype.hasInteriorIntersection = function hasInteriorIntersection () {\n return this._hasInterior\n};\nIntersectionAdder.prototype.interfaces_ = function interfaces_ () {\n return [SegmentIntersector]\n};\nIntersectionAdder.prototype.getClass = function getClass () {\n return IntersectionAdder\n};\nIntersectionAdder.isAdjacentSegments = function isAdjacentSegments (i1, i2) {\n return Math.abs(i1 - i2) === 1\n};\n\nvar EdgeIntersection = function EdgeIntersection () {\n this.coord = null;\n this.segmentIndex = null;\n this.dist = null;\n var coord = arguments[0];\n var segmentIndex = arguments[1];\n var dist = arguments[2];\n this.coord = new Coordinate(coord);\n this.segmentIndex = segmentIndex;\n this.dist = dist;\n};\nEdgeIntersection.prototype.getSegmentIndex = function getSegmentIndex () {\n return this.segmentIndex\n};\nEdgeIntersection.prototype.getCoordinate = function getCoordinate () {\n return this.coord\n};\nEdgeIntersection.prototype.print = function print (out) {\n out.print(this.coord);\n out.print(' seg # = ' + this.segmentIndex);\n out.println(' dist = ' + this.dist);\n};\nEdgeIntersection.prototype.compareTo = function compareTo (obj) {\n var other = obj;\n return this.compare(other.segmentIndex, other.dist)\n};\nEdgeIntersection.prototype.isEndPoint = function isEndPoint (maxSegmentIndex) {\n if (this.segmentIndex === 0 && this.dist === 0.0) { return true }\n if (this.segmentIndex === maxSegmentIndex) { return true }\n return false\n};\nEdgeIntersection.prototype.toString = function toString () {\n return this.coord + ' seg # = ' + this.segmentIndex + ' dist = ' + this.dist\n};\nEdgeIntersection.prototype.getDistance = function getDistance () {\n return this.dist\n};\nEdgeIntersection.prototype.compare = function compare (segmentIndex, dist) {\n if (this.segmentIndex < segmentIndex) { return -1 }\n if (this.segmentIndex > segmentIndex) { return 1 }\n if (this.dist < dist) { return -1 }\n if (this.dist > dist) { return 1 }\n return 0\n};\nEdgeIntersection.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nEdgeIntersection.prototype.getClass = function getClass () {\n return EdgeIntersection\n};\n\nvar EdgeIntersectionList = function EdgeIntersectionList () {\n this._nodeMap = new TreeMap();\n this.edge = null;\n var edge = arguments[0];\n this.edge = edge;\n};\nEdgeIntersectionList.prototype.print = function print (out) {\n out.println('Intersections:');\n for (var it = this.iterator(); it.hasNext();) {\n var ei = it.next();\n ei.print(out);\n }\n};\nEdgeIntersectionList.prototype.iterator = function iterator () {\n return this._nodeMap.values().iterator()\n};\nEdgeIntersectionList.prototype.addSplitEdges = function addSplitEdges (edgeList) {\n var this$1 = this;\n\n this.addEndpoints();\n var it = this.iterator();\n var eiPrev = it.next();\n while (it.hasNext()) {\n var ei = it.next();\n var newEdge = this$1.createSplitEdge(eiPrev, ei);\n edgeList.add(newEdge);\n eiPrev = ei;\n }\n};\nEdgeIntersectionList.prototype.addEndpoints = function addEndpoints () {\n var maxSegIndex = this.edge.pts.length - 1;\n this.add(this.edge.pts[0], 0, 0.0);\n this.add(this.edge.pts[maxSegIndex], maxSegIndex, 0.0);\n};\nEdgeIntersectionList.prototype.createSplitEdge = function createSplitEdge (ei0, ei1) {\n var this$1 = this;\n\n var npts = ei1.segmentIndex - ei0.segmentIndex + 2;\n var lastSegStartPt = this.edge.pts[ei1.segmentIndex];\n var useIntPt1 = ei1.dist > 0.0 || !ei1.coord.equals2D(lastSegStartPt);\n if (!useIntPt1) {\n npts--;\n }\n var pts = new Array(npts).fill(null);\n var ipt = 0;\n pts[ipt++] = new Coordinate(ei0.coord);\n for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {\n pts[ipt++] = this$1.edge.pts[i];\n }\n if (useIntPt1) { pts[ipt] = ei1.coord; }\n return new Edge(pts, new Label(this.edge._label))\n};\nEdgeIntersectionList.prototype.add = function add (intPt, segmentIndex, dist) {\n var eiNew = new EdgeIntersection(intPt, segmentIndex, dist);\n var ei = this._nodeMap.get(eiNew);\n if (ei !== null) {\n return ei\n }\n this._nodeMap.put(eiNew, eiNew);\n return eiNew\n};\nEdgeIntersectionList.prototype.isIntersection = function isIntersection (pt) {\n for (var it = this.iterator(); it.hasNext();) {\n var ei = it.next();\n if (ei.coord.equals(pt)) { return true }\n }\n return false\n};\nEdgeIntersectionList.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nEdgeIntersectionList.prototype.getClass = function getClass () {\n return EdgeIntersectionList\n};\n\nvar MonotoneChainIndexer = function MonotoneChainIndexer () {};\n\nMonotoneChainIndexer.prototype.getChainStartIndices = function getChainStartIndices (pts) {\n var this$1 = this;\n\n var start = 0;\n var startIndexList = new ArrayList();\n startIndexList.add(new Integer(start));\n do {\n var last = this$1.findChainEnd(pts, start);\n startIndexList.add(new Integer(last));\n start = last;\n } while (start < pts.length - 1)\n var startIndex = MonotoneChainIndexer.toIntArray(startIndexList);\n return startIndex\n};\nMonotoneChainIndexer.prototype.findChainEnd = function findChainEnd (pts, start) {\n var chainQuad = Quadrant.quadrant(pts[start], pts[start + 1]);\n var last = start + 1;\n while (last < pts.length) {\n var quad = Quadrant.quadrant(pts[last - 1], pts[last]);\n if (quad !== chainQuad) { break }\n last++;\n }\n return last - 1\n};\nMonotoneChainIndexer.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChainIndexer.prototype.getClass = function getClass () {\n return MonotoneChainIndexer\n};\nMonotoneChainIndexer.toIntArray = function toIntArray (list) {\n var array = new Array(list.size()).fill(null);\n for (var i = 0; i < array.length; i++) {\n array[i] = list.get(i).intValue();\n }\n return array\n};\n\nvar MonotoneChainEdge = function MonotoneChainEdge () {\n this.e = null;\n this.pts = null;\n this.startIndex = null;\n this.env1 = new Envelope();\n this.env2 = new Envelope();\n var e = arguments[0];\n this.e = e;\n this.pts = e.getCoordinates();\n var mcb = new MonotoneChainIndexer();\n this.startIndex = mcb.getChainStartIndices(this.pts);\n};\nMonotoneChainEdge.prototype.getCoordinates = function getCoordinates () {\n return this.pts\n};\nMonotoneChainEdge.prototype.getMaxX = function getMaxX (chainIndex) {\n var x1 = this.pts[this.startIndex[chainIndex]].x;\n var x2 = this.pts[this.startIndex[chainIndex + 1]].x;\n return x1 > x2 ? x1 : x2\n};\nMonotoneChainEdge.prototype.getMinX = function getMinX (chainIndex) {\n var x1 = this.pts[this.startIndex[chainIndex]].x;\n var x2 = this.pts[this.startIndex[chainIndex + 1]].x;\n return x1 < x2 ? x1 : x2\n};\nMonotoneChainEdge.prototype.computeIntersectsForChain = function computeIntersectsForChain () {\n if (arguments.length === 4) {\n var chainIndex0 = arguments[0];\n var mce = arguments[1];\n var chainIndex1 = arguments[2];\n var si = arguments[3];\n this.computeIntersectsForChain(this.startIndex[chainIndex0], this.startIndex[chainIndex0 + 1], mce, mce.startIndex[chainIndex1], mce.startIndex[chainIndex1 + 1], si);\n } else if (arguments.length === 6) {\n var start0 = arguments[0];\n var end0 = arguments[1];\n var mce$1 = arguments[2];\n var start1 = arguments[3];\n var end1 = arguments[4];\n var ei = arguments[5];\n var p00 = this.pts[start0];\n var p01 = this.pts[end0];\n var p10 = mce$1.pts[start1];\n var p11 = mce$1.pts[end1];\n if (end0 - start0 === 1 && end1 - start1 === 1) {\n ei.addIntersections(this.e, start0, mce$1.e, start1);\n return null\n }\n this.env1.init(p00, p01);\n this.env2.init(p10, p11);\n if (!this.env1.intersects(this.env2)) { return null }\n var mid0 = Math.trunc((start0 + end0) / 2);\n var mid1 = Math.trunc((start1 + end1) / 2);\n if (start0 < mid0) {\n if (start1 < mid1) { this.computeIntersectsForChain(start0, mid0, mce$1, start1, mid1, ei); }\n if (mid1 < end1) { this.computeIntersectsForChain(start0, mid0, mce$1, mid1, end1, ei); }\n }\n if (mid0 < end0) {\n if (start1 < mid1) { this.computeIntersectsForChain(mid0, end0, mce$1, start1, mid1, ei); }\n if (mid1 < end1) { this.computeIntersectsForChain(mid0, end0, mce$1, mid1, end1, ei); }\n }\n }\n};\nMonotoneChainEdge.prototype.getStartIndexes = function getStartIndexes () {\n return this.startIndex\n};\nMonotoneChainEdge.prototype.computeIntersects = function computeIntersects (mce, si) {\n var this$1 = this;\n\n for (var i = 0; i < this.startIndex.length - 1; i++) {\n for (var j = 0; j < mce.startIndex.length - 1; j++) {\n this$1.computeIntersectsForChain(i, mce, j, si);\n }\n }\n};\nMonotoneChainEdge.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChainEdge.prototype.getClass = function getClass () {\n return MonotoneChainEdge\n};\n\nvar Depth = function Depth () {\n var this$1 = this;\n\n this._depth = Array(2).fill().map(function () { return Array(3); });\n for (var i = 0; i < 2; i++) {\n for (var j = 0; j < 3; j++) {\n this$1._depth[i][j] = Depth.NULL_VALUE;\n }\n }\n};\n\nvar staticAccessors$31 = { NULL_VALUE: { configurable: true } };\nDepth.prototype.getDepth = function getDepth (geomIndex, posIndex) {\n return this._depth[geomIndex][posIndex]\n};\nDepth.prototype.setDepth = function setDepth (geomIndex, posIndex, depthValue) {\n this._depth[geomIndex][posIndex] = depthValue;\n};\nDepth.prototype.isNull = function isNull () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n for (var i = 0; i < 2; i++) {\n for (var j = 0; j < 3; j++) {\n if (this$1._depth[i][j] !== Depth.NULL_VALUE) { return false }\n }\n }\n return true\n } else if (arguments.length === 1) {\n var geomIndex = arguments[0];\n return this._depth[geomIndex][1] === Depth.NULL_VALUE\n } else if (arguments.length === 2) {\n var geomIndex$1 = arguments[0];\n var posIndex = arguments[1];\n return this._depth[geomIndex$1][posIndex] === Depth.NULL_VALUE\n }\n};\nDepth.prototype.normalize = function normalize () {\n var this$1 = this;\n\n for (var i = 0; i < 2; i++) {\n if (!this$1.isNull(i)) {\n var minDepth = this$1._depth[i][1];\n if (this$1._depth[i][2] < minDepth) { minDepth = this$1._depth[i][2]; }\n if (minDepth < 0) { minDepth = 0; }\n for (var j = 1; j < 3; j++) {\n var newValue = 0;\n if (this$1._depth[i][j] > minDepth) { newValue = 1; }\n this$1._depth[i][j] = newValue;\n }\n }\n }\n};\nDepth.prototype.getDelta = function getDelta (geomIndex) {\n return this._depth[geomIndex][Position.RIGHT] - this._depth[geomIndex][Position.LEFT]\n};\nDepth.prototype.getLocation = function getLocation (geomIndex, posIndex) {\n if (this._depth[geomIndex][posIndex] <= 0) { return Location.EXTERIOR }\n return Location.INTERIOR\n};\nDepth.prototype.toString = function toString () {\n return 'A: ' + this._depth[0][1] + ',' + this._depth[0][2] + ' B: ' + this._depth[1][1] + ',' + this._depth[1][2]\n};\nDepth.prototype.add = function add () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var lbl = arguments[0];\n for (var i = 0; i < 2; i++) {\n for (var j = 1; j < 3; j++) {\n var loc = lbl.getLocation(i, j);\n if (loc === Location.EXTERIOR || loc === Location.INTERIOR) {\n if (this$1.isNull(i, j)) {\n this$1._depth[i][j] = Depth.depthAtLocation(loc);\n } else { this$1._depth[i][j] += Depth.depthAtLocation(loc); }\n }\n }\n }\n } else if (arguments.length === 3) {\n var geomIndex = arguments[0];\n var posIndex = arguments[1];\n var location = arguments[2];\n if (location === Location.INTERIOR) { this._depth[geomIndex][posIndex]++; }\n }\n};\nDepth.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nDepth.prototype.getClass = function getClass () {\n return Depth\n};\nDepth.depthAtLocation = function depthAtLocation (location) {\n if (location === Location.EXTERIOR) { return 0 }\n if (location === Location.INTERIOR) { return 1 }\n return Depth.NULL_VALUE\n};\nstaticAccessors$31.NULL_VALUE.get = function () { return -1 };\n\nObject.defineProperties( Depth, staticAccessors$31 );\n\nvar Edge = (function (GraphComponent$$1) {\n function Edge () {\n GraphComponent$$1.call(this);\n this.pts = null;\n this._env = null;\n this.eiList = new EdgeIntersectionList(this);\n this._name = null;\n this._mce = null;\n this._isIsolated = true;\n this._depth = new Depth();\n this._depthDelta = 0;\n if (arguments.length === 1) {\n var pts = arguments[0];\n Edge.call(this, pts, null);\n } else if (arguments.length === 2) {\n var pts$1 = arguments[0];\n var label = arguments[1];\n this.pts = pts$1;\n this._label = label;\n }\n }\n\n if ( GraphComponent$$1 ) Edge.__proto__ = GraphComponent$$1;\n Edge.prototype = Object.create( GraphComponent$$1 && GraphComponent$$1.prototype );\n Edge.prototype.constructor = Edge;\n Edge.prototype.getDepth = function getDepth () {\n return this._depth\n };\n Edge.prototype.getCollapsedEdge = function getCollapsedEdge () {\n var newPts = new Array(2).fill(null);\n newPts[0] = this.pts[0];\n newPts[1] = this.pts[1];\n var newe = new Edge(newPts, Label.toLineLabel(this._label));\n return newe\n };\n Edge.prototype.isIsolated = function isIsolated () {\n return this._isIsolated\n };\n Edge.prototype.getCoordinates = function getCoordinates () {\n return this.pts\n };\n Edge.prototype.setIsolated = function setIsolated (isIsolated) {\n this._isIsolated = isIsolated;\n };\n Edge.prototype.setName = function setName (name) {\n this._name = name;\n };\n Edge.prototype.equals = function equals (o) {\n var this$1 = this;\n\n if (!(o instanceof Edge)) { return false }\n var e = o;\n if (this.pts.length !== e.pts.length) { return false }\n var isEqualForward = true;\n var isEqualReverse = true;\n var iRev = this.pts.length;\n for (var i = 0; i < this.pts.length; i++) {\n if (!this$1.pts[i].equals2D(e.pts[i])) {\n isEqualForward = false;\n }\n if (!this$1.pts[i].equals2D(e.pts[--iRev])) {\n isEqualReverse = false;\n }\n if (!isEqualForward && !isEqualReverse) { return false }\n }\n return true\n };\n Edge.prototype.getCoordinate = function getCoordinate () {\n if (arguments.length === 0) {\n if (this.pts.length > 0) { return this.pts[0] }\n return null\n } else if (arguments.length === 1) {\n var i = arguments[0];\n return this.pts[i]\n }\n };\n Edge.prototype.print = function print (out) {\n var this$1 = this;\n\n out.print('edge ' + this._name + ': ');\n out.print('LINESTRING (');\n for (var i = 0; i < this.pts.length; i++) {\n if (i > 0) { out.print(','); }\n out.print(this$1.pts[i].x + ' ' + this$1.pts[i].y);\n }\n out.print(') ' + this._label + ' ' + this._depthDelta);\n };\n Edge.prototype.computeIM = function computeIM (im) {\n Edge.updateIM(this._label, im);\n };\n Edge.prototype.isCollapsed = function isCollapsed () {\n if (!this._label.isArea()) { return false }\n if (this.pts.length !== 3) { return false }\n if (this.pts[0].equals(this.pts[2])) { return true }\n return false\n };\n Edge.prototype.isClosed = function isClosed () {\n return this.pts[0].equals(this.pts[this.pts.length - 1])\n };\n Edge.prototype.getMaximumSegmentIndex = function getMaximumSegmentIndex () {\n return this.pts.length - 1\n };\n Edge.prototype.getDepthDelta = function getDepthDelta () {\n return this._depthDelta\n };\n Edge.prototype.getNumPoints = function getNumPoints () {\n return this.pts.length\n };\n Edge.prototype.printReverse = function printReverse (out) {\n var this$1 = this;\n\n out.print('edge ' + this._name + ': ');\n for (var i = this.pts.length - 1; i >= 0; i--) {\n out.print(this$1.pts[i] + ' ');\n }\n out.println('');\n };\n Edge.prototype.getMonotoneChainEdge = function getMonotoneChainEdge () {\n if (this._mce === null) { this._mce = new MonotoneChainEdge(this); }\n return this._mce\n };\n Edge.prototype.getEnvelope = function getEnvelope () {\n var this$1 = this;\n\n if (this._env === null) {\n this._env = new Envelope();\n for (var i = 0; i < this.pts.length; i++) {\n this$1._env.expandToInclude(this$1.pts[i]);\n }\n }\n return this._env\n };\n Edge.prototype.addIntersection = function addIntersection (li, segmentIndex, geomIndex, intIndex) {\n var intPt = new Coordinate(li.getIntersection(intIndex));\n var normalizedSegmentIndex = segmentIndex;\n var dist = li.getEdgeDistance(geomIndex, intIndex);\n var nextSegIndex = normalizedSegmentIndex + 1;\n if (nextSegIndex < this.pts.length) {\n var nextPt = this.pts[nextSegIndex];\n if (intPt.equals2D(nextPt)) {\n normalizedSegmentIndex = nextSegIndex;\n dist = 0.0;\n }\n }\n this.eiList.add(intPt, normalizedSegmentIndex, dist);\n };\n Edge.prototype.toString = function toString () {\n var this$1 = this;\n\n var buf = new StringBuffer();\n buf.append('edge ' + this._name + ': ');\n buf.append('LINESTRING (');\n for (var i = 0; i < this.pts.length; i++) {\n if (i > 0) { buf.append(','); }\n buf.append(this$1.pts[i].x + ' ' + this$1.pts[i].y);\n }\n buf.append(') ' + this._label + ' ' + this._depthDelta);\n return buf.toString()\n };\n Edge.prototype.isPointwiseEqual = function isPointwiseEqual (e) {\n var this$1 = this;\n\n if (this.pts.length !== e.pts.length) { return false }\n for (var i = 0; i < this.pts.length; i++) {\n if (!this$1.pts[i].equals2D(e.pts[i])) {\n return false\n }\n }\n return true\n };\n Edge.prototype.setDepthDelta = function setDepthDelta (depthDelta) {\n this._depthDelta = depthDelta;\n };\n Edge.prototype.getEdgeIntersectionList = function getEdgeIntersectionList () {\n return this.eiList\n };\n Edge.prototype.addIntersections = function addIntersections (li, segmentIndex, geomIndex) {\n var this$1 = this;\n\n for (var i = 0; i < li.getIntersectionNum(); i++) {\n this$1.addIntersection(li, segmentIndex, geomIndex, i);\n }\n };\n Edge.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n Edge.prototype.getClass = function getClass () {\n return Edge\n };\n Edge.updateIM = function updateIM () {\n if (arguments.length === 2) {\n var label = arguments[0];\n var im = arguments[1];\n im.setAtLeastIfValid(label.getLocation(0, Position.ON), label.getLocation(1, Position.ON), 1);\n if (label.isArea()) {\n im.setAtLeastIfValid(label.getLocation(0, Position.LEFT), label.getLocation(1, Position.LEFT), 2);\n im.setAtLeastIfValid(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), 2);\n }\n } else { return GraphComponent$$1.prototype.updateIM.apply(this, arguments) }\n };\n\n return Edge;\n}(GraphComponent));\n\nvar BufferBuilder = function BufferBuilder (bufParams) {\n this._workingPrecisionModel = null;\n this._workingNoder = null;\n this._geomFact = null;\n this._graph = null;\n this._edgeList = new EdgeList();\n this._bufParams = bufParams || null;\n};\nBufferBuilder.prototype.setWorkingPrecisionModel = function setWorkingPrecisionModel (pm) {\n this._workingPrecisionModel = pm;\n};\nBufferBuilder.prototype.insertUniqueEdge = function insertUniqueEdge (e) {\n var existingEdge = this._edgeList.findEqualEdge(e);\n if (existingEdge !== null) {\n var existingLabel = existingEdge.getLabel();\n var labelToMerge = e.getLabel();\n if (!existingEdge.isPointwiseEqual(e)) {\n labelToMerge = new Label(e.getLabel());\n labelToMerge.flip();\n }\n existingLabel.merge(labelToMerge);\n var mergeDelta = BufferBuilder.depthDelta(labelToMerge);\n var existingDelta = existingEdge.getDepthDelta();\n var newDelta = existingDelta + mergeDelta;\n existingEdge.setDepthDelta(newDelta);\n } else {\n this._edgeList.add(e);\n e.setDepthDelta(BufferBuilder.depthDelta(e.getLabel()));\n }\n};\nBufferBuilder.prototype.buildSubgraphs = function buildSubgraphs (subgraphList, polyBuilder) {\n var processedGraphs = new ArrayList();\n for (var i = subgraphList.iterator(); i.hasNext();) {\n var subgraph = i.next();\n var p = subgraph.getRightmostCoordinate();\n var locater = new SubgraphDepthLocater(processedGraphs);\n var outsideDepth = locater.getDepth(p);\n subgraph.computeDepth(outsideDepth);\n subgraph.findResultEdges();\n processedGraphs.add(subgraph);\n polyBuilder.add(subgraph.getDirectedEdges(), subgraph.getNodes());\n }\n};\nBufferBuilder.prototype.createSubgraphs = function createSubgraphs (graph) {\n var subgraphList = new ArrayList();\n for (var i = graph.getNodes().iterator(); i.hasNext();) {\n var node = i.next();\n if (!node.isVisited()) {\n var subgraph = new BufferSubgraph();\n subgraph.create(node);\n subgraphList.add(subgraph);\n }\n }\n Collections.sort(subgraphList, Collections.reverseOrder());\n return subgraphList\n};\nBufferBuilder.prototype.createEmptyResultGeometry = function createEmptyResultGeometry () {\n var emptyGeom = this._geomFact.createPolygon();\n return emptyGeom\n};\nBufferBuilder.prototype.getNoder = function getNoder (precisionModel) {\n if (this._workingNoder !== null) { return this._workingNoder }\n var noder = new MCIndexNoder();\n var li = new RobustLineIntersector();\n li.setPrecisionModel(precisionModel);\n noder.setSegmentIntersector(new IntersectionAdder(li));\n return noder\n};\nBufferBuilder.prototype.buffer = function buffer (g, distance) {\n var precisionModel = this._workingPrecisionModel;\n if (precisionModel === null) { precisionModel = g.getPrecisionModel(); }\n this._geomFact = g.getFactory();\n var curveBuilder = new OffsetCurveBuilder(precisionModel, this._bufParams);\n var curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder);\n var bufferSegStrList = curveSetBuilder.getCurves();\n if (bufferSegStrList.size() <= 0) {\n return this.createEmptyResultGeometry()\n }\n this.computeNodedEdges(bufferSegStrList, precisionModel);\n this._graph = new PlanarGraph(new OverlayNodeFactory());\n this._graph.addEdges(this._edgeList.getEdges());\n var subgraphList = this.createSubgraphs(this._graph);\n var polyBuilder = new PolygonBuilder(this._geomFact);\n this.buildSubgraphs(subgraphList, polyBuilder);\n var resultPolyList = polyBuilder.getPolygons();\n if (resultPolyList.size() <= 0) {\n return this.createEmptyResultGeometry()\n }\n var resultGeom = this._geomFact.buildGeometry(resultPolyList);\n return resultGeom\n};\nBufferBuilder.prototype.computeNodedEdges = function computeNodedEdges (bufferSegStrList, precisionModel) {\n var this$1 = this;\n\n var noder = this.getNoder(precisionModel);\n noder.computeNodes(bufferSegStrList);\n var nodedSegStrings = noder.getNodedSubstrings();\n for (var i = nodedSegStrings.iterator(); i.hasNext();) {\n var segStr = i.next();\n var pts = segStr.getCoordinates();\n if (pts.length === 2 && pts[0].equals2D(pts[1])) { continue }\n var oldLabel = segStr.getData();\n var edge = new Edge(segStr.getCoordinates(), new Label(oldLabel));\n this$1.insertUniqueEdge(edge);\n }\n};\nBufferBuilder.prototype.setNoder = function setNoder (noder) {\n this._workingNoder = noder;\n};\nBufferBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferBuilder.prototype.getClass = function getClass () {\n return BufferBuilder\n};\nBufferBuilder.depthDelta = function depthDelta (label) {\n var lLoc = label.getLocation(0, Position.LEFT);\n var rLoc = label.getLocation(0, Position.RIGHT);\n if (lLoc === Location.INTERIOR && rLoc === Location.EXTERIOR) { return 1; } else if (lLoc === Location.EXTERIOR && rLoc === Location.INTERIOR) { return -1 }\n return 0\n};\nBufferBuilder.convertSegStrings = function convertSegStrings (it) {\n var fact = new GeometryFactory();\n var lines = new ArrayList();\n while (it.hasNext()) {\n var ss = it.next();\n var line = fact.createLineString(ss.getCoordinates());\n lines.add(line);\n }\n return fact.buildGeometry(lines)\n};\n\nvar ScaledNoder = function ScaledNoder () {\n this._noder = null;\n this._scaleFactor = null;\n this._offsetX = null;\n this._offsetY = null;\n this._isScaled = false;\n if (arguments.length === 2) {\n var noder = arguments[0];\n var scaleFactor = arguments[1];\n this._noder = noder;\n this._scaleFactor = scaleFactor;\n this._offsetX = 0.0;\n this._offsetY = 0.0;\n this._isScaled = !this.isIntegerPrecision();\n } else if (arguments.length === 4) {\n var noder$1 = arguments[0];\n var scaleFactor$1 = arguments[1];\n var offsetX = arguments[2];\n var offsetY = arguments[3];\n this._noder = noder$1;\n this._scaleFactor = scaleFactor$1;\n this._offsetX = offsetX;\n this._offsetY = offsetY;\n this._isScaled = !this.isIntegerPrecision();\n }\n};\nScaledNoder.prototype.rescale = function rescale () {\n var this$1 = this;\n\n if (hasInterface(arguments[0], Collection)) {\n var segStrings = arguments[0];\n for (var i = segStrings.iterator(); i.hasNext();) {\n var ss = i.next();\n this$1.rescale(ss.getCoordinates());\n }\n } else if (arguments[0] instanceof Array) {\n var pts = arguments[0];\n // let p0 = null\n // let p1 = null\n // if (pts.length === 2) {\n // p0 = new Coordinate(pts[0])\n // p1 = new Coordinate(pts[1])\n // }\n for (var i$1 = 0; i$1 < pts.length; i$1++) {\n pts[i$1].x = pts[i$1].x / this$1._scaleFactor + this$1._offsetX;\n pts[i$1].y = pts[i$1].y / this$1._scaleFactor + this$1._offsetY;\n }\n if (pts.length === 2 && pts[0].equals2D(pts[1])) {\n System.out.println(pts);\n }\n }\n};\nScaledNoder.prototype.scale = function scale () {\n var this$1 = this;\n\n if (hasInterface(arguments[0], Collection)) {\n var segStrings = arguments[0];\n var nodedSegmentStrings = new ArrayList();\n for (var i = segStrings.iterator(); i.hasNext();) {\n var ss = i.next();\n nodedSegmentStrings.add(new NodedSegmentString(this$1.scale(ss.getCoordinates()), ss.getData()));\n }\n return nodedSegmentStrings\n } else if (arguments[0] instanceof Array) {\n var pts = arguments[0];\n var roundPts = new Array(pts.length).fill(null);\n for (var i$1 = 0; i$1 < pts.length; i$1++) {\n roundPts[i$1] = new Coordinate(Math.round((pts[i$1].x - this$1._offsetX) * this$1._scaleFactor), Math.round((pts[i$1].y - this$1._offsetY) * this$1._scaleFactor), pts[i$1].z);\n }\n var roundPtsNoDup = CoordinateArrays.removeRepeatedPoints(roundPts);\n return roundPtsNoDup\n }\n};\nScaledNoder.prototype.isIntegerPrecision = function isIntegerPrecision () {\n return this._scaleFactor === 1.0\n};\nScaledNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {\n var splitSS = this._noder.getNodedSubstrings();\n if (this._isScaled) { this.rescale(splitSS); }\n return splitSS\n};\nScaledNoder.prototype.computeNodes = function computeNodes (inputSegStrings) {\n var intSegStrings = inputSegStrings;\n if (this._isScaled) { intSegStrings = this.scale(inputSegStrings); }\n this._noder.computeNodes(intSegStrings);\n};\nScaledNoder.prototype.interfaces_ = function interfaces_ () {\n return [Noder]\n};\nScaledNoder.prototype.getClass = function getClass () {\n return ScaledNoder\n};\n\nvar NodingValidator = function NodingValidator () {\n this._li = new RobustLineIntersector();\n this._segStrings = null;\n var segStrings = arguments[0];\n this._segStrings = segStrings;\n};\n\nvar staticAccessors$33 = { fact: { configurable: true } };\nNodingValidator.prototype.checkEndPtVertexIntersections = function checkEndPtVertexIntersections () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n for (var i = this._segStrings.iterator(); i.hasNext();) {\n var ss = i.next();\n var pts = ss.getCoordinates();\n this$1.checkEndPtVertexIntersections(pts[0], this$1._segStrings);\n this$1.checkEndPtVertexIntersections(pts[pts.length - 1], this$1._segStrings);\n }\n } else if (arguments.length === 2) {\n var testPt = arguments[0];\n var segStrings = arguments[1];\n for (var i$1 = segStrings.iterator(); i$1.hasNext();) {\n var ss$1 = i$1.next();\n var pts$1 = ss$1.getCoordinates();\n for (var j = 1; j < pts$1.length - 1; j++) {\n if (pts$1[j].equals(testPt)) { throw new RuntimeException('found endpt/interior pt intersection at index ' + j + ' :pt ' + testPt) }\n }\n }\n }\n};\nNodingValidator.prototype.checkInteriorIntersections = function checkInteriorIntersections () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n for (var i = this._segStrings.iterator(); i.hasNext();) {\n var ss0 = i.next();\n for (var j = this._segStrings.iterator(); j.hasNext();) {\n var ss1 = j.next();\n this$1.checkInteriorIntersections(ss0, ss1);\n }\n }\n } else if (arguments.length === 2) {\n var ss0$1 = arguments[0];\n var ss1$1 = arguments[1];\n var pts0 = ss0$1.getCoordinates();\n var pts1 = ss1$1.getCoordinates();\n for (var i0 = 0; i0 < pts0.length - 1; i0++) {\n for (var i1 = 0; i1 < pts1.length - 1; i1++) {\n this$1.checkInteriorIntersections(ss0$1, i0, ss1$1, i1);\n }\n }\n } else if (arguments.length === 4) {\n var e0 = arguments[0];\n var segIndex0 = arguments[1];\n var e1 = arguments[2];\n var segIndex1 = arguments[3];\n if (e0 === e1 && segIndex0 === segIndex1) { return null }\n var p00 = e0.getCoordinates()[segIndex0];\n var p01 = e0.getCoordinates()[segIndex0 + 1];\n var p10 = e1.getCoordinates()[segIndex1];\n var p11 = e1.getCoordinates()[segIndex1 + 1];\n this._li.computeIntersection(p00, p01, p10, p11);\n if (this._li.hasIntersection()) {\n if (this._li.isProper() || this.hasInteriorIntersection(this._li, p00, p01) || this.hasInteriorIntersection(this._li, p10, p11)) {\n throw new RuntimeException('found non-noded intersection at ' + p00 + '-' + p01 + ' and ' + p10 + '-' + p11)\n }\n }\n }\n};\nNodingValidator.prototype.checkValid = function checkValid () {\n this.checkEndPtVertexIntersections();\n this.checkInteriorIntersections();\n this.checkCollapses();\n};\nNodingValidator.prototype.checkCollapses = function checkCollapses () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n for (var i = this._segStrings.iterator(); i.hasNext();) {\n var ss = i.next();\n this$1.checkCollapses(ss);\n }\n } else if (arguments.length === 1) {\n var ss$1 = arguments[0];\n var pts = ss$1.getCoordinates();\n for (var i$1 = 0; i$1 < pts.length - 2; i$1++) {\n this$1.checkCollapse(pts[i$1], pts[i$1 + 1], pts[i$1 + 2]);\n }\n }\n};\nNodingValidator.prototype.hasInteriorIntersection = function hasInteriorIntersection (li, p0, p1) {\n for (var i = 0; i < li.getIntersectionNum(); i++) {\n var intPt = li.getIntersection(i);\n if (!(intPt.equals(p0) || intPt.equals(p1))) { return true }\n }\n return false\n};\nNodingValidator.prototype.checkCollapse = function checkCollapse (p0, p1, p2) {\n if (p0.equals(p2)) { throw new RuntimeException('found non-noded collapse at ' + NodingValidator.fact.createLineString([p0, p1, p2])) }\n};\nNodingValidator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nNodingValidator.prototype.getClass = function getClass () {\n return NodingValidator\n};\nstaticAccessors$33.fact.get = function () { return new GeometryFactory() };\n\nObject.defineProperties( NodingValidator, staticAccessors$33 );\n\nvar HotPixel = function HotPixel () {\n this._li = null;\n this._pt = null;\n this._originalPt = null;\n this._ptScaled = null;\n this._p0Scaled = null;\n this._p1Scaled = null;\n this._scaleFactor = null;\n this._minx = null;\n this._maxx = null;\n this._miny = null;\n this._maxy = null;\n this._corner = new Array(4).fill(null);\n this._safeEnv = null;\n var pt = arguments[0];\n var scaleFactor = arguments[1];\n var li = arguments[2];\n this._originalPt = pt;\n this._pt = pt;\n this._scaleFactor = scaleFactor;\n this._li = li;\n if (scaleFactor <= 0) { throw new IllegalArgumentException('Scale factor must be non-zero') }\n if (scaleFactor !== 1.0) {\n this._pt = new Coordinate(this.scale(pt.x), this.scale(pt.y));\n this._p0Scaled = new Coordinate();\n this._p1Scaled = new Coordinate();\n }\n this.initCorners(this._pt);\n};\n\nvar staticAccessors$34 = { SAFE_ENV_EXPANSION_FACTOR: { configurable: true } };\nHotPixel.prototype.intersectsScaled = function intersectsScaled (p0, p1) {\n var segMinx = Math.min(p0.x, p1.x);\n var segMaxx = Math.max(p0.x, p1.x);\n var segMiny = Math.min(p0.y, p1.y);\n var segMaxy = Math.max(p0.y, p1.y);\n var isOutsidePixelEnv = this._maxx < segMinx || this._minx > segMaxx || this._maxy < segMiny || this._miny > segMaxy;\n if (isOutsidePixelEnv) { return false }\n var intersects = this.intersectsToleranceSquare(p0, p1);\n Assert.isTrue(!(isOutsidePixelEnv && intersects), 'Found bad envelope test');\n return intersects\n};\nHotPixel.prototype.initCorners = function initCorners (pt) {\n var tolerance = 0.5;\n this._minx = pt.x - tolerance;\n this._maxx = pt.x + tolerance;\n this._miny = pt.y - tolerance;\n this._maxy = pt.y + tolerance;\n this._corner[0] = new Coordinate(this._maxx, this._maxy);\n this._corner[1] = new Coordinate(this._minx, this._maxy);\n this._corner[2] = new Coordinate(this._minx, this._miny);\n this._corner[3] = new Coordinate(this._maxx, this._miny);\n};\nHotPixel.prototype.intersects = function intersects (p0, p1) {\n if (this._scaleFactor === 1.0) { return this.intersectsScaled(p0, p1) }\n this.copyScaled(p0, this._p0Scaled);\n this.copyScaled(p1, this._p1Scaled);\n return this.intersectsScaled(this._p0Scaled, this._p1Scaled)\n};\nHotPixel.prototype.scale = function scale (val) {\n return Math.round(val * this._scaleFactor)\n};\nHotPixel.prototype.getCoordinate = function getCoordinate () {\n return this._originalPt\n};\nHotPixel.prototype.copyScaled = function copyScaled (p, pScaled) {\n pScaled.x = this.scale(p.x);\n pScaled.y = this.scale(p.y);\n};\nHotPixel.prototype.getSafeEnvelope = function getSafeEnvelope () {\n if (this._safeEnv === null) {\n var safeTolerance = HotPixel.SAFE_ENV_EXPANSION_FACTOR / this._scaleFactor;\n this._safeEnv = new Envelope(this._originalPt.x - safeTolerance, this._originalPt.x + safeTolerance, this._originalPt.y - safeTolerance, this._originalPt.y + safeTolerance);\n }\n return this._safeEnv\n};\nHotPixel.prototype.intersectsPixelClosure = function intersectsPixelClosure (p0, p1) {\n this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);\n if (this._li.hasIntersection()) { return true }\n this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);\n if (this._li.hasIntersection()) { return true }\n this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);\n if (this._li.hasIntersection()) { return true }\n this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);\n if (this._li.hasIntersection()) { return true }\n return false\n};\nHotPixel.prototype.intersectsToleranceSquare = function intersectsToleranceSquare (p0, p1) {\n var intersectsLeft = false;\n var intersectsBottom = false;\n this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);\n if (this._li.isProper()) { return true }\n this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);\n if (this._li.isProper()) { return true }\n if (this._li.hasIntersection()) { intersectsLeft = true; }\n this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);\n if (this._li.isProper()) { return true }\n if (this._li.hasIntersection()) { intersectsBottom = true; }\n this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);\n if (this._li.isProper()) { return true }\n if (intersectsLeft && intersectsBottom) { return true }\n if (p0.equals(this._pt)) { return true }\n if (p1.equals(this._pt)) { return true }\n return false\n};\nHotPixel.prototype.addSnappedNode = function addSnappedNode (segStr, segIndex) {\n var p0 = segStr.getCoordinate(segIndex);\n var p1 = segStr.getCoordinate(segIndex + 1);\n if (this.intersects(p0, p1)) {\n segStr.addIntersection(this.getCoordinate(), segIndex);\n return true\n }\n return false\n};\nHotPixel.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nHotPixel.prototype.getClass = function getClass () {\n return HotPixel\n};\nstaticAccessors$34.SAFE_ENV_EXPANSION_FACTOR.get = function () { return 0.75 };\n\nObject.defineProperties( HotPixel, staticAccessors$34 );\n\nvar MonotoneChainSelectAction = function MonotoneChainSelectAction () {\n this.tempEnv1 = new Envelope();\n this.selectedSegment = new LineSegment();\n};\nMonotoneChainSelectAction.prototype.select = function select () {\n if (arguments.length === 1) {\n // const seg = arguments[0]\n } else if (arguments.length === 2) {\n var mc = arguments[0];\n var startIndex = arguments[1];\n mc.getLineSegment(startIndex, this.selectedSegment);\n this.select(this.selectedSegment);\n }\n};\nMonotoneChainSelectAction.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChainSelectAction.prototype.getClass = function getClass () {\n return MonotoneChainSelectAction\n};\n\nvar MCIndexPointSnapper = function MCIndexPointSnapper () {\n this._index = null;\n var index = arguments[0];\n this._index = index;\n};\n\nvar staticAccessors$35 = { HotPixelSnapAction: { configurable: true } };\nMCIndexPointSnapper.prototype.snap = function snap () {\n if (arguments.length === 1) {\n var hotPixel = arguments[0];\n return this.snap(hotPixel, null, -1)\n } else if (arguments.length === 3) {\n var hotPixel$1 = arguments[0];\n var parentEdge = arguments[1];\n var hotPixelVertexIndex = arguments[2];\n var pixelEnv = hotPixel$1.getSafeEnvelope();\n var hotPixelSnapAction = new HotPixelSnapAction(hotPixel$1, parentEdge, hotPixelVertexIndex);\n this._index.query(pixelEnv, {\n interfaces_: function () {\n return [ItemVisitor]\n },\n visitItem: function (item) {\n var testChain = item;\n testChain.select(pixelEnv, hotPixelSnapAction);\n }\n });\n return hotPixelSnapAction.isNodeAdded()\n }\n};\nMCIndexPointSnapper.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMCIndexPointSnapper.prototype.getClass = function getClass () {\n return MCIndexPointSnapper\n};\nstaticAccessors$35.HotPixelSnapAction.get = function () { return HotPixelSnapAction };\n\nObject.defineProperties( MCIndexPointSnapper, staticAccessors$35 );\n\nvar HotPixelSnapAction = (function (MonotoneChainSelectAction$$1) {\n function HotPixelSnapAction () {\n MonotoneChainSelectAction$$1.call(this);\n this._hotPixel = null;\n this._parentEdge = null;\n this._hotPixelVertexIndex = null;\n this._isNodeAdded = false;\n var hotPixel = arguments[0];\n var parentEdge = arguments[1];\n var hotPixelVertexIndex = arguments[2];\n this._hotPixel = hotPixel;\n this._parentEdge = parentEdge;\n this._hotPixelVertexIndex = hotPixelVertexIndex;\n }\n\n if ( MonotoneChainSelectAction$$1 ) HotPixelSnapAction.__proto__ = MonotoneChainSelectAction$$1;\n HotPixelSnapAction.prototype = Object.create( MonotoneChainSelectAction$$1 && MonotoneChainSelectAction$$1.prototype );\n HotPixelSnapAction.prototype.constructor = HotPixelSnapAction;\n HotPixelSnapAction.prototype.isNodeAdded = function isNodeAdded () {\n return this._isNodeAdded\n };\n HotPixelSnapAction.prototype.select = function select () {\n if (arguments.length === 2) {\n var mc = arguments[0];\n var startIndex = arguments[1];\n var ss = mc.getContext();\n if (this._parentEdge !== null) {\n if (ss === this._parentEdge && startIndex === this._hotPixelVertexIndex) { return null }\n }\n this._isNodeAdded = this._hotPixel.addSnappedNode(ss, startIndex);\n } else { return MonotoneChainSelectAction$$1.prototype.select.apply(this, arguments) }\n };\n HotPixelSnapAction.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n HotPixelSnapAction.prototype.getClass = function getClass () {\n return HotPixelSnapAction\n };\n\n return HotPixelSnapAction;\n}(MonotoneChainSelectAction));\n\nvar InteriorIntersectionFinderAdder = function InteriorIntersectionFinderAdder () {\n this._li = null;\n this._interiorIntersections = null;\n var li = arguments[0];\n this._li = li;\n this._interiorIntersections = new ArrayList();\n};\nInteriorIntersectionFinderAdder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {\n var this$1 = this;\n\n if (e0 === e1 && segIndex0 === segIndex1) { return null }\n var p00 = e0.getCoordinates()[segIndex0];\n var p01 = e0.getCoordinates()[segIndex0 + 1];\n var p10 = e1.getCoordinates()[segIndex1];\n var p11 = e1.getCoordinates()[segIndex1 + 1];\n this._li.computeIntersection(p00, p01, p10, p11);\n if (this._li.hasIntersection()) {\n if (this._li.isInteriorIntersection()) {\n for (var intIndex = 0; intIndex < this._li.getIntersectionNum(); intIndex++) {\n this$1._interiorIntersections.add(this$1._li.getIntersection(intIndex));\n }\n e0.addIntersections(this._li, segIndex0, 0);\n e1.addIntersections(this._li, segIndex1, 1);\n }\n }\n};\nInteriorIntersectionFinderAdder.prototype.isDone = function isDone () {\n return false\n};\nInteriorIntersectionFinderAdder.prototype.getInteriorIntersections = function getInteriorIntersections () {\n return this._interiorIntersections\n};\nInteriorIntersectionFinderAdder.prototype.interfaces_ = function interfaces_ () {\n return [SegmentIntersector]\n};\nInteriorIntersectionFinderAdder.prototype.getClass = function getClass () {\n return InteriorIntersectionFinderAdder\n};\n\nvar MCIndexSnapRounder = function MCIndexSnapRounder () {\n this._pm = null;\n this._li = null;\n this._scaleFactor = null;\n this._noder = null;\n this._pointSnapper = null;\n this._nodedSegStrings = null;\n var pm = arguments[0];\n this._pm = pm;\n this._li = new RobustLineIntersector();\n this._li.setPrecisionModel(pm);\n this._scaleFactor = pm.getScale();\n};\nMCIndexSnapRounder.prototype.checkCorrectness = function checkCorrectness (inputSegmentStrings) {\n var resultSegStrings = NodedSegmentString.getNodedSubstrings(inputSegmentStrings);\n var nv = new NodingValidator(resultSegStrings);\n try {\n nv.checkValid();\n } catch (ex) {\n if (ex instanceof Exception) {\n ex.printStackTrace();\n } else { throw ex }\n } finally {}\n};\nMCIndexSnapRounder.prototype.getNodedSubstrings = function getNodedSubstrings () {\n return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)\n};\nMCIndexSnapRounder.prototype.snapRound = function snapRound (segStrings, li) {\n var intersections = this.findInteriorIntersections(segStrings, li);\n this.computeIntersectionSnaps(intersections);\n this.computeVertexSnaps(segStrings);\n};\nMCIndexSnapRounder.prototype.findInteriorIntersections = function findInteriorIntersections (segStrings, li) {\n var intFinderAdder = new InteriorIntersectionFinderAdder(li);\n this._noder.setSegmentIntersector(intFinderAdder);\n this._noder.computeNodes(segStrings);\n return intFinderAdder.getInteriorIntersections()\n};\nMCIndexSnapRounder.prototype.computeVertexSnaps = function computeVertexSnaps () {\n var this$1 = this;\n\n if (hasInterface(arguments[0], Collection)) {\n var edges = arguments[0];\n for (var i0 = edges.iterator(); i0.hasNext();) {\n var edge0 = i0.next();\n this$1.computeVertexSnaps(edge0);\n }\n } else if (arguments[0] instanceof NodedSegmentString) {\n var e = arguments[0];\n var pts0 = e.getCoordinates();\n for (var i = 0; i < pts0.length; i++) {\n var hotPixel = new HotPixel(pts0[i], this$1._scaleFactor, this$1._li);\n var isNodeAdded = this$1._pointSnapper.snap(hotPixel, e, i);\n if (isNodeAdded) {\n e.addIntersection(pts0[i], i);\n }\n }\n }\n};\nMCIndexSnapRounder.prototype.computeNodes = function computeNodes (inputSegmentStrings) {\n this._nodedSegStrings = inputSegmentStrings;\n this._noder = new MCIndexNoder();\n this._pointSnapper = new MCIndexPointSnapper(this._noder.getIndex());\n this.snapRound(inputSegmentStrings, this._li);\n};\nMCIndexSnapRounder.prototype.computeIntersectionSnaps = function computeIntersectionSnaps (snapPts) {\n var this$1 = this;\n\n for (var it = snapPts.iterator(); it.hasNext();) {\n var snapPt = it.next();\n var hotPixel = new HotPixel(snapPt, this$1._scaleFactor, this$1._li);\n this$1._pointSnapper.snap(hotPixel);\n }\n};\nMCIndexSnapRounder.prototype.interfaces_ = function interfaces_ () {\n return [Noder]\n};\nMCIndexSnapRounder.prototype.getClass = function getClass () {\n return MCIndexSnapRounder\n};\n\nvar BufferOp = function BufferOp () {\n this._argGeom = null;\n this._distance = null;\n this._bufParams = new BufferParameters();\n this._resultGeometry = null;\n this._saveException = null;\n if (arguments.length === 1) {\n var g = arguments[0];\n this._argGeom = g;\n } else if (arguments.length === 2) {\n var g$1 = arguments[0];\n var bufParams = arguments[1];\n this._argGeom = g$1;\n this._bufParams = bufParams;\n }\n};\n\nvar staticAccessors$32 = { CAP_ROUND: { configurable: true },CAP_BUTT: { configurable: true },CAP_FLAT: { configurable: true },CAP_SQUARE: { configurable: true },MAX_PRECISION_DIGITS: { configurable: true } };\nBufferOp.prototype.bufferFixedPrecision = function bufferFixedPrecision (fixedPM) {\n var noder = new ScaledNoder(new MCIndexSnapRounder(new PrecisionModel(1.0)), fixedPM.getScale());\n var bufBuilder = new BufferBuilder(this._bufParams);\n bufBuilder.setWorkingPrecisionModel(fixedPM);\n bufBuilder.setNoder(noder);\n this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);\n};\nBufferOp.prototype.bufferReducedPrecision = function bufferReducedPrecision () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n for (var precDigits = BufferOp.MAX_PRECISION_DIGITS; precDigits >= 0; precDigits--) {\n try {\n this$1.bufferReducedPrecision(precDigits);\n } catch (ex) {\n if (ex instanceof TopologyException) {\n this$1._saveException = ex;\n } else { throw ex }\n } finally {}\n if (this$1._resultGeometry !== null) { return null }\n }\n throw this._saveException\n } else if (arguments.length === 1) {\n var precisionDigits = arguments[0];\n var sizeBasedScaleFactor = BufferOp.precisionScaleFactor(this._argGeom, this._distance, precisionDigits);\n var fixedPM = new PrecisionModel(sizeBasedScaleFactor);\n this.bufferFixedPrecision(fixedPM);\n }\n};\nBufferOp.prototype.computeGeometry = function computeGeometry () {\n this.bufferOriginalPrecision();\n if (this._resultGeometry !== null) { return null }\n var argPM = this._argGeom.getFactory().getPrecisionModel();\n if (argPM.getType() === PrecisionModel.FIXED) { this.bufferFixedPrecision(argPM); } else { this.bufferReducedPrecision(); }\n};\nBufferOp.prototype.setQuadrantSegments = function setQuadrantSegments (quadrantSegments) {\n this._bufParams.setQuadrantSegments(quadrantSegments);\n};\nBufferOp.prototype.bufferOriginalPrecision = function bufferOriginalPrecision () {\n try {\n var bufBuilder = new BufferBuilder(this._bufParams);\n this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);\n } catch (ex) {\n if (ex instanceof RuntimeException) {\n this._saveException = ex;\n } else { throw ex }\n } finally {}\n};\nBufferOp.prototype.getResultGeometry = function getResultGeometry (distance) {\n this._distance = distance;\n this.computeGeometry();\n return this._resultGeometry\n};\nBufferOp.prototype.setEndCapStyle = function setEndCapStyle (endCapStyle) {\n this._bufParams.setEndCapStyle(endCapStyle);\n};\nBufferOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferOp.prototype.getClass = function getClass () {\n return BufferOp\n};\nBufferOp.bufferOp = function bufferOp () {\n if (arguments.length === 2) {\n var g = arguments[0];\n var distance = arguments[1];\n var gBuf = new BufferOp(g);\n var geomBuf = gBuf.getResultGeometry(distance);\n return geomBuf\n } else if (arguments.length === 3) {\n if (Number.isInteger(arguments[2]) && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {\n var g$1 = arguments[0];\n var distance$1 = arguments[1];\n var quadrantSegments = arguments[2];\n var bufOp = new BufferOp(g$1);\n bufOp.setQuadrantSegments(quadrantSegments);\n var geomBuf$1 = bufOp.getResultGeometry(distance$1);\n return geomBuf$1\n } else if (arguments[2] instanceof BufferParameters && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {\n var g$2 = arguments[0];\n var distance$2 = arguments[1];\n var params = arguments[2];\n var bufOp$1 = new BufferOp(g$2, params);\n var geomBuf$2 = bufOp$1.getResultGeometry(distance$2);\n return geomBuf$2\n }\n } else if (arguments.length === 4) {\n var g$3 = arguments[0];\n var distance$3 = arguments[1];\n var quadrantSegments$1 = arguments[2];\n var endCapStyle = arguments[3];\n var bufOp$2 = new BufferOp(g$3);\n bufOp$2.setQuadrantSegments(quadrantSegments$1);\n bufOp$2.setEndCapStyle(endCapStyle);\n var geomBuf$3 = bufOp$2.getResultGeometry(distance$3);\n return geomBuf$3\n }\n};\nBufferOp.precisionScaleFactor = function precisionScaleFactor (g, distance, maxPrecisionDigits) {\n var env = g.getEnvelopeInternal();\n var envMax = MathUtil.max(Math.abs(env.getMaxX()), Math.abs(env.getMaxY()), Math.abs(env.getMinX()), Math.abs(env.getMinY()));\n var expandByDistance = distance > 0.0 ? distance : 0.0;\n var bufEnvMax = envMax + 2 * expandByDistance;\n var bufEnvPrecisionDigits = Math.trunc(Math.log(bufEnvMax) / Math.log(10) + 1.0);\n var minUnitLog10 = maxPrecisionDigits - bufEnvPrecisionDigits;\n var scaleFactor = Math.pow(10.0, minUnitLog10);\n return scaleFactor\n};\nstaticAccessors$32.CAP_ROUND.get = function () { return BufferParameters.CAP_ROUND };\nstaticAccessors$32.CAP_BUTT.get = function () { return BufferParameters.CAP_FLAT };\nstaticAccessors$32.CAP_FLAT.get = function () { return BufferParameters.CAP_FLAT };\nstaticAccessors$32.CAP_SQUARE.get = function () { return BufferParameters.CAP_SQUARE };\nstaticAccessors$32.MAX_PRECISION_DIGITS.get = function () { return 12 };\n\nObject.defineProperties( BufferOp, staticAccessors$32 );\n\nvar PointPairDistance = function PointPairDistance () {\n this._pt = [new Coordinate(), new Coordinate()];\n this._distance = Double.NaN;\n this._isNull = true;\n};\nPointPairDistance.prototype.getCoordinates = function getCoordinates () {\n return this._pt\n};\nPointPairDistance.prototype.getCoordinate = function getCoordinate (i) {\n return this._pt[i]\n};\nPointPairDistance.prototype.setMinimum = function setMinimum () {\n if (arguments.length === 1) {\n var ptDist = arguments[0];\n this.setMinimum(ptDist._pt[0], ptDist._pt[1]);\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n if (this._isNull) {\n this.initialize(p0, p1);\n return null\n }\n var dist = p0.distance(p1);\n if (dist < this._distance) { this.initialize(p0, p1, dist); }\n }\n};\nPointPairDistance.prototype.initialize = function initialize () {\n if (arguments.length === 0) {\n this._isNull = true;\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n this._pt[0].setCoordinate(p0);\n this._pt[1].setCoordinate(p1);\n this._distance = p0.distance(p1);\n this._isNull = false;\n } else if (arguments.length === 3) {\n var p0$1 = arguments[0];\n var p1$1 = arguments[1];\n var distance = arguments[2];\n this._pt[0].setCoordinate(p0$1);\n this._pt[1].setCoordinate(p1$1);\n this._distance = distance;\n this._isNull = false;\n }\n};\nPointPairDistance.prototype.getDistance = function getDistance () {\n return this._distance\n};\nPointPairDistance.prototype.setMaximum = function setMaximum () {\n if (arguments.length === 1) {\n var ptDist = arguments[0];\n this.setMaximum(ptDist._pt[0], ptDist._pt[1]);\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n if (this._isNull) {\n this.initialize(p0, p1);\n return null\n }\n var dist = p0.distance(p1);\n if (dist > this._distance) { this.initialize(p0, p1, dist); }\n }\n};\nPointPairDistance.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPointPairDistance.prototype.getClass = function getClass () {\n return PointPairDistance\n};\n\nvar DistanceToPointFinder = function DistanceToPointFinder () {};\n\nDistanceToPointFinder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nDistanceToPointFinder.prototype.getClass = function getClass () {\n return DistanceToPointFinder\n};\nDistanceToPointFinder.computeDistance = function computeDistance () {\n if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {\n var line = arguments[0];\n var pt = arguments[1];\n var ptDist = arguments[2];\n var coords = line.getCoordinates();\n var tempSegment = new LineSegment();\n for (var i = 0; i < coords.length - 1; i++) {\n tempSegment.setCoordinates(coords[i], coords[i + 1]);\n var closestPt = tempSegment.closestPoint(pt);\n ptDist.setMinimum(closestPt, pt);\n }\n } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {\n var poly = arguments[0];\n var pt$1 = arguments[1];\n var ptDist$1 = arguments[2];\n DistanceToPointFinder.computeDistance(poly.getExteriorRing(), pt$1, ptDist$1);\n for (var i$1 = 0; i$1 < poly.getNumInteriorRing(); i$1++) {\n DistanceToPointFinder.computeDistance(poly.getInteriorRingN(i$1), pt$1, ptDist$1);\n }\n } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {\n var geom = arguments[0];\n var pt$2 = arguments[1];\n var ptDist$2 = arguments[2];\n if (geom instanceof LineString) {\n DistanceToPointFinder.computeDistance(geom, pt$2, ptDist$2);\n } else if (geom instanceof Polygon) {\n DistanceToPointFinder.computeDistance(geom, pt$2, ptDist$2);\n } else if (geom instanceof GeometryCollection) {\n var gc = geom;\n for (var i$2 = 0; i$2 < gc.getNumGeometries(); i$2++) {\n var g = gc.getGeometryN(i$2);\n DistanceToPointFinder.computeDistance(g, pt$2, ptDist$2);\n }\n } else {\n ptDist$2.setMinimum(geom.getCoordinate(), pt$2);\n }\n } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {\n var segment = arguments[0];\n var pt$3 = arguments[1];\n var ptDist$3 = arguments[2];\n var closestPt$1 = segment.closestPoint(pt$3);\n ptDist$3.setMinimum(closestPt$1, pt$3);\n }\n};\n\nvar BufferCurveMaximumDistanceFinder = function BufferCurveMaximumDistanceFinder (inputGeom) {\n this._maxPtDist = new PointPairDistance();\n this._inputGeom = inputGeom || null;\n};\n\nvar staticAccessors$36 = { MaxPointDistanceFilter: { configurable: true },MaxMidpointDistanceFilter: { configurable: true } };\nBufferCurveMaximumDistanceFinder.prototype.computeMaxMidpointDistance = function computeMaxMidpointDistance (curve) {\n var distFilter = new MaxMidpointDistanceFilter(this._inputGeom);\n curve.apply(distFilter);\n this._maxPtDist.setMaximum(distFilter.getMaxPointDistance());\n};\nBufferCurveMaximumDistanceFinder.prototype.computeMaxVertexDistance = function computeMaxVertexDistance (curve) {\n var distFilter = new MaxPointDistanceFilter(this._inputGeom);\n curve.apply(distFilter);\n this._maxPtDist.setMaximum(distFilter.getMaxPointDistance());\n};\nBufferCurveMaximumDistanceFinder.prototype.findDistance = function findDistance (bufferCurve) {\n this.computeMaxVertexDistance(bufferCurve);\n this.computeMaxMidpointDistance(bufferCurve);\n return this._maxPtDist.getDistance()\n};\nBufferCurveMaximumDistanceFinder.prototype.getDistancePoints = function getDistancePoints () {\n return this._maxPtDist\n};\nBufferCurveMaximumDistanceFinder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferCurveMaximumDistanceFinder.prototype.getClass = function getClass () {\n return BufferCurveMaximumDistanceFinder\n};\nstaticAccessors$36.MaxPointDistanceFilter.get = function () { return MaxPointDistanceFilter };\nstaticAccessors$36.MaxMidpointDistanceFilter.get = function () { return MaxMidpointDistanceFilter };\n\nObject.defineProperties( BufferCurveMaximumDistanceFinder, staticAccessors$36 );\n\nvar MaxPointDistanceFilter = function MaxPointDistanceFilter (geom) {\n this._maxPtDist = new PointPairDistance();\n this._minPtDist = new PointPairDistance();\n this._geom = geom || null;\n};\nMaxPointDistanceFilter.prototype.filter = function filter (pt) {\n this._minPtDist.initialize();\n DistanceToPointFinder.computeDistance(this._geom, pt, this._minPtDist);\n this._maxPtDist.setMaximum(this._minPtDist);\n};\nMaxPointDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {\n return this._maxPtDist\n};\nMaxPointDistanceFilter.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateFilter]\n};\nMaxPointDistanceFilter.prototype.getClass = function getClass () {\n return MaxPointDistanceFilter\n};\n\nvar MaxMidpointDistanceFilter = function MaxMidpointDistanceFilter (geom) {\n this._maxPtDist = new PointPairDistance();\n this._minPtDist = new PointPairDistance();\n this._geom = geom || null;\n};\nMaxMidpointDistanceFilter.prototype.filter = function filter (seq, index) {\n if (index === 0) { return null }\n var p0 = seq.getCoordinate(index - 1);\n var p1 = seq.getCoordinate(index);\n var midPt = new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2);\n this._minPtDist.initialize();\n DistanceToPointFinder.computeDistance(this._geom, midPt, this._minPtDist);\n this._maxPtDist.setMaximum(this._minPtDist);\n};\nMaxMidpointDistanceFilter.prototype.isDone = function isDone () {\n return false\n};\nMaxMidpointDistanceFilter.prototype.isGeometryChanged = function isGeometryChanged () {\n return false\n};\nMaxMidpointDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {\n return this._maxPtDist\n};\nMaxMidpointDistanceFilter.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateSequenceFilter]\n};\nMaxMidpointDistanceFilter.prototype.getClass = function getClass () {\n return MaxMidpointDistanceFilter\n};\n\nvar PolygonExtracter = function PolygonExtracter (comps) {\n this._comps = comps || null;\n};\nPolygonExtracter.prototype.filter = function filter (geom) {\n if (geom instanceof Polygon) { this._comps.add(geom); }\n};\nPolygonExtracter.prototype.interfaces_ = function interfaces_ () {\n return [GeometryFilter]\n};\nPolygonExtracter.prototype.getClass = function getClass () {\n return PolygonExtracter\n};\nPolygonExtracter.getPolygons = function getPolygons () {\n if (arguments.length === 1) {\n var geom = arguments[0];\n return PolygonExtracter.getPolygons(geom, new ArrayList())\n } else if (arguments.length === 2) {\n var geom$1 = arguments[0];\n var list = arguments[1];\n if (geom$1 instanceof Polygon) {\n list.add(geom$1);\n } else if (geom$1 instanceof GeometryCollection) {\n geom$1.apply(new PolygonExtracter(list));\n }\n return list\n }\n};\n\nvar LinearComponentExtracter = function LinearComponentExtracter () {\n this._lines = null;\n this._isForcedToLineString = false;\n if (arguments.length === 1) {\n var lines = arguments[0];\n this._lines = lines;\n } else if (arguments.length === 2) {\n var lines$1 = arguments[0];\n var isForcedToLineString = arguments[1];\n this._lines = lines$1;\n this._isForcedToLineString = isForcedToLineString;\n }\n};\nLinearComponentExtracter.prototype.filter = function filter (geom) {\n if (this._isForcedToLineString && geom instanceof LinearRing) {\n var line = geom.getFactory().createLineString(geom.getCoordinateSequence());\n this._lines.add(line);\n return null\n }\n if (geom instanceof LineString) { this._lines.add(geom); }\n};\nLinearComponentExtracter.prototype.setForceToLineString = function setForceToLineString (isForcedToLineString) {\n this._isForcedToLineString = isForcedToLineString;\n};\nLinearComponentExtracter.prototype.interfaces_ = function interfaces_ () {\n return [GeometryComponentFilter]\n};\nLinearComponentExtracter.prototype.getClass = function getClass () {\n return LinearComponentExtracter\n};\nLinearComponentExtracter.getGeometry = function getGeometry () {\n if (arguments.length === 1) {\n var geom = arguments[0];\n return geom.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom))\n } else if (arguments.length === 2) {\n var geom$1 = arguments[0];\n var forceToLineString = arguments[1];\n return geom$1.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom$1, forceToLineString))\n }\n};\nLinearComponentExtracter.getLines = function getLines () {\n if (arguments.length === 1) {\n var geom = arguments[0];\n return LinearComponentExtracter.getLines(geom, false)\n } else if (arguments.length === 2) {\n if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection)) {\n var geoms = arguments[0];\n var lines$1 = arguments[1];\n for (var i = geoms.iterator(); i.hasNext();) {\n var g = i.next();\n LinearComponentExtracter.getLines(g, lines$1);\n }\n return lines$1\n } else if (arguments[0] instanceof Geometry && typeof arguments[1] === 'boolean') {\n var geom$1 = arguments[0];\n var forceToLineString = arguments[1];\n var lines = new ArrayList();\n geom$1.apply(new LinearComponentExtracter(lines, forceToLineString));\n return lines\n } else if (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection)) {\n var geom$2 = arguments[0];\n var lines$2 = arguments[1];\n if (geom$2 instanceof LineString) {\n lines$2.add(geom$2);\n } else {\n geom$2.apply(new LinearComponentExtracter(lines$2));\n }\n return lines$2\n }\n } else if (arguments.length === 3) {\n if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection))) {\n var geoms$1 = arguments[0];\n var lines$3 = arguments[1];\n var forceToLineString$1 = arguments[2];\n for (var i$1 = geoms$1.iterator(); i$1.hasNext();) {\n var g$1 = i$1.next();\n LinearComponentExtracter.getLines(g$1, lines$3, forceToLineString$1);\n }\n return lines$3\n } else if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection))) {\n var geom$3 = arguments[0];\n var lines$4 = arguments[1];\n var forceToLineString$2 = arguments[2];\n geom$3.apply(new LinearComponentExtracter(lines$4, forceToLineString$2));\n return lines$4\n }\n }\n};\n\nvar PointLocator = function PointLocator () {\n this._boundaryRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;\n this._isIn = null;\n this._numBoundaries = null;\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n var boundaryRule = arguments[0];\n if (boundaryRule === null) { throw new IllegalArgumentException('Rule must be non-null') }\n this._boundaryRule = boundaryRule;\n }\n};\nPointLocator.prototype.locateInternal = function locateInternal () {\n var this$1 = this;\n\n if (arguments[0] instanceof Coordinate && arguments[1] instanceof Polygon) {\n var p = arguments[0];\n var poly = arguments[1];\n if (poly.isEmpty()) { return Location.EXTERIOR }\n var shell = poly.getExteriorRing();\n var shellLoc = this.locateInPolygonRing(p, shell);\n if (shellLoc === Location.EXTERIOR) { return Location.EXTERIOR }\n if (shellLoc === Location.BOUNDARY) { return Location.BOUNDARY }\n for (var i = 0; i < poly.getNumInteriorRing(); i++) {\n var hole = poly.getInteriorRingN(i);\n var holeLoc = this$1.locateInPolygonRing(p, hole);\n if (holeLoc === Location.INTERIOR) { return Location.EXTERIOR }\n if (holeLoc === Location.BOUNDARY) { return Location.BOUNDARY }\n }\n return Location.INTERIOR\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof LineString) {\n var p$1 = arguments[0];\n var l = arguments[1];\n if (!l.getEnvelopeInternal().intersects(p$1)) { return Location.EXTERIOR }\n var pt = l.getCoordinates();\n if (!l.isClosed()) {\n if (p$1.equals(pt[0]) || p$1.equals(pt[pt.length - 1])) {\n return Location.BOUNDARY\n }\n }\n if (CGAlgorithms.isOnLine(p$1, pt)) { return Location.INTERIOR }\n return Location.EXTERIOR\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Point) {\n var p$2 = arguments[0];\n var pt$1 = arguments[1];\n var ptCoord = pt$1.getCoordinate();\n if (ptCoord.equals2D(p$2)) { return Location.INTERIOR }\n return Location.EXTERIOR\n }\n};\nPointLocator.prototype.locateInPolygonRing = function locateInPolygonRing (p, ring) {\n if (!ring.getEnvelopeInternal().intersects(p)) { return Location.EXTERIOR }\n return CGAlgorithms.locatePointInRing(p, ring.getCoordinates())\n};\nPointLocator.prototype.intersects = function intersects (p, geom) {\n return this.locate(p, geom) !== Location.EXTERIOR\n};\nPointLocator.prototype.updateLocationInfo = function updateLocationInfo (loc) {\n if (loc === Location.INTERIOR) { this._isIn = true; }\n if (loc === Location.BOUNDARY) { this._numBoundaries++; }\n};\nPointLocator.prototype.computeLocation = function computeLocation (p, geom) {\n var this$1 = this;\n\n if (geom instanceof Point) {\n this.updateLocationInfo(this.locateInternal(p, geom));\n }\n if (geom instanceof LineString) {\n this.updateLocationInfo(this.locateInternal(p, geom));\n } else if (geom instanceof Polygon) {\n this.updateLocationInfo(this.locateInternal(p, geom));\n } else if (geom instanceof MultiLineString) {\n var ml = geom;\n for (var i = 0; i < ml.getNumGeometries(); i++) {\n var l = ml.getGeometryN(i);\n this$1.updateLocationInfo(this$1.locateInternal(p, l));\n }\n } else if (geom instanceof MultiPolygon) {\n var mpoly = geom;\n for (var i$1 = 0; i$1 < mpoly.getNumGeometries(); i$1++) {\n var poly = mpoly.getGeometryN(i$1);\n this$1.updateLocationInfo(this$1.locateInternal(p, poly));\n }\n } else if (geom instanceof GeometryCollection) {\n var geomi = new GeometryCollectionIterator(geom);\n while (geomi.hasNext()) {\n var g2 = geomi.next();\n if (g2 !== geom) { this$1.computeLocation(p, g2); }\n }\n }\n};\nPointLocator.prototype.locate = function locate (p, geom) {\n if (geom.isEmpty()) { return Location.EXTERIOR }\n if (geom instanceof LineString) {\n return this.locateInternal(p, geom)\n } else if (geom instanceof Polygon) {\n return this.locateInternal(p, geom)\n }\n this._isIn = false;\n this._numBoundaries = 0;\n this.computeLocation(p, geom);\n if (this._boundaryRule.isInBoundary(this._numBoundaries)) { return Location.BOUNDARY }\n if (this._numBoundaries > 0 || this._isIn) { return Location.INTERIOR }\n return Location.EXTERIOR\n};\nPointLocator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPointLocator.prototype.getClass = function getClass () {\n return PointLocator\n};\n\nvar GeometryLocation = function GeometryLocation () {\n this._component = null;\n this._segIndex = null;\n this._pt = null;\n if (arguments.length === 2) {\n var component = arguments[0];\n var pt = arguments[1];\n GeometryLocation.call(this, component, GeometryLocation.INSIDE_AREA, pt);\n } else if (arguments.length === 3) {\n var component$1 = arguments[0];\n var segIndex = arguments[1];\n var pt$1 = arguments[2];\n this._component = component$1;\n this._segIndex = segIndex;\n this._pt = pt$1;\n }\n};\n\nvar staticAccessors$38 = { INSIDE_AREA: { configurable: true } };\nGeometryLocation.prototype.isInsideArea = function isInsideArea () {\n return this._segIndex === GeometryLocation.INSIDE_AREA\n};\nGeometryLocation.prototype.getCoordinate = function getCoordinate () {\n return this._pt\n};\nGeometryLocation.prototype.getGeometryComponent = function getGeometryComponent () {\n return this._component\n};\nGeometryLocation.prototype.getSegmentIndex = function getSegmentIndex () {\n return this._segIndex\n};\nGeometryLocation.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryLocation.prototype.getClass = function getClass () {\n return GeometryLocation\n};\nstaticAccessors$38.INSIDE_AREA.get = function () { return -1 };\n\nObject.defineProperties( GeometryLocation, staticAccessors$38 );\n\nvar PointExtracter = function PointExtracter (pts) {\n this._pts = pts || null;\n};\nPointExtracter.prototype.filter = function filter (geom) {\n if (geom instanceof Point) { this._pts.add(geom); }\n};\nPointExtracter.prototype.interfaces_ = function interfaces_ () {\n return [GeometryFilter]\n};\nPointExtracter.prototype.getClass = function getClass () {\n return PointExtracter\n};\nPointExtracter.getPoints = function getPoints () {\n if (arguments.length === 1) {\n var geom = arguments[0];\n if (geom instanceof Point) {\n return Collections.singletonList(geom)\n }\n return PointExtracter.getPoints(geom, new ArrayList())\n } else if (arguments.length === 2) {\n var geom$1 = arguments[0];\n var list = arguments[1];\n if (geom$1 instanceof Point) {\n list.add(geom$1);\n } else if (geom$1 instanceof GeometryCollection) {\n geom$1.apply(new PointExtracter(list));\n }\n return list\n }\n};\n\nvar ConnectedElementLocationFilter = function ConnectedElementLocationFilter () {\n this._locations = null;\n var locations = arguments[0];\n this._locations = locations;\n};\nConnectedElementLocationFilter.prototype.filter = function filter (geom) {\n if (geom instanceof Point || geom instanceof LineString || geom instanceof Polygon) { this._locations.add(new GeometryLocation(geom, 0, geom.getCoordinate())); }\n};\nConnectedElementLocationFilter.prototype.interfaces_ = function interfaces_ () {\n return [GeometryFilter]\n};\nConnectedElementLocationFilter.prototype.getClass = function getClass () {\n return ConnectedElementLocationFilter\n};\nConnectedElementLocationFilter.getLocations = function getLocations (geom) {\n var locations = new ArrayList();\n geom.apply(new ConnectedElementLocationFilter(locations));\n return locations\n};\n\nvar DistanceOp = function DistanceOp () {\n this._geom = null;\n this._terminateDistance = 0.0;\n this._ptLocator = new PointLocator();\n this._minDistanceLocation = null;\n this._minDistance = Double.MAX_VALUE;\n if (arguments.length === 2) {\n var g0 = arguments[0];\n var g1 = arguments[1];\n this._geom = [g0, g1];\n this._terminateDistance = 0.0;\n } else if (arguments.length === 3) {\n var g0$1 = arguments[0];\n var g1$1 = arguments[1];\n var terminateDistance = arguments[2];\n this._geom = new Array(2).fill(null);\n this._geom[0] = g0$1;\n this._geom[1] = g1$1;\n this._terminateDistance = terminateDistance;\n }\n};\nDistanceOp.prototype.computeContainmentDistance = function computeContainmentDistance () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n var locPtPoly = new Array(2).fill(null);\n this.computeContainmentDistance(0, locPtPoly);\n if (this._minDistance <= this._terminateDistance) { return null }\n this.computeContainmentDistance(1, locPtPoly);\n } else if (arguments.length === 2) {\n var polyGeomIndex = arguments[0];\n var locPtPoly$1 = arguments[1];\n var locationsIndex = 1 - polyGeomIndex;\n var polys = PolygonExtracter.getPolygons(this._geom[polyGeomIndex]);\n if (polys.size() > 0) {\n var insideLocs = ConnectedElementLocationFilter.getLocations(this._geom[locationsIndex]);\n this.computeContainmentDistance(insideLocs, polys, locPtPoly$1);\n if (this._minDistance <= this._terminateDistance) {\n this._minDistanceLocation[locationsIndex] = locPtPoly$1[0];\n this._minDistanceLocation[polyGeomIndex] = locPtPoly$1[1];\n return null\n }\n }\n } else if (arguments.length === 3) {\n if (arguments[2] instanceof Array && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {\n var locs = arguments[0];\n var polys$1 = arguments[1];\n var locPtPoly$2 = arguments[2];\n for (var i = 0; i < locs.size(); i++) {\n var loc = locs.get(i);\n for (var j = 0; j < polys$1.size(); j++) {\n this$1.computeContainmentDistance(loc, polys$1.get(j), locPtPoly$2);\n if (this$1._minDistance <= this$1._terminateDistance) { return null }\n }\n }\n } else if (arguments[2] instanceof Array && (arguments[0] instanceof GeometryLocation && arguments[1] instanceof Polygon)) {\n var ptLoc = arguments[0];\n var poly = arguments[1];\n var locPtPoly$3 = arguments[2];\n var pt = ptLoc.getCoordinate();\n if (Location.EXTERIOR !== this._ptLocator.locate(pt, poly)) {\n this._minDistance = 0.0;\n locPtPoly$3[0] = ptLoc;\n locPtPoly$3[1] = new GeometryLocation(poly, pt);\n\n return null\n }\n }\n }\n};\nDistanceOp.prototype.computeMinDistanceLinesPoints = function computeMinDistanceLinesPoints (lines, points, locGeom) {\n var this$1 = this;\n\n for (var i = 0; i < lines.size(); i++) {\n var line = lines.get(i);\n for (var j = 0; j < points.size(); j++) {\n var pt = points.get(j);\n this$1.computeMinDistance(line, pt, locGeom);\n if (this$1._minDistance <= this$1._terminateDistance) { return null }\n }\n }\n};\nDistanceOp.prototype.computeFacetDistance = function computeFacetDistance () {\n var locGeom = new Array(2).fill(null);\n var lines0 = LinearComponentExtracter.getLines(this._geom[0]);\n var lines1 = LinearComponentExtracter.getLines(this._geom[1]);\n var pts0 = PointExtracter.getPoints(this._geom[0]);\n var pts1 = PointExtracter.getPoints(this._geom[1]);\n this.computeMinDistanceLines(lines0, lines1, locGeom);\n this.updateMinDistance(locGeom, false);\n if (this._minDistance <= this._terminateDistance) { return null }\n locGeom[0] = null;\n locGeom[1] = null;\n this.computeMinDistanceLinesPoints(lines0, pts1, locGeom);\n this.updateMinDistance(locGeom, false);\n if (this._minDistance <= this._terminateDistance) { return null }\n locGeom[0] = null;\n locGeom[1] = null;\n this.computeMinDistanceLinesPoints(lines1, pts0, locGeom);\n this.updateMinDistance(locGeom, true);\n if (this._minDistance <= this._terminateDistance) { return null }\n locGeom[0] = null;\n locGeom[1] = null;\n this.computeMinDistancePoints(pts0, pts1, locGeom);\n this.updateMinDistance(locGeom, false);\n};\nDistanceOp.prototype.nearestLocations = function nearestLocations () {\n this.computeMinDistance();\n return this._minDistanceLocation\n};\nDistanceOp.prototype.updateMinDistance = function updateMinDistance (locGeom, flip) {\n if (locGeom[0] === null) { return null }\n if (flip) {\n this._minDistanceLocation[0] = locGeom[1];\n this._minDistanceLocation[1] = locGeom[0];\n } else {\n this._minDistanceLocation[0] = locGeom[0];\n this._minDistanceLocation[1] = locGeom[1];\n }\n};\nDistanceOp.prototype.nearestPoints = function nearestPoints () {\n this.computeMinDistance();\n var nearestPts = [this._minDistanceLocation[0].getCoordinate(), this._minDistanceLocation[1].getCoordinate()];\n return nearestPts\n};\nDistanceOp.prototype.computeMinDistance = function computeMinDistance () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n if (this._minDistanceLocation !== null) { return null }\n this._minDistanceLocation = new Array(2).fill(null);\n this.computeContainmentDistance();\n if (this._minDistance <= this._terminateDistance) { return null }\n this.computeFacetDistance();\n } else if (arguments.length === 3) {\n if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof Point)) {\n var line = arguments[0];\n var pt = arguments[1];\n var locGeom = arguments[2];\n if (line.getEnvelopeInternal().distance(pt.getEnvelopeInternal()) > this._minDistance) { return null }\n var coord0 = line.getCoordinates();\n var coord = pt.getCoordinate();\n for (var i = 0; i < coord0.length - 1; i++) {\n var dist = CGAlgorithms.distancePointLine(coord, coord0[i], coord0[i + 1]);\n if (dist < this$1._minDistance) {\n this$1._minDistance = dist;\n var seg = new LineSegment(coord0[i], coord0[i + 1]);\n var segClosestPoint = seg.closestPoint(coord);\n locGeom[0] = new GeometryLocation(line, i, segClosestPoint);\n locGeom[1] = new GeometryLocation(pt, 0, coord);\n }\n if (this$1._minDistance <= this$1._terminateDistance) { return null }\n }\n } else if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof LineString)) {\n var line0 = arguments[0];\n var line1 = arguments[1];\n var locGeom$1 = arguments[2];\n if (line0.getEnvelopeInternal().distance(line1.getEnvelopeInternal()) > this._minDistance) { return null }\n var coord0$1 = line0.getCoordinates();\n var coord1 = line1.getCoordinates();\n for (var i$1 = 0; i$1 < coord0$1.length - 1; i$1++) {\n for (var j = 0; j < coord1.length - 1; j++) {\n var dist$1 = CGAlgorithms.distanceLineLine(coord0$1[i$1], coord0$1[i$1 + 1], coord1[j], coord1[j + 1]);\n if (dist$1 < this$1._minDistance) {\n this$1._minDistance = dist$1;\n var seg0 = new LineSegment(coord0$1[i$1], coord0$1[i$1 + 1]);\n var seg1 = new LineSegment(coord1[j], coord1[j + 1]);\n var closestPt = seg0.closestPoints(seg1);\n locGeom$1[0] = new GeometryLocation(line0, i$1, closestPt[0]);\n locGeom$1[1] = new GeometryLocation(line1, j, closestPt[1]);\n }\n if (this$1._minDistance <= this$1._terminateDistance) { return null }\n }\n }\n }\n }\n};\nDistanceOp.prototype.computeMinDistancePoints = function computeMinDistancePoints (points0, points1, locGeom) {\n var this$1 = this;\n\n for (var i = 0; i < points0.size(); i++) {\n var pt0 = points0.get(i);\n for (var j = 0; j < points1.size(); j++) {\n var pt1 = points1.get(j);\n var dist = pt0.getCoordinate().distance(pt1.getCoordinate());\n if (dist < this$1._minDistance) {\n this$1._minDistance = dist;\n locGeom[0] = new GeometryLocation(pt0, 0, pt0.getCoordinate());\n locGeom[1] = new GeometryLocation(pt1, 0, pt1.getCoordinate());\n }\n if (this$1._minDistance <= this$1._terminateDistance) { return null }\n }\n }\n};\nDistanceOp.prototype.distance = function distance () {\n if (this._geom[0] === null || this._geom[1] === null) { throw new IllegalArgumentException('null geometries are not supported') }\n if (this._geom[0].isEmpty() || this._geom[1].isEmpty()) { return 0.0 }\n this.computeMinDistance();\n return this._minDistance\n};\nDistanceOp.prototype.computeMinDistanceLines = function computeMinDistanceLines (lines0, lines1, locGeom) {\n var this$1 = this;\n\n for (var i = 0; i < lines0.size(); i++) {\n var line0 = lines0.get(i);\n for (var j = 0; j < lines1.size(); j++) {\n var line1 = lines1.get(j);\n this$1.computeMinDistance(line0, line1, locGeom);\n if (this$1._minDistance <= this$1._terminateDistance) { return null }\n }\n }\n};\nDistanceOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nDistanceOp.prototype.getClass = function getClass () {\n return DistanceOp\n};\nDistanceOp.distance = function distance (g0, g1) {\n var distOp = new DistanceOp(g0, g1);\n return distOp.distance()\n};\nDistanceOp.isWithinDistance = function isWithinDistance (g0, g1, distance) {\n var distOp = new DistanceOp(g0, g1, distance);\n return distOp.distance() <= distance\n};\nDistanceOp.nearestPoints = function nearestPoints (g0, g1) {\n var distOp = new DistanceOp(g0, g1);\n return distOp.nearestPoints()\n};\n\nvar PointPairDistance$2 = function PointPairDistance () {\n this._pt = [new Coordinate(), new Coordinate()];\n this._distance = Double.NaN;\n this._isNull = true;\n};\nPointPairDistance$2.prototype.getCoordinates = function getCoordinates () {\n return this._pt\n};\nPointPairDistance$2.prototype.getCoordinate = function getCoordinate (i) {\n return this._pt[i]\n};\nPointPairDistance$2.prototype.setMinimum = function setMinimum () {\n if (arguments.length === 1) {\n var ptDist = arguments[0];\n this.setMinimum(ptDist._pt[0], ptDist._pt[1]);\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n if (this._isNull) {\n this.initialize(p0, p1);\n return null\n }\n var dist = p0.distance(p1);\n if (dist < this._distance) { this.initialize(p0, p1, dist); }\n }\n};\nPointPairDistance$2.prototype.initialize = function initialize () {\n if (arguments.length === 0) {\n this._isNull = true;\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n this._pt[0].setCoordinate(p0);\n this._pt[1].setCoordinate(p1);\n this._distance = p0.distance(p1);\n this._isNull = false;\n } else if (arguments.length === 3) {\n var p0$1 = arguments[0];\n var p1$1 = arguments[1];\n var distance = arguments[2];\n this._pt[0].setCoordinate(p0$1);\n this._pt[1].setCoordinate(p1$1);\n this._distance = distance;\n this._isNull = false;\n }\n};\nPointPairDistance$2.prototype.toString = function toString () {\n return WKTWriter.toLineString(this._pt[0], this._pt[1])\n};\nPointPairDistance$2.prototype.getDistance = function getDistance () {\n return this._distance\n};\nPointPairDistance$2.prototype.setMaximum = function setMaximum () {\n if (arguments.length === 1) {\n var ptDist = arguments[0];\n this.setMaximum(ptDist._pt[0], ptDist._pt[1]);\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n if (this._isNull) {\n this.initialize(p0, p1);\n return null\n }\n var dist = p0.distance(p1);\n if (dist > this._distance) { this.initialize(p0, p1, dist); }\n }\n};\nPointPairDistance$2.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPointPairDistance$2.prototype.getClass = function getClass () {\n return PointPairDistance$2\n};\n\nvar DistanceToPoint = function DistanceToPoint () {};\n\nDistanceToPoint.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nDistanceToPoint.prototype.getClass = function getClass () {\n return DistanceToPoint\n};\nDistanceToPoint.computeDistance = function computeDistance () {\n if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {\n var line = arguments[0];\n var pt = arguments[1];\n var ptDist = arguments[2];\n var tempSegment = new LineSegment();\n var coords = line.getCoordinates();\n for (var i = 0; i < coords.length - 1; i++) {\n tempSegment.setCoordinates(coords[i], coords[i + 1]);\n var closestPt = tempSegment.closestPoint(pt);\n ptDist.setMinimum(closestPt, pt);\n }\n } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {\n var poly = arguments[0];\n var pt$1 = arguments[1];\n var ptDist$1 = arguments[2];\n DistanceToPoint.computeDistance(poly.getExteriorRing(), pt$1, ptDist$1);\n for (var i$1 = 0; i$1 < poly.getNumInteriorRing(); i$1++) {\n DistanceToPoint.computeDistance(poly.getInteriorRingN(i$1), pt$1, ptDist$1);\n }\n } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {\n var geom = arguments[0];\n var pt$2 = arguments[1];\n var ptDist$2 = arguments[2];\n if (geom instanceof LineString) {\n DistanceToPoint.computeDistance(geom, pt$2, ptDist$2);\n } else if (geom instanceof Polygon) {\n DistanceToPoint.computeDistance(geom, pt$2, ptDist$2);\n } else if (geom instanceof GeometryCollection) {\n var gc = geom;\n for (var i$2 = 0; i$2 < gc.getNumGeometries(); i$2++) {\n var g = gc.getGeometryN(i$2);\n DistanceToPoint.computeDistance(g, pt$2, ptDist$2);\n }\n } else {\n ptDist$2.setMinimum(geom.getCoordinate(), pt$2);\n }\n } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {\n var segment = arguments[0];\n var pt$3 = arguments[1];\n var ptDist$3 = arguments[2];\n var closestPt$1 = segment.closestPoint(pt$3);\n ptDist$3.setMinimum(closestPt$1, pt$3);\n }\n};\n\nvar DiscreteHausdorffDistance = function DiscreteHausdorffDistance () {\n this._g0 = null;\n this._g1 = null;\n this._ptDist = new PointPairDistance$2();\n this._densifyFrac = 0.0;\n var g0 = arguments[0];\n var g1 = arguments[1];\n this._g0 = g0;\n this._g1 = g1;\n};\n\nvar staticAccessors$39 = { MaxPointDistanceFilter: { configurable: true },MaxDensifiedByFractionDistanceFilter: { configurable: true } };\nDiscreteHausdorffDistance.prototype.getCoordinates = function getCoordinates () {\n return this._ptDist.getCoordinates()\n};\nDiscreteHausdorffDistance.prototype.setDensifyFraction = function setDensifyFraction (densifyFrac) {\n if (densifyFrac > 1.0 || densifyFrac <= 0.0) { throw new IllegalArgumentException('Fraction is not in range (0.0 - 1.0]') }\n this._densifyFrac = densifyFrac;\n};\nDiscreteHausdorffDistance.prototype.compute = function compute (g0, g1) {\n this.computeOrientedDistance(g0, g1, this._ptDist);\n this.computeOrientedDistance(g1, g0, this._ptDist);\n};\nDiscreteHausdorffDistance.prototype.distance = function distance () {\n this.compute(this._g0, this._g1);\n return this._ptDist.getDistance()\n};\nDiscreteHausdorffDistance.prototype.computeOrientedDistance = function computeOrientedDistance (discreteGeom, geom, ptDist) {\n var distFilter = new MaxPointDistanceFilter$1(geom);\n discreteGeom.apply(distFilter);\n ptDist.setMaximum(distFilter.getMaxPointDistance());\n if (this._densifyFrac > 0) {\n var fracFilter = new MaxDensifiedByFractionDistanceFilter(geom, this._densifyFrac);\n discreteGeom.apply(fracFilter);\n ptDist.setMaximum(fracFilter.getMaxPointDistance());\n }\n};\nDiscreteHausdorffDistance.prototype.orientedDistance = function orientedDistance () {\n this.computeOrientedDistance(this._g0, this._g1, this._ptDist);\n return this._ptDist.getDistance()\n};\nDiscreteHausdorffDistance.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nDiscreteHausdorffDistance.prototype.getClass = function getClass () {\n return DiscreteHausdorffDistance\n};\nDiscreteHausdorffDistance.distance = function distance () {\n if (arguments.length === 2) {\n var g0 = arguments[0];\n var g1 = arguments[1];\n var dist = new DiscreteHausdorffDistance(g0, g1);\n return dist.distance()\n } else if (arguments.length === 3) {\n var g0$1 = arguments[0];\n var g1$1 = arguments[1];\n var densifyFrac = arguments[2];\n var dist$1 = new DiscreteHausdorffDistance(g0$1, g1$1);\n dist$1.setDensifyFraction(densifyFrac);\n return dist$1.distance()\n }\n};\nstaticAccessors$39.MaxPointDistanceFilter.get = function () { return MaxPointDistanceFilter$1 };\nstaticAccessors$39.MaxDensifiedByFractionDistanceFilter.get = function () { return MaxDensifiedByFractionDistanceFilter };\n\nObject.defineProperties( DiscreteHausdorffDistance, staticAccessors$39 );\n\nvar MaxPointDistanceFilter$1 = function MaxPointDistanceFilter () {\n this._maxPtDist = new PointPairDistance$2();\n this._minPtDist = new PointPairDistance$2();\n this._euclideanDist = new DistanceToPoint();\n this._geom = null;\n var geom = arguments[0];\n this._geom = geom;\n};\nMaxPointDistanceFilter$1.prototype.filter = function filter (pt) {\n this._minPtDist.initialize();\n DistanceToPoint.computeDistance(this._geom, pt, this._minPtDist);\n this._maxPtDist.setMaximum(this._minPtDist);\n};\nMaxPointDistanceFilter$1.prototype.getMaxPointDistance = function getMaxPointDistance () {\n return this._maxPtDist\n};\nMaxPointDistanceFilter$1.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateFilter]\n};\nMaxPointDistanceFilter$1.prototype.getClass = function getClass () {\n return MaxPointDistanceFilter$1\n};\n\nvar MaxDensifiedByFractionDistanceFilter = function MaxDensifiedByFractionDistanceFilter () {\n this._maxPtDist = new PointPairDistance$2();\n this._minPtDist = new PointPairDistance$2();\n this._geom = null;\n this._numSubSegs = 0;\n var geom = arguments[0];\n var fraction = arguments[1];\n this._geom = geom;\n this._numSubSegs = Math.trunc(Math.round(1.0 / fraction));\n};\nMaxDensifiedByFractionDistanceFilter.prototype.filter = function filter (seq, index) {\n var this$1 = this;\n\n if (index === 0) { return null }\n var p0 = seq.getCoordinate(index - 1);\n var p1 = seq.getCoordinate(index);\n var delx = (p1.x - p0.x) / this._numSubSegs;\n var dely = (p1.y - p0.y) / this._numSubSegs;\n for (var i = 0; i < this._numSubSegs; i++) {\n var x = p0.x + i * delx;\n var y = p0.y + i * dely;\n var pt = new Coordinate(x, y);\n this$1._minPtDist.initialize();\n DistanceToPoint.computeDistance(this$1._geom, pt, this$1._minPtDist);\n this$1._maxPtDist.setMaximum(this$1._minPtDist);\n }\n};\nMaxDensifiedByFractionDistanceFilter.prototype.isDone = function isDone () {\n return false\n};\nMaxDensifiedByFractionDistanceFilter.prototype.isGeometryChanged = function isGeometryChanged () {\n return false\n};\nMaxDensifiedByFractionDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {\n return this._maxPtDist\n};\nMaxDensifiedByFractionDistanceFilter.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateSequenceFilter]\n};\nMaxDensifiedByFractionDistanceFilter.prototype.getClass = function getClass () {\n return MaxDensifiedByFractionDistanceFilter\n};\n\nvar BufferDistanceValidator = function BufferDistanceValidator (input, bufDistance, result) {\n this._minValidDistance = null;\n this._maxValidDistance = null;\n this._minDistanceFound = null;\n this._maxDistanceFound = null;\n this._isValid = true;\n this._errMsg = null;\n this._errorLocation = null;\n this._errorIndicator = null;\n this._input = input || null;\n this._bufDistance = bufDistance || null;\n this._result = result || null;\n};\n\nvar staticAccessors$37 = { VERBOSE: { configurable: true },MAX_DISTANCE_DIFF_FRAC: { configurable: true } };\nBufferDistanceValidator.prototype.checkMaximumDistance = function checkMaximumDistance (input, bufCurve, maxDist) {\n var haus = new DiscreteHausdorffDistance(bufCurve, input);\n haus.setDensifyFraction(0.25);\n this._maxDistanceFound = haus.orientedDistance();\n if (this._maxDistanceFound > maxDist) {\n this._isValid = false;\n var pts = haus.getCoordinates();\n this._errorLocation = pts[1];\n this._errorIndicator = input.getFactory().createLineString(pts);\n this._errMsg = 'Distance between buffer curve and input is too large (' + this._maxDistanceFound + ' at ' + WKTWriter.toLineString(pts[0], pts[1]) + ')';\n }\n};\nBufferDistanceValidator.prototype.isValid = function isValid () {\n var posDistance = Math.abs(this._bufDistance);\n var distDelta = BufferDistanceValidator.MAX_DISTANCE_DIFF_FRAC * posDistance;\n this._minValidDistance = posDistance - distDelta;\n this._maxValidDistance = posDistance + distDelta;\n if (this._input.isEmpty() || this._result.isEmpty()) { return true }\n if (this._bufDistance > 0.0) {\n this.checkPositiveValid();\n } else {\n this.checkNegativeValid();\n }\n if (BufferDistanceValidator.VERBOSE) {\n System.out.println('Min Dist= ' + this._minDistanceFound + ' err= ' + (1.0 - this._minDistanceFound / this._bufDistance) + ' Max Dist= ' + this._maxDistanceFound + ' err= ' + (this._maxDistanceFound / this._bufDistance - 1.0));\n }\n return this._isValid\n};\nBufferDistanceValidator.prototype.checkNegativeValid = function checkNegativeValid () {\n if (!(this._input instanceof Polygon || this._input instanceof MultiPolygon || this._input instanceof GeometryCollection)) {\n return null\n }\n var inputCurve = this.getPolygonLines(this._input);\n this.checkMinimumDistance(inputCurve, this._result, this._minValidDistance);\n if (!this._isValid) { return null }\n this.checkMaximumDistance(inputCurve, this._result, this._maxValidDistance);\n};\nBufferDistanceValidator.prototype.getErrorIndicator = function getErrorIndicator () {\n return this._errorIndicator\n};\nBufferDistanceValidator.prototype.checkMinimumDistance = function checkMinimumDistance (g1, g2, minDist) {\n var distOp = new DistanceOp(g1, g2, minDist);\n this._minDistanceFound = distOp.distance();\n if (this._minDistanceFound < minDist) {\n this._isValid = false;\n var pts = distOp.nearestPoints();\n this._errorLocation = distOp.nearestPoints()[1];\n this._errorIndicator = g1.getFactory().createLineString(pts);\n this._errMsg = 'Distance between buffer curve and input is too small (' + this._minDistanceFound + ' at ' + WKTWriter.toLineString(pts[0], pts[1]) + ' )';\n }\n};\nBufferDistanceValidator.prototype.checkPositiveValid = function checkPositiveValid () {\n var bufCurve = this._result.getBoundary();\n this.checkMinimumDistance(this._input, bufCurve, this._minValidDistance);\n if (!this._isValid) { return null }\n this.checkMaximumDistance(this._input, bufCurve, this._maxValidDistance);\n};\nBufferDistanceValidator.prototype.getErrorLocation = function getErrorLocation () {\n return this._errorLocation\n};\nBufferDistanceValidator.prototype.getPolygonLines = function getPolygonLines (g) {\n var lines = new ArrayList();\n var lineExtracter = new LinearComponentExtracter(lines);\n var polys = PolygonExtracter.getPolygons(g);\n for (var i = polys.iterator(); i.hasNext();) {\n var poly = i.next();\n poly.apply(lineExtracter);\n }\n return g.getFactory().buildGeometry(lines)\n};\nBufferDistanceValidator.prototype.getErrorMessage = function getErrorMessage () {\n return this._errMsg\n};\nBufferDistanceValidator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferDistanceValidator.prototype.getClass = function getClass () {\n return BufferDistanceValidator\n};\nstaticAccessors$37.VERBOSE.get = function () { return false };\nstaticAccessors$37.MAX_DISTANCE_DIFF_FRAC.get = function () { return 0.012 };\n\nObject.defineProperties( BufferDistanceValidator, staticAccessors$37 );\n\nvar BufferResultValidator = function BufferResultValidator (input, distance, result) {\n this._isValid = true;\n this._errorMsg = null;\n this._errorLocation = null;\n this._errorIndicator = null;\n this._input = input || null;\n this._distance = distance || null;\n this._result = result || null;\n};\n\nvar staticAccessors$40 = { VERBOSE: { configurable: true },MAX_ENV_DIFF_FRAC: { configurable: true } };\nBufferResultValidator.prototype.isValid = function isValid () {\n this.checkPolygonal();\n if (!this._isValid) { return this._isValid }\n this.checkExpectedEmpty();\n if (!this._isValid) { return this._isValid }\n this.checkEnvelope();\n if (!this._isValid) { return this._isValid }\n this.checkArea();\n if (!this._isValid) { return this._isValid }\n this.checkDistance();\n return this._isValid\n};\nBufferResultValidator.prototype.checkEnvelope = function checkEnvelope () {\n if (this._distance < 0.0) { return null }\n var padding = this._distance * BufferResultValidator.MAX_ENV_DIFF_FRAC;\n if (padding === 0.0) { padding = 0.001; }\n var expectedEnv = new Envelope(this._input.getEnvelopeInternal());\n expectedEnv.expandBy(this._distance);\n var bufEnv = new Envelope(this._result.getEnvelopeInternal());\n bufEnv.expandBy(padding);\n if (!bufEnv.contains(expectedEnv)) {\n this._isValid = false;\n this._errorMsg = 'Buffer envelope is incorrect';\n this._errorIndicator = this._input.getFactory().toGeometry(bufEnv);\n }\n this.report('Envelope');\n};\nBufferResultValidator.prototype.checkDistance = function checkDistance () {\n var distValid = new BufferDistanceValidator(this._input, this._distance, this._result);\n if (!distValid.isValid()) {\n this._isValid = false;\n this._errorMsg = distValid.getErrorMessage();\n this._errorLocation = distValid.getErrorLocation();\n this._errorIndicator = distValid.getErrorIndicator();\n }\n this.report('Distance');\n};\nBufferResultValidator.prototype.checkArea = function checkArea () {\n var inputArea = this._input.getArea();\n var resultArea = this._result.getArea();\n if (this._distance > 0.0 && inputArea > resultArea) {\n this._isValid = false;\n this._errorMsg = 'Area of positive buffer is smaller than input';\n this._errorIndicator = this._result;\n }\n if (this._distance < 0.0 && inputArea < resultArea) {\n this._isValid = false;\n this._errorMsg = 'Area of negative buffer is larger than input';\n this._errorIndicator = this._result;\n }\n this.report('Area');\n};\nBufferResultValidator.prototype.checkPolygonal = function checkPolygonal () {\n if (!(this._result instanceof Polygon || this._result instanceof MultiPolygon)) { this._isValid = false; }\n this._errorMsg = 'Result is not polygonal';\n this._errorIndicator = this._result;\n this.report('Polygonal');\n};\nBufferResultValidator.prototype.getErrorIndicator = function getErrorIndicator () {\n return this._errorIndicator\n};\nBufferResultValidator.prototype.getErrorLocation = function getErrorLocation () {\n return this._errorLocation\n};\nBufferResultValidator.prototype.checkExpectedEmpty = function checkExpectedEmpty () {\n if (this._input.getDimension() >= 2) { return null }\n if (this._distance > 0.0) { return null }\n if (!this._result.isEmpty()) {\n this._isValid = false;\n this._errorMsg = 'Result is non-empty';\n this._errorIndicator = this._result;\n }\n this.report('ExpectedEmpty');\n};\nBufferResultValidator.prototype.report = function report (checkName) {\n if (!BufferResultValidator.VERBOSE) { return null }\n System.out.println('Check ' + checkName + ': ' + (this._isValid ? 'passed' : 'FAILED'));\n};\nBufferResultValidator.prototype.getErrorMessage = function getErrorMessage () {\n return this._errorMsg\n};\nBufferResultValidator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferResultValidator.prototype.getClass = function getClass () {\n return BufferResultValidator\n};\nBufferResultValidator.isValidMsg = function isValidMsg (g, distance, result) {\n var validator = new BufferResultValidator(g, distance, result);\n if (!validator.isValid()) { return validator.getErrorMessage() }\n return null\n};\nBufferResultValidator.isValid = function isValid (g, distance, result) {\n var validator = new BufferResultValidator(g, distance, result);\n if (validator.isValid()) { return true }\n return false\n};\nstaticAccessors$40.VERBOSE.get = function () { return false };\nstaticAccessors$40.MAX_ENV_DIFF_FRAC.get = function () { return 0.012 };\n\nObject.defineProperties( BufferResultValidator, staticAccessors$40 );\n\n// operation.buffer\n\nvar BasicSegmentString = function BasicSegmentString () {\n this._pts = null;\n this._data = null;\n var pts = arguments[0];\n var data = arguments[1];\n this._pts = pts;\n this._data = data;\n};\nBasicSegmentString.prototype.getCoordinates = function getCoordinates () {\n return this._pts\n};\nBasicSegmentString.prototype.size = function size () {\n return this._pts.length\n};\nBasicSegmentString.prototype.getCoordinate = function getCoordinate (i) {\n return this._pts[i]\n};\nBasicSegmentString.prototype.isClosed = function isClosed () {\n return this._pts[0].equals(this._pts[this._pts.length - 1])\n};\nBasicSegmentString.prototype.getSegmentOctant = function getSegmentOctant (index) {\n if (index === this._pts.length - 1) { return -1 }\n return Octant.octant(this.getCoordinate(index), this.getCoordinate(index + 1))\n};\nBasicSegmentString.prototype.setData = function setData (data) {\n this._data = data;\n};\nBasicSegmentString.prototype.getData = function getData () {\n return this._data\n};\nBasicSegmentString.prototype.toString = function toString () {\n return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))\n};\nBasicSegmentString.prototype.interfaces_ = function interfaces_ () {\n return [SegmentString]\n};\nBasicSegmentString.prototype.getClass = function getClass () {\n return BasicSegmentString\n};\n\nvar InteriorIntersectionFinder = function InteriorIntersectionFinder () {\n this._findAllIntersections = false;\n this._isCheckEndSegmentsOnly = false;\n this._li = null;\n this._interiorIntersection = null;\n this._intSegments = null;\n this._intersections = new ArrayList();\n this._intersectionCount = 0;\n this._keepIntersections = true;\n var li = arguments[0];\n this._li = li;\n this._interiorIntersection = null;\n};\nInteriorIntersectionFinder.prototype.getInteriorIntersection = function getInteriorIntersection () {\n return this._interiorIntersection\n};\nInteriorIntersectionFinder.prototype.setCheckEndSegmentsOnly = function setCheckEndSegmentsOnly (isCheckEndSegmentsOnly) {\n this._isCheckEndSegmentsOnly = isCheckEndSegmentsOnly;\n};\nInteriorIntersectionFinder.prototype.getIntersectionSegments = function getIntersectionSegments () {\n return this._intSegments\n};\nInteriorIntersectionFinder.prototype.count = function count () {\n return this._intersectionCount\n};\nInteriorIntersectionFinder.prototype.getIntersections = function getIntersections () {\n return this._intersections\n};\nInteriorIntersectionFinder.prototype.setFindAllIntersections = function setFindAllIntersections (findAllIntersections) {\n this._findAllIntersections = findAllIntersections;\n};\nInteriorIntersectionFinder.prototype.setKeepIntersections = function setKeepIntersections (keepIntersections) {\n this._keepIntersections = keepIntersections;\n};\nInteriorIntersectionFinder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {\n if (!this._findAllIntersections && this.hasIntersection()) { return null }\n if (e0 === e1 && segIndex0 === segIndex1) { return null }\n if (this._isCheckEndSegmentsOnly) {\n var isEndSegPresent = this.isEndSegment(e0, segIndex0) || this.isEndSegment(e1, segIndex1);\n if (!isEndSegPresent) { return null }\n }\n var p00 = e0.getCoordinates()[segIndex0];\n var p01 = e0.getCoordinates()[segIndex0 + 1];\n var p10 = e1.getCoordinates()[segIndex1];\n var p11 = e1.getCoordinates()[segIndex1 + 1];\n this._li.computeIntersection(p00, p01, p10, p11);\n if (this._li.hasIntersection()) {\n if (this._li.isInteriorIntersection()) {\n this._intSegments = new Array(4).fill(null);\n this._intSegments[0] = p00;\n this._intSegments[1] = p01;\n this._intSegments[2] = p10;\n this._intSegments[3] = p11;\n this._interiorIntersection = this._li.getIntersection(0);\n if (this._keepIntersections) { this._intersections.add(this._interiorIntersection); }\n this._intersectionCount++;\n }\n }\n};\nInteriorIntersectionFinder.prototype.isEndSegment = function isEndSegment (segStr, index) {\n if (index === 0) { return true }\n if (index >= segStr.size() - 2) { return true }\n return false\n};\nInteriorIntersectionFinder.prototype.hasIntersection = function hasIntersection () {\n return this._interiorIntersection !== null\n};\nInteriorIntersectionFinder.prototype.isDone = function isDone () {\n if (this._findAllIntersections) { return false }\n return this._interiorIntersection !== null\n};\nInteriorIntersectionFinder.prototype.interfaces_ = function interfaces_ () {\n return [SegmentIntersector]\n};\nInteriorIntersectionFinder.prototype.getClass = function getClass () {\n return InteriorIntersectionFinder\n};\nInteriorIntersectionFinder.createAllIntersectionsFinder = function createAllIntersectionsFinder (li) {\n var finder = new InteriorIntersectionFinder(li);\n finder.setFindAllIntersections(true);\n return finder\n};\nInteriorIntersectionFinder.createAnyIntersectionFinder = function createAnyIntersectionFinder (li) {\n return new InteriorIntersectionFinder(li)\n};\nInteriorIntersectionFinder.createIntersectionCounter = function createIntersectionCounter (li) {\n var finder = new InteriorIntersectionFinder(li);\n finder.setFindAllIntersections(true);\n finder.setKeepIntersections(false);\n return finder\n};\n\nvar FastNodingValidator = function FastNodingValidator () {\n this._li = new RobustLineIntersector();\n this._segStrings = null;\n this._findAllIntersections = false;\n this._segInt = null;\n this._isValid = true;\n var segStrings = arguments[0];\n this._segStrings = segStrings;\n};\nFastNodingValidator.prototype.execute = function execute () {\n if (this._segInt !== null) { return null }\n this.checkInteriorIntersections();\n};\nFastNodingValidator.prototype.getIntersections = function getIntersections () {\n return this._segInt.getIntersections()\n};\nFastNodingValidator.prototype.isValid = function isValid () {\n this.execute();\n return this._isValid\n};\nFastNodingValidator.prototype.setFindAllIntersections = function setFindAllIntersections (findAllIntersections) {\n this._findAllIntersections = findAllIntersections;\n};\nFastNodingValidator.prototype.checkInteriorIntersections = function checkInteriorIntersections () {\n this._isValid = true;\n this._segInt = new InteriorIntersectionFinder(this._li);\n this._segInt.setFindAllIntersections(this._findAllIntersections);\n var noder = new MCIndexNoder();\n noder.setSegmentIntersector(this._segInt);\n noder.computeNodes(this._segStrings);\n if (this._segInt.hasIntersection()) {\n this._isValid = false;\n return null\n }\n};\nFastNodingValidator.prototype.checkValid = function checkValid () {\n this.execute();\n if (!this._isValid) { throw new TopologyException(this.getErrorMessage(), this._segInt.getInteriorIntersection()) }\n};\nFastNodingValidator.prototype.getErrorMessage = function getErrorMessage () {\n if (this._isValid) { return 'no intersections found' }\n var intSegs = this._segInt.getIntersectionSegments();\n return 'found non-noded intersection between ' + WKTWriter.toLineString(intSegs[0], intSegs[1]) + ' and ' + WKTWriter.toLineString(intSegs[2], intSegs[3])\n};\nFastNodingValidator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nFastNodingValidator.prototype.getClass = function getClass () {\n return FastNodingValidator\n};\nFastNodingValidator.computeIntersections = function computeIntersections (segStrings) {\n var nv = new FastNodingValidator(segStrings);\n nv.setFindAllIntersections(true);\n nv.isValid();\n return nv.getIntersections()\n};\n\nvar EdgeNodingValidator = function EdgeNodingValidator () {\n this._nv = null;\n var edges = arguments[0];\n this._nv = new FastNodingValidator(EdgeNodingValidator.toSegmentStrings(edges));\n};\nEdgeNodingValidator.prototype.checkValid = function checkValid () {\n this._nv.checkValid();\n};\nEdgeNodingValidator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nEdgeNodingValidator.prototype.getClass = function getClass () {\n return EdgeNodingValidator\n};\nEdgeNodingValidator.toSegmentStrings = function toSegmentStrings (edges) {\n var segStrings = new ArrayList();\n for (var i = edges.iterator(); i.hasNext();) {\n var e = i.next();\n segStrings.add(new BasicSegmentString(e.getCoordinates(), e));\n }\n return segStrings\n};\nEdgeNodingValidator.checkValid = function checkValid (edges) {\n var validator = new EdgeNodingValidator(edges);\n validator.checkValid();\n};\n\nvar GeometryCollectionMapper = function GeometryCollectionMapper (mapOp) {\n this._mapOp = mapOp;\n};\nGeometryCollectionMapper.prototype.map = function map (gc) {\n var this$1 = this;\n\n var mapped = new ArrayList();\n for (var i = 0; i < gc.getNumGeometries(); i++) {\n var g = this$1._mapOp.map(gc.getGeometryN(i));\n if (!g.isEmpty()) { mapped.add(g); }\n }\n return gc.getFactory().createGeometryCollection(GeometryFactory.toGeometryArray(mapped))\n};\nGeometryCollectionMapper.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryCollectionMapper.prototype.getClass = function getClass () {\n return GeometryCollectionMapper\n};\nGeometryCollectionMapper.map = function map (gc, op) {\n var mapper = new GeometryCollectionMapper(op);\n return mapper.map(gc)\n};\n\nvar LineBuilder = function LineBuilder () {\n this._op = null;\n this._geometryFactory = null;\n this._ptLocator = null;\n this._lineEdgesList = new ArrayList();\n this._resultLineList = new ArrayList();\n var op = arguments[0];\n var geometryFactory = arguments[1];\n var ptLocator = arguments[2];\n this._op = op;\n this._geometryFactory = geometryFactory;\n this._ptLocator = ptLocator;\n};\nLineBuilder.prototype.collectLines = function collectLines (opCode) {\n var this$1 = this;\n\n for (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext();) {\n var de = it.next();\n this$1.collectLineEdge(de, opCode, this$1._lineEdgesList);\n this$1.collectBoundaryTouchEdge(de, opCode, this$1._lineEdgesList);\n }\n};\nLineBuilder.prototype.labelIsolatedLine = function labelIsolatedLine (e, targetIndex) {\n var loc = this._ptLocator.locate(e.getCoordinate(), this._op.getArgGeometry(targetIndex));\n e.getLabel().setLocation(targetIndex, loc);\n};\nLineBuilder.prototype.build = function build (opCode) {\n this.findCoveredLineEdges();\n this.collectLines(opCode);\n this.buildLines(opCode);\n return this._resultLineList\n};\nLineBuilder.prototype.collectLineEdge = function collectLineEdge (de, opCode, edges) {\n var label = de.getLabel();\n var e = de.getEdge();\n if (de.isLineEdge()) {\n if (!de.isVisited() && OverlayOp.isResultOfOp(label, opCode) && !e.isCovered()) {\n edges.add(e);\n de.setVisitedEdge(true);\n }\n }\n};\nLineBuilder.prototype.findCoveredLineEdges = function findCoveredLineEdges () {\n var this$1 = this;\n\n for (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n node.getEdges().findCoveredLineEdges();\n }\n for (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext();) {\n var de = it.next();\n var e = de.getEdge();\n if (de.isLineEdge() && !e.isCoveredSet()) {\n var isCovered = this$1._op.isCoveredByA(de.getCoordinate());\n e.setCovered(isCovered);\n }\n }\n};\nLineBuilder.prototype.labelIsolatedLines = function labelIsolatedLines (edgesList) {\n var this$1 = this;\n\n for (var it = edgesList.iterator(); it.hasNext();) {\n var e = it.next();\n var label = e.getLabel();\n if (e.isIsolated()) {\n if (label.isNull(0)) { this$1.labelIsolatedLine(e, 0); } else { this$1.labelIsolatedLine(e, 1); }\n }\n }\n};\nLineBuilder.prototype.buildLines = function buildLines (opCode) {\n var this$1 = this;\n\n for (var it = this._lineEdgesList.iterator(); it.hasNext();) {\n var e = it.next();\n // const label = e.getLabel()\n var line = this$1._geometryFactory.createLineString(e.getCoordinates());\n this$1._resultLineList.add(line);\n e.setInResult(true);\n }\n};\nLineBuilder.prototype.collectBoundaryTouchEdge = function collectBoundaryTouchEdge (de, opCode, edges) {\n var label = de.getLabel();\n if (de.isLineEdge()) { return null }\n if (de.isVisited()) { return null }\n if (de.isInteriorAreaEdge()) { return null }\n if (de.getEdge().isInResult()) { return null }\n Assert.isTrue(!(de.isInResult() || de.getSym().isInResult()) || !de.getEdge().isInResult());\n if (OverlayOp.isResultOfOp(label, opCode) && opCode === OverlayOp.INTERSECTION) {\n edges.add(de.getEdge());\n de.setVisitedEdge(true);\n }\n};\nLineBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nLineBuilder.prototype.getClass = function getClass () {\n return LineBuilder\n};\n\nvar PointBuilder = function PointBuilder () {\n this._op = null;\n this._geometryFactory = null;\n this._resultPointList = new ArrayList();\n var op = arguments[0];\n var geometryFactory = arguments[1];\n // const ptLocator = arguments[2]\n this._op = op;\n this._geometryFactory = geometryFactory;\n};\nPointBuilder.prototype.filterCoveredNodeToPoint = function filterCoveredNodeToPoint (n) {\n var coord = n.getCoordinate();\n if (!this._op.isCoveredByLA(coord)) {\n var pt = this._geometryFactory.createPoint(coord);\n this._resultPointList.add(pt);\n }\n};\nPointBuilder.prototype.extractNonCoveredResultNodes = function extractNonCoveredResultNodes (opCode) {\n var this$1 = this;\n\n for (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext();) {\n var n = nodeit.next();\n if (n.isInResult()) { continue }\n if (n.isIncidentEdgeInResult()) { continue }\n if (n.getEdges().getDegree() === 0 || opCode === OverlayOp.INTERSECTION) {\n var label = n.getLabel();\n if (OverlayOp.isResultOfOp(label, opCode)) {\n this$1.filterCoveredNodeToPoint(n);\n }\n }\n }\n};\nPointBuilder.prototype.build = function build (opCode) {\n this.extractNonCoveredResultNodes(opCode);\n return this._resultPointList\n};\nPointBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPointBuilder.prototype.getClass = function getClass () {\n return PointBuilder\n};\n\nvar GeometryTransformer = function GeometryTransformer () {\n this._inputGeom = null;\n this._factory = null;\n this._pruneEmptyGeometry = true;\n this._preserveGeometryCollectionType = true;\n this._preserveCollections = false;\n this._preserveType = false;\n};\nGeometryTransformer.prototype.transformPoint = function transformPoint (geom, parent) {\n return this._factory.createPoint(this.transformCoordinates(geom.getCoordinateSequence(), geom))\n};\nGeometryTransformer.prototype.transformPolygon = function transformPolygon (geom, parent) {\n var this$1 = this;\n\n var isAllValidLinearRings = true;\n var shell = this.transformLinearRing(geom.getExteriorRing(), geom);\n if (shell === null || !(shell instanceof LinearRing) || shell.isEmpty()) { isAllValidLinearRings = false; }\n var holes = new ArrayList();\n for (var i = 0; i < geom.getNumInteriorRing(); i++) {\n var hole = this$1.transformLinearRing(geom.getInteriorRingN(i), geom);\n if (hole === null || hole.isEmpty()) {\n continue\n }\n if (!(hole instanceof LinearRing)) { isAllValidLinearRings = false; }\n holes.add(hole);\n }\n if (isAllValidLinearRings) { return this._factory.createPolygon(shell, holes.toArray([])); } else {\n var components = new ArrayList();\n if (shell !== null) { components.add(shell); }\n components.addAll(holes);\n return this._factory.buildGeometry(components)\n }\n};\nGeometryTransformer.prototype.createCoordinateSequence = function createCoordinateSequence (coords) {\n return this._factory.getCoordinateSequenceFactory().create(coords)\n};\nGeometryTransformer.prototype.getInputGeometry = function getInputGeometry () {\n return this._inputGeom\n};\nGeometryTransformer.prototype.transformMultiLineString = function transformMultiLineString (geom, parent) {\n var this$1 = this;\n\n var transGeomList = new ArrayList();\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var transformGeom = this$1.transformLineString(geom.getGeometryN(i), geom);\n if (transformGeom === null) { continue }\n if (transformGeom.isEmpty()) { continue }\n transGeomList.add(transformGeom);\n }\n return this._factory.buildGeometry(transGeomList)\n};\nGeometryTransformer.prototype.transformCoordinates = function transformCoordinates (coords, parent) {\n return this.copy(coords)\n};\nGeometryTransformer.prototype.transformLineString = function transformLineString (geom, parent) {\n return this._factory.createLineString(this.transformCoordinates(geom.getCoordinateSequence(), geom))\n};\nGeometryTransformer.prototype.transformMultiPoint = function transformMultiPoint (geom, parent) {\n var this$1 = this;\n\n var transGeomList = new ArrayList();\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var transformGeom = this$1.transformPoint(geom.getGeometryN(i), geom);\n if (transformGeom === null) { continue }\n if (transformGeom.isEmpty()) { continue }\n transGeomList.add(transformGeom);\n }\n return this._factory.buildGeometry(transGeomList)\n};\nGeometryTransformer.prototype.transformMultiPolygon = function transformMultiPolygon (geom, parent) {\n var this$1 = this;\n\n var transGeomList = new ArrayList();\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var transformGeom = this$1.transformPolygon(geom.getGeometryN(i), geom);\n if (transformGeom === null) { continue }\n if (transformGeom.isEmpty()) { continue }\n transGeomList.add(transformGeom);\n }\n return this._factory.buildGeometry(transGeomList)\n};\nGeometryTransformer.prototype.copy = function copy (seq) {\n return seq.copy()\n};\nGeometryTransformer.prototype.transformGeometryCollection = function transformGeometryCollection (geom, parent) {\n var this$1 = this;\n\n var transGeomList = new ArrayList();\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var transformGeom = this$1.transform(geom.getGeometryN(i));\n if (transformGeom === null) { continue }\n if (this$1._pruneEmptyGeometry && transformGeom.isEmpty()) { continue }\n transGeomList.add(transformGeom);\n }\n if (this._preserveGeometryCollectionType) { return this._factory.createGeometryCollection(GeometryFactory.toGeometryArray(transGeomList)) }\n return this._factory.buildGeometry(transGeomList)\n};\nGeometryTransformer.prototype.transform = function transform (inputGeom) {\n this._inputGeom = inputGeom;\n this._factory = inputGeom.getFactory();\n if (inputGeom instanceof Point) { return this.transformPoint(inputGeom, null) }\n if (inputGeom instanceof MultiPoint) { return this.transformMultiPoint(inputGeom, null) }\n if (inputGeom instanceof LinearRing) { return this.transformLinearRing(inputGeom, null) }\n if (inputGeom instanceof LineString) { return this.transformLineString(inputGeom, null) }\n if (inputGeom instanceof MultiLineString) { return this.transformMultiLineString(inputGeom, null) }\n if (inputGeom instanceof Polygon) { return this.transformPolygon(inputGeom, null) }\n if (inputGeom instanceof MultiPolygon) { return this.transformMultiPolygon(inputGeom, null) }\n if (inputGeom instanceof GeometryCollection) { return this.transformGeometryCollection(inputGeom, null) }\n throw new IllegalArgumentException('Unknown Geometry subtype: ' + inputGeom.getClass().getName())\n};\nGeometryTransformer.prototype.transformLinearRing = function transformLinearRing (geom, parent) {\n var seq = this.transformCoordinates(geom.getCoordinateSequence(), geom);\n if (seq === null) { return this._factory.createLinearRing(null) }\n var seqSize = seq.size();\n if (seqSize > 0 && seqSize < 4 && !this._preserveType) { return this._factory.createLineString(seq) }\n return this._factory.createLinearRing(seq)\n};\nGeometryTransformer.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryTransformer.prototype.getClass = function getClass () {\n return GeometryTransformer\n};\n\nvar LineStringSnapper = function LineStringSnapper () {\n this._snapTolerance = 0.0;\n this._srcPts = null;\n this._seg = new LineSegment();\n this._allowSnappingToSourceVertices = false;\n this._isClosed = false;\n if (arguments[0] instanceof LineString && typeof arguments[1] === 'number') {\n var srcLine = arguments[0];\n var snapTolerance = arguments[1];\n LineStringSnapper.call(this, srcLine.getCoordinates(), snapTolerance);\n } else if (arguments[0] instanceof Array && typeof arguments[1] === 'number') {\n var srcPts = arguments[0];\n var snapTolerance$1 = arguments[1];\n this._srcPts = srcPts;\n this._isClosed = LineStringSnapper.isClosed(srcPts);\n this._snapTolerance = snapTolerance$1;\n }\n};\nLineStringSnapper.prototype.snapVertices = function snapVertices (srcCoords, snapPts) {\n var this$1 = this;\n\n var end = this._isClosed ? srcCoords.size() - 1 : srcCoords.size();\n for (var i = 0; i < end; i++) {\n var srcPt = srcCoords.get(i);\n var snapVert = this$1.findSnapForVertex(srcPt, snapPts);\n if (snapVert !== null) {\n srcCoords.set(i, new Coordinate(snapVert));\n if (i === 0 && this$1._isClosed) { srcCoords.set(srcCoords.size() - 1, new Coordinate(snapVert)); }\n }\n }\n};\nLineStringSnapper.prototype.findSnapForVertex = function findSnapForVertex (pt, snapPts) {\n var this$1 = this;\n\n for (var i = 0; i < snapPts.length; i++) {\n if (pt.equals2D(snapPts[i])) { return null }\n if (pt.distance(snapPts[i]) < this$1._snapTolerance) { return snapPts[i] }\n }\n return null\n};\nLineStringSnapper.prototype.snapTo = function snapTo (snapPts) {\n var coordList = new CoordinateList(this._srcPts);\n this.snapVertices(coordList, snapPts);\n this.snapSegments(coordList, snapPts);\n var newPts = coordList.toCoordinateArray();\n return newPts\n};\nLineStringSnapper.prototype.snapSegments = function snapSegments (srcCoords, snapPts) {\n var this$1 = this;\n\n if (snapPts.length === 0) { return null }\n var distinctPtCount = snapPts.length;\n if (snapPts[0].equals2D(snapPts[snapPts.length - 1])) { distinctPtCount = snapPts.length - 1; }\n for (var i = 0; i < distinctPtCount; i++) {\n var snapPt = snapPts[i];\n var index = this$1.findSegmentIndexToSnap(snapPt, srcCoords);\n if (index >= 0) {\n srcCoords.add(index + 1, new Coordinate(snapPt), false);\n }\n }\n};\nLineStringSnapper.prototype.findSegmentIndexToSnap = function findSegmentIndexToSnap (snapPt, srcCoords) {\n var this$1 = this;\n\n var minDist = Double.MAX_VALUE;\n var snapIndex = -1;\n for (var i = 0; i < srcCoords.size() - 1; i++) {\n this$1._seg.p0 = srcCoords.get(i);\n this$1._seg.p1 = srcCoords.get(i + 1);\n if (this$1._seg.p0.equals2D(snapPt) || this$1._seg.p1.equals2D(snapPt)) {\n if (this$1._allowSnappingToSourceVertices) { continue; } else { return -1 }\n }\n var dist = this$1._seg.distance(snapPt);\n if (dist < this$1._snapTolerance && dist < minDist) {\n minDist = dist;\n snapIndex = i;\n }\n }\n return snapIndex\n};\nLineStringSnapper.prototype.setAllowSnappingToSourceVertices = function setAllowSnappingToSourceVertices (allowSnappingToSourceVertices) {\n this._allowSnappingToSourceVertices = allowSnappingToSourceVertices;\n};\nLineStringSnapper.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nLineStringSnapper.prototype.getClass = function getClass () {\n return LineStringSnapper\n};\nLineStringSnapper.isClosed = function isClosed (pts) {\n if (pts.length <= 1) { return false }\n return pts[0].equals2D(pts[pts.length - 1])\n};\n\nvar GeometrySnapper = function GeometrySnapper (srcGeom) {\n this._srcGeom = srcGeom || null;\n};\n\nvar staticAccessors$41 = { SNAP_PRECISION_FACTOR: { configurable: true } };\nGeometrySnapper.prototype.snapTo = function snapTo (snapGeom, snapTolerance) {\n var snapPts = this.extractTargetCoordinates(snapGeom);\n var snapTrans = new SnapTransformer(snapTolerance, snapPts);\n return snapTrans.transform(this._srcGeom)\n};\nGeometrySnapper.prototype.snapToSelf = function snapToSelf (snapTolerance, cleanResult) {\n var snapPts = this.extractTargetCoordinates(this._srcGeom);\n var snapTrans = new SnapTransformer(snapTolerance, snapPts, true);\n var snappedGeom = snapTrans.transform(this._srcGeom);\n var result = snappedGeom;\n if (cleanResult && hasInterface(result, Polygonal)) {\n result = snappedGeom.buffer(0);\n }\n return result\n};\nGeometrySnapper.prototype.computeSnapTolerance = function computeSnapTolerance (ringPts) {\n var minSegLen = this.computeMinimumSegmentLength(ringPts);\n var snapTol = minSegLen / 10;\n return snapTol\n};\nGeometrySnapper.prototype.extractTargetCoordinates = function extractTargetCoordinates (g) {\n var ptSet = new TreeSet();\n var pts = g.getCoordinates();\n for (var i = 0; i < pts.length; i++) {\n ptSet.add(pts[i]);\n }\n return ptSet.toArray(new Array(0).fill(null))\n};\nGeometrySnapper.prototype.computeMinimumSegmentLength = function computeMinimumSegmentLength (pts) {\n var minSegLen = Double.MAX_VALUE;\n for (var i = 0; i < pts.length - 1; i++) {\n var segLen = pts[i].distance(pts[i + 1]);\n if (segLen < minSegLen) { minSegLen = segLen; }\n }\n return minSegLen\n};\nGeometrySnapper.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometrySnapper.prototype.getClass = function getClass () {\n return GeometrySnapper\n};\nGeometrySnapper.snap = function snap (g0, g1, snapTolerance) {\n var snapGeom = new Array(2).fill(null);\n var snapper0 = new GeometrySnapper(g0);\n snapGeom[0] = snapper0.snapTo(g1, snapTolerance);\n var snapper1 = new GeometrySnapper(g1);\n snapGeom[1] = snapper1.snapTo(snapGeom[0], snapTolerance);\n return snapGeom\n};\nGeometrySnapper.computeOverlaySnapTolerance = function computeOverlaySnapTolerance () {\n if (arguments.length === 1) {\n var g = arguments[0];\n var snapTolerance = GeometrySnapper.computeSizeBasedSnapTolerance(g);\n var pm = g.getPrecisionModel();\n if (pm.getType() === PrecisionModel.FIXED) {\n var fixedSnapTol = 1 / pm.getScale() * 2 / 1.415;\n if (fixedSnapTol > snapTolerance) { snapTolerance = fixedSnapTol; }\n }\n return snapTolerance\n } else if (arguments.length === 2) {\n var g0 = arguments[0];\n var g1 = arguments[1];\n return Math.min(GeometrySnapper.computeOverlaySnapTolerance(g0), GeometrySnapper.computeOverlaySnapTolerance(g1))\n }\n};\nGeometrySnapper.computeSizeBasedSnapTolerance = function computeSizeBasedSnapTolerance (g) {\n var env = g.getEnvelopeInternal();\n var minDimension = Math.min(env.getHeight(), env.getWidth());\n var snapTol = minDimension * GeometrySnapper.SNAP_PRECISION_FACTOR;\n return snapTol\n};\nGeometrySnapper.snapToSelf = function snapToSelf (geom, snapTolerance, cleanResult) {\n var snapper0 = new GeometrySnapper(geom);\n return snapper0.snapToSelf(snapTolerance, cleanResult)\n};\nstaticAccessors$41.SNAP_PRECISION_FACTOR.get = function () { return 1e-9 };\n\nObject.defineProperties( GeometrySnapper, staticAccessors$41 );\n\nvar SnapTransformer = (function (GeometryTransformer$$1) {\n function SnapTransformer (snapTolerance, snapPts, isSelfSnap) {\n GeometryTransformer$$1.call(this);\n this._snapTolerance = snapTolerance || null;\n this._snapPts = snapPts || null;\n this._isSelfSnap = (isSelfSnap !== undefined) ? isSelfSnap : false;\n }\n\n if ( GeometryTransformer$$1 ) SnapTransformer.__proto__ = GeometryTransformer$$1;\n SnapTransformer.prototype = Object.create( GeometryTransformer$$1 && GeometryTransformer$$1.prototype );\n SnapTransformer.prototype.constructor = SnapTransformer;\n SnapTransformer.prototype.snapLine = function snapLine (srcPts, snapPts) {\n var snapper = new LineStringSnapper(srcPts, this._snapTolerance);\n snapper.setAllowSnappingToSourceVertices(this._isSelfSnap);\n return snapper.snapTo(snapPts)\n };\n SnapTransformer.prototype.transformCoordinates = function transformCoordinates (coords, parent) {\n var srcPts = coords.toCoordinateArray();\n var newPts = this.snapLine(srcPts, this._snapPts);\n return this._factory.getCoordinateSequenceFactory().create(newPts)\n };\n SnapTransformer.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n SnapTransformer.prototype.getClass = function getClass () {\n return SnapTransformer\n };\n\n return SnapTransformer;\n}(GeometryTransformer));\n\nvar CommonBits = function CommonBits () {\n this._isFirst = true;\n this._commonMantissaBitsCount = 53;\n this._commonBits = 0;\n this._commonSignExp = null;\n};\nCommonBits.prototype.getCommon = function getCommon () {\n return Double.longBitsToDouble(this._commonBits)\n};\nCommonBits.prototype.add = function add (num) {\n var numBits = Double.doubleToLongBits(num);\n if (this._isFirst) {\n this._commonBits = numBits;\n this._commonSignExp = CommonBits.signExpBits(this._commonBits);\n this._isFirst = false;\n return null\n }\n var numSignExp = CommonBits.signExpBits(numBits);\n if (numSignExp !== this._commonSignExp) {\n this._commonBits = 0;\n return null\n }\n this._commonMantissaBitsCount = CommonBits.numCommonMostSigMantissaBits(this._commonBits, numBits);\n this._commonBits = CommonBits.zeroLowerBits(this._commonBits, 64 - (12 + this._commonMantissaBitsCount));\n};\nCommonBits.prototype.toString = function toString () {\n if (arguments.length === 1) {\n var bits = arguments[0];\n var x = Double.longBitsToDouble(bits);\n var numStr = Double.toBinaryString(bits);\n var padStr = '0000000000000000000000000000000000000000000000000000000000000000' + numStr;\n var bitStr = padStr.substring(padStr.length - 64);\n var str = bitStr.substring(0, 1) + ' ' + bitStr.substring(1, 12) + '(exp) ' + bitStr.substring(12) + ' [ ' + x + ' ]';\n return str\n }\n};\nCommonBits.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCommonBits.prototype.getClass = function getClass () {\n return CommonBits\n};\nCommonBits.getBit = function getBit (bits, i) {\n var mask = 1 << i;\n return (bits & mask) !== 0 ? 1 : 0\n};\nCommonBits.signExpBits = function signExpBits (num) {\n return num >> 52\n};\nCommonBits.zeroLowerBits = function zeroLowerBits (bits, nBits) {\n var invMask = (1 << nBits) - 1;\n var mask = ~invMask;\n var zeroed = bits & mask;\n return zeroed\n};\nCommonBits.numCommonMostSigMantissaBits = function numCommonMostSigMantissaBits (num1, num2) {\n var count = 0;\n for (var i = 52; i >= 0; i--) {\n if (CommonBits.getBit(num1, i) !== CommonBits.getBit(num2, i)) { return count }\n count++;\n }\n return 52\n};\n\nvar CommonBitsRemover = function CommonBitsRemover () {\n this._commonCoord = null;\n this._ccFilter = new CommonCoordinateFilter();\n};\n\nvar staticAccessors$42 = { CommonCoordinateFilter: { configurable: true },Translater: { configurable: true } };\nCommonBitsRemover.prototype.addCommonBits = function addCommonBits (geom) {\n var trans = new Translater(this._commonCoord);\n geom.apply(trans);\n geom.geometryChanged();\n};\nCommonBitsRemover.prototype.removeCommonBits = function removeCommonBits (geom) {\n if (this._commonCoord.x === 0.0 && this._commonCoord.y === 0.0) { return geom }\n var invCoord = new Coordinate(this._commonCoord);\n invCoord.x = -invCoord.x;\n invCoord.y = -invCoord.y;\n var trans = new Translater(invCoord);\n geom.apply(trans);\n geom.geometryChanged();\n return geom\n};\nCommonBitsRemover.prototype.getCommonCoordinate = function getCommonCoordinate () {\n return this._commonCoord\n};\nCommonBitsRemover.prototype.add = function add (geom) {\n geom.apply(this._ccFilter);\n this._commonCoord = this._ccFilter.getCommonCoordinate();\n};\nCommonBitsRemover.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCommonBitsRemover.prototype.getClass = function getClass () {\n return CommonBitsRemover\n};\nstaticAccessors$42.CommonCoordinateFilter.get = function () { return CommonCoordinateFilter };\nstaticAccessors$42.Translater.get = function () { return Translater };\n\nObject.defineProperties( CommonBitsRemover, staticAccessors$42 );\n\nvar CommonCoordinateFilter = function CommonCoordinateFilter () {\n this._commonBitsX = new CommonBits();\n this._commonBitsY = new CommonBits();\n};\nCommonCoordinateFilter.prototype.filter = function filter (coord) {\n this._commonBitsX.add(coord.x);\n this._commonBitsY.add(coord.y);\n};\nCommonCoordinateFilter.prototype.getCommonCoordinate = function getCommonCoordinate () {\n return new Coordinate(this._commonBitsX.getCommon(), this._commonBitsY.getCommon())\n};\nCommonCoordinateFilter.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateFilter]\n};\nCommonCoordinateFilter.prototype.getClass = function getClass () {\n return CommonCoordinateFilter\n};\n\nvar Translater = function Translater () {\n this.trans = null;\n var trans = arguments[0];\n this.trans = trans;\n};\nTranslater.prototype.filter = function filter (seq, i) {\n var xp = seq.getOrdinate(i, 0) + this.trans.x;\n var yp = seq.getOrdinate(i, 1) + this.trans.y;\n seq.setOrdinate(i, 0, xp);\n seq.setOrdinate(i, 1, yp);\n};\nTranslater.prototype.isDone = function isDone () {\n return false\n};\nTranslater.prototype.isGeometryChanged = function isGeometryChanged () {\n return true\n};\nTranslater.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateSequenceFilter]\n};\nTranslater.prototype.getClass = function getClass () {\n return Translater\n};\n\nvar SnapOverlayOp = function SnapOverlayOp (g1, g2) {\n this._geom = new Array(2).fill(null);\n this._snapTolerance = null;\n this._cbr = null;\n this._geom[0] = g1;\n this._geom[1] = g2;\n this.computeSnapTolerance();\n};\nSnapOverlayOp.prototype.selfSnap = function selfSnap (geom) {\n var snapper0 = new GeometrySnapper(geom);\n var snapGeom = snapper0.snapTo(geom, this._snapTolerance);\n return snapGeom\n};\nSnapOverlayOp.prototype.removeCommonBits = function removeCommonBits (geom) {\n this._cbr = new CommonBitsRemover();\n this._cbr.add(geom[0]);\n this._cbr.add(geom[1]);\n var remGeom = new Array(2).fill(null);\n remGeom[0] = this._cbr.removeCommonBits(geom[0].copy());\n remGeom[1] = this._cbr.removeCommonBits(geom[1].copy());\n return remGeom\n};\nSnapOverlayOp.prototype.prepareResult = function prepareResult (geom) {\n this._cbr.addCommonBits(geom);\n return geom\n};\nSnapOverlayOp.prototype.getResultGeometry = function getResultGeometry (opCode) {\n var prepGeom = this.snap(this._geom);\n var result = OverlayOp.overlayOp(prepGeom[0], prepGeom[1], opCode);\n return this.prepareResult(result)\n};\nSnapOverlayOp.prototype.checkValid = function checkValid (g) {\n if (!g.isValid()) {\n System.out.println('Snapped geometry is invalid');\n }\n};\nSnapOverlayOp.prototype.computeSnapTolerance = function computeSnapTolerance () {\n this._snapTolerance = GeometrySnapper.computeOverlaySnapTolerance(this._geom[0], this._geom[1]);\n};\nSnapOverlayOp.prototype.snap = function snap (geom) {\n var remGeom = this.removeCommonBits(geom);\n var snapGeom = GeometrySnapper.snap(remGeom[0], remGeom[1], this._snapTolerance);\n return snapGeom\n};\nSnapOverlayOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSnapOverlayOp.prototype.getClass = function getClass () {\n return SnapOverlayOp\n};\nSnapOverlayOp.overlayOp = function overlayOp (g0, g1, opCode) {\n var op = new SnapOverlayOp(g0, g1);\n return op.getResultGeometry(opCode)\n};\nSnapOverlayOp.union = function union (g0, g1) {\n return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)\n};\nSnapOverlayOp.intersection = function intersection (g0, g1) {\n return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)\n};\nSnapOverlayOp.symDifference = function symDifference (g0, g1) {\n return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)\n};\nSnapOverlayOp.difference = function difference (g0, g1) {\n return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)\n};\n\nvar SnapIfNeededOverlayOp = function SnapIfNeededOverlayOp (g1, g2) {\n this._geom = new Array(2).fill(null);\n this._geom[0] = g1;\n this._geom[1] = g2;\n};\nSnapIfNeededOverlayOp.prototype.getResultGeometry = function getResultGeometry (opCode) {\n var result = null;\n var isSuccess = false;\n var savedException = null;\n try {\n result = OverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);\n var isValid = true;\n if (isValid) { isSuccess = true; }\n } catch (ex) {\n if (ex instanceof RuntimeException) {\n savedException = ex;\n } else { throw ex }\n } finally {}\n if (!isSuccess) {\n try {\n result = SnapOverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);\n } catch (ex) {\n if (ex instanceof RuntimeException) {\n throw savedException\n } else { throw ex }\n } finally {}\n }\n return result\n};\nSnapIfNeededOverlayOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSnapIfNeededOverlayOp.prototype.getClass = function getClass () {\n return SnapIfNeededOverlayOp\n};\nSnapIfNeededOverlayOp.overlayOp = function overlayOp (g0, g1, opCode) {\n var op = new SnapIfNeededOverlayOp(g0, g1);\n return op.getResultGeometry(opCode)\n};\nSnapIfNeededOverlayOp.union = function union (g0, g1) {\n return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)\n};\nSnapIfNeededOverlayOp.intersection = function intersection (g0, g1) {\n return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)\n};\nSnapIfNeededOverlayOp.symDifference = function symDifference (g0, g1) {\n return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)\n};\nSnapIfNeededOverlayOp.difference = function difference (g0, g1) {\n return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)\n};\n\nvar MonotoneChain$2 = function MonotoneChain () {\n this.mce = null;\n this.chainIndex = null;\n var mce = arguments[0];\n var chainIndex = arguments[1];\n this.mce = mce;\n this.chainIndex = chainIndex;\n};\nMonotoneChain$2.prototype.computeIntersections = function computeIntersections (mc, si) {\n this.mce.computeIntersectsForChain(this.chainIndex, mc.mce, mc.chainIndex, si);\n};\nMonotoneChain$2.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChain$2.prototype.getClass = function getClass () {\n return MonotoneChain$2\n};\n\nvar SweepLineEvent = function SweepLineEvent () {\n this._label = null;\n this._xValue = null;\n this._eventType = null;\n this._insertEvent = null;\n this._deleteEventIndex = null;\n this._obj = null;\n if (arguments.length === 2) {\n var x = arguments[0];\n var insertEvent = arguments[1];\n this._eventType = SweepLineEvent.DELETE;\n this._xValue = x;\n this._insertEvent = insertEvent;\n } else if (arguments.length === 3) {\n var label = arguments[0];\n var x$1 = arguments[1];\n var obj = arguments[2];\n this._eventType = SweepLineEvent.INSERT;\n this._label = label;\n this._xValue = x$1;\n this._obj = obj;\n }\n};\n\nvar staticAccessors$43 = { INSERT: { configurable: true },DELETE: { configurable: true } };\nSweepLineEvent.prototype.isDelete = function isDelete () {\n return this._eventType === SweepLineEvent.DELETE\n};\nSweepLineEvent.prototype.setDeleteEventIndex = function setDeleteEventIndex (deleteEventIndex) {\n this._deleteEventIndex = deleteEventIndex;\n};\nSweepLineEvent.prototype.getObject = function getObject () {\n return this._obj\n};\nSweepLineEvent.prototype.compareTo = function compareTo (o) {\n var pe = o;\n if (this._xValue < pe._xValue) { return -1 }\n if (this._xValue > pe._xValue) { return 1 }\n if (this._eventType < pe._eventType) { return -1 }\n if (this._eventType > pe._eventType) { return 1 }\n return 0\n};\nSweepLineEvent.prototype.getInsertEvent = function getInsertEvent () {\n return this._insertEvent\n};\nSweepLineEvent.prototype.isInsert = function isInsert () {\n return this._eventType === SweepLineEvent.INSERT\n};\nSweepLineEvent.prototype.isSameLabel = function isSameLabel (ev) {\n if (this._label === null) { return false }\n return this._label === ev._label\n};\nSweepLineEvent.prototype.getDeleteEventIndex = function getDeleteEventIndex () {\n return this._deleteEventIndex\n};\nSweepLineEvent.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nSweepLineEvent.prototype.getClass = function getClass () {\n return SweepLineEvent\n};\nstaticAccessors$43.INSERT.get = function () { return 1 };\nstaticAccessors$43.DELETE.get = function () { return 2 };\n\nObject.defineProperties( SweepLineEvent, staticAccessors$43 );\n\nvar EdgeSetIntersector = function EdgeSetIntersector () {};\n\nEdgeSetIntersector.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nEdgeSetIntersector.prototype.getClass = function getClass () {\n return EdgeSetIntersector\n};\n\nvar SegmentIntersector$2 = function SegmentIntersector () {\n this._hasIntersection = false;\n this._hasProper = false;\n this._hasProperInterior = false;\n this._properIntersectionPoint = null;\n this._li = null;\n this._includeProper = null;\n this._recordIsolated = null;\n this._isSelfIntersection = null;\n this._numIntersections = 0;\n this.numTests = 0;\n this._bdyNodes = null;\n this._isDone = false;\n this._isDoneWhenProperInt = false;\n var li = arguments[0];\n var includeProper = arguments[1];\n var recordIsolated = arguments[2];\n this._li = li;\n this._includeProper = includeProper;\n this._recordIsolated = recordIsolated;\n};\nSegmentIntersector$2.prototype.isTrivialIntersection = function isTrivialIntersection (e0, segIndex0, e1, segIndex1) {\n if (e0 === e1) {\n if (this._li.getIntersectionNum() === 1) {\n if (SegmentIntersector$2.isAdjacentSegments(segIndex0, segIndex1)) { return true }\n if (e0.isClosed()) {\n var maxSegIndex = e0.getNumPoints() - 1;\n if ((segIndex0 === 0 && segIndex1 === maxSegIndex) ||\n (segIndex1 === 0 && segIndex0 === maxSegIndex)) {\n return true\n }\n }\n }\n }\n return false\n};\nSegmentIntersector$2.prototype.getProperIntersectionPoint = function getProperIntersectionPoint () {\n return this._properIntersectionPoint\n};\nSegmentIntersector$2.prototype.setIsDoneIfProperInt = function setIsDoneIfProperInt (isDoneWhenProperInt) {\n this._isDoneWhenProperInt = isDoneWhenProperInt;\n};\nSegmentIntersector$2.prototype.hasProperInteriorIntersection = function hasProperInteriorIntersection () {\n return this._hasProperInterior\n};\nSegmentIntersector$2.prototype.isBoundaryPointInternal = function isBoundaryPointInternal (li, bdyNodes) {\n for (var i = bdyNodes.iterator(); i.hasNext();) {\n var node = i.next();\n var pt = node.getCoordinate();\n if (li.isIntersection(pt)) { return true }\n }\n return false\n};\nSegmentIntersector$2.prototype.hasProperIntersection = function hasProperIntersection () {\n return this._hasProper\n};\nSegmentIntersector$2.prototype.hasIntersection = function hasIntersection () {\n return this._hasIntersection\n};\nSegmentIntersector$2.prototype.isDone = function isDone () {\n return this._isDone\n};\nSegmentIntersector$2.prototype.isBoundaryPoint = function isBoundaryPoint (li, bdyNodes) {\n if (bdyNodes === null) { return false }\n if (this.isBoundaryPointInternal(li, bdyNodes[0])) { return true }\n if (this.isBoundaryPointInternal(li, bdyNodes[1])) { return true }\n return false\n};\nSegmentIntersector$2.prototype.setBoundaryNodes = function setBoundaryNodes (bdyNodes0, bdyNodes1) {\n this._bdyNodes = new Array(2).fill(null);\n this._bdyNodes[0] = bdyNodes0;\n this._bdyNodes[1] = bdyNodes1;\n};\nSegmentIntersector$2.prototype.addIntersections = function addIntersections (e0, segIndex0, e1, segIndex1) {\n if (e0 === e1 && segIndex0 === segIndex1) { return null }\n this.numTests++;\n var p00 = e0.getCoordinates()[segIndex0];\n var p01 = e0.getCoordinates()[segIndex0 + 1];\n var p10 = e1.getCoordinates()[segIndex1];\n var p11 = e1.getCoordinates()[segIndex1 + 1];\n this._li.computeIntersection(p00, p01, p10, p11);\n if (this._li.hasIntersection()) {\n if (this._recordIsolated) {\n e0.setIsolated(false);\n e1.setIsolated(false);\n }\n this._numIntersections++;\n if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {\n this._hasIntersection = true;\n if (this._includeProper || !this._li.isProper()) {\n e0.addIntersections(this._li, segIndex0, 0);\n e1.addIntersections(this._li, segIndex1, 1);\n }\n if (this._li.isProper()) {\n this._properIntersectionPoint = this._li.getIntersection(0).copy();\n this._hasProper = true;\n if (this._isDoneWhenProperInt) {\n this._isDone = true;\n }\n if (!this.isBoundaryPoint(this._li, this._bdyNodes)) { this._hasProperInterior = true; }\n }\n }\n }\n};\nSegmentIntersector$2.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSegmentIntersector$2.prototype.getClass = function getClass () {\n return SegmentIntersector$2\n};\nSegmentIntersector$2.isAdjacentSegments = function isAdjacentSegments (i1, i2) {\n return Math.abs(i1 - i2) === 1\n};\n\nvar SimpleMCSweepLineIntersector = (function (EdgeSetIntersector$$1) {\n function SimpleMCSweepLineIntersector () {\n EdgeSetIntersector$$1.call(this);\n this.events = new ArrayList();\n this.nOverlaps = null;\n }\n\n if ( EdgeSetIntersector$$1 ) SimpleMCSweepLineIntersector.__proto__ = EdgeSetIntersector$$1;\n SimpleMCSweepLineIntersector.prototype = Object.create( EdgeSetIntersector$$1 && EdgeSetIntersector$$1.prototype );\n SimpleMCSweepLineIntersector.prototype.constructor = SimpleMCSweepLineIntersector;\n SimpleMCSweepLineIntersector.prototype.prepareEvents = function prepareEvents () {\n var this$1 = this;\n\n Collections.sort(this.events);\n for (var i = 0; i < this.events.size(); i++) {\n var ev = this$1.events.get(i);\n if (ev.isDelete()) {\n ev.getInsertEvent().setDeleteEventIndex(i);\n }\n }\n };\n SimpleMCSweepLineIntersector.prototype.computeIntersections = function computeIntersections () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var si = arguments[0];\n this.nOverlaps = 0;\n this.prepareEvents();\n for (var i = 0; i < this.events.size(); i++) {\n var ev = this$1.events.get(i);\n if (ev.isInsert()) {\n this$1.processOverlaps(i, ev.getDeleteEventIndex(), ev, si);\n }\n if (si.isDone()) {\n break\n }\n }\n } else if (arguments.length === 3) {\n if (arguments[2] instanceof SegmentIntersector$2 && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {\n var edges0 = arguments[0];\n var edges1 = arguments[1];\n var si$1 = arguments[2];\n this.addEdges(edges0, edges0);\n this.addEdges(edges1, edges1);\n this.computeIntersections(si$1);\n } else if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], List) && arguments[1] instanceof SegmentIntersector$2)) {\n var edges = arguments[0];\n var si$2 = arguments[1];\n var testAllSegments = arguments[2];\n if (testAllSegments) { this.addEdges(edges, null); } else { this.addEdges(edges); }\n this.computeIntersections(si$2);\n }\n }\n };\n SimpleMCSweepLineIntersector.prototype.addEdge = function addEdge (edge, edgeSet) {\n var this$1 = this;\n\n var mce = edge.getMonotoneChainEdge();\n var startIndex = mce.getStartIndexes();\n for (var i = 0; i < startIndex.length - 1; i++) {\n var mc = new MonotoneChain$2(mce, i);\n var insertEvent = new SweepLineEvent(edgeSet, mce.getMinX(i), mc);\n this$1.events.add(insertEvent);\n this$1.events.add(new SweepLineEvent(mce.getMaxX(i), insertEvent));\n }\n };\n SimpleMCSweepLineIntersector.prototype.processOverlaps = function processOverlaps (start, end, ev0, si) {\n var this$1 = this;\n\n var mc0 = ev0.getObject();\n for (var i = start; i < end; i++) {\n var ev1 = this$1.events.get(i);\n if (ev1.isInsert()) {\n var mc1 = ev1.getObject();\n if (!ev0.isSameLabel(ev1)) {\n mc0.computeIntersections(mc1, si);\n this$1.nOverlaps++;\n }\n }\n }\n };\n SimpleMCSweepLineIntersector.prototype.addEdges = function addEdges () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var edges = arguments[0];\n for (var i = edges.iterator(); i.hasNext();) {\n var edge = i.next();\n this$1.addEdge(edge, edge);\n }\n } else if (arguments.length === 2) {\n var edges$1 = arguments[0];\n var edgeSet = arguments[1];\n for (var i$1 = edges$1.iterator(); i$1.hasNext();) {\n var edge$1 = i$1.next();\n this$1.addEdge(edge$1, edgeSet);\n }\n }\n };\n SimpleMCSweepLineIntersector.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n SimpleMCSweepLineIntersector.prototype.getClass = function getClass () {\n return SimpleMCSweepLineIntersector\n };\n\n return SimpleMCSweepLineIntersector;\n}(EdgeSetIntersector));\n\nvar IntervalRTreeNode = function IntervalRTreeNode () {\n this._min = Double.POSITIVE_INFINITY;\n this._max = Double.NEGATIVE_INFINITY;\n};\n\nvar staticAccessors$45 = { NodeComparator: { configurable: true } };\nIntervalRTreeNode.prototype.getMin = function getMin () {\n return this._min\n};\nIntervalRTreeNode.prototype.intersects = function intersects (queryMin, queryMax) {\n if (this._min > queryMax || this._max < queryMin) { return false }\n return true\n};\nIntervalRTreeNode.prototype.getMax = function getMax () {\n return this._max\n};\nIntervalRTreeNode.prototype.toString = function toString () {\n return WKTWriter.toLineString(new Coordinate(this._min, 0), new Coordinate(this._max, 0))\n};\nIntervalRTreeNode.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nIntervalRTreeNode.prototype.getClass = function getClass () {\n return IntervalRTreeNode\n};\nstaticAccessors$45.NodeComparator.get = function () { return NodeComparator };\n\nObject.defineProperties( IntervalRTreeNode, staticAccessors$45 );\n\nvar NodeComparator = function NodeComparator () {};\n\nNodeComparator.prototype.compare = function compare (o1, o2) {\n var n1 = o1;\n var n2 = o2;\n var mid1 = (n1._min + n1._max) / 2;\n var mid2 = (n2._min + n2._max) / 2;\n if (mid1 < mid2) { return -1 }\n if (mid1 > mid2) { return 1 }\n return 0\n};\nNodeComparator.prototype.interfaces_ = function interfaces_ () {\n return [Comparator]\n};\nNodeComparator.prototype.getClass = function getClass () {\n return NodeComparator\n};\n\nvar IntervalRTreeLeafNode = (function (IntervalRTreeNode$$1) {\n function IntervalRTreeLeafNode () {\n IntervalRTreeNode$$1.call(this);\n this._item = null;\n var min = arguments[0];\n var max = arguments[1];\n var item = arguments[2];\n this._min = min;\n this._max = max;\n this._item = item;\n }\n\n if ( IntervalRTreeNode$$1 ) IntervalRTreeLeafNode.__proto__ = IntervalRTreeNode$$1;\n IntervalRTreeLeafNode.prototype = Object.create( IntervalRTreeNode$$1 && IntervalRTreeNode$$1.prototype );\n IntervalRTreeLeafNode.prototype.constructor = IntervalRTreeLeafNode;\n IntervalRTreeLeafNode.prototype.query = function query (queryMin, queryMax, visitor) {\n if (!this.intersects(queryMin, queryMax)) { return null }\n visitor.visitItem(this._item);\n };\n IntervalRTreeLeafNode.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n IntervalRTreeLeafNode.prototype.getClass = function getClass () {\n return IntervalRTreeLeafNode\n };\n\n return IntervalRTreeLeafNode;\n}(IntervalRTreeNode));\n\nvar IntervalRTreeBranchNode = (function (IntervalRTreeNode$$1) {\n function IntervalRTreeBranchNode () {\n IntervalRTreeNode$$1.call(this);\n this._node1 = null;\n this._node2 = null;\n var n1 = arguments[0];\n var n2 = arguments[1];\n this._node1 = n1;\n this._node2 = n2;\n this.buildExtent(this._node1, this._node2);\n }\n\n if ( IntervalRTreeNode$$1 ) IntervalRTreeBranchNode.__proto__ = IntervalRTreeNode$$1;\n IntervalRTreeBranchNode.prototype = Object.create( IntervalRTreeNode$$1 && IntervalRTreeNode$$1.prototype );\n IntervalRTreeBranchNode.prototype.constructor = IntervalRTreeBranchNode;\n IntervalRTreeBranchNode.prototype.buildExtent = function buildExtent (n1, n2) {\n this._min = Math.min(n1._min, n2._min);\n this._max = Math.max(n1._max, n2._max);\n };\n IntervalRTreeBranchNode.prototype.query = function query (queryMin, queryMax, visitor) {\n if (!this.intersects(queryMin, queryMax)) {\n return null\n }\n if (this._node1 !== null) { this._node1.query(queryMin, queryMax, visitor); }\n if (this._node2 !== null) { this._node2.query(queryMin, queryMax, visitor); }\n };\n IntervalRTreeBranchNode.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n IntervalRTreeBranchNode.prototype.getClass = function getClass () {\n return IntervalRTreeBranchNode\n };\n\n return IntervalRTreeBranchNode;\n}(IntervalRTreeNode));\n\nvar SortedPackedIntervalRTree = function SortedPackedIntervalRTree () {\n this._leaves = new ArrayList();\n this._root = null;\n this._level = 0;\n};\nSortedPackedIntervalRTree.prototype.buildTree = function buildTree () {\n var this$1 = this;\n\n Collections.sort(this._leaves, new IntervalRTreeNode.NodeComparator());\n var src = this._leaves;\n var temp = null;\n var dest = new ArrayList();\n while (true) {\n this$1.buildLevel(src, dest);\n if (dest.size() === 1) { return dest.get(0) }\n temp = src;\n src = dest;\n dest = temp;\n }\n};\nSortedPackedIntervalRTree.prototype.insert = function insert (min, max, item) {\n if (this._root !== null) { throw new Error('Index cannot be added to once it has been queried') }\n this._leaves.add(new IntervalRTreeLeafNode(min, max, item));\n};\nSortedPackedIntervalRTree.prototype.query = function query (min, max, visitor) {\n this.init();\n this._root.query(min, max, visitor);\n};\nSortedPackedIntervalRTree.prototype.buildRoot = function buildRoot () {\n if (this._root !== null) { return null }\n this._root = this.buildTree();\n};\nSortedPackedIntervalRTree.prototype.printNode = function printNode (node) {\n System.out.println(WKTWriter.toLineString(new Coordinate(node._min, this._level), new Coordinate(node._max, this._level)));\n};\nSortedPackedIntervalRTree.prototype.init = function init () {\n if (this._root !== null) { return null }\n this.buildRoot();\n};\nSortedPackedIntervalRTree.prototype.buildLevel = function buildLevel (src, dest) {\n this._level++;\n dest.clear();\n for (var i = 0; i < src.size(); i += 2) {\n var n1 = src.get(i);\n var n2 = i + 1 < src.size() ? src.get(i) : null;\n if (n2 === null) {\n dest.add(n1);\n } else {\n var node = new IntervalRTreeBranchNode(src.get(i), src.get(i + 1));\n dest.add(node);\n }\n }\n};\nSortedPackedIntervalRTree.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSortedPackedIntervalRTree.prototype.getClass = function getClass () {\n return SortedPackedIntervalRTree\n};\n\nvar ArrayListVisitor = function ArrayListVisitor () {\n this._items = new ArrayList();\n};\nArrayListVisitor.prototype.visitItem = function visitItem (item) {\n this._items.add(item);\n};\nArrayListVisitor.prototype.getItems = function getItems () {\n return this._items\n};\nArrayListVisitor.prototype.interfaces_ = function interfaces_ () {\n return [ItemVisitor]\n};\nArrayListVisitor.prototype.getClass = function getClass () {\n return ArrayListVisitor\n};\n\nvar IndexedPointInAreaLocator = function IndexedPointInAreaLocator () {\n this._index = null;\n var g = arguments[0];\n if (!hasInterface(g, Polygonal)) { throw new IllegalArgumentException('Argument must be Polygonal') }\n this._index = new IntervalIndexedGeometry(g);\n};\n\nvar staticAccessors$44 = { SegmentVisitor: { configurable: true },IntervalIndexedGeometry: { configurable: true } };\nIndexedPointInAreaLocator.prototype.locate = function locate (p) {\n var rcc = new RayCrossingCounter(p);\n var visitor = new SegmentVisitor(rcc);\n this._index.query(p.y, p.y, visitor);\n return rcc.getLocation()\n};\nIndexedPointInAreaLocator.prototype.interfaces_ = function interfaces_ () {\n return [PointOnGeometryLocator]\n};\nIndexedPointInAreaLocator.prototype.getClass = function getClass () {\n return IndexedPointInAreaLocator\n};\nstaticAccessors$44.SegmentVisitor.get = function () { return SegmentVisitor };\nstaticAccessors$44.IntervalIndexedGeometry.get = function () { return IntervalIndexedGeometry };\n\nObject.defineProperties( IndexedPointInAreaLocator, staticAccessors$44 );\n\nvar SegmentVisitor = function SegmentVisitor () {\n this._counter = null;\n var counter = arguments[0];\n this._counter = counter;\n};\nSegmentVisitor.prototype.visitItem = function visitItem (item) {\n var seg = item;\n this._counter.countSegment(seg.getCoordinate(0), seg.getCoordinate(1));\n};\nSegmentVisitor.prototype.interfaces_ = function interfaces_ () {\n return [ItemVisitor]\n};\nSegmentVisitor.prototype.getClass = function getClass () {\n return SegmentVisitor\n};\n\nvar IntervalIndexedGeometry = function IntervalIndexedGeometry () {\n this._index = new SortedPackedIntervalRTree();\n var geom = arguments[0];\n this.init(geom);\n};\nIntervalIndexedGeometry.prototype.init = function init (geom) {\n var this$1 = this;\n\n var lines = LinearComponentExtracter.getLines(geom);\n for (var i = lines.iterator(); i.hasNext();) {\n var line = i.next();\n var pts = line.getCoordinates();\n this$1.addLine(pts);\n }\n};\nIntervalIndexedGeometry.prototype.addLine = function addLine (pts) {\n var this$1 = this;\n\n for (var i = 1; i < pts.length; i++) {\n var seg = new LineSegment(pts[i - 1], pts[i]);\n var min = Math.min(seg.p0.y, seg.p1.y);\n var max = Math.max(seg.p0.y, seg.p1.y);\n this$1._index.insert(min, max, seg);\n }\n};\nIntervalIndexedGeometry.prototype.query = function query () {\n if (arguments.length === 2) {\n var min = arguments[0];\n var max = arguments[1];\n var visitor = new ArrayListVisitor();\n this._index.query(min, max, visitor);\n return visitor.getItems()\n } else if (arguments.length === 3) {\n var min$1 = arguments[0];\n var max$1 = arguments[1];\n var visitor$1 = arguments[2];\n this._index.query(min$1, max$1, visitor$1);\n }\n};\nIntervalIndexedGeometry.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nIntervalIndexedGeometry.prototype.getClass = function getClass () {\n return IntervalIndexedGeometry\n};\n\nvar GeometryGraph = (function (PlanarGraph$$1) {\n function GeometryGraph () {\n PlanarGraph$$1.call(this);\n this._parentGeom = null;\n this._lineEdgeMap = new HashMap();\n this._boundaryNodeRule = null;\n this._useBoundaryDeterminationRule = true;\n this._argIndex = null;\n this._boundaryNodes = null;\n this._hasTooFewPoints = false;\n this._invalidPoint = null;\n this._areaPtLocator = null;\n this._ptLocator = new PointLocator();\n if (arguments.length === 2) {\n var argIndex = arguments[0];\n var parentGeom = arguments[1];\n var boundaryNodeRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;\n this._argIndex = argIndex;\n this._parentGeom = parentGeom;\n this._boundaryNodeRule = boundaryNodeRule;\n if (parentGeom !== null) {\n this.add(parentGeom);\n }\n } else if (arguments.length === 3) {\n var argIndex$1 = arguments[0];\n var parentGeom$1 = arguments[1];\n var boundaryNodeRule$1 = arguments[2];\n this._argIndex = argIndex$1;\n this._parentGeom = parentGeom$1;\n this._boundaryNodeRule = boundaryNodeRule$1;\n if (parentGeom$1 !== null) {\n this.add(parentGeom$1);\n }\n }\n }\n\n if ( PlanarGraph$$1 ) GeometryGraph.__proto__ = PlanarGraph$$1;\n GeometryGraph.prototype = Object.create( PlanarGraph$$1 && PlanarGraph$$1.prototype );\n GeometryGraph.prototype.constructor = GeometryGraph;\n GeometryGraph.prototype.insertBoundaryPoint = function insertBoundaryPoint (argIndex, coord) {\n var n = this._nodes.addNode(coord);\n var lbl = n.getLabel();\n var boundaryCount = 1;\n var loc = Location.NONE;\n loc = lbl.getLocation(argIndex, Position.ON);\n if (loc === Location.BOUNDARY) { boundaryCount++; }\n var newLoc = GeometryGraph.determineBoundary(this._boundaryNodeRule, boundaryCount);\n lbl.setLocation(argIndex, newLoc);\n };\n GeometryGraph.prototype.computeSelfNodes = function computeSelfNodes () {\n if (arguments.length === 2) {\n var li = arguments[0];\n var computeRingSelfNodes = arguments[1];\n return this.computeSelfNodes(li, computeRingSelfNodes, false)\n } else if (arguments.length === 3) {\n var li$1 = arguments[0];\n var computeRingSelfNodes$1 = arguments[1];\n var isDoneIfProperInt = arguments[2];\n var si = new SegmentIntersector$2(li$1, true, false);\n si.setIsDoneIfProperInt(isDoneIfProperInt);\n var esi = this.createEdgeSetIntersector();\n var isRings = this._parentGeom instanceof LinearRing || this._parentGeom instanceof Polygon || this._parentGeom instanceof MultiPolygon;\n var computeAllSegments = computeRingSelfNodes$1 || !isRings;\n esi.computeIntersections(this._edges, si, computeAllSegments);\n this.addSelfIntersectionNodes(this._argIndex);\n return si\n }\n };\n GeometryGraph.prototype.computeSplitEdges = function computeSplitEdges (edgelist) {\n for (var i = this._edges.iterator(); i.hasNext();) {\n var e = i.next();\n e.eiList.addSplitEdges(edgelist);\n }\n };\n GeometryGraph.prototype.computeEdgeIntersections = function computeEdgeIntersections (g, li, includeProper) {\n var si = new SegmentIntersector$2(li, includeProper, true);\n si.setBoundaryNodes(this.getBoundaryNodes(), g.getBoundaryNodes());\n var esi = this.createEdgeSetIntersector();\n esi.computeIntersections(this._edges, g._edges, si);\n return si\n };\n GeometryGraph.prototype.getGeometry = function getGeometry () {\n return this._parentGeom\n };\n GeometryGraph.prototype.getBoundaryNodeRule = function getBoundaryNodeRule () {\n return this._boundaryNodeRule\n };\n GeometryGraph.prototype.hasTooFewPoints = function hasTooFewPoints () {\n return this._hasTooFewPoints\n };\n GeometryGraph.prototype.addPoint = function addPoint () {\n if (arguments[0] instanceof Point) {\n var p = arguments[0];\n var coord = p.getCoordinate();\n this.insertPoint(this._argIndex, coord, Location.INTERIOR);\n } else if (arguments[0] instanceof Coordinate) {\n var pt = arguments[0];\n this.insertPoint(this._argIndex, pt, Location.INTERIOR);\n }\n };\n GeometryGraph.prototype.addPolygon = function addPolygon (p) {\n var this$1 = this;\n\n this.addPolygonRing(p.getExteriorRing(), Location.EXTERIOR, Location.INTERIOR);\n for (var i = 0; i < p.getNumInteriorRing(); i++) {\n var hole = p.getInteriorRingN(i);\n this$1.addPolygonRing(hole, Location.INTERIOR, Location.EXTERIOR);\n }\n };\n GeometryGraph.prototype.addEdge = function addEdge (e) {\n this.insertEdge(e);\n var coord = e.getCoordinates();\n this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY);\n this.insertPoint(this._argIndex, coord[coord.length - 1], Location.BOUNDARY);\n };\n GeometryGraph.prototype.addLineString = function addLineString (line) {\n var coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());\n if (coord.length < 2) {\n this._hasTooFewPoints = true;\n this._invalidPoint = coord[0];\n return null\n }\n var e = new Edge(coord, new Label(this._argIndex, Location.INTERIOR));\n this._lineEdgeMap.put(line, e);\n this.insertEdge(e);\n Assert.isTrue(coord.length >= 2, 'found LineString with single point');\n this.insertBoundaryPoint(this._argIndex, coord[0]);\n this.insertBoundaryPoint(this._argIndex, coord[coord.length - 1]);\n };\n GeometryGraph.prototype.getInvalidPoint = function getInvalidPoint () {\n return this._invalidPoint\n };\n GeometryGraph.prototype.getBoundaryPoints = function getBoundaryPoints () {\n var coll = this.getBoundaryNodes();\n var pts = new Array(coll.size()).fill(null);\n var i = 0;\n for (var it = coll.iterator(); it.hasNext();) {\n var node = it.next();\n pts[i++] = node.getCoordinate().copy();\n }\n return pts\n };\n GeometryGraph.prototype.getBoundaryNodes = function getBoundaryNodes () {\n if (this._boundaryNodes === null) { this._boundaryNodes = this._nodes.getBoundaryNodes(this._argIndex); }\n return this._boundaryNodes\n };\n GeometryGraph.prototype.addSelfIntersectionNode = function addSelfIntersectionNode (argIndex, coord, loc) {\n if (this.isBoundaryNode(argIndex, coord)) { return null }\n if (loc === Location.BOUNDARY && this._useBoundaryDeterminationRule) { this.insertBoundaryPoint(argIndex, coord); } else { this.insertPoint(argIndex, coord, loc); }\n };\n GeometryGraph.prototype.addPolygonRing = function addPolygonRing (lr, cwLeft, cwRight) {\n if (lr.isEmpty()) { return null }\n var coord = CoordinateArrays.removeRepeatedPoints(lr.getCoordinates());\n if (coord.length < 4) {\n this._hasTooFewPoints = true;\n this._invalidPoint = coord[0];\n return null\n }\n var left = cwLeft;\n var right = cwRight;\n if (CGAlgorithms.isCCW(coord)) {\n left = cwRight;\n right = cwLeft;\n }\n var e = new Edge(coord, new Label(this._argIndex, Location.BOUNDARY, left, right));\n this._lineEdgeMap.put(lr, e);\n this.insertEdge(e);\n this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY);\n };\n GeometryGraph.prototype.insertPoint = function insertPoint (argIndex, coord, onLocation) {\n var n = this._nodes.addNode(coord);\n var lbl = n.getLabel();\n if (lbl === null) {\n n._label = new Label(argIndex, onLocation);\n } else { lbl.setLocation(argIndex, onLocation); }\n };\n GeometryGraph.prototype.createEdgeSetIntersector = function createEdgeSetIntersector () {\n return new SimpleMCSweepLineIntersector()\n };\n GeometryGraph.prototype.addSelfIntersectionNodes = function addSelfIntersectionNodes (argIndex) {\n var this$1 = this;\n\n for (var i = this._edges.iterator(); i.hasNext();) {\n var e = i.next();\n var eLoc = e.getLabel().getLocation(argIndex);\n for (var eiIt = e.eiList.iterator(); eiIt.hasNext();) {\n var ei = eiIt.next();\n this$1.addSelfIntersectionNode(argIndex, ei.coord, eLoc);\n }\n }\n };\n GeometryGraph.prototype.add = function add () {\n if (arguments.length === 1) {\n var g = arguments[0];\n if (g.isEmpty()) { return null }\n if (g instanceof MultiPolygon) { this._useBoundaryDeterminationRule = false; }\n if (g instanceof Polygon) { this.addPolygon(g); }\n else if (g instanceof LineString) { this.addLineString(g); }\n else if (g instanceof Point) { this.addPoint(g); }\n else if (g instanceof MultiPoint) { this.addCollection(g); }\n else if (g instanceof MultiLineString) { this.addCollection(g); }\n else if (g instanceof MultiPolygon) { this.addCollection(g); }\n else if (g instanceof GeometryCollection) { this.addCollection(g); }\n else { throw new Error(g.getClass().getName()) }\n } else { return PlanarGraph$$1.prototype.add.apply(this, arguments) }\n };\n GeometryGraph.prototype.addCollection = function addCollection (gc) {\n var this$1 = this;\n\n for (var i = 0; i < gc.getNumGeometries(); i++) {\n var g = gc.getGeometryN(i);\n this$1.add(g);\n }\n };\n GeometryGraph.prototype.locate = function locate (pt) {\n if (hasInterface(this._parentGeom, Polygonal) && this._parentGeom.getNumGeometries() > 50) {\n if (this._areaPtLocator === null) {\n this._areaPtLocator = new IndexedPointInAreaLocator(this._parentGeom);\n }\n return this._areaPtLocator.locate(pt)\n }\n return this._ptLocator.locate(pt, this._parentGeom)\n };\n GeometryGraph.prototype.findEdge = function findEdge () {\n if (arguments.length === 1) {\n var line = arguments[0];\n return this._lineEdgeMap.get(line)\n } else { return PlanarGraph$$1.prototype.findEdge.apply(this, arguments) }\n };\n GeometryGraph.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n GeometryGraph.prototype.getClass = function getClass () {\n return GeometryGraph\n };\n GeometryGraph.determineBoundary = function determineBoundary (boundaryNodeRule, boundaryCount) {\n return boundaryNodeRule.isInBoundary(boundaryCount) ? Location.BOUNDARY : Location.INTERIOR\n };\n\n return GeometryGraph;\n}(PlanarGraph));\n\nvar GeometryGraphOp = function GeometryGraphOp () {\n this._li = new RobustLineIntersector();\n this._resultPrecisionModel = null;\n this._arg = null;\n if (arguments.length === 1) {\n var g0 = arguments[0];\n this.setComputationPrecision(g0.getPrecisionModel());\n this._arg = new Array(1).fill(null);\n this._arg[0] = new GeometryGraph(0, g0);\n } else if (arguments.length === 2) {\n var g0$1 = arguments[0];\n var g1 = arguments[1];\n var boundaryNodeRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;\n if (g0$1.getPrecisionModel().compareTo(g1.getPrecisionModel()) >= 0) { this.setComputationPrecision(g0$1.getPrecisionModel()); } else { this.setComputationPrecision(g1.getPrecisionModel()); }\n this._arg = new Array(2).fill(null);\n this._arg[0] = new GeometryGraph(0, g0$1, boundaryNodeRule);\n this._arg[1] = new GeometryGraph(1, g1, boundaryNodeRule);\n } else if (arguments.length === 3) {\n var g0$2 = arguments[0];\n var g1$1 = arguments[1];\n var boundaryNodeRule$1 = arguments[2];\n if (g0$2.getPrecisionModel().compareTo(g1$1.getPrecisionModel()) >= 0) { this.setComputationPrecision(g0$2.getPrecisionModel()); } else { this.setComputationPrecision(g1$1.getPrecisionModel()); }\n this._arg = new Array(2).fill(null);\n this._arg[0] = new GeometryGraph(0, g0$2, boundaryNodeRule$1);\n this._arg[1] = new GeometryGraph(1, g1$1, boundaryNodeRule$1);\n }\n};\nGeometryGraphOp.prototype.getArgGeometry = function getArgGeometry (i) {\n return this._arg[i].getGeometry()\n};\nGeometryGraphOp.prototype.setComputationPrecision = function setComputationPrecision (pm) {\n this._resultPrecisionModel = pm;\n this._li.setPrecisionModel(this._resultPrecisionModel);\n};\nGeometryGraphOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryGraphOp.prototype.getClass = function getClass () {\n return GeometryGraphOp\n};\n\n// operation.geometrygraph\n\nvar GeometryMapper = function GeometryMapper () {};\n\nGeometryMapper.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryMapper.prototype.getClass = function getClass () {\n return GeometryMapper\n};\nGeometryMapper.map = function map () {\n if (arguments[0] instanceof Geometry && hasInterface(arguments[1], GeometryMapper.MapOp)) {\n var geom = arguments[0];\n var op = arguments[1];\n var mapped = new ArrayList();\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var g = op.map(geom.getGeometryN(i));\n if (g !== null) { mapped.add(g); }\n }\n return geom.getFactory().buildGeometry(mapped)\n } else if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], GeometryMapper.MapOp)) {\n var geoms = arguments[0];\n var op$1 = arguments[1];\n var mapped$1 = new ArrayList();\n for (var i$1 = geoms.iterator(); i$1.hasNext();) {\n var g$1 = i$1.next();\n var gr = op$1.map(g$1);\n if (gr !== null) { mapped$1.add(gr); }\n }\n return mapped$1\n }\n};\nGeometryMapper.MapOp = function MapOp () {};\n\nvar OverlayOp = (function (GeometryGraphOp) {\n function OverlayOp () {\n var g0 = arguments[0];\n var g1 = arguments[1];\n GeometryGraphOp.call(this, g0, g1);\n this._ptLocator = new PointLocator();\n this._geomFact = null;\n this._resultGeom = null;\n this._graph = null;\n this._edgeList = new EdgeList();\n this._resultPolyList = new ArrayList();\n this._resultLineList = new ArrayList();\n this._resultPointList = new ArrayList();\n this._graph = new PlanarGraph(new OverlayNodeFactory());\n this._geomFact = g0.getFactory();\n }\n\n if ( GeometryGraphOp ) OverlayOp.__proto__ = GeometryGraphOp;\n OverlayOp.prototype = Object.create( GeometryGraphOp && GeometryGraphOp.prototype );\n OverlayOp.prototype.constructor = OverlayOp;\n OverlayOp.prototype.insertUniqueEdge = function insertUniqueEdge (e) {\n var existingEdge = this._edgeList.findEqualEdge(e);\n if (existingEdge !== null) {\n var existingLabel = existingEdge.getLabel();\n var labelToMerge = e.getLabel();\n if (!existingEdge.isPointwiseEqual(e)) {\n labelToMerge = new Label(e.getLabel());\n labelToMerge.flip();\n }\n var depth = existingEdge.getDepth();\n if (depth.isNull()) {\n depth.add(existingLabel);\n }\n depth.add(labelToMerge);\n existingLabel.merge(labelToMerge);\n } else {\n this._edgeList.add(e);\n }\n };\n OverlayOp.prototype.getGraph = function getGraph () {\n return this._graph\n };\n OverlayOp.prototype.cancelDuplicateResultEdges = function cancelDuplicateResultEdges () {\n for (var it = this._graph.getEdgeEnds().iterator(); it.hasNext();) {\n var de = it.next();\n var sym = de.getSym();\n if (de.isInResult() && sym.isInResult()) {\n de.setInResult(false);\n sym.setInResult(false);\n }\n }\n };\n OverlayOp.prototype.isCoveredByLA = function isCoveredByLA (coord) {\n if (this.isCovered(coord, this._resultLineList)) { return true }\n if (this.isCovered(coord, this._resultPolyList)) { return true }\n return false\n };\n OverlayOp.prototype.computeGeometry = function computeGeometry (resultPointList, resultLineList, resultPolyList, opcode) {\n var geomList = new ArrayList();\n geomList.addAll(resultPointList);\n geomList.addAll(resultLineList);\n geomList.addAll(resultPolyList);\n if (geomList.isEmpty()) { return OverlayOp.createEmptyResult(opcode, this._arg[0].getGeometry(), this._arg[1].getGeometry(), this._geomFact) }\n return this._geomFact.buildGeometry(geomList)\n };\n OverlayOp.prototype.mergeSymLabels = function mergeSymLabels () {\n for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n node.getEdges().mergeSymLabels();\n }\n };\n OverlayOp.prototype.isCovered = function isCovered (coord, geomList) {\n var this$1 = this;\n\n for (var it = geomList.iterator(); it.hasNext();) {\n var geom = it.next();\n var loc = this$1._ptLocator.locate(coord, geom);\n if (loc !== Location.EXTERIOR) { return true }\n }\n return false\n };\n OverlayOp.prototype.replaceCollapsedEdges = function replaceCollapsedEdges () {\n var newEdges = new ArrayList();\n for (var it = this._edgeList.iterator(); it.hasNext();) {\n var e = it.next();\n if (e.isCollapsed()) {\n it.remove();\n newEdges.add(e.getCollapsedEdge());\n }\n }\n this._edgeList.addAll(newEdges);\n };\n OverlayOp.prototype.updateNodeLabelling = function updateNodeLabelling () {\n for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n var lbl = node.getEdges().getLabel();\n node.getLabel().merge(lbl);\n }\n };\n OverlayOp.prototype.getResultGeometry = function getResultGeometry (overlayOpCode) {\n this.computeOverlay(overlayOpCode);\n return this._resultGeom\n };\n OverlayOp.prototype.insertUniqueEdges = function insertUniqueEdges (edges) {\n var this$1 = this;\n\n for (var i = edges.iterator(); i.hasNext();) {\n var e = i.next();\n this$1.insertUniqueEdge(e);\n }\n };\n OverlayOp.prototype.computeOverlay = function computeOverlay (opCode) {\n this.copyPoints(0);\n this.copyPoints(1);\n this._arg[0].computeSelfNodes(this._li, false);\n this._arg[1].computeSelfNodes(this._li, false);\n this._arg[0].computeEdgeIntersections(this._arg[1], this._li, true);\n var baseSplitEdges = new ArrayList();\n this._arg[0].computeSplitEdges(baseSplitEdges);\n this._arg[1].computeSplitEdges(baseSplitEdges);\n // const splitEdges = baseSplitEdges\n this.insertUniqueEdges(baseSplitEdges);\n this.computeLabelsFromDepths();\n this.replaceCollapsedEdges();\n EdgeNodingValidator.checkValid(this._edgeList.getEdges());\n this._graph.addEdges(this._edgeList.getEdges());\n this.computeLabelling();\n this.labelIncompleteNodes();\n this.findResultAreaEdges(opCode);\n this.cancelDuplicateResultEdges();\n var polyBuilder = new PolygonBuilder(this._geomFact);\n polyBuilder.add(this._graph);\n this._resultPolyList = polyBuilder.getPolygons();\n var lineBuilder = new LineBuilder(this, this._geomFact, this._ptLocator);\n this._resultLineList = lineBuilder.build(opCode);\n var pointBuilder = new PointBuilder(this, this._geomFact, this._ptLocator);\n this._resultPointList = pointBuilder.build(opCode);\n this._resultGeom = this.computeGeometry(this._resultPointList, this._resultLineList, this._resultPolyList, opCode);\n };\n OverlayOp.prototype.labelIncompleteNode = function labelIncompleteNode (n, targetIndex) {\n var loc = this._ptLocator.locate(n.getCoordinate(), this._arg[targetIndex].getGeometry());\n n.getLabel().setLocation(targetIndex, loc);\n };\n OverlayOp.prototype.copyPoints = function copyPoints (argIndex) {\n var this$1 = this;\n\n for (var i = this._arg[argIndex].getNodeIterator(); i.hasNext();) {\n var graphNode = i.next();\n var newNode = this$1._graph.addNode(graphNode.getCoordinate());\n newNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex));\n }\n };\n OverlayOp.prototype.findResultAreaEdges = function findResultAreaEdges (opCode) {\n for (var it = this._graph.getEdgeEnds().iterator(); it.hasNext();) {\n var de = it.next();\n var label = de.getLabel();\n if (label.isArea() && !de.isInteriorAreaEdge() && OverlayOp.isResultOfOp(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), opCode)) {\n de.setInResult(true);\n }\n }\n };\n OverlayOp.prototype.computeLabelsFromDepths = function computeLabelsFromDepths () {\n for (var it = this._edgeList.iterator(); it.hasNext();) {\n var e = it.next();\n var lbl = e.getLabel();\n var depth = e.getDepth();\n if (!depth.isNull()) {\n depth.normalize();\n for (var i = 0; i < 2; i++) {\n if (!lbl.isNull(i) && lbl.isArea() && !depth.isNull(i)) {\n if (depth.getDelta(i) === 0) {\n lbl.toLine(i);\n } else {\n Assert.isTrue(!depth.isNull(i, Position.LEFT), 'depth of LEFT side has not been initialized');\n lbl.setLocation(i, Position.LEFT, depth.getLocation(i, Position.LEFT));\n Assert.isTrue(!depth.isNull(i, Position.RIGHT), 'depth of RIGHT side has not been initialized');\n lbl.setLocation(i, Position.RIGHT, depth.getLocation(i, Position.RIGHT));\n }\n }\n }\n }\n }\n };\n OverlayOp.prototype.computeLabelling = function computeLabelling () {\n var this$1 = this;\n\n for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n node.getEdges().computeLabelling(this$1._arg);\n }\n this.mergeSymLabels();\n this.updateNodeLabelling();\n };\n OverlayOp.prototype.labelIncompleteNodes = function labelIncompleteNodes () {\n var this$1 = this;\n\n // let nodeCount = 0\n for (var ni = this._graph.getNodes().iterator(); ni.hasNext();) {\n var n = ni.next();\n var label = n.getLabel();\n if (n.isIsolated()) {\n // nodeCount++\n if (label.isNull(0)) { this$1.labelIncompleteNode(n, 0); } else { this$1.labelIncompleteNode(n, 1); }\n }\n n.getEdges().updateLabelling(label);\n }\n };\n OverlayOp.prototype.isCoveredByA = function isCoveredByA (coord) {\n if (this.isCovered(coord, this._resultPolyList)) { return true }\n return false\n };\n OverlayOp.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n OverlayOp.prototype.getClass = function getClass () {\n return OverlayOp\n };\n\n return OverlayOp;\n}(GeometryGraphOp));\n\nOverlayOp.overlayOp = function (geom0, geom1, opCode) {\n var gov = new OverlayOp(geom0, geom1);\n var geomOv = gov.getResultGeometry(opCode);\n return geomOv\n};\nOverlayOp.intersection = function (g, other) {\n if (g.isEmpty() || other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.INTERSECTION, g, other, g.getFactory()) }\n if (g.isGeometryCollection()) {\n var g2 = other;\n return GeometryCollectionMapper.map(g, {\n interfaces_: function () {\n return [GeometryMapper.MapOp]\n },\n map: function (g) {\n return g.intersection(g2)\n }\n })\n }\n g.checkNotGeometryCollection(g);\n g.checkNotGeometryCollection(other);\n return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.INTERSECTION)\n};\nOverlayOp.symDifference = function (g, other) {\n if (g.isEmpty() || other.isEmpty()) {\n if (g.isEmpty() && other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.SYMDIFFERENCE, g, other, g.getFactory()) }\n if (g.isEmpty()) { return other.copy() }\n if (other.isEmpty()) { return g.copy() }\n }\n g.checkNotGeometryCollection(g);\n g.checkNotGeometryCollection(other);\n return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.SYMDIFFERENCE)\n};\nOverlayOp.resultDimension = function (opCode, g0, g1) {\n var dim0 = g0.getDimension();\n var dim1 = g1.getDimension();\n var resultDimension = -1;\n switch (opCode) {\n case OverlayOp.INTERSECTION:\n resultDimension = Math.min(dim0, dim1);\n break\n case OverlayOp.UNION:\n resultDimension = Math.max(dim0, dim1);\n break\n case OverlayOp.DIFFERENCE:\n resultDimension = dim0;\n break\n case OverlayOp.SYMDIFFERENCE:\n resultDimension = Math.max(dim0, dim1);\n break\n default:\n }\n return resultDimension\n};\nOverlayOp.createEmptyResult = function (overlayOpCode, a, b, geomFact) {\n var result = null;\n switch (OverlayOp.resultDimension(overlayOpCode, a, b)) {\n case -1:\n result = geomFact.createGeometryCollection(new Array(0).fill(null));\n break\n case 0:\n result = geomFact.createPoint();\n break\n case 1:\n result = geomFact.createLineString();\n break\n case 2:\n result = geomFact.createPolygon();\n break\n default:\n }\n return result\n};\nOverlayOp.difference = function (g, other) {\n if (g.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.DIFFERENCE, g, other, g.getFactory()) }\n if (other.isEmpty()) { return g.copy() }\n g.checkNotGeometryCollection(g);\n g.checkNotGeometryCollection(other);\n return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.DIFFERENCE)\n};\nOverlayOp.isResultOfOp = function () {\n if (arguments.length === 2) {\n var label = arguments[0];\n var opCode = arguments[1];\n var loc0 = label.getLocation(0);\n var loc1 = label.getLocation(1);\n return OverlayOp.isResultOfOp(loc0, loc1, opCode)\n } else if (arguments.length === 3) {\n var loc0$1 = arguments[0];\n var loc1$1 = arguments[1];\n var overlayOpCode = arguments[2];\n if (loc0$1 === Location.BOUNDARY) { loc0$1 = Location.INTERIOR; }\n if (loc1$1 === Location.BOUNDARY) { loc1$1 = Location.INTERIOR; }\n switch (overlayOpCode) {\n case OverlayOp.INTERSECTION:\n return loc0$1 === Location.INTERIOR && loc1$1 === Location.INTERIOR\n case OverlayOp.UNION:\n return loc0$1 === Location.INTERIOR || loc1$1 === Location.INTERIOR\n case OverlayOp.DIFFERENCE:\n return loc0$1 === Location.INTERIOR && loc1$1 !== Location.INTERIOR\n case OverlayOp.SYMDIFFERENCE:\n return (loc0$1 === Location.INTERIOR && loc1$1 !== Location.INTERIOR) || (loc0$1 !== Location.INTERIOR && loc1$1 === Location.INTERIOR)\n default:\n }\n return false\n }\n};\nOverlayOp.INTERSECTION = 1;\nOverlayOp.UNION = 2;\nOverlayOp.DIFFERENCE = 3;\nOverlayOp.SYMDIFFERENCE = 4;\n\nvar FuzzyPointLocator = function FuzzyPointLocator () {\n this._g = null;\n this._boundaryDistanceTolerance = null;\n this._linework = null;\n this._ptLocator = new PointLocator();\n this._seg = new LineSegment();\n var g = arguments[0];\n var boundaryDistanceTolerance = arguments[1];\n this._g = g;\n this._boundaryDistanceTolerance = boundaryDistanceTolerance;\n this._linework = this.extractLinework(g);\n};\nFuzzyPointLocator.prototype.isWithinToleranceOfBoundary = function isWithinToleranceOfBoundary (pt) {\n var this$1 = this;\n\n for (var i = 0; i < this._linework.getNumGeometries(); i++) {\n var line = this$1._linework.getGeometryN(i);\n var seq = line.getCoordinateSequence();\n for (var j = 0; j < seq.size() - 1; j++) {\n seq.getCoordinate(j, this$1._seg.p0);\n seq.getCoordinate(j + 1, this$1._seg.p1);\n var dist = this$1._seg.distance(pt);\n if (dist <= this$1._boundaryDistanceTolerance) { return true }\n }\n }\n return false\n};\nFuzzyPointLocator.prototype.getLocation = function getLocation (pt) {\n if (this.isWithinToleranceOfBoundary(pt)) { return Location.BOUNDARY }\n return this._ptLocator.locate(pt, this._g)\n};\nFuzzyPointLocator.prototype.extractLinework = function extractLinework (g) {\n var extracter = new PolygonalLineworkExtracter();\n g.apply(extracter);\n var linework = extracter.getLinework();\n var lines = GeometryFactory.toLineStringArray(linework);\n return g.getFactory().createMultiLineString(lines)\n};\nFuzzyPointLocator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nFuzzyPointLocator.prototype.getClass = function getClass () {\n return FuzzyPointLocator\n};\n\nvar PolygonalLineworkExtracter = function PolygonalLineworkExtracter () {\n this._linework = null;\n this._linework = new ArrayList();\n};\nPolygonalLineworkExtracter.prototype.getLinework = function getLinework () {\n return this._linework\n};\nPolygonalLineworkExtracter.prototype.filter = function filter (g) {\n var this$1 = this;\n\n if (g instanceof Polygon) {\n var poly = g;\n this._linework.add(poly.getExteriorRing());\n for (var i = 0; i < poly.getNumInteriorRing(); i++) {\n this$1._linework.add(poly.getInteriorRingN(i));\n }\n }\n};\nPolygonalLineworkExtracter.prototype.interfaces_ = function interfaces_ () {\n return [GeometryFilter]\n};\nPolygonalLineworkExtracter.prototype.getClass = function getClass () {\n return PolygonalLineworkExtracter\n};\n\nvar OffsetPointGenerator = function OffsetPointGenerator () {\n this._g = null;\n this._doLeft = true;\n this._doRight = true;\n var g = arguments[0];\n this._g = g;\n};\nOffsetPointGenerator.prototype.extractPoints = function extractPoints (line, offsetDistance, offsetPts) {\n var this$1 = this;\n\n var pts = line.getCoordinates();\n for (var i = 0; i < pts.length - 1; i++) {\n this$1.computeOffsetPoints(pts[i], pts[i + 1], offsetDistance, offsetPts);\n }\n};\nOffsetPointGenerator.prototype.setSidesToGenerate = function setSidesToGenerate (doLeft, doRight) {\n this._doLeft = doLeft;\n this._doRight = doRight;\n};\nOffsetPointGenerator.prototype.getPoints = function getPoints (offsetDistance) {\n var this$1 = this;\n\n var offsetPts = new ArrayList();\n var lines = LinearComponentExtracter.getLines(this._g);\n for (var i = lines.iterator(); i.hasNext();) {\n var line = i.next();\n this$1.extractPoints(line, offsetDistance, offsetPts);\n }\n return offsetPts\n};\nOffsetPointGenerator.prototype.computeOffsetPoints = function computeOffsetPoints (p0, p1, offsetDistance, offsetPts) {\n var dx = p1.x - p0.x;\n var dy = p1.y - p0.y;\n var len = Math.sqrt(dx * dx + dy * dy);\n var ux = offsetDistance * dx / len;\n var uy = offsetDistance * dy / len;\n var midX = (p1.x + p0.x) / 2;\n var midY = (p1.y + p0.y) / 2;\n if (this._doLeft) {\n var offsetLeft = new Coordinate(midX - uy, midY + ux);\n offsetPts.add(offsetLeft);\n }\n if (this._doRight) {\n var offsetRight = new Coordinate(midX + uy, midY - ux);\n offsetPts.add(offsetRight);\n }\n};\nOffsetPointGenerator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOffsetPointGenerator.prototype.getClass = function getClass () {\n return OffsetPointGenerator\n};\n\nvar OverlayResultValidator = function OverlayResultValidator () {\n this._geom = null;\n this._locFinder = null;\n this._location = new Array(3).fill(null);\n this._invalidLocation = null;\n this._boundaryDistanceTolerance = OverlayResultValidator.TOLERANCE;\n this._testCoords = new ArrayList();\n var a = arguments[0];\n var b = arguments[1];\n var result = arguments[2];\n this._boundaryDistanceTolerance = OverlayResultValidator.computeBoundaryDistanceTolerance(a, b);\n this._geom = [a, b, result];\n this._locFinder = [new FuzzyPointLocator(this._geom[0], this._boundaryDistanceTolerance), new FuzzyPointLocator(this._geom[1], this._boundaryDistanceTolerance), new FuzzyPointLocator(this._geom[2], this._boundaryDistanceTolerance)];\n};\n\nvar staticAccessors$46 = { TOLERANCE: { configurable: true } };\nOverlayResultValidator.prototype.reportResult = function reportResult (overlayOp, location, expectedInterior) {\n System.out.println('Overlay result invalid - A:' + Location.toLocationSymbol(location[0]) + ' B:' + Location.toLocationSymbol(location[1]) + ' expected:' + (expectedInterior ? 'i' : 'e') + ' actual:' + Location.toLocationSymbol(location[2]));\n};\nOverlayResultValidator.prototype.isValid = function isValid (overlayOp) {\n this.addTestPts(this._geom[0]);\n this.addTestPts(this._geom[1]);\n var isValid = this.checkValid(overlayOp);\n return isValid\n};\nOverlayResultValidator.prototype.checkValid = function checkValid () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var overlayOp = arguments[0];\n for (var i = 0; i < this._testCoords.size(); i++) {\n var pt = this$1._testCoords.get(i);\n if (!this$1.checkValid(overlayOp, pt)) {\n this$1._invalidLocation = pt;\n return false\n }\n }\n return true\n } else if (arguments.length === 2) {\n var overlayOp$1 = arguments[0];\n var pt$1 = arguments[1];\n this._location[0] = this._locFinder[0].getLocation(pt$1);\n this._location[1] = this._locFinder[1].getLocation(pt$1);\n this._location[2] = this._locFinder[2].getLocation(pt$1);\n if (OverlayResultValidator.hasLocation(this._location, Location.BOUNDARY)) { return true }\n return this.isValidResult(overlayOp$1, this._location)\n }\n};\nOverlayResultValidator.prototype.addTestPts = function addTestPts (g) {\n var ptGen = new OffsetPointGenerator(g);\n this._testCoords.addAll(ptGen.getPoints(5 * this._boundaryDistanceTolerance));\n};\nOverlayResultValidator.prototype.isValidResult = function isValidResult (overlayOp, location) {\n var expectedInterior = OverlayOp.isResultOfOp(location[0], location[1], overlayOp);\n var resultInInterior = location[2] === Location.INTERIOR;\n var isValid = !(expectedInterior ^ resultInInterior);\n if (!isValid) { this.reportResult(overlayOp, location, expectedInterior); }\n return isValid\n};\nOverlayResultValidator.prototype.getInvalidLocation = function getInvalidLocation () {\n return this._invalidLocation\n};\nOverlayResultValidator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOverlayResultValidator.prototype.getClass = function getClass () {\n return OverlayResultValidator\n};\nOverlayResultValidator.hasLocation = function hasLocation (location, loc) {\n for (var i = 0; i < 3; i++) {\n if (location[i] === loc) { return true }\n }\n return false\n};\nOverlayResultValidator.computeBoundaryDistanceTolerance = function computeBoundaryDistanceTolerance (g0, g1) {\n return Math.min(GeometrySnapper.computeSizeBasedSnapTolerance(g0), GeometrySnapper.computeSizeBasedSnapTolerance(g1))\n};\nOverlayResultValidator.isValid = function isValid (a, b, overlayOp, result) {\n var validator = new OverlayResultValidator(a, b, result);\n return validator.isValid(overlayOp)\n};\nstaticAccessors$46.TOLERANCE.get = function () { return 0.000001 };\n\nObject.defineProperties( OverlayResultValidator, staticAccessors$46 );\n\n// operation.overlay\n\nvar GeometryCombiner = function GeometryCombiner (geoms) {\n this._geomFactory = null;\n this._skipEmpty = false;\n this._inputGeoms = null;\n this._geomFactory = GeometryCombiner.extractFactory(geoms);\n this._inputGeoms = geoms;\n};\nGeometryCombiner.prototype.extractElements = function extractElements (geom, elems) {\n var this$1 = this;\n\n if (geom === null) { return null }\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var elemGeom = geom.getGeometryN(i);\n if (this$1._skipEmpty && elemGeom.isEmpty()) { continue }\n elems.add(elemGeom);\n }\n};\nGeometryCombiner.prototype.combine = function combine () {\n var this$1 = this;\n\n var elems = new ArrayList();\n for (var i = this._inputGeoms.iterator(); i.hasNext();) {\n var g = i.next();\n this$1.extractElements(g, elems);\n }\n if (elems.size() === 0) {\n if (this._geomFactory !== null) {\n return this._geomFactory.createGeometryCollection(null)\n }\n return null\n }\n return this._geomFactory.buildGeometry(elems)\n};\nGeometryCombiner.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryCombiner.prototype.getClass = function getClass () {\n return GeometryCombiner\n};\nGeometryCombiner.combine = function combine () {\n if (arguments.length === 1) {\n var geoms = arguments[0];\n var combiner = new GeometryCombiner(geoms);\n return combiner.combine()\n } else if (arguments.length === 2) {\n var g0 = arguments[0];\n var g1 = arguments[1];\n var combiner$1 = new GeometryCombiner(GeometryCombiner.createList(g0, g1));\n return combiner$1.combine()\n } else if (arguments.length === 3) {\n var g0$1 = arguments[0];\n var g1$1 = arguments[1];\n var g2 = arguments[2];\n var combiner$2 = new GeometryCombiner(GeometryCombiner.createList(g0$1, g1$1, g2));\n return combiner$2.combine()\n }\n};\nGeometryCombiner.extractFactory = function extractFactory (geoms) {\n if (geoms.isEmpty()) { return null }\n return geoms.iterator().next().getFactory()\n};\nGeometryCombiner.createList = function createList () {\n if (arguments.length === 2) {\n var obj0 = arguments[0];\n var obj1 = arguments[1];\n var list = new ArrayList();\n list.add(obj0);\n list.add(obj1);\n return list\n } else if (arguments.length === 3) {\n var obj0$1 = arguments[0];\n var obj1$1 = arguments[1];\n var obj2 = arguments[2];\n var list$1 = new ArrayList();\n list$1.add(obj0$1);\n list$1.add(obj1$1);\n list$1.add(obj2);\n return list$1\n }\n};\n\nvar CascadedPolygonUnion = function CascadedPolygonUnion () {\n this._inputPolys = null;\n this._geomFactory = null;\n var polys = arguments[0];\n this._inputPolys = polys;\n if (this._inputPolys === null) { this._inputPolys = new ArrayList(); }\n};\n\nvar staticAccessors$47 = { STRTREE_NODE_CAPACITY: { configurable: true } };\nCascadedPolygonUnion.prototype.reduceToGeometries = function reduceToGeometries (geomTree) {\n var this$1 = this;\n\n var geoms = new ArrayList();\n for (var i = geomTree.iterator(); i.hasNext();) {\n var o = i.next();\n var geom = null;\n if (hasInterface(o, List)) {\n geom = this$1.unionTree(o);\n } else if (o instanceof Geometry) {\n geom = o;\n }\n geoms.add(geom);\n }\n return geoms\n};\nCascadedPolygonUnion.prototype.extractByEnvelope = function extractByEnvelope (env, geom, disjointGeoms) {\n var intersectingGeoms = new ArrayList();\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var elem = geom.getGeometryN(i);\n if (elem.getEnvelopeInternal().intersects(env)) { intersectingGeoms.add(elem); } else { disjointGeoms.add(elem); }\n }\n return this._geomFactory.buildGeometry(intersectingGeoms)\n};\nCascadedPolygonUnion.prototype.unionOptimized = function unionOptimized (g0, g1) {\n var g0Env = g0.getEnvelopeInternal();\n var g1Env = g1.getEnvelopeInternal();\n if (!g0Env.intersects(g1Env)) {\n var combo = GeometryCombiner.combine(g0, g1);\n return combo\n }\n if (g0.getNumGeometries() <= 1 && g1.getNumGeometries() <= 1) { return this.unionActual(g0, g1) }\n var commonEnv = g0Env.intersection(g1Env);\n return this.unionUsingEnvelopeIntersection(g0, g1, commonEnv)\n};\nCascadedPolygonUnion.prototype.union = function union () {\n if (this._inputPolys === null) { throw new Error('union() method cannot be called twice') }\n if (this._inputPolys.isEmpty()) { return null }\n this._geomFactory = this._inputPolys.iterator().next().getFactory();\n var index = new STRtree(CascadedPolygonUnion.STRTREE_NODE_CAPACITY);\n for (var i = this._inputPolys.iterator(); i.hasNext();) {\n var item = i.next();\n index.insert(item.getEnvelopeInternal(), item);\n }\n this._inputPolys = null;\n var itemTree = index.itemsTree();\n var unionAll = this.unionTree(itemTree);\n return unionAll\n};\nCascadedPolygonUnion.prototype.binaryUnion = function binaryUnion () {\n if (arguments.length === 1) {\n var geoms = arguments[0];\n return this.binaryUnion(geoms, 0, geoms.size())\n } else if (arguments.length === 3) {\n var geoms$1 = arguments[0];\n var start = arguments[1];\n var end = arguments[2];\n if (end - start <= 1) {\n var g0 = CascadedPolygonUnion.getGeometry(geoms$1, start);\n return this.unionSafe(g0, null)\n } else if (end - start === 2) {\n return this.unionSafe(CascadedPolygonUnion.getGeometry(geoms$1, start), CascadedPolygonUnion.getGeometry(geoms$1, start + 1))\n } else {\n var mid = Math.trunc((end + start) / 2);\n var g0$1 = this.binaryUnion(geoms$1, start, mid);\n var g1 = this.binaryUnion(geoms$1, mid, end);\n return this.unionSafe(g0$1, g1)\n }\n }\n};\nCascadedPolygonUnion.prototype.repeatedUnion = function repeatedUnion (geoms) {\n var union = null;\n for (var i = geoms.iterator(); i.hasNext();) {\n var g = i.next();\n if (union === null) { union = g.copy(); } else { union = union.union(g); }\n }\n return union\n};\nCascadedPolygonUnion.prototype.unionSafe = function unionSafe (g0, g1) {\n if (g0 === null && g1 === null) { return null }\n if (g0 === null) { return g1.copy() }\n if (g1 === null) { return g0.copy() }\n return this.unionOptimized(g0, g1)\n};\nCascadedPolygonUnion.prototype.unionActual = function unionActual (g0, g1) {\n return CascadedPolygonUnion.restrictToPolygons(g0.union(g1))\n};\nCascadedPolygonUnion.prototype.unionTree = function unionTree (geomTree) {\n var geoms = this.reduceToGeometries(geomTree);\n var union = this.binaryUnion(geoms);\n return union\n};\nCascadedPolygonUnion.prototype.unionUsingEnvelopeIntersection = function unionUsingEnvelopeIntersection (g0, g1, common) {\n var disjointPolys = new ArrayList();\n var g0Int = this.extractByEnvelope(common, g0, disjointPolys);\n var g1Int = this.extractByEnvelope(common, g1, disjointPolys);\n var union = this.unionActual(g0Int, g1Int);\n disjointPolys.add(union);\n var overallUnion = GeometryCombiner.combine(disjointPolys);\n return overallUnion\n};\nCascadedPolygonUnion.prototype.bufferUnion = function bufferUnion () {\n if (arguments.length === 1) {\n var geoms = arguments[0];\n var factory = geoms.get(0).getFactory();\n var gColl = factory.buildGeometry(geoms);\n var unionAll = gColl.buffer(0.0);\n return unionAll\n } else if (arguments.length === 2) {\n var g0 = arguments[0];\n var g1 = arguments[1];\n var factory$1 = g0.getFactory();\n var gColl$1 = factory$1.createGeometryCollection([g0, g1]);\n var unionAll$1 = gColl$1.buffer(0.0);\n return unionAll$1\n }\n};\nCascadedPolygonUnion.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCascadedPolygonUnion.prototype.getClass = function getClass () {\n return CascadedPolygonUnion\n};\nCascadedPolygonUnion.restrictToPolygons = function restrictToPolygons (g) {\n if (hasInterface(g, Polygonal)) {\n return g\n }\n var polygons = PolygonExtracter.getPolygons(g);\n if (polygons.size() === 1) { return polygons.get(0) }\n return g.getFactory().createMultiPolygon(GeometryFactory.toPolygonArray(polygons))\n};\nCascadedPolygonUnion.getGeometry = function getGeometry (list, index) {\n if (index >= list.size()) { return null }\n return list.get(index)\n};\nCascadedPolygonUnion.union = function union (polys) {\n var op = new CascadedPolygonUnion(polys);\n return op.union()\n};\nstaticAccessors$47.STRTREE_NODE_CAPACITY.get = function () { return 4 };\n\nObject.defineProperties( CascadedPolygonUnion, staticAccessors$47 );\n\nvar UnionOp = function UnionOp () {};\n\nUnionOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nUnionOp.prototype.getClass = function getClass () {\n return UnionOp\n};\nUnionOp.union = function union (g, other) {\n if (g.isEmpty() || other.isEmpty()) {\n if (g.isEmpty() && other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.UNION, g, other, g.getFactory()) }\n if (g.isEmpty()) { return other.copy() }\n if (other.isEmpty()) { return g.copy() }\n }\n g.checkNotGeometryCollection(g);\n g.checkNotGeometryCollection(other);\n return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.UNION)\n};\n\n// operation.union\n\n// operation\n\n/**\n * Polyfill for IE support\n */\n\nexport { GeoJSONReader, GeoJSONWriter, OverlayOp, UnionOp, BufferOp };\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import adder from \"./adder\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum.reset();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder\";\nimport {areaStream, areaRingSum} from \"./area\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport {abs, degrees, epsilon, radians} from \"./math\";\nimport stream from \"./stream\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum = adder(),\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose\";\nimport {asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math\";\n\nfunction rotationIdentity(lambda, phi) {\n return [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport constant from \"./constant\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math\";\nimport {rotateRadians} from \"./rotation\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y) {\n line.push([x, y]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {abs, epsilon} from \"./math\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n // If the first and last points of a segment are coincident, then treat as a\n // closed ring. TODO if all rings are closed, then the winding order of the\n // exterior ring should be checked.\n if (pointEqual(p0, p1)) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n}\n","import {abs, epsilon} from \"../math\";\nimport clipBuffer from \"./buffer\";\nimport clipLine from \"./line\";\nimport clipPolygon from \"./polygon\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport function clipExtent(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipPolygon(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n\nexport default function() {\n var x0 = 0,\n y0 = 0,\n x1 = 960,\n y1 = 500,\n cache,\n cacheStream,\n clip;\n\n return clip = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);\n },\n extent: function(_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n }\n };\n}\n","import adder from \"./adder\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian\";\nimport {asin, atan2, cos, epsilon, pi, quarterPi, sin, tau} from \"./math\";\n\nvar sum = adder();\n\nexport default function(polygon, point) {\n var lambda = point[0],\n phi = point[1],\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = point0[0],\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = point1[0],\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","import adder from \"./adder\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar lengthSum = adder(),\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n lengthSum.reset();\n stream(object, lengthStream);\n return +lengthSum;\n}\n","export default function(x) {\n return x;\n}\n","import adder from \"../adder\";\nimport {abs} from \"../math\";\nimport noop from \"../noop\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import adder from \"../adder\";\nimport {sqrt} from \"../math\";\nimport noop from \"../noop\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","import clipBuffer from \"./buffer\";\nimport clipPolygon from \"./polygon\";\nimport {epsilon, halfPi} from \"../math\";\nimport polygonContains from \"../polygonContains\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(rotate, sink) {\n var line = clipLine(sink),\n rotatedStart = rotate.invert(start[0], start[1]),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, rotatedStart);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipPolygon(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n var point = rotate(lambda, phi);\n if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n var point = rotate(lambda, phi);\n line.point(point[0], point[1]);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n var point = rotate(lambda, phi);\n ringSink.point(point[0], point[1]);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian\";\nimport {circleStream} from \"../circle\";\nimport {abs, cos, epsilon, pi, sqrt} from \"../math\";\nimport pointEqual from \"../pointEqual\";\nimport clip from \"./index\";\n\nexport default function(radius, delta) {\n var cr = cos(radius),\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n // Handle degeneracies.\n // TODO ignore if not clipping polygons.\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n point1[0] += epsilon;\n point1[1] += epsilon;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1]);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream\";\nimport boundsStream from \"../path/bounds\";\n\nexport function fitExtent(projection, extent, object) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n clip = projection.clipExtent && projection.clipExtent();\n\n projection\n .scale(150)\n .translate([0, 0]);\n\n if (clip != null) projection.clipExtent(null);\n\n geoStream(object, projection.stream(boundsStream));\n\n var b = boundsStream.result(),\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n\n if (clip != null) projection.clipExtent(clip);\n\n return projection\n .scale(k * 150)\n .translate([x, y]);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n","import {cartesian} from \"../cartesian\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math\";\nimport {transformer} from \"../transform\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian\";\nimport clipCircle from \"../clip/circle\";\nimport {clipExtent} from \"../clip/extent\";\nimport compose from \"../compose\";\nimport identity from \"../identity\";\nimport {degrees, radians, sqrt} from \"../math\";\nimport {rotateRadians} from \"../rotation\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize} from \"./fit\";\nimport resample from \"./resample\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n dx, dy, lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate\n theta = null, preclip = clipAntimeridian, // clip angle\n x0 = null, y0, x1, y1, postclip = identity, // clip extent\n delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision\n cache,\n cacheStream;\n\n function projection(point) {\n point = projectRotate(point[0] * radians, point[1] * radians);\n return [point[0] * k + dx, dy - point[1] * k];\n }\n\n function invert(point) {\n point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n function projectTransform(x, y) {\n return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n function recenter() {\n projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);\n var center = project(lambda, phi);\n dx = x - center[0] * k;\n dy = y + center[1] * k;\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {acos, sin} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import projection from \"./index\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import center from '@turf/center';\nimport { GeoJSONReader, BufferOp, GeoJSONWriter } from 'turf-jsts';\nimport { featureEach, geomEach } from '@turf/meta';\nimport { geoAzimuthalEquidistant } from 'd3-geo';\nimport { featureCollection, earthRadius, radiansToLength, lengthToRadians, feature } from '@turf/helpers';\n\n/**\n * Calculates a buffer for input features for a given radius. Units supported are miles, kilometers, and degrees.\n *\n * When using a negative radius, the resulting geometry may be invalid if\n * it's too small compared to the radius magnitude. If the input is a\n * FeatureCollection, only valid members will be returned in the output\n * FeatureCollection - i.e., the output collection may have fewer members than\n * the input, or even be empty.\n *\n * @name buffer\n * @param {FeatureCollection|Geometry|Feature<any>} geojson input to be buffered\n * @param {number} radius distance to draw the buffer (negative values are allowed)\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units=\"kilometers\"] any of the options supported by turf units\n * @param {number} [options.steps=8] number of steps\n * @returns {FeatureCollection|Feature<Polygon|MultiPolygon>|undefined} buffered features\n * @example\n * var point = turf.point([-90.548630, 14.616599]);\n * var buffered = turf.buffer(point, 500, {units: 'miles'});\n *\n * //addToMap\n * var addToMap = [point, buffered]\n */\nfunction buffer(geojson, radius, options) {\n // Optional params\n options = options || {};\n\n // use user supplied options or default values\n var units = options.units || \"kilometers\";\n var steps = options.steps || 8;\n\n // validation\n if (!geojson) throw new Error(\"geojson is required\");\n if (typeof options !== \"object\") throw new Error(\"options must be an object\");\n if (typeof steps !== \"number\") throw new Error(\"steps must be an number\");\n\n // Allow negative buffers (\"erosion\") or zero-sized buffers (\"repair geometry\")\n if (radius === undefined) throw new Error(\"radius is required\");\n if (steps <= 0) throw new Error(\"steps must be greater than 0\");\n\n var results = [];\n switch (geojson.type) {\n case \"GeometryCollection\":\n geomEach(geojson, function (geometry) {\n var buffered = bufferFeature(geometry, radius, units, steps);\n if (buffered) results.push(buffered);\n });\n return featureCollection(results);\n case \"FeatureCollection\":\n featureEach(geojson, function (feature) {\n var multiBuffered = bufferFeature(feature, radius, units, steps);\n if (multiBuffered) {\n featureEach(multiBuffered, function (buffered) {\n if (buffered) results.push(buffered);\n });\n }\n });\n return featureCollection(results);\n }\n return bufferFeature(geojson, radius, units, steps);\n}\n\n/**\n * Buffer single Feature/Geometry\n *\n * @private\n * @param {Feature<any>} geojson input to be buffered\n * @param {number} radius distance to draw the buffer\n * @param {string} [units='kilometers'] any of the options supported by turf units\n * @param {number} [steps=8] number of steps\n * @returns {Feature<Polygon|MultiPolygon>} buffered feature\n */\nfunction bufferFeature(geojson, radius, units, steps) {\n var properties = geojson.properties || {};\n var geometry = geojson.type === \"Feature\" ? geojson.geometry : geojson;\n\n // Geometry Types faster than jsts\n if (geometry.type === \"GeometryCollection\") {\n var results = [];\n geomEach(geojson, function (geometry) {\n var buffered = bufferFeature(geometry, radius, units, steps);\n if (buffered) results.push(buffered);\n });\n return featureCollection(results);\n }\n\n // Project GeoJSON to Azimuthal Equidistant projection (convert to Meters)\n var projection = defineProjection(geometry);\n var projected = {\n type: geometry.type,\n coordinates: projectCoords(geometry.coordinates, projection),\n };\n\n // JSTS buffer operation\n var reader = new GeoJSONReader();\n var geom = reader.read(projected);\n var distance = radiansToLength(lengthToRadians(radius, units), \"meters\");\n var buffered = BufferOp.bufferOp(geom, distance, steps);\n var writer = new GeoJSONWriter();\n buffered = writer.write(buffered);\n\n // Detect if empty geometries\n if (coordsIsNaN(buffered.coordinates)) return undefined;\n\n // Unproject coordinates (convert to Degrees)\n var result = {\n type: buffered.type,\n coordinates: unprojectCoords(buffered.coordinates, projection),\n };\n\n return feature(result, properties);\n}\n\n/**\n * Coordinates isNaN\n *\n * @private\n * @param {Array<any>} coords GeoJSON Coordinates\n * @returns {boolean} if NaN exists\n */\nfunction coordsIsNaN(coords) {\n if (Array.isArray(coords[0])) return coordsIsNaN(coords[0]);\n return isNaN(coords[0]);\n}\n\n/**\n * Project coordinates to projection\n *\n * @private\n * @param {Array<any>} coords to project\n * @param {GeoProjection} proj D3 Geo Projection\n * @returns {Array<any>} projected coordinates\n */\nfunction projectCoords(coords, proj) {\n if (typeof coords[0] !== \"object\") return proj(coords);\n return coords.map(function (coord) {\n return projectCoords(coord, proj);\n });\n}\n\n/**\n * Un-Project coordinates to projection\n *\n * @private\n * @param {Array<any>} coords to un-project\n * @param {GeoProjection} proj D3 Geo Projection\n * @returns {Array<any>} un-projected coordinates\n */\nfunction unprojectCoords(coords, proj) {\n if (typeof coords[0] !== \"object\") return proj.invert(coords);\n return coords.map(function (coord) {\n return unprojectCoords(coord, proj);\n });\n}\n\n/**\n * Define Azimuthal Equidistant projection\n *\n * @private\n * @param {Geometry|Feature<any>} geojson Base projection on center of GeoJSON\n * @returns {GeoProjection} D3 Geo Azimuthal Equidistant Projection\n */\nfunction defineProjection(geojson) {\n var coords = center(geojson).geometry.coordinates;\n var rotation = [-coords[0], -coords[1]];\n return geoAzimuthalEquidistant().rotate(rotation).scale(earthRadius);\n}\n\nexport default buffer;\n","import type {\n Polygon,\n MultiPolygon,\n Feature as TurfFeature,\n Position,\n} from \"@turf/helpers\";\nimport difference from \"@turf/difference\";\nimport buffer from \"@turf/buffer\";\nimport type { GeoJSON } from \"geojson\";\n\n// see https://maplibre.org/maplibre-gl-js-docs/example/line-across-180th-meridian/\nfunction fixRing(ring: Position[]) {\n let prev: Position | undefined = undefined;\n\n for (const c of ring) {\n if (prev && c[0] - prev[0] >= 180) {\n c[0] -= 360;\n } else if (prev && c[0] - prev[0] < -180) {\n c[0] += 360;\n }\n\n prev = c;\n }\n}\n\nexport function setMask(\n picked: TurfFeature<Polygon | MultiPolygon>,\n setData: (data: GeoJSON) => void\n) {\n const diff = difference(\n {\n type: \"Polygon\",\n coordinates: [\n [\n [180, 90],\n [-180, 90],\n [-180, -90],\n [180, -90],\n [180, 90],\n ],\n ],\n },\n picked\n );\n\n if (!diff) {\n return;\n }\n\n diff.properties = { isMask: \"y\" };\n\n const fixed = buffer(picked, 0);\n\n if (fixed.geometry.type === \"Polygon\") {\n for (const ring of fixed.geometry.coordinates) {\n fixRing(ring);\n }\n } else {\n for (const poly of fixed.geometry.coordinates) {\n for (const ring of poly) {\n fixRing(ring);\n }\n }\n }\n\n setData({\n type: \"FeatureCollection\",\n features: [fixed, diff],\n });\n}\n","import type MapLibreGL from \"maplibre-gl\";\nimport type {\n FitBoundsOptions,\n MapMouseEvent,\n LngLat,\n Map,\n Marker,\n FlyToOptions,\n GeoJSONSource,\n FillLayerSpecification,\n LineLayerSpecification,\n} from \"maplibre-gl\";\nimport MarkerIcon from \"./MarkerIcon.svelte\";\nimport type { Feature, MapController, MapEvent, Proximity } from \"./types.js\";\nimport union from \"@turf/union\";\nimport type {\n Polygon,\n MultiPolygon,\n LineString,\n MultiLineString,\n} from \"@turf/helpers\";\nimport { setMask } from \"./mask\";\nimport type { FeatureCollection, GeoJSON } from \"geojson\";\n\nlet emptyGeojson: FeatureCollection = {\n type: \"FeatureCollection\",\n features: [],\n};\n\nexport function createMaplibreglMapController(\n map: Map,\n maplibregl?: typeof MapLibreGL | undefined,\n marker: boolean | maplibregl.MarkerOptions = true,\n showResultMarkers: boolean | maplibregl.MarkerOptions = true,\n flyToOptions: FlyToOptions = {},\n fitBoundsOptions: FitBoundsOptions = {},\n fullGeometryStyle:\n | undefined\n | {\n fill?: Pick<FillLayerSpecification, \"layout\" | \"paint\" | \"filter\">;\n line?: Pick<LineLayerSpecification, \"layout\" | \"paint\" | \"filter\">;\n } = {\n fill: {\n paint: {\n \"fill-color\": \"#000\",\n \"fill-opacity\": 0.1,\n },\n filter: [\"all\", [\"==\", [\"geometry-type\"], \"Polygon\"], [\"has\", \"isMask\"]],\n },\n line: {\n layout: {\n \"line-cap\": \"square\",\n },\n paint: {\n \"line-width\": [\"case\", [\"==\", [\"geometry-type\"], \"Polygon\"], 2, 3],\n \"line-dasharray\": [1, 1],\n \"line-color\": \"#3170fe\",\n },\n filter: [\"!\", [\"has\", \"isMask\"]],\n },\n }\n) {\n let eventHandler: ((e: MapEvent) => void) | undefined;\n\n let prevProximity: Proximity = undefined;\n\n let markers: Marker[] = [];\n\n let selectedMarker: maplibregl.Marker | undefined;\n\n let reverseMarker: maplibregl.Marker | undefined;\n\n function addFullGeometryLayer() {\n if (fullGeometryStyle?.fill || fullGeometryStyle?.line) {\n map.addSource(\"full-geom\", {\n type: \"geojson\",\n data: emptyGeojson,\n });\n }\n\n if (fullGeometryStyle?.fill) {\n map.addLayer({\n ...fullGeometryStyle?.fill,\n id: \"full-geom-fill\",\n type: \"fill\",\n source: \"full-geom\",\n });\n }\n\n if (fullGeometryStyle?.line) {\n map.addLayer({\n ...fullGeometryStyle?.line,\n id: \"full-geom-line\",\n type: \"line\",\n source: \"full-geom\",\n });\n }\n }\n\n if (map.loaded()) {\n addFullGeometryLayer();\n } else {\n map.once(\"load\", () => {\n addFullGeometryLayer();\n });\n }\n\n const handleMapClick = (e: MapMouseEvent) => {\n eventHandler?.({\n type: \"mapClick\",\n coordinates: [e.lngLat.lng, e.lngLat.lat],\n });\n };\n\n const handleMoveEnd = () => {\n let c: LngLat;\n\n const proximity =\n map.getZoom() > 9\n ? ([(c = map.getCenter().wrap()).lng, c.lat] as [number, number])\n : undefined;\n\n if (prevProximity !== proximity) {\n prevProximity = proximity;\n\n eventHandler?.({ type: \"proximityChange\", proximity });\n }\n };\n\n function createMarker(interactive = false) {\n if (!maplibregl) {\n throw new Error();\n }\n\n const element = document.createElement(\"div\");\n\n if (interactive) {\n element.classList.add(\"marker-interactive\");\n }\n\n new MarkerIcon({\n props: { displayIn: \"maplibre\" },\n target: element,\n });\n\n return new maplibregl.Marker({ element, offset: [1, -13] });\n }\n\n const ctrl: MapController = {\n setEventHandler(handler: undefined | ((e: MapEvent) => void)): void {\n if (handler) {\n eventHandler = handler;\n\n map.on(\"moveend\", handleMoveEnd);\n\n handleMoveEnd();\n\n map.on(\"click\", handleMapClick);\n } else {\n map.off(\"moveend\", handleMoveEnd);\n\n eventHandler?.({ type: \"proximityChange\", proximity: undefined });\n\n eventHandler = undefined;\n\n map.off(\"click\", handleMapClick);\n }\n },\n\n flyTo(center: [number, number], zoom: number): void {\n map.flyTo({ center, zoom, ...flyToOptions });\n },\n\n fitBounds(bbox: [number, number, number, number], padding: number): void {\n map.fitBounds(\n [\n [bbox[0], bbox[1]],\n [bbox[2], bbox[3]],\n ],\n { padding, ...fitBoundsOptions }\n );\n },\n\n indicateReverse(reverse: boolean): void {\n map.getCanvasContainer().style.cursor = reverse ? \"crosshair\" : \"\";\n },\n\n setReverseMarker(coordinates: [number, number]) {\n if (!maplibregl || !marker) {\n return;\n }\n\n if (reverseMarker) {\n if (!coordinates) {\n reverseMarker.remove();\n\n reverseMarker = undefined;\n } else {\n reverseMarker.setLngLat(coordinates);\n }\n } else if (coordinates) {\n reverseMarker = (\n typeof marker === \"object\"\n ? new maplibregl.Marker(marker)\n : createMarker()\n )\n .setLngLat(coordinates)\n .addTo(map);\n\n reverseMarker.getElement().classList.add(\"marker-reverse\");\n }\n },\n\n setMarkers(\n markedFeatures: Feature[] | undefined,\n picked: Feature | undefined\n ): void {\n if (!marker) {\n return;\n }\n\n function setData(data: GeoJSON) {\n (map.getSource(\"full-geom\") as GeoJSONSource)?.setData(data);\n }\n\n for (const marker of markers) {\n marker.remove();\n }\n\n markers.length = 0;\n\n setData(emptyGeojson);\n\n if (!maplibregl) {\n return;\n }\n\n if (picked) {\n let handled = false;\n\n if (picked.geometry.type === \"GeometryCollection\") {\n const geoms = picked.geometry.geometries.filter(\n (geometry) =>\n geometry.type === \"Polygon\" || geometry.type === \"MultiPolygon\"\n ) as (Polygon | MultiPolygon)[];\n\n if (geoms.length > 0) {\n let geometry = geoms.pop()!;\n\n for (const geom of geoms) {\n geometry = union(geometry, geom) as unknown as\n | Polygon\n | MultiPolygon; // union actually returns geometry\n }\n\n setMask({ ...picked, geometry }, setData);\n\n handled = true;\n } else {\n const geometries = picked.geometry.geometries.filter(\n (geometry) =>\n geometry.type === \"LineString\" ||\n geometry.type === \"MultiLineString\"\n ) as (LineString | MultiLineString)[];\n\n if (geometries.length > 0) {\n setData({\n ...picked,\n geometry: { type: \"GeometryCollection\", geometries },\n });\n\n handled = true;\n }\n }\n }\n\n if (handled) {\n // nothing\n } else if (\n picked.geometry.type === \"Polygon\" ||\n picked.geometry.type === \"MultiPolygon\"\n ) {\n setMask(picked as any, setData);\n } else if (\n picked.geometry.type === \"LineString\" ||\n picked.geometry.type === \"MultiLineString\"\n ) {\n setData(picked as any);\n\n return; // no pin for (multi)linestrings\n }\n\n if (marker) {\n markers.push(\n (typeof marker === \"object\"\n ? new maplibregl.Marker(marker)\n : createMarker()\n )\n .setLngLat(picked.center)\n .addTo(map)\n );\n }\n }\n\n if (showResultMarkers) {\n for (const feature of markedFeatures ?? []) {\n if (feature === picked) {\n continue;\n }\n\n const marker = (\n typeof showResultMarkers === \"object\"\n ? new maplibregl.Marker(showResultMarkers)\n : createMarker(true)\n )\n .setLngLat(feature.center)\n .setPopup(\n new maplibregl.Popup({\n offset: [1, -27],\n closeButton: false,\n closeOnMove: true,\n className: \"maptiler-gc-popup\",\n }).setText(feature.place_name.replace(/,.*/, \"\"))\n )\n .addTo(map);\n\n const element = marker.getElement();\n\n element.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n\n eventHandler?.({ type: \"markerClick\", id: feature.id });\n });\n\n element.addEventListener(\"mouseenter\", () => {\n eventHandler?.({ type: \"markerMouseEnter\", id: feature.id });\n\n marker.togglePopup();\n });\n\n element.addEventListener(\"mouseleave\", () => {\n eventHandler?.({ type: \"markerMouseLeave\", id: feature.id });\n\n marker.togglePopup();\n });\n\n element.classList.toggle(\"marker-fuzzy\", !!feature.matching_text);\n\n markers.push(marker);\n }\n }\n },\n\n setSelectedMarker(index: number): void {\n if (selectedMarker) {\n selectedMarker.getElement().classList.toggle(\"marker-selected\", false);\n }\n\n selectedMarker = index > -1 ? markers[index] : undefined;\n\n selectedMarker?.getElement().classList.toggle(\"marker-selected\", true);\n },\n };\n\n return ctrl;\n}\n","import type {\n Map,\n IControl,\n MarkerOptions,\n FlyToOptions,\n FitBoundsOptions,\n FillLayerSpecification,\n LineLayerSpecification,\n} from \"maplibre-gl\";\nimport type maplibregl from \"maplibre-gl\";\nimport GeocodingControlComponent from \"./GeocodingControl.svelte\";\nimport type { ControlOptions } from \"./types\";\nimport { createMaplibreglMapController } from \"./maplibreglMapController\";\nexport { createMaplibreglMapController } from \"./maplibreglMapController\";\n\ntype MapLibreGL = typeof maplibregl;\n\ntype MapLibreControlOptions = ControlOptions & {\n /**\n * A Maplibre GL instance to use when creating [Markers](https://maplibre.org/maplibre-gl-js-docs/api/markers/#marker).\n * Required if `options.marker` is `true`.\n */\n maplibregl?: MapLibreGL;\n\n /**\n * If `true`, a [Marker](https://maplibre.org/maplibre-gl-js-docs/api/markers/#marker) will be added to the map at the location of the user-selected result using a default set of Marker options.\n * If the value is an object, the marker will be constructed using these options.\n * If `false`, no marker will be added to the map.\n * Requires that `options.maplibregl` also be set.\n *\n * @default true\n */\n marker?: boolean | MarkerOptions;\n\n /**\n * If `true`, [Markers](https://maplibre.org/maplibre-gl-js-docs/api/markers/#marker) will be added to the map at the location the top results for the query.\n * If the value is an object, the marker will be constructed using these options.\n * If `false`, no marker will be added to the map.\n * Requires that `options.maplibregl` also be set.\n *\n * @default true\n */\n showResultMarkers?: boolean | MarkerOptions;\n\n /**\n * If `false`, animating the map to a selected result is disabled.\n * If `true`, animating the map will use the default animation parameters.\n * If an object, it will be passed as options to the map `flyTo` or `fitBounds` method providing control over the animation of the transition.\n *\n * @default true\n */\n flyTo?: boolean | (FlyToOptions & FitBoundsOptions);\n\n /**\n * Style for full feature geometry GeoJSON.\n */\n fullGeometryStyle?: {\n fill: Pick<FillLayerSpecification, \"layout\" | \"paint\" | \"filter\">;\n line: Pick<LineLayerSpecification, \"layout\" | \"paint\" | \"filter\">;\n };\n};\n\nexport class GeocodingControl extends EventTarget implements IControl {\n #gc?: GeocodingControlComponent;\n\n #options: MapLibreControlOptions;\n\n constructor(options: MapLibreControlOptions) {\n super();\n\n this.#options = options;\n }\n\n onAdd(map: Map) {\n const div = document.createElement(\"div\");\n\n div.className =\n \"mapboxgl-ctrl-geocoder mapboxgl-ctrl maplibregl-ctrl-geocoder maplibregl-ctrl\";\n\n const {\n maplibregl,\n marker,\n showResultMarkers,\n flyTo,\n fullGeometryStyle,\n ...restOptions\n } = this.#options;\n\n const flyToOptions = typeof flyTo === \"boolean\" ? {} : flyTo;\n\n const mapController = createMaplibreglMapController(\n map,\n maplibregl,\n marker,\n showResultMarkers,\n flyToOptions,\n flyToOptions,\n fullGeometryStyle\n );\n\n this.#gc = new GeocodingControlComponent({\n target: div,\n props: {\n mapController,\n flyTo: flyTo === undefined ? true : !!flyTo,\n ...restOptions,\n },\n });\n\n for (const eventName of [\n \"select\",\n \"pick\",\n \"featuresListed\",\n \"featuresMarked\",\n \"response\",\n \"optionsVisibilityChange\",\n \"reverseToggle\",\n \"queryChange\",\n ]) {\n this.#gc.$on(eventName, (event) => this.dispatchEvent(event));\n }\n\n return div;\n }\n\n setOptions(options: MapLibreControlOptions) {\n this.#options = options;\n\n const {\n maplibregl,\n marker,\n showResultMarkers,\n flyTo,\n fullGeometryStyle,\n ...restOptions\n } = this.#options;\n\n this.#gc?.$set(restOptions);\n }\n\n setQuery(value: string, submit: boolean | \"always\" = true) {\n (this.#gc as any)?.setQuery(value, submit);\n }\n\n setReverseMode(value: boolean) {\n this.#gc?.$set({ reverseActive: value });\n }\n\n focus() {\n (this.#gc as any)?.focus();\n }\n\n blur() {\n (this.#gc as any)?.blur();\n }\n\n onRemove() {\n (this.#gc as any)?.$destroy();\n }\n}\n"],"names":["noop","assign","tar","src","k","run","fn","blank_object","run_all","fns","is_function","thing","safe_not_equal","a","b","is_empty","obj","create_slot","definition","ctx","$$scope","slot_ctx","get_slot_context","get_slot_changes","dirty","lets","merged","len","i","update_slot_base","slot","slot_definition","slot_changes","get_slot_context_fn","slot_context","get_all_dirty_from_scope","length","null_to_empty","value","append","target","node","insert","anchor","detach","destroy_each","iterations","detaching","element","name","svg_element","text","data","space","listen","event","handler","options","prevent_default","attr","attribute","children","set_data","set_input_value","input","toggle_class","toggle","custom_event","type","detail","bubbles","cancelable","e","current_component","set_current_component","component","get_current_component","onDestroy","createEventDispatcher","callbacks","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","update_scheduled","schedule_update","flush","add_render_callback","seen_callbacks","flushidx","saved_component","update","callback","$$","flush_render_callbacks","filtered","targets","c","outroing","outros","group_outros","check_outros","transition_in","block","local","transition_out","create_component","mount_component","customElement","fragment","after_update","new_on_destroy","destroy_component","make_dirty","init","instance","create_fragment","not_equal","props","append_styles","parent_component","ready","ret","rest","nodes","SvelteComponent","index","$$props","svg","path","div","svg_width_value","displayIn","button","ul","_a","_b","span","t","t_value","t0_value","t2_value","create_if_block_4","li","li_data_selected_value","span3","span2","span0","span1","t0","t2","create_if_block_6","if_block1","create_if_block_5","create_if_block","create_if_block_1","create_if_block_2","create_if_block_3","button1","form","div1","button0","input_1","div0","wrapNum","x","range","includeMax","max","min","d","unwrapBbox","bbox0","bbox","className","apiKey","clearButtonTitle","clearOnBlur","collapsed","country","debounceSearch","enableReverse","errorMessage","filter","flyTo","fuzzyMatch","language","limit","mapController","minLength","noResultsMessage","placeholder","proximity","reverseActive","reverseButtonTitle","searchValue","showFullGeometry","showPlaceType","showResultsWhileTyping","trackProximity","types","zoom","fetchParameters","focus","blur","setQuery","submit","$$invalidate","selectedItemIndex","handleOnSubmit","handleInput","focused","listFeatures","markedFeatures","picked","lastSearchUrl","error","cachedFeatures","abortController","searchTimeoutRef","focusedDelayed","dispatch","zoomTo","isQuerReverse","search","zoomToResults","err","byId","exact","isReverse","sp","url","ac","res","featureCollection","_c","_d","fuzzyOnly","feature","handleReverse","coordinates","handleKeyDown","dir","debounce","sv","pick","click_handler","$$value","focus_handler","blur_handler","click_handler_2","mouseenter_handler","focus_handler_1","mouseleave_handler","selected","m","__generator","thisArg","body","_","f","y","g","verb","n","v","step","op","Node","key","DEFAULT_COMPARE","splay","comparator","N","l","r","cmp","split","left","right","merge","printRow","root","prefix","isTail","out","printNode","indent","Tree","current","compare","visitor","Q","done","low","high","keys","values","successor","predecessor","toList","presort","size","sort","loadRecursive","mergedList","mergeLists","createList","sortedListToBST","newKey","newData","start","end","middle","head","p","list","l1","l2","p1","p2","pivot","j","tmp","_classCallCheck","Constructor","_defineProperties","descriptor","_createClass","protoProps","staticProps","isInBbox","point","getBboxOverlap","b1","b2","lowerX","upperX","lowerY","upperY","epsilon","EPSILON_SQ","ab","PtRounder","CoordRounder","SplayTree","coord","prevNode","nextNode","rounder","crossProduct","dotProduct","compareVectorAngles","basePt","endPt1","endPt2","v1","v2","kross","sineOfAngle","pShared","pBase","pAngle","vBase","vAngle","cosineOfAngle","horizontalIntersection","pt","verticalIntersection","intersection","pt1","pt2","ve","d1","d2","x1","x2","y1","y2","SweepEvent","ptCmp","Segment","aPt","bPt","isLeft","other","otherEvents","iMax","evt","numEvents","evt1","evt2","events","baseEvent","_this","cache","fillCache","linkedEvent","nextEvent","_cache$get","asine","acosine","_cache$get2","bsine","bcosine","segmentId","alx","blx","arx","brx","aly","bly","ary","bry","aCmpBLeft","bCmpARight","bCmpALeft","aCmpBRight","_bCmpARight","_aCmpBRight","ay","ax","by","bx","leftSE","rightSE","rings","windings","newRightSE","lPt","rPt","yDist","xFromYDist","xDist","yFromXDist","tBbox","oBbox","bboxOverlap","tlp","trp","olp","orp","touchesOtherLSE","touchesThisLSE","touchesOtherRSE","touchesThisRSE","newEvents","alreadyLinked","newLeftSE","oldRightSE","newSeg","tmpEvt","consumer","consumee","_tmp","ring","winding","seg","beforeState","ringsAfter","windingsAfter","mpsAfter","polysAfter","polysExclude","_i","_iMax","_ring","poly","_index","_i2","_iMax2","mp","mpsBefore","operation","noBefores","noAfters","least","most","diff","isJustSubject","mps","leftPt","rightPt","cmpPts","RingIn","geomRing","isExterior","firstPoint","prevPoint","sweepEvents","segment","PolyIn","geomPoly","multiPoly","ringSweepEvents","jMax","MultiPolyIn","geom","isSubject","polySweepEvents","RingOut","allSegments","ringsOut","prevEvent","startingPoint","intersectionLEs","availableLEs","firstPt","lastPt","indexLE","intersectionLE","ringEvents","prevPt","points","_pt","_nextPt","nextPt","iStart","iEnd","orderedPoints","enclosing","leftMostEvt","prevSeg","prevPrevSeg","PolyOut","exteriorRing","ringGeom","MultiPolyOut","polyGeom","polys","enclosingRing","SweepLine","queue","nextSeg","prevMySplitter","prevInter","newEventsFromSplit","nextMySplitter","nextInter","_newEventsFromSplit","mySplitter","cmpSplitters","_newEventsFromSplit2","inter","_newEventsFromSplit3","_i3","_iMax3","_newEventsFromSplit4","_i4","_iMax4","POLYGON_CLIPPING_MAX_QUEUE_SIZE","POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS","Operation","moreGeoms","multipolys","subject","mpA","_j","_jMax","sweepLine","prevQueueSize","_evt","result","union","_len","_key","intersection$1","_len2","_key2","xor","_len3","_key3","difference","subjectGeom","_len4","clippingGeoms","_key4","earthRadius","factors","properties","feat","isNumber","polygon","coordinates_1","features","fc","multiPolygon","radiansToLength","radians","units","factor","lengthToRadians","distance","num","getGeom","geojson","poly1","poly2","geom1","geom2","unioned","polygonClipping","polygon1","polygon2","differenced","coordEach","excludeWrapCoord","geometry","stopG","coords","geometryMaybeCollection","wrapShrink","coordIndex","isGeometryCollection","isFeatureCollection","isFeature","stop","featureIndex","geomIndex","multiFeatureIndex","geometryIndex","geomType","featureEach","geomEach","featureProperties","featureBBox","featureId","center","ext","arrayLike","relativeStart","relativeEnd","val","NumberUtil","tolerance","IllegalArgumentException","Error","message","Double","staticAccessors$1","Comparable","Clonable","Comparator","Serializable","Coordinate","staticAccessors","ordinateIndex","o","dx","dy","dz","DimensionalComparator","dimensionsToTest","dimensionsToTest$1","o1","o2","c1","c2","compX","compY","compZ","CoordinateSequenceFactory","Location","staticAccessors$4","locationValue","hasInterface","MathUtil","staticAccessors$5","ln","v3","v4","x$1","min$1","max$1","v1$1","v2$1","v3$1","StringBuffer","str","Integer","Character","DD","dd","hi","lo","staticAccessors$7","insertDecimalPoint","magnitude","mag","scale","decimalPointPos","buf","numDigits","digit","rebiasBy10","digitChar","continueExtractingDigits","remMag","y$1","yhi","ylo","hc","tc","hy","ty","C","U","u","zhi","zlo","exp","s","fhi","flo","plus5","value$1","axdd","diffSq","H","h","S","H$1","h$1","T","S$1","s$1","e$1","f$1","hx","tx","specialStr","sigDigits","numZeroes","zeroes","digits","expStr","trailingDigits","digitsWithDecimal","strlen","isNegative","signCh","numBeforeDec","ch","ex","val2","numDecPlaces","scale$1","xAbs","xLog10","xMag","xApprox","CGAlgorithmsDD","staticAccessors$6","q","dx1","dy1","dx2","dy2","det","q1","q2","denom1","denom2","denom","numx1","numx2","numx","fracP","numy1","numy2","numy","fracQ","pa","pb","pc","detsum","detleft","detright","errbound","CoordinateSequence","staticAccessors$8","env","Exception","NotRepresentableException","Exception$$1","System","srcPos","dest","destPos","HCoordinate","_x","_y","p1$1","p2$1","_x$1","_y$1","_w","p1$2","p2$2","px","py","pw","qx","qy","qw","w","xInt","yInt","Envelope","staticAccessors$9","otherEnvelope","intMinX","intMinY","intMaxX","intMaxY","transX","transY","deltaX","deltaY","minq","maxq","minp","maxp","regExes","WKTParser","geometryFactory","GeometryFactory","wkt","matches","parse$1","extract$1","wktType","coordinate$1","point$1","multipoint$1","this$1","array","linestring$1","linearring$1","multilinestring$1","polygon$1","multipolygon$1","collection","components","line","lines","linestring","linearring","shell","holes","polygons","wktArray","WKTWriter","p0","RuntimeException","AssertionFailedException","RuntimeException$$1","Assert","assertion","expectedValue","actualValue","LineIntersector","staticAccessors$10","segmentIndex","intIndex","catBuf","p3","p4","dist0","dist1","precisionModel","inputLineIndex","dist","ptIndex","pdx","pdy","RobustLineIntersector","LineIntersector$$1","intPt","env0","env1","CGAlgorithms","n1","n2","n3","n4","normPt","x3","x4","xabs","intPtDD","isIn","p1q1p2","p1q2p2","q1p1q2","q1p2q2","n00","n01","n10","n11","minX0","minY0","maxX0","maxY0","minX1","minY1","maxX1","maxY1","intMidX","intMidY","Pq1","Pq2","Qp1","Qp2","collinear","nearestPt","minDist","RobustDeterminant","sign","swap","RayCrossingCounter","minx","maxx","xIntSign","counter","p$1","ring$1","counter$1","i$1","staticAccessors$3","sum","x0","x0$1","sum$1","A","B","D","noIntersection","rNumb","sNum","pts","y0","nPts","hiPt","hiIndex","iPrev","iNext","prev","next","disc","isCCW","len2","minDistance","lineIntersector","GeometryComponentFilter","Geometry","factory","staticAccessors$11","g$1","other$1","comp","copy","SRID","userData","aElement","bElement","comparison","geometries","geometryChangedFilter","CoordinateFilter","BoundaryNodeRule","staticAccessors$12","boundaryCount","Mod2BoundaryNodeRule","EndPointBoundaryNodeRule","MultiValentEndPointBoundaryNodeRule","MonoValentEndPointBoundaryNodeRule","Collection","IndexOutOfBoundsException","Iterator","List","Collection$$1","NoSuchElementException","ArrayList","List$$1","oldElement","Iterator_","found","Iterator$$1","arrayList","CoordinateList","ArrayList$$1","coord$1","allowRepeated","coll","isChanged","clone","coord$2","allowRepeated$1","last","allowRepeated$2","coord$3","allowRepeated$3","direction","i$2","i$3","coord$4","allowRepeated$4","coord$5","allowRepeated$5","inc","CoordinateArrays","staticAccessors$13","ForwardComparator","BidirectionalComparator","testPts","testPt","firstCoordinate","newCoordinates","coord1","coord2","coord1$1","coord2$1","coordinateComparator","coordList","mid","nonNull","newCoord","srcStart","destStart","pts1","pts2","coordinate","minCoord","npts","extractPts","iPts","forwardComp","isEqualRev","dir1","dir2","i1","i2","comparePt","Map$1","SortedMap","Map","OperationNotSupported","Set","HashSet","Set$$1","Iterator_$1","hashSet","BLACK","RED","colorOf","parentOf","setColor","leftOf","rightOf","TreeMap","parent","oldValue","Lineal","SortedSet","TreeSet","Iterator_$2","treeSet","Arrays","Dimension","staticAccessors$14","dimensionValue","dimensionSymbol","GeometryFilter","CoordinateSequenceFilter","seq","GeometryCollection","Geometry$$1","envelope","childCoordinates","area","otherCollection","dimension","numPoints","revGeoms","theseElements","otherElements","o$1","gc","thisGeom","otherGeom","holeComp","filter$1","filter$2","filter$3","MultiLineString","GeometryCollection$$1","nLines","revLines","BoundaryOp","lineStrings","bnRule","geom$1","bnRule$1","mLine","bdyPts","LineString","closedEndpointOnBoundary","it","entry","valence","Counter","bop","bop$1","PrintStream","StringReader","DecimalFormat","ByteArrayOutputStream","IOException","LineNumberReader","StringUtil","staticAccessors$15","os","ps","t$1","depth","stackTrace","lineNumberReader","separator","separatorlen","tokenList","tmpString","pos","token","CoordinateSequences","minDim","dim","cs1","cs2","cs1Size","cs2Size","fact","newseq","cs","isClosed","otherLineString","revLine","line$1","ls","Puntal","Point","Polygonal","Polygon","shellCoordinates","prevX","prevY","xChanged","yChanged","otherPolygon","thisShell","otherPolygonShell","clockwise","uniqueCoordinates","minCoordinate","otherShell","thisShell$1","otherShell$1","shellComp","nHole1","nHole2","thisHole","otherHole","MultiPoint","LinearRing","LineString$$1","rev","MultiPolygon","allRings","allRingsArray","GeometryEditor","staticAccessors$16","isUserDataCopied","collectionForType","newPolygon","hole","NoOpGeometryOperation","CoordinateOperation","CoordinateSequenceOperation","CoordinateArraySequence","coordSeq","size$1","dimension$1","staticAccessors$18","cloneCoordinates","strBuf","CoordinateArraySequenceFactory","staticAccessors$17","HashMap","MapInterface","PrecisionModel","Type","modelType","pm","staticAccessors$19","otherPrecisionModel","otherSigDigits","description","floatSingleVal","maxSigDigits","pm1","pm2","staticAccessors$1$1","staticAccessors$2","geomList","geomClass","isHeterogeneous","hasGeometryCollection","partClass","geom0","isCollection","coordinates$1","shell$1","editor","ptSeq","multiPolygons","multiPolygonArray","geometryArray","multiLineStrings","multiLineStringArray","lineStringArray","multiPoints","multiPointArray","linearRings","linearRingArray","pointArray","polygonArray","exemplar","geometryTypes","GeoJSONParser","json","parse","extract","sub","linearRing","multipoint","geoJson","multilinestring","shellGeoJson","holeGeoJson","multipolygon","GeoJSONReader","GeoJSONWriter","Position","staticAccessors$20","position","EmptyStackException","Stack","RightmostEdgeFinder","de","side","pPrev","pNext","orientation","usePrev","star","dirEdgeList","rightmostSide","TopologyException","msg","LinkedList","BufferSubgraph","startEdge","de$1","outsideDepth","nodesVisited","nodeQueue","startNode","sym","adjNode","graph","edgeEnv","dirEdge","nodeStack","symNode","TopologyLocation","location","on","gl","on$1","locValue","newLoc","temp","posIndex","locIndex","locValue$1","le","loc","Label","onLoc","lbl","onLoc$1","onLoc$2","leftLoc","rightLoc","geomIndex$1","onLoc$3","leftLoc$1","rightLoc$1","count","location$1","label","lineLabel","EdgeRing","isFirstEdge","degree","edge","isForward","edgePts","startIndex","startIndex$1","deLabel","deLabel$1","holeLR","MinimalEdgeRing","EdgeRing$$1","er","MaximalEdgeRing","minEdgeRings","minEr","GraphComponent","isVisited","isInResult","isCovered","im","GraphComponent$$1","edges","label2","eltIndex","nLoc","argIndex","onLocation","thisLoc","NodeMap","nodeFact","node$1","bdyNodes","Quadrant","staticAccessors$21","quad","quad1","quad2","halfPlane","EdgeEnd","edge$1","edge$2","p0$1","label$1","angle","lastDotPos","boundaryNodeRule","DirectedEdge","EdgeEnd$$1","depthVal","isInteriorAreaEdge","nextMin","minEdgeRing","isLine","isExteriorIfArea0","isExteriorIfArea1","edgeRing","depthDelta","directionFactor","oppositePos","delta","oppositeDepth","currLocation","nextLocation","NodeFactory","PlanarGraph","nodeit","ep0","ep1","eCoord","ee","edgesToAdd","de1","de2","PolygonBuilder","edgeRings","shellList","freeHoleList","resultPolyList","maxEdgeRings","dirEdges","testEr","testRing","testEnv","minShell","minEnv","tryShell","tryRing","tryEnv","isContained","shellCount","Boundable","ItemBoundable","bounds","item","PriorityQueue","minItem","child","ItemVisitor","SpatialIndex","itemEnv","AbstractNode","level","staticAccessors$22","childBoundable","Collections","alen","BoundablePair","boundable1","boundable2","itemDistance","priQ","isComp1","isComp2","nd","bndComposite","bndOther","bp","AbstractSTRtree","nodeCapacity","nodeCapacity$1","staticAccessors$23","childToRemove","valuesTree","valuesTreeForNode","valuesTreeForChild","boundables","level$1","top","boundables$1","boundable","searchBounds","searchBounds$1","searchBounds$2","visitor$1","childBoundables","searchBounds$3","matches$1","childBoundables$1","childBoundable$1","item$1","childToPrune","boundablesOfALevel","parentBoundables","maxChildDepth","childDepth","newLevel","sortedChildBoundables","IntersectsOp","ItemDistance","item1","item2","STRtree","AbstractSTRtree$$1","verticalSlices","STRtreeNode","sliceCount","sliceCapacity","slices","boundablesAddedToSlice","searchEnv","searchEnv$1","minLeafCount","itemDist","initBndPair","tree","itemDist$1","bp$1","initBndPair$1","maxDistance","distanceLowerBound","minPair","bndPair","currentDistance","itemDist$2","bnd","bp$2","aBounds","bBounds","AbstractNode$$1","SegmentPointComparator","octant","xSign","ySign","compareSign0","compareSign1","SegmentNode","segString","segmentOctant","maxSegmentIndex","SegmentNodeList","eiPrev","ei","collapsedVertexIndexes","vertexIndex","ei0","ei1","lastSegStartPt","useIntPt1","edgeList","newEdge","collapsedVertexIndex","numVerticesBetween","isCollapsed","maxSegIndex","ipt","NodedSegmentString","eiNew","splitEdges","split0","pt0","splitn","splitnPts","ptn","Octant","adx","ady","dx$1","dy$1","SegmentString","NodableSegmentString","intPt$1","segmentIndex$1","normalizedSegmentIndex","nextSegIndex","segStrings","resultEdgelist","segStrings$1","resultEdgelist$1","ss","LineSegment","staticAccessors$24","orient0","orient1","geomFactory","pf0","pf1","newp0","newp1","closestPt","close00","close01","close10","close11","comp0","segmentLengthFraction","offsetDistance","segx","segy","ux","uy","offsetx","offsety","inputPt","segFrac","bits0","hash0","bits1","hash1","MonotoneChainOverlapAction","mc1","start1","mc2","start2","MonotoneChain","context","start0","end0","mcs","mc","mco","id","end1","p00","p01","p10","p11","mid0","mid1","MonotoneChainBuilder","startIndexList","safeStart","chainQuad","pts$1","mcList","Noder","SinglePassNoder","segInt","MCIndexNoder","SinglePassNoder$$1","si","segStr","segChains","inputSegStrings","overlapAction","SegmentOverlapAction","queryChain","overlapChains","testChain","MonotoneChainOverlapAction$$1","ss1","ss2","BufferParameters","quadrantSegments","quadrantSegments$1","endCapStyle","quadrantSegments$2","endCapStyle$1","joinStyle","mitreLimit","staticAccessors$25","quadSegs","simplifyFactor","isSingleSided","alpha","BufferInputLineSimplifier","inputLine","staticAccessors$26","i0","distanceTol","midIndex","lastIndex","isMiddleVertexDeleted","isAngleToSimplify","isConcave","simp","OffsetSegmentString","staticAccessors$28","bufPt","ptDist","startPt","minimimVertexDistance","Angle","staticAccessors$29","dx0","dy0","dotprod","anglePrev","angleNext","tip1","tail","tip2","a1","a2","ang1","ang2","delAngle","angleDegrees","crossproduct","angDel","OffsetSegmentGenerator","bufParams","staticAccessors$27","addStartPoint","outsideTurn","offsetL","offsetR","squareCapSideOffset","squareCapLOffset","squareCapROffset","offset0","offset1","isMitreWithinLimit","mitreRatio","radius","startAngle","endAngle","s1","s2","ang0","angDiff","angDiffHalf","midAng","mitreMidAng","mitreDist","bevelDelta","bevelHalfLen","bevelMidX","bevelMidY","bevelMidPt","mitreMidLine","bevelEndLeft","bevelEndRight","offset","sideSign","totalAngle","nSegs","initAngle","currAngleInc","currAngle","numInt","OffsetCurveBuilder","inputPts","isRightSide","posDistance","segGen","curvePts","distTol","simp2","simp1","lineCoord","bufDistance","SubgraphDepthLocater","subgraphs","staticAccessors$30","stabbingRayLeftPt","stabbedSegments","bsg","stabbingRayLeftPt$1","stabbedSegments$1","ds","DepthSegment","stabbingRayLeftPt$2","stabbedSegments$2","orientIndex","seg0","seg1","compare0","Triangle","m00","m01","m10","m11","v0","z","lenAB","lenBC","lenCA","maxLen","cx","cy","ccx","ccy","len0","frac","splitPt","uz","vx","vy","vz","crossx","crossy","crossz","absSq","area3D","len1","circum","inCentreX","inCentreY","OffsetCurveSetBuilder","inputGeom","curveBuilder","curve","offsetSide","shellCoord","holeCoord","triangleCoord","bufferDistance","tri","inCentre","distToCentre","cwLeftLoc","cwRightLoc","ringCoord","envMinDimension","PointOnGeometryLocator","GeometryCollectionIterator","SimplePointInAreaLocator","geomi","g2","EdgeEndStar","iNextCW","startLoc","currLoc","it$1","geomGraph","lastEdgeIndex","startLabel","eSearch","hasDimensionalCollapseEdge","geomi$1","DirectedEdgeStar","EdgeEndStar$$1","firstOut","incoming","state","nextOut","nextIn","de0","deLast","quad0","nodeLabel","prevOut","firstIn","edgeIndex","startDepth","targetLastDepth","nextDepth","lastDepth","endIndex","startDepth$1","currDepth","nextDe","degree$1","nextOut$1","nextIn$1","eLabel","eLoc","OverlayNodeFactory","NodeFactory$$1","OrientedCoordinateArray","oca","orientation1","orientation2","limit1","limit2","compPt","done1","done2","EdgeList","edgeColl","matchEdge","SegmentIntersector","e0","segIndex0","e1","segIndex1","IntersectionAdder","EdgeIntersection","EdgeIntersectionList","Edge","MonotoneChainIndexer","MonotoneChainEdge","mcb","chainIndex","chainIndex0","mce","chainIndex1","mce$1","Depth","staticAccessors$31","depthValue","minDepth","newValue","newPts","newe","isIsolated","isEqualForward","isEqualReverse","iRev","BufferBuilder","existingEdge","existingLabel","labelToMerge","mergeDelta","existingDelta","newDelta","subgraphList","polyBuilder","processedGraphs","subgraph","locater","emptyGeom","noder","curveSetBuilder","bufferSegStrList","resultGeom","nodedSegStrings","oldLabel","lLoc","rLoc","ScaledNoder","scaleFactor","noder$1","scaleFactor$1","offsetX","offsetY","nodedSegmentStrings","roundPts","roundPtsNoDup","splitSS","intSegStrings","NodingValidator","staticAccessors$33","ss$1","ss0","ss0$1","ss1$1","pts0","HotPixel","staticAccessors$34","segMinx","segMaxx","segMiny","segMaxy","isOutsidePixelEnv","intersects","pScaled","safeTolerance","intersectsLeft","intersectsBottom","segIndex","MonotoneChainSelectAction","MCIndexPointSnapper","staticAccessors$35","hotPixel","hotPixel$1","parentEdge","hotPixelVertexIndex","pixelEnv","hotPixelSnapAction","HotPixelSnapAction","MonotoneChainSelectAction$$1","InteriorIntersectionFinderAdder","MCIndexSnapRounder","inputSegmentStrings","resultSegStrings","nv","intersections","intFinderAdder","edge0","isNodeAdded","snapPts","snapPt","BufferOp","staticAccessors$32","fixedPM","bufBuilder","precDigits","precisionDigits","sizeBasedScaleFactor","argPM","gBuf","geomBuf","distance$1","bufOp","geomBuf$1","g$2","distance$2","params","bufOp$1","geomBuf$2","g$3","distance$3","bufOp$2","geomBuf$3","maxPrecisionDigits","envMax","expandByDistance","bufEnvMax","bufEnvPrecisionDigits","minUnitLog10","PointPairDistance","DistanceToPointFinder","tempSegment","pt$1","ptDist$1","pt$2","ptDist$2","pt$3","ptDist$3","closestPt$1","BufferCurveMaximumDistanceFinder","staticAccessors$36","distFilter","MaxMidpointDistanceFilter","MaxPointDistanceFilter","bufferCurve","midPt","PolygonExtracter","comps","LinearComponentExtracter","lines$1","isForcedToLineString","forceToLineString","geoms","geom$2","lines$2","geoms$1","lines$3","forceToLineString$1","geom$3","lines$4","forceToLineString$2","PointLocator","boundaryRule","shellLoc","holeLoc","p$2","ptCoord","ml","mpoly","GeometryLocation","component$1","staticAccessors$38","PointExtracter","ConnectedElementLocationFilter","locations","DistanceOp","g0","g1","g0$1","g1$1","terminateDistance","locPtPoly","polyGeomIndex","locPtPoly$1","locationsIndex","insideLocs","locs","polys$1","locPtPoly$2","ptLoc","locPtPoly$3","locGeom","lines0","lines1","flip","nearestPts","coord0","segClosestPoint","line0","line1","locGeom$1","coord0$1","dist$1","points0","points1","distOp","PointPairDistance$2","DistanceToPoint","DiscreteHausdorffDistance","staticAccessors$39","densifyFrac","discreteGeom","MaxPointDistanceFilter$1","fracFilter","MaxDensifiedByFractionDistanceFilter","fraction","delx","dely","BufferDistanceValidator","staticAccessors$37","bufCurve","maxDist","haus","distDelta","inputCurve","lineExtracter","BufferResultValidator","staticAccessors$40","padding","expectedEnv","bufEnv","distValid","inputArea","resultArea","checkName","validator","BasicSegmentString","InteriorIntersectionFinder","isCheckEndSegmentsOnly","findAllIntersections","keepIntersections","isEndSegPresent","finder","FastNodingValidator","intSegs","EdgeNodingValidator","GeometryCollectionMapper","mapOp","mapped","mapper","LineBuilder","ptLocator","opCode","targetIndex","OverlayOp","edgesList","PointBuilder","GeometryTransformer","isAllValidLinearRings","transGeomList","transformGeom","seqSize","LineStringSnapper","srcLine","snapTolerance","srcPts","snapTolerance$1","srcCoords","srcPt","snapVert","distinctPtCount","snapIndex","allowSnappingToSourceVertices","GeometrySnapper","srcGeom","staticAccessors$41","snapGeom","snapTrans","SnapTransformer","cleanResult","snappedGeom","ringPts","minSegLen","snapTol","ptSet","segLen","snapper0","snapper1","fixedSnapTol","minDimension","GeometryTransformer$$1","isSelfSnap","snapper","CommonBits","numBits","numSignExp","bits","numStr","padStr","bitStr","mask","nBits","invMask","zeroed","num1","num2","CommonBitsRemover","CommonCoordinateFilter","staticAccessors$42","trans","Translater","invCoord","xp","yp","SnapOverlayOp","remGeom","prepGeom","SnapIfNeededOverlayOp","isSuccess","savedException","isValid","MonotoneChain$2","SweepLineEvent","insertEvent","staticAccessors$43","deleteEventIndex","pe","ev","EdgeSetIntersector","SegmentIntersector$2","includeProper","recordIsolated","isDoneWhenProperInt","bdyNodes0","bdyNodes1","SimpleMCSweepLineIntersector","EdgeSetIntersector$$1","edges0","edges1","si$1","si$2","testAllSegments","edgeSet","ev0","mc0","ev1","edges$1","IntervalRTreeNode","staticAccessors$45","queryMin","queryMax","NodeComparator","mid2","IntervalRTreeLeafNode","IntervalRTreeNode$$1","IntervalRTreeBranchNode","SortedPackedIntervalRTree","ArrayListVisitor","IndexedPointInAreaLocator","IntervalIndexedGeometry","staticAccessors$44","rcc","SegmentVisitor","GeometryGraph","PlanarGraph$$1","parentGeom","argIndex$1","parentGeom$1","boundaryNodeRule$1","computeRingSelfNodes","li$1","computeRingSelfNodes$1","isDoneIfProperInt","esi","isRings","computeAllSegments","edgelist","lr","cwLeft","cwRight","eiIt","GeometryGraphOp","g0$2","GeometryMapper","op$1","mapped$1","gr","resultPointList","resultLineList","opcode","newEdges","overlayOpCode","baseSplitEdges","lineBuilder","pointBuilder","graphNode","newNode","ni","gov","geomOv","dim0","dim1","resultDimension","geomFact","loc0","loc1","loc0$1","loc1$1","FuzzyPointLocator","boundaryDistanceTolerance","extracter","PolygonalLineworkExtracter","linework","OffsetPointGenerator","offsetPts","doLeft","doRight","midX","midY","offsetLeft","offsetRight","OverlayResultValidator","staticAccessors$46","overlayOp","expectedInterior","overlayOp$1","ptGen","resultInInterior","GeometryCombiner","elems","elemGeom","combiner","combiner$1","combiner$2","obj0","obj1","obj0$1","obj1$1","obj2","list$1","CascadedPolygonUnion","staticAccessors$47","geomTree","disjointGeoms","intersectingGeoms","elem","g0Env","g1Env","combo","commonEnv","itemTree","unionAll","common","disjointPolys","g0Int","g1Int","overallUnion","gColl","factory$1","gColl$1","unionAll$1","UnionOp","adder","Adder","add","bv","av","pi","halfPi","quarterPi","tau","degrees","abs","atan","atan2","cos","sin","sqrt","acos","asin","streamGeometry","stream","streamGeometryType","streamObjectType","object","streamLine","streamPolygon","closed","geoStream","spherical","cartesian","lambda","phi","cosPhi","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleStream","t1","cosRadius","sinRadius","circleRadius","clipBuffer","clipLine","pointEqual","Intersection","clipPolygon","segments","compareIntersection","startInside","interpolate","clip","link","ascending","bisector","ascendingComparator","arrays","clipMax","clipMin","clipExtent","visible","from","to","corner","comparePoint","ca","cb","activeStream","bufferStream","x__","y__","v__","x_","y_","v_","first","clean","clipStream","lineStart","lineEnd","polygonStart","polygonEnd","polygonInside","a0","b0","cleanInside","linePoint","polygonContains","normal","point0","lambda0","phi0","sinPhi0","cosPhi0","lambda1","sinPhi1","cosPhi1","point1","phi1","absDelta","antimeridian","arc","phiArc","identity","boundsStream","boundsPoint","pointVisible","rotate","sink","rotatedStart","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","pointLine","ringSegments","validSegment","clipAntimeridian","clipAntimeridianLine","clipAntimeridianInterpolate","sign0","sign1","clipAntimeridianIntersect","sinLambda0Lambda1","clipCircle","cr","smallRadius","notHemisphere","c0","v00","point2","code","intersect","two","n2n2","n1n2","determinant","n1xn2","uu","polar","meridian","transformer","methods","TransformStream","fitExtent","projection","extent","fitSize","maxDepth","cosMinDistance","resample","project","delta2","resampleNone","resampleLineTo","phi2","lambda2","lambda00","x00","y00","a00","b00","c00","resampleStream","ringPoint","transformRadians","projectionMutator","projectAt","projectRotate","theta","preclip","postclip","projectResample","projectTransform","cacheStream","invert","reset","recenter","azimuthalRaw","azimuthalInvert","sc","cc","azimuthalEquidistantRaw","geoAzimuthalEquidistant","equirectangularRaw","buffer","steps","results","buffered","bufferFeature","multiBuffered","defineProjection","projected","projectCoords","reader","writer","coordsIsNaN","unprojectCoords","proj","fixRing","setMask","setData","fixed","emptyGeojson","createMaplibreglMapController","map","maplibregl","marker","showResultMarkers","flyToOptions","fitBoundsOptions","fullGeometryStyle","eventHandler","prevProximity","markers","selectedMarker","reverseMarker","addFullGeometryLayer","handleMapClick","handleMoveEnd","createMarker","interactive","MarkerIcon","reverse","handled","_gc","_options","GeocodingControl","__privateAdd","__privateSet","restOptions","__privateGet","GeocodingControlComponent","eventName"],"mappings":"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","x_google_ignoreList":[0,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52]}