PageSourceSearch

https://mindfulnessypsicologia.com/wp-content/plugins/wp-google-map-plugin/assets/js/maps.js?ver=4.8.4

js mindfulnessypsicologia.com collected 2026-10-04 13:38:04 UTC 1,052,080 bytes, 10,543 lines download raw bytes

1/* @preserve
2 * Leaflet 1.3.1, a JS library for interactive maps. http://leafletjs.com
3 * (c) 2010-2017 Vladimir Agafonkin, (c) 2010-2011 CloudMade
4 */
5!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i(t.L={})}(this,function(t){"use strict";function i(t){var i,e,n,o;for(e=1,n=arguments.length;e<n;e++){o=arguments[e];for(i in o)t[i]=o[i]}return t}function e(t,i){var e=Array.prototype.slice;if(t.bind)return t.bind.apply(t,e.call(arguments,1));var n=e.call(arguments,2);return function(){return t.apply(i,n.length?n.concat(e.call(arguments)):arguments)}}function n(t){return t._leaflet_id=t._leaflet_id||++ti,t._leaflet_id}function o(t,i,e){var n,o,s,r;return r=function(){n=!1,o&&(s.apply(e,o),o=!1)},s=function(){n?o=arguments:(t.apply(e,arguments),setTimeout(r,i),n=!0)}}function s(t,i,e){var n=i[1],o=i[0],s=n-o;return t===n&&e?t:((t-o)%s+s)%s+o}function r(){return!1}function a(t,i){var e=Math.pow(10,void 0===i?6:i);return Math.round(t*e)/e}function h(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function u(t){return h(t).split(/\s+/)}function l(t,i){t.hasOwnProperty("options")||(t.options=t.options?Qt(t.options):{});for(var e in i)t.options[e]=i[e];return t.options}function c(t,i,e){var n=[];for(var o in t)n.push(encodeURIComponent(e?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(i&&-1!==i.indexOf("?")?"&":"?")+n.join("&")}function _(t,i){return t.replace(ii,function(t,e){var n=i[e];if(void 0===n)throw new Error("No value provided for variable "+t);return"function"==typeof n&&(n=n(i)),n})}function d(t,i){for(var e=0;e<t.length;e++)if(t[e]===i)return e;return-1}function p(t){return window["webkit"+t]||window["moz"+t]||window["ms"+t]}function m(t){var i=+new Date,e=Math.max(0,16-(i-oi));return oi=i+e,window.setTimeout(t,e)}function f(t,i,n){if(!n||si!==m)return si.call(window,e(t,i));t.call(i)}function g(t){t&&ri.call(window,t)}function v(){}function y(t){if("undefined"!=typeof L&&L&&L.Mixin){t=ei(t)?t:[t];for(var i=0;i<t.length;
5i++)t[i]===L.Mixin.Events&&console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.",(new Error).stack)}}function x(t,i,e){this.x=e?Math.round(t):t,this.y=e?Math.round(i):i}function w(t,i,e){return t instanceof x?t:ei(t)?new x(t[0],t[1]):void 0===t||null===t?t:"object"==typeof t&&"x"in t&&"y"in t?new x(t.x,t.y):new x(t,i,e)}function P(t,i){if(t)for(var e=i?[t,i]:t,n=0,o=e.length;n<o;n++)this.extend(e[n])}function b(t,i){return!t||t instanceof P?t:new P(t,i)}function T(t,i){if(t)for(var e=i?[t,i]:t,n=0,o=e.length;n<o;n++)this.extend(e[n])}function z(t,i){return t instanceof T?t:new T(t,i)}function M(t,i,e){if(isNaN(t)||isNaN(i))throw new Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=+t,this.lng=+i,void 0!==e&&(this.alt=+e)}function C(t,i,e){return t instanceof M?t:ei(t)&&"object"!=typeof t[0]?3===t.length?new M(t[0],t[1],t[2]):2===t.length?new M(t[0],t[1]):null:void 0===t||null===t?t:"object"==typeof t&&"lat"in t?new M(t.lat,"lng"in t?t.lng:t.lon,t.alt):void 0===i?null:new M(t,i,e)}function Z(t,i,e,n){if(ei(t))return this._a=t[0],this._b=t[1],this._c=t[2],void(this._d=t[3]);this._a=t,this._b=i,this._c=e,this._d=n}function S(t,i,e,n){return new Z(t,i,e,n)}function E(t){return document.createElementNS("http://www.w3.org/2000/svg",t)}function k(t,i){var e,n,o,s,r,a,h="";for(e=0,o=t.length;e<o;e++){for(n=0,s=(r=t[e]).length;n<s;n++)a=r[n],h+=(n?"L":"M")+a.x+" "+a.y;h+=i?Xi?"z":"x":""}return h||"M0 0"}function I(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}function A(t,i,e,n){return"touchstart"===i?O(t,e,n):"touchmove"===i?W(t,e,n):"touchend"===i&&H(t,e,n),this}function B(t,i,e){var n=t["_leaflet_"+i+e];return"touchstart"===i?t.removeEventListener(Qi,n,!1):"touchmove"===i?t.removeEventListener(te,n,!1):"touchend"===i&&(t.removeEventListener(ie,n,!1),t.removeEventListener(ee,n,!1)),this}function O(t,i,n){var o=e(function(t){if("mouse"!==t.pointerType&&t.MSPOINTER_TYPE_MOUSE&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE){if(!(ne.indexOf(t.target.tagName)<0))return;$(t)}j(t,i)});t["_leaflet_touchstart"+n]=o,t.addEventListener(Qi,o,!1),se||(document.documentElement.addEventListener(Qi,R,!0),document.documentElement.addEventListener(te,D,!0),document.documentElement.addEventListener(ie,N,!0),document.documentElement.addEventListener(ee,N,!0),se=!0)}function R(t){oe[t.pointerId]=t,re++}function D(t){oe[t.pointerId]&&(oe[t.pointerId]=t)}function N(t){delete oe[t.pointerId],re--}function j(t,i){t.touches=[];for(var e in oe)t.touches.push(oe[e]);t.changedTouches=[t],i(t)}function W(t,i,e){var n=function(t){(t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&"mouse"!==t.pointerType||0!==t.buttons)&&j(t,i)};t["_leaflet_touchmove"+e]=n,t.addEventListener(te,n,!1)}function H(t,i,e){var n=function(t){j(t,i)};t["_leaflet_touchend"+e]=n,t.addEventListener(ie,n,!1),t.addEventListener(ee,n,!1)}function F(t,i,e){function n(t){var i;if(Ui){if(!Pi||"mouse"===t.pointerType)return;i=re}else i=t.touches.length;if(!(i>1)){var e=Date.now(),n=e-(s||e);r=t.touches?t.touches[0]:t,a=n>0&&n<=h,s=e}}function o(t){if(a&&!r.cancelBubble){if(Ui){if(!Pi||"mouse"===t.pointerType)return;var e,n,o={};for(n in r)e=r[n],o[n]=e&&e.bind?e.bind(r):e;r=o}r.type="dblclick",i(r),s=null}}var s,r,a=!1,h=250;return t[ue+ae+e]=n,t[ue+he+e]=o,t[ue+"dblclick"+e]=i,t.addEventListener(ae,n,!1),t.addEventListener(he,o,!1),t.addEventListener("dblclick",i,!1),this}function U(t,i){var e=t[ue+ae+i],n=t[ue+he+i],o=t[ue+"dblclick"+i];return t.removeEventListener(ae,e,!1),t.removeEventListener(he,n,!1),Pi||t.removeEventListener("dblclick",o,!1),this}function V(t,i,e,n){if("object"==typeof i)for(var o in i)G(t,o,i[o],e);else for(var s=0,r=(i=u(i)).length;s<r;s++)G(t,i[s],e,n);return this}function q(t,i,e,n){if("object"==typeof i)for(var o in i)K(t,o,i[o],e);else if(i)for(var s=0,r=(i=u(i)).length;s<r;s++)K(t,i[s],e,n);else{for(var a in t[le])K(t,a,t[le][a]);delete t[le]}return this}function G(t,i,e,o){var s=i+n(e)+(o?"_"+n(o):"");if(t[le]&&t[le][s])return this;var r=function(i){return e.call(o||t,i||window.event)},a=r;Ui&&0===i.indexOf("touch")?A(t,i,r,s):!Vi||"dblclick"!==i||!F||Ui&&Si?"addEventListener"in t?"mousewheel"===i?t.addEventListener("onw
5heel"in t?"wheel":"mousewheel",r,!1):"mouseenter"===i||"mouseleave"===i?(r=function(i){i=i||window.event,ot(t,i)&&a(i)},t.addEventListener("mouseenter"===i?"mouseover":"mouseout",r,!1)):("click"===i&&Ti&&(r=function(t){st(t,a)}),t.addEventListener(i,r,!1)):"attachEvent"in t&&t.attachEvent("on"+i,r):F(t,r,s),t[le]=t[le]||{},t[le][s]=r}function K(t,i,e,o){var s=i+n(e)+(o?"_"+n(o):""),r=t[le]&&t[le][s];if(!r)return this;Ui&&0===i.indexOf("touch")?B(t,i,s):!Vi||"dblclick"!==i||!U||Ui&&Si?"removeEventListener"in t?"mousewheel"===i?t.removeEventListener("onwheel"in t?"wheel":"mousewheel",r,!1):t.removeEventListener("mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,r,!1):"detachEvent"in t&&t.detachEvent("on"+i,r):U(t,s),t[le][s]=null}function Y(t){return t.stopPropagation?t.stopPropagation():t.originalEvent?t.originalEvent._stopped=!0:t.cancelBubble=!0,nt(t),this}function X(t){return G(t,"mousewheel",Y),this}function J(t){return V(t,"mousedown touchstart dblclick",Y),G(t,"click",et),this}function $(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this}function Q(t){return $(t),Y(t),this}function tt(t,i){if(!i)return new x(t.clientX,t.clientY);var e=i.getBoundingClientRect(),n=e.width/i.offsetWidth||1,o=e.height/i.offsetHeight||1;return new x(t.clientX/n-e.left-i.clientLeft,t.clientY/o-e.top-i.clientTop)}function it(t){return Pi?t.wheelDeltaY/2:t.deltaY&&0===t.deltaMode?-t.deltaY/ce:t.deltaY&&1===t.deltaMode?20*-t.deltaY:t.deltaY&&2===t.deltaMode?60*-t.deltaY:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?20*-t.detail:t.detail?t.detail/-32765*60:0}function et(t){_e[t.type]=!0}function nt(t){var i=_e[t.type];return _e[t.type]=!1,i}function ot(t,i){var e=i.relatedTarget;if(!e)return!0;try{for(;e&&e!==t;)e=e.parentNode}catch(t){return!1}return e!==t}function st(t,i){var e=t.timeStamp||t.originalEvent&&t.originalEvent.timeStamp,n=pi&&e-pi;n&&n>100&&n<500||t.target._simulatedClick&&!t._simulated?Q(t):(pi=e,i(t))}function rt(t){return"string"==typeof t?document.getElementById(t):t}function at(t,i){var e=t.style[i]||t.currentStyle&&t.currentStyle[i];if((!e||"auto"===e)&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);e=n?n[i]:null}return"auto"===e?null:e}function ht(t,i,e){var n=document.createElement(t);return n.className=i||"",e&&e.appendChild(n),n}function ut(t){var i=t.parentNode;i&&i.removeChild(t)}function lt(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function ct(t){var i=t.parentNode;i.lastChild!==t&&i.appendChild(t)}function _t(t){var i=t.parentNode;i.firstChild!==t&&i.insertBefore(t,i.firstChild)}function dt(t,i){if(void 0!==t.classList)return t.classList.contains(i);var e=gt(t);return e.length>0&&new RegExp("(^|\\s)"+i+"(\\s|$)").test(e)}function pt(t,i){if(void 0!==t.classList)for(var e=u(i),n=0,o=e.length;n<o;n++)t.classList.add(e[n]);else if(!dt(t,i)){var s=gt(t);ft(t,(s?s+" ":"")+i)}}function mt(t,i){void 0!==t.classList?t.classList.remove(i):ft(t,h((" "+gt(t)+" ").replace(" "+i+" "," ")))}function ft(t,i){void 0===t.className.baseVal?t.className=i:t.className.baseVal=i}function gt(t){return void 0===t.className.baseVal?t.className:t.className.baseVal}function vt(t,i){"opacity"in t.style?t.style.opacity=i:"filter"in t.style&&yt(t,i)}function yt(t,i){var e=!1,n="DXImageTransform.Microsoft.Alpha";try{e=t.filters.item(n)}catch(t){if(1===i)return}i=Math.round(100*i),e?(e.Enabled=100!==i,e.Opacity=i):t.style.filter+=" progid:"+n+"(opacity="+i+")"}function xt(t){for(var i=document.documentElement.style,e=0;e<t.length;e++)if(t[e]in i)return t[e];return!1}function wt(t,i,e){var n=i||new x(0,0);t.style[pe]=(Oi?"translate("+n.x+"px,"+n.y+"px)":"translate3d("+n.x+"px,"+n.y+"px,0)")+(e?" scale("+e+")":"")}function Lt(t,i){t._leaflet_pos=i,Ni?wt(t,i):(t.style.left=i.x+"px",t.style.top=i.y+"px")}function Pt(t){return t._leaflet_pos||new x(0,0)}function bt(){V(window,"dragstart",$)}function Tt(){q(window,"dragstart",$)}function zt(t){for(;-1===t.tabIndex;)t=t.parentNode;t.style&&(Mt(),ve=t,ye=t.style.outline,t.style.outline="none",V(window,"keydown",Mt))}function Mt(){ve&&(ve.style.outline=ye,ve=void 0,ye=void 0,q(window,"keydown",Mt))}function Ct(t,i){if(!i||!t.length)return t.slice();var e=i*i;return t=kt(t,e),t=St(t,e)}function Zt(t,i,e){return Math.sqrt(Rt(t,i,e,!0))}function St(t,i){var e=t.length,n=new(typeof Uint8Array!=void 0+""?Uint8Array:Array)(e);n[0]=n[e-1]=1,Et(t,n,i,0,e-1);var o,s=[];for(o=0;o<e;o++)n[o]&&s.push(t[o]);return s}function Et(t,i,e,n,o){var s,r,a,h=0;for(r=n+1;r<=o-1;r++)(a=Rt(t[r],t[n],t[o],!0))>h&&(s=r,h=a);h>e&&(i[s]=1,Et(t,i,e,n,s),Et(t,i,e,s,o))}function kt(t,i){for(var e=[t[0]],n=1,o=0,s=t.length;n<s;n++)Ot(t[n],t[o])>i&&(e.push(t[n]),o=n);return o<s-1&&e.push(t[s-1]),e}function It(t,i,e,n,o){var s,r,a,h=n?Se:Bt(t,e),u=Bt(i,e);for(Se=u;;){if(!(h|u))return[t,i];if(h&u)return!1;a=Bt(r=At(t,i,s=h||u,e,o),e),s===h?(t=r,h=a):(i=r,u=a)}}function At(t,i,e,n,o){var s,r,a=i.x-t.x,h=i.y-t.y,u=n.min,l=n.max;return 8&e?(s=t.x+a*(l.y-t.y)/h,r=l.y):4&e?(s=t.x+a*(u.y-t.y)/h,r=u.y):2&e?(s=l.x,r=t.y+h*(l.x-t.x)/a):1&e&&(s=u.x,r=t.y+h*(u.x-t.x)/a),new x(s,r,o)}function Bt(t,i){var e=0;return t.x<i.min.x?e|=1:t.x>i.max.x&&(e|=2),t.y<i.min.y?e|=4:t.y>i.max.y&&(e|=8),e}function Ot(t,i){var e=i.x-t.x,n=i.y-t.y;return e*e+n*n}function Rt(t,i,e,n){var o,s=i.x,r=i.y,a=e.x-s,h=e.y-r,u=a*a+h*h;return u>0&&((o=((t.x-s)*a+(t.y-r)*h)/u)>1?(s=e.x,r=e.y):o>0&&(s+=a*o,r+=h*o)),a=t.x-s,h=t.y-r,n?a*a+h*h:new x(s,r)}function Dt(t){return!ei(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0]}function Nt(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),Dt(t)}function jt(t,i,e){var n,o,s,r,a,h,u,l,c,_=[1,4,2,8];for(o=0,u=t.length;o<u;o++)t[o]._code=Bt(t[o],i);for(r=0;r<4;r++){for(l=_[r],n=[],o=0,s=(u=t.length)-1;o<u;s=o++)a=t[o],h=t[s],a._code&l?h._code&l||((c=At(h,a,l,i,e))._code=Bt(c,i),n.push(c)):(h._code&l&&((c=At(h,a,l,i,e))._code=Bt(c,i),n.push(c)),n.push(a));t=n}return t}function Wt(t,i){var e,n,o,s,r="Feature"===t.type?t.geometry:t,a=r?r.coordinates:null,h=[],u=i&&i.pointToLayer,l=i&&i.coordsToLatLng||Ht;if(!a&&!r)return null;switch(r.type){case"Point":return e=l(a),u?u(t,e):new Xe(e);case"MultiPoint":for(o=0,s=a.length;o<s;o++)e=l(a[o]),h.push(u?u(t,e):new Xe(e));return new qe(h);case"LineString":case"MultiLineString":return n=Ft(a,"LineString"===r.type?0:1,l),new tn(n,i);case"Polygon":case"MultiPolygon":return n=Ft(a,"Polygon"===r.type?1:2,l),new en(n,i);case"GeometryCollection":for(o=0,s=r.geometries.length;o<s;o++){var c=Wt({geometry:r.geometries[o],type:"Feature",properties:t.properties},i);c&&h.push(c)}return new qe(h);default:throw new Error("Invalid GeoJSON object.")}}function Ht(t){return new M(t[1],t[0],t[2])}function Ft(t,i,e){for(var n,o=[],s=0,r=t.length;s<r;s++)n=i?Ft(t[s],i-1,e):(e||Ht)(t[s]),o.push(n);return o}function Ut(t,i){return i="number"==typeof i?i:6,void 0!==t.alt?[a(t.lng,i),a(t.lat,i),a(t.alt,i)]:[a(t.lng,i),a(t.lat,i)]}function Vt(t,i,e,n){for(var o=[],s=0,r=t.length;s<r;s++)o.push(i?Vt(t[s],i-1,e,n):Ut(t[s],n));return!i&&e&&o.push(o[0]),o}function qt(t,e){return t.feature?i({},t.feature,{geometry:e}):Gt(e)}function Gt(t){return"Feature"===t.type||"FeatureCollection"===t.type?t:{type:"Feature",properties:{},geometry:t}}function Kt(t,i){return new nn(t,i)}function Yt(t,i){return new dn(t,i)}function Xt(t){return Yi?new fn(t):null}function Jt(t){return Xi||Ji?new xn(t):null}var $t=Object.freeze;Object.freeze=function(t){return t};var Qt=Object.create||function(){function t(){}return function(i){return t.prototype=i,new t}}(),ti=0,ii=/\{ *([\w_-]+) *\}/g,ei=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},ni="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",oi=0,si=window.requestAnimationFrame||p("RequestAnimationFrame")||m,ri=window.cancelAnimationFrame||p("CancelAnimationFrame")||p("CancelRequestAnimationFrame")||function(t){window.clearTimeout(t)},ai=(Object.freeze||Object)({freeze:$t,extend:i,create:Qt,bind:e,lastId:ti,stamp:n,throttle:o,wrapNum:s,falseFn:r,formatNum:a,trim:h,splitWords:u,setOptions:l,getParamString:c,template:_,isArray:ei,indexOf:d,emptyImageUrl:ni,requestFn:si,cancelFn:ri,requestAnimFrame:f,cancelAnimFrame:g});v.extend=function(t){var e=function(){this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()},n=e.__super__=this.prototype,o=Qt(n);o.constructor=e,e.prototype=o;for(var s in this)this.hasOwnProperty(s)&&"prototype"!==s&&"__super__"!==s&&(e[s]=this[s]);return t.statics&&(i(e,t.statics),delete t.statics),t.includes&&(y(t.includes),i.apply(null,[o].concat(t.includes)),delete t.includes),o.options&&(t.options=i(Qt(o.options),t.options)),i(o,t),o._initHooks=[],o.callInitHooks=function(){if(!this._initHooksCalled){n.c
vendor: 6,244 bytes, line 5
5allInitHooks&&n.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;t<i;t++)o._initHooks[t].call(this)}},e},v.include=function(t){return i(this.prototype,t),this},v.mergeOptions=function(t){return i(this.prototype.options,t),this},v.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),e="function"==typeof t?t:function(){this[t].apply(this,i)};return this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(e),this};var hi={on:function(t,i,e){if("object"==typeof t)for(var n in t)this._on(n,t[n],i);else for(var o=0,s=(t=u(t)).length;o<s;o++)this._on(t[o],i,e);return this},off:function(t,i,e){if(t)if("object"==typeof t)for(var n in t)this._off(n,t[n],i);else for(var o=0,s=(t=u(t)).length;o<s;o++)this._off(t[o],i,e);else delete this._events;return this},_on:function(t,i,e){this._events=this._events||{};var n=this._events[t];n||(n=[],this._events[t]=n),e===this&&(e=void 0);for(var o={fn:i,ctx:e},s=n,r=0,a=s.length;r<a;r++)if(s[r].fn===i&&s[r].ctx===e)return;s.push(o)},_off:function(t,i,e){var n,o,s;if(this._events&&(n=this._events[t]))if(i){if(e===this&&(e=void 0),n)for(o=0,s=n.length;o<s;o++){var a=n[o];if(a.ctx===e&&a.fn===i)return a.fn=r,this._firingCount&&(this._events[t]=n=n.slice()),void n.splice(o,1)}}else{for(o=0,s=n.length;o<s;o++)n[o].fn=r;delete this._events[t]}},fire:function(t,e,n){if(!this.listens(t,n))return this;var o=i({},e,{type:t,target:this,sourceTarget:e&&e.sourceTarget||this});if(this._events){var s=this._events[t];if(s){this._firingCount=this._firingCount+1||1;for(var r=0,a=s.length;r<a;r++){var h=s[r];h.fn.call(h.ctx||this,o)}this._firingCount--}}return n&&this._propagateEvent(o),this},listens:function(t,i){var e=this._events&&this._events[t];if(e&&e.length)return!0;if(i)for(var n in this._eventParents)if(this._eventParents[n].listens(t,i))return!0;return!1},once:function(t,i,n){if("object"==typeof t){for(var o in t)this.once(o,t[o],i);return this}var s=e(function(){this.off(t,i,n).off(t,s,n)},this);return this.on(t,i,n).on(t,s,n)},addEventParent:function(t){return this._eventParents=this._eventParents||{},this._eventParents[n(t)]=t,this},removeEventParent:function(t){return this._eventParents&&delete this._eventParents[n(t)],this},_propagateEvent:function(t){for(var e in this._eventParents)this._eventParents[e].fire(t.type,i({layer:t.target,propagatedFrom:t.target},t),!0)}};hi.addEventListener=hi.on,hi.removeEventListener=hi.clearAllEventListeners=hi.off,hi.addOneTimeEventListener=hi.once,hi.fireEvent=hi.fire,hi.hasEventListeners=hi.listens;var ui=v.extend(hi),li=Math.trunc||function(t){return t>0?Math.floor(t):Math.ceil(t)};x.prototype={clone:function(){return new x(this.x,this.y)},add:function(t){return this.clone()._add(w(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(w(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new x(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new x(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=li(this.x),this.y=li(this.y),this},distanceTo:function(t){var i=(t=w(t)).x-this.x,e=t.y-this.y;return Math.sqrt(i*i+e*e)},equals:function(t){return(t=w(t)).x===this.x&&t.y===this.y},contains:function(t){return t=w(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+a(this.x)+", "+a(this.y)+")"}},P.prototype={extend:function(t){return t=w(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new x((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new x(this.min.x,this.max.y)},getTopRight:function(){return new x(this.max.x,this.min.y)},getTopLeft:function(){return this.min},getBottomRight:function(){return this.max},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,e;return(t="number"==typeof t[0]||t instanceof x?w(t):b(t))instanceof P?(i=t.min,e=t.max):i=e=t,i.x>=this.min.x&&e.x<=this.max.x&&i.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=b(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>=i.x&&n.x<=e.x,r=o.y>=i.y&&n.y<=e.y;return s&&r},overlaps:function(t){t=b(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>i.x&&n.x<e.x,r=o.y>i.y&&n.y<e.y;return s&&r},isValid:function(){return!(!this.min||!this.max)}},T.prototype={extend:function(t){var i,e,n=this._southWest,o=this._northEast;if(t instanceof M)i=t,e=t;else{if(!(t instanceof T))return t?this.extend(C(t)||z(t)):this;if(i=t._southWest,e=t._northEast,!i||!e)return this}return n||o?(n.lat=Math.min(i.lat,n.lat),n.lng=Math.min(i.lng,n.lng),o.lat=Math.max(e.lat,o.lat),o.lng=Math.max(e.lng,o.lng)):(this._southWest=new M(i.lat,i.lng),this._northEast=new M(e.lat,e.lng)),this},pad:function(t){var i=this._southWest,e=this._northEast,n=Math.abs(i.lat-e.lat)*t,o=Math.abs(i.lng-e.lng)*t;return new T(new M(i.lat-n,i.lng-o),new M(e.lat+n,e.lng+o))},getCenter:function(){return new M((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new M(this.getNorth(),this.getWest())},getSouthEast:function(){return new M(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat}
vendor: 2,436 bytes, line 5
5,getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t="number"==typeof t[0]||t instanceof M||"lat"in t?C(t):z(t);var i,e,n=this._southWest,o=this._northEast;return t instanceof T?(i=t.getSouthWest(),e=t.getNorthEast()):i=e=t,i.lat>=n.lat&&e.lat<=o.lat&&i.lng>=n.lng&&e.lng<=o.lng},intersects:function(t){t=z(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=i.lat&&n.lat<=e.lat,r=o.lng>=i.lng&&n.lng<=e.lng;return s&&r},overlaps:function(t){t=z(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>i.lat&&n.lat<e.lat,r=o.lng>i.lng&&n.lng<e.lng;return s&&r},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t,i){return!!t&&(t=z(t),this._southWest.equals(t.getSouthWest(),i)&&this._northEast.equals(t.getNorthEast(),i))},isValid:function(){return!(!this._southWest||!this._northEast)}},M.prototype={equals:function(t,i){return!!t&&(t=C(t),Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng))<=(void 0===i?1e-9:i))},toString:function(t){return"LatLng("+a(this.lat,t)+", "+a(this.lng,t)+")"},distanceTo:function(t){return _i.distance(this,C(t))},wrap:function(){return _i.wrapLatLng(this)},toBounds:function(t){var i=180*t/40075017,e=i/Math.cos(Math.PI/180*this.lat);return z([this.lat-i,this.lng-e],[this.lat+i,this.lng+e])},clone:function(){return new M(this.lat,this.lng,this.alt)}};var ci={latLngToPoint:function(t,i){var e=this.projection.project(t),n=this.scale(i);return this.transformation._transform(e,n)},pointToLatLng:function(t,i){var e=this.scale(i),n=this.transformation.untransform(t,e);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},unproject:function(t){return this.projection.unproject(t)},scale:function(t){return 256*Math.pow(2,t)},zoom:function(t){return Math.log(t/256)/Math.LN2},getProjectedBounds:function(t){if(this.infinite)return null;var i=this.projection.bounds,e=this.scale(t);return new P(this.transformation.transform(i.min,e),this.transformation.transform(i.max,e))},infinite:!1,wrapLatLng:function(t){var i=this.wrapLng?s(t.lng,this.wrapLng,!0):t.lng;return new M(this.wrapLat?s(t.lat,this.wrapLat,!0):t.lat,i,t.alt)},wrapLatLngBounds:function(t){var i=t.getCenter(),e=this.wrapLatLng(i),n=i.lat-e.lat,o=i.lng-e.lng;if(0===n&&0===o)return t;
vendor: 51,693 bytes, line 5
5var s=t.getSouthWest(),r=t.getNorthEast();return new T(new M(s.lat-n,s.lng-o),new M(r.lat-n,r.lng-o))}},_i=i({},ci,{wrapLng:[-180,180],R:6371e3,distance:function(t,i){var e=Math.PI/180,n=t.lat*e,o=i.lat*e,s=Math.sin((i.lat-t.lat)*e/2),r=Math.sin((i.lng-t.lng)*e/2),a=s*s+Math.cos(n)*Math.cos(o)*r*r,h=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));return this.R*h}}),di={R:6378137,MAX_LATITUDE:85.0511287798,project:function(t){var i=Math.PI/180,e=this.MAX_LATITUDE,n=Math.max(Math.min(e,t.lat),-e),o=Math.sin(n*i);return new x(this.R*t.lng*i,this.R*Math.log((1+o)/(1-o))/2)},unproject:function(t){var i=180/Math.PI;return new M((2*Math.atan(Math.exp(t.y/this.R))-Math.PI/2)*i,t.x*i/this.R)},bounds:function(){var t=6378137*Math.PI;return new P([-t,-t],[t,t])}()};Z.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new x((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}};var pi,mi,fi,gi,vi=i({},_i,{code:"EPSG:3857",projection:di,transformation:function(){var t=.5/(Math.PI*di.R);return S(t,.5,-t,.5)}()}),yi=i({},vi,{code:"EPSG:900913"}),xi=document.documentElement.style,wi="ActiveXObject"in window,Li=wi&&!document.addEventListener,Pi="msLaunchUri"in navigator&&!("documentMode"in document),bi=I("webkit"),Ti=I("android"),zi=I("android 2")||I("android 3"),Mi=parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1],10),Ci=Ti&&I("Google")&&Mi<537&&!("AudioNode"in window),Zi=!!window.opera,Si=I("chrome"),Ei=I("gecko")&&!bi&&!Zi&&!wi,ki=!Si&&I("safari"),Ii=I("phantom"),Ai="OTransition"in xi,Bi=0===navigator.platform.indexOf("Win"),Oi=wi&&"transition"in xi,Ri="WebKitCSSMatrix"in window&&"m11"in new window.WebKitCSSMatrix&&!zi,Di="MozPerspective"in xi,Ni=!window.L_DISABLE_3D&&(Oi||Ri||Di)&&!Ai&&!Ii,ji="undefined"!=typeof orientation||I("mobile"),Wi=ji&&bi,Hi=ji&&Ri,Fi=!window.PointerEvent&&window.MSPointerEvent,Ui=!(!window.PointerEvent&&!Fi),Vi=!window.L_NO_TOUCH&&(Ui||"ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch),qi=ji&&Zi,Gi=ji&&Ei,Ki=(window.devicePixelRatio||window.screen.deviceXDPI/window.screen.logicalXDPI)>1,Yi=!!document.createElement("canvas").getContext,Xi=!(!document.createElementNS||!E("svg").createSVGRect),Ji=!Xi&&function(){try{var t=document.createElement("div");t.innerHTML='<v:shape adj="1"/>';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(t){return!1}}(),$i=(Object.freeze||Object)({ie:wi,ielt9:Li,edge:Pi,webkit:bi,android:Ti,android23:zi,androidStock:Ci,opera:Zi,chrome:Si,gecko:Ei,safari:ki,phantom:Ii,opera12:Ai,win:Bi,ie3d:Oi,webkit3d:Ri,gecko3d:Di,any3d:Ni,mobile:ji,mobileWebkit:Wi,mobileWebkit3d:Hi,msPointer:Fi,pointer:Ui,touch:Vi,mobileOpera:qi,mobileGecko:Gi,retina:Ki,canvas:Yi,svg:Xi,vml:Ji}),Qi=Fi?"MSPointerDown":"pointerdown",te=Fi?"MSPointerMove":"pointermove",ie=Fi?"MSPointerUp":"pointerup",ee=Fi?"MSPointerCancel":"pointercancel",ne=["INPUT","SELECT","OPTION"],oe={},se=!1,re=0,ae=Fi?"MSPointerDown":Ui?"pointerdown":"touchstart",he=Fi?"MSPointerUp":Ui?"pointerup":"touchend",ue="_leaflet_",le="_leaflet_events",ce=Bi&&Si?2*window.devicePixelRatio:Ei?window.devicePixelRatio:1,_e={},de=(Object.freeze||Object)({on:V,off:q,stopPropagation:Y,disableScrollPropagation:X,disableClickPropagation:J,preventDefault:$,stop:Q,getMousePosition:tt,getWheelDelta:it,fakeStop:et,skipped:nt,isExternalTarget:ot,addListener:V,removeListener:q}),pe=xt(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),me=xt(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),fe="webkitTransition"===me||"OTransition"===me?me+"End":"transitionend";if("onselectstart"in document)mi=function(){V(window,"selectstart",$)},fi=function(){q(window,"selectstart",$)};else{var ge=xt(["userSelect","WebkitUserSelect","OUserSelect","MozUserSelect","msUserSelect"]);mi=function(){if(ge){var t=document.documentElement.style;gi=t[ge],t[ge]="none"}},fi=function(){ge&&(document.documentElement.style[ge]=gi,gi=void 0)}}var ve,ye,xe=(Object.freeze||Object)({TRANSFORM:pe,TRANSITION:me,TRANSITION_END:fe,get:rt,getStyle:at,create:ht,remove:ut,empty:lt,toFront:ct,toBack:_t,hasClass:dt,addClass:pt,removeClass:mt,setClass:ft,getClass:gt,setOpacity:vt,testProp:xt,setTransform:wt,setPosition:Lt,getPosition:Pt,disableTextSelection:mi,enableTextSelection:fi,disableImageDrag:bt,enableImageDrag:Tt,preventOutline:zt,restoreOutline:Mt}),we=ui.extend({run:function(t,i,e,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=e||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Pt(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=f(this._animate,this),this._step()},_step:function(t){var i=+new Date-this._startTime,e=1e3*this._duration;i<e?this._runFrame(this._easeOut(i/e),t):(this._runFrame(1),this._complete())},_runFrame:function(t,i){var e=this._startPos.add(this._offset.multiplyBy(t));i&&e._round(),Lt(this._el,e),this.fire("step")},_complete:function(){g(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),Le=ui.extend({options:{crs:vi,center:void 0,zoom:void 0,minZoom:void 0,maxZoom:void 0,layers:[],maxBounds:void 0,renderer:void 0,zoomAnimation:!0,zoomAnimationThreshold:4,fadeAnimation:!0,markerZoomAnimation:!0,transform3DLimit:8388608,zoomSnap:1,zoomDelta:1,trackResize:!0},initialize:function(t,i){i=l(this,i),this._initContainer(t),this._initLayout(),this._onResize=e(this._onResize,this),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),void 0!==i.zoom&&(this._zoom=this._limitZoom(i.zoom)),i.center&&void 0!==i.zoom&&this.setView(C(i.center),i.zoom,{reset:!0}),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._sizeChanged=!0,this.callInitHooks(),this._zoomAnimated=me&&Ni&&!qi&&this.options.zoomAnimation,this._zoomAnimated&&(this._createAnimProxy(),V(this._proxy,fe,this._catchTransitionEnd,this)),this._addLayers(this.options.layers)},setView:function(t,e,n){return e=void 0===e?this._zoom:this._limitZoom(e),t=this._limitCenter(C(t),e,this.options.maxBounds),n=n||{},this._stop(),this._loaded&&!n.reset&&!0!==n&&(void 0!==n.animate&&(n.zoom=i({animate:n.animate},n.zoom),n.pan=i({animate:n.animate,duration:n.duration},n.pan)),this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan))?(clearTimeout(this._sizeTimer),this):(this._resetView(t,e),this)},setZoom:function(t,i){return this._loaded?this.setView(this.getCenter(),t,{zoom:i}):(this._zoom=t,this)},zoomIn:function(t,i){return t=t||(Ni?this.options.zoomDelta:1),this.setZoom(this._zoom+t,i)},zoomOut:function(t,i){return t=t||(Ni?this.options.zoomDelta:1),this.setZoom(this._zoom-t,i)},setZoomAround:function(t,i,e){var n=this.getZoomScale(i),o=this.getSize().divideBy(2),s=(t instanceof x?t:this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1-1/n),r=this.containerPointToLatLng(o.add(s));return this.setView(r,i,{zoom:e})},_getBoundsCenterZoom:function(t,i){i=i||{},t=t.getBounds?t.getBounds():z(t);var e=w(i.paddingTopLeft||i.padding||[0,0]),n=w(i.paddingBottomRight||i.padding||[0,0]),o=this.getBoundsZoom(t,!1,e.add(n));if((o="number"==typeof i.maxZoom?Math.min(i.maxZoom,o):o)===1/0)return{center:t.getCenter(),zoom:o};var s=n.subtract(e).divideBy(2),r=this.project(t.getSouthWest(),o),a=this.project(t.getNorthEast(),o);return{center:this.unproject(r.add(a).divideBy(2).add(s),o),zoom:o}},fitBounds:function(t,i){if(!(t=z(t)).isValid())throw new Error("Bounds are not valid.");var e=this._getBoundsCenterZoom(t,i);return this.setView(e.center,e.zoom,i)},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,i){return this.setView(t,this._zoom,{pan:i})},panBy:function(t,i){if(t=w(t).round(),i=i||{},!t.x&&!t.y)return this.fire("moveend");if(!0!==i.animate&&!this.getSize().contains(t))return this._resetView(this.unproject(this.project(this.getCenter()).add(t)),this.getZoom()),this;if(this._panAnim||(this._panAnim=new we,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),i.noMoveStart||this.fire("movestart"),!1!==i.animate){pt(this._mapPane,"leaflet-pan-anim");var e=this._getMapPanePos().subtract(t).round();this._panAnim.run(this._mapPane,e,i.duration||.25,i.easeLinearity)}else this._rawPanBy(t),this.fire("move").fire("moveend");return this},flyTo:function(t,i,e){function n(t){var i=(g*g-m*m+(t?-1:1)*x*x*v*v)/(2*(t?g:m)*x*v),e=Math.sqrt(i*i+1)-i;return e<1e-9?-18:Math.log(e)}function o(t){return(Math.exp(t)-Math.exp(-t))/2}function s(t){return(Math.exp(t)+Math.exp(-t))/2}function r(t){return o(t)/s(t)}function a(t){return m*(s(w)/s(w+y*t))}function h(t){return m*(s(w)*r(w+y*t)-o(w))/x}function u(t){return 1-Math.pow(1-t,1.5)}function l(){var e=(Date.now()-L)/b,n=u(e)*P;e<=1?(this._flyToFrame=f(l,this),this._move(this.unproject(c.add(_.subtract(c).multiplyBy(h(n)/v)),p),this.getScaleZoom(m/a(n),p),{flyTo:!0})):this._move(t,i)._moveEnd(!0)}if(!1===(e=e||{}).animate||!Ni)return this.setView(t,i,e);this._stop();var c=this.project(this.getCenter()),_=this.project(t),d=this.getSize(),p=this._zoom;t=C(t),i=void 0===i?p:i;var m=Math.max(d.x,d.y),g=m*this.getZoomScale(p,i),v=_.distanceTo(c)||1,y=1.42,x=y*y,w=n(0),L=Date.now(),P=(n(1)-w)/y,b=e.duration?1e3*e.duration:1e3*P*.8;return this._moveStart(!0,e.noMoveStart),l.call(this),this},flyToBounds:function(t,i){var e=this._getBoundsCenterZoom(t,i);return this.flyTo(e.center,e.zoom,i)},setMaxBounds:function(t){return(t=z(t)).isValid()?(this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this.options.maxBounds=t,this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds)):(this.options.maxBounds=null,this.off("moveend",this._panInsideMaxBounds))},setMinZoom:function(t){var i=this.options.minZoom;return this.options.minZoom=t,this._loaded&&i!==t&&(this.fire("zoomlevelschange"),this.getZoom()<this.options.minZoom)?this.setZoom(t):this},setMaxZoom:function(t){var i=this.options.maxZoom;return this.options.maxZoom=t,this._loaded&&i!==t&&(this.fire("zoomlevelschange"),this.getZoom()>this.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds=!0;var e=this.getCenter(),n=this._limitCenter(e,this._zoom,z(t));return e.equals(n)||this.panTo(n,i),this._enforcingBounds=!1,this},invalidateSize:function(t){if(!this._loaded)return this;t=i({animate:!1,pan:!0},!0===t?{animate:!0}:t);var n=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var o=this.getSize(),s=n.divideBy(2).round(),r=o.divideBy(2).round(),a=s.subtract(r);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(e(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:n,newSize:o})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=i({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var n=e(this._handleGeolocationResponse,this),o=e(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(n,o,t):navigator.geolocation.getCurrentPosition(n,o,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var i=t.code,e=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+e+"."})},_handleGeolocationResponse:function(t){var i=new M(t.coords.latitude,t.coords.longitude),e=i.toBounds(t.coords.accuracy),n=this._locateOptions;if(n.setView){var o=this.getBoundsZoom(e);this.setView(i,n.maxZoom?Math.min(o,n.maxZoom):o)}var s={latlng:i,bounds:e,timestamp:t.timestamp};for(var r in t.coords)"number"==typeof t.coords[r]&&(s[r]=t.coords[r]);this.fire("locationfound",s)},addHandler:function(t,i){if(!i)return this;var e=this[t]=new i(this);return this._handlers.push(e),this.options[t]&&e.enable(),this},remove:function(){if(this._initEvents(!0),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),ut(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this._loaded&&this.fire("unload");var t;for(t in this._layers)this._layers[t].remove();for(t in this._panes)ut(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,i){var e=ht("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),i||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new T(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,i,e){t=z(t),e=w(e||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),a=t.getSouthEast(),h=this.getSize().subtract(e),u=b(this.project(a,n),this.project(r,n)).getSize(),l=Ni?this.options.zoomSnap:1,c=h.x/u.x,_=h.y/u.y,d=i?Math.max(c,_):Math.min(c,_);return n=this.getScaleZoom(d,n),l&&(n=Math.round(n/(l/100))*(l/100),n=i?Math.ceil(n/l)*l:Math.floor(n/l)*l),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new x(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,i){var e=this._getTopLeftPoint(t,i);return new P(e,e.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,i){var e=this.options.crs;return i=void 0===i?this._zoom:i,e.scale(t)/e.scale(i)},getScaleZoom:function(t,i){var e=this.options.crs;i=void 0===i?this._zoom:i;var n=e.zoom(t*e.scale(i));return isNaN(n)?1/0:n},project:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.latLngToPoint(C(t),i)},unproject:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.pointToLatLng(w(t),i)},layerPointToLatLng:function(t){var i=w(t).add(this.getPixelOrigin());return this.unproject(i)},latLngToLayerPoint:function(t){return this.project(C(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(C(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(z(t))},distance:function(t,i){return this.options.crs.distance(C(t),C(i))},containerPointToLayerPoint:function(t){return w(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return w(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(w(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(C(t)))},mouseEventToContainerPoint:function(t){return tt(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=rt(t);if(!i)throw new Error("Map container not found.");if(i._leaflet_id)throw new Error("Map container is already initialized.");V(i,"scroll",this._onScroll,this),this._containerId=n(i)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&Ni,pt(t,"leaflet-container"+(Vi?" leaflet-touch":"")+(Ki?" leaflet-retina":"")+(Li?" leaflet-oldie":"")+(ki?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var i=at(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),Lt(this._mapPane,new x(0,0)),this.createPane("tilePane"),this.createPane("shadowPane"),this.createPane("overlayPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(pt(t.markerPane,"leaflet-zoom-hide"),pt(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,i){Lt(this._mapPane,new x(0,0));var e=!this._loaded;this._loaded=!0,i=this._limitZoom(i),this.fire("viewprereset");var n=this._zoom!==i;this._moveStart(n,!1)._move(t,i)._moveEnd(n),this.fire("viewreset"),e&&this.fire("load")},_moveStart:function(t,i){return t&&this.fire("zoomstart"),i||this.fire("movestart"),this},_move:function(t,i,e){void 0===i&&(i=this._zoom);var n=this._zoom!==i;return this._zoom=i,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),(n||e&&e.pinch)&&this.fire("zoom",e),this.fire("move",e)},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return g(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Lt(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[n(this._container)]=this;var i=t?q:V;i(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress",this._handleDOMEvent,this),this.options.trackResize&&i(window,"resize",this._onResize,this),Ni&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){g(this._resizeRequest),this._resizeRequest=f(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var e,o=[],s="mouseout"===i||"mouseover"===i,r=t.target||t.srcElement,a=!1;r;){if((e=this._targets[n(r)])&&("click"===i||"preclick"===i)&&!t._simulated&&this._draggableMoved(e)){a=!0;break}if(e&&e.listens(i,!0)){if(s&&!ot(r,t))break;if(o.push(e),s)break}if(r===this._container)break;r=r.parentNode}return o.length||a||s||!ot(r,t)||(o=[this]),o},_handleDOMEvent:function(t){if(this._loaded&&!nt(t)){var i=t.type;"mousedown"!==i&&"keypress"!==i||zt(t.target||t.srcElement),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,n){if("click"===t.type){var o=i({},t);o.type="preclick",this._fireDOMEvent(o,o.type,n)}if(!t._stopped&&(n=(n||[]).concat(this._findEventTargets(t,e))).length){var s=n[0];"contextmenu"===e&&s.listens(e,!0)&&$(t);var r={originalEvent:t};if("keypress"!==t.type){var a=s.getLatLng&&(!s._radius||s._radius<=10);r.containerPoint=a?this.latLngToContainerPoint(s.getLatLng()):this.mouseEventToContainerPoint(t),r.layerPoint=this.containerPointToLayerPoint(r.containerPoint),r.latlng=a?s.getLatLng():this.layerPointToLatLng(r.layerPoint)}for(var h=0;h<n.length;h++)if(n[h].fire(e,r,!0),r.originalEvent._stopped||!1===n[h].options.bubblingMouseEvents&&-1!==d(this._mouseEvents,e))return}},_draggableMoved:function(t){return(t=t.dragging&&t.dragging.enabled()?t:this).dragging&&t.dragging.moved()||this.boxZoom&&this.boxZoom.moved()},_clearHandlers:function(){for(var t=0,i=this._handlers.length;t<i;t++)this._handlers[t].disable()},whenReady:function(t,i){return this._loaded?t.call(i||this,{target:this}):this.on("load",t,i),this},_getMapPanePos:function(){return Pt(this._mapPane)||new x(0,0)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(t,i){return(t&&void 0!==i?this._getNewPixelOrigin(t,i):this.getPixelOrigin()).subtract(this._getMapPanePos())},_getNewPixelOrigin:function(t,i){var e=this.getSize()._divideBy(2);return this.project(t,i)._subtract(e)._add(this._getMapPanePos())._round()},_latLngToNewLayerPoint:function(t,i,e){var n=this._getNewPixelOrigin(e,i);return this.project(t,i)._subtract(n)},_latLngBoundsToNewLayerBounds:function(t,i,e){var n=this._getNewPixelOrigin(e,i);return b([this.project(t.getSouthWest(),i)._subtract(n),this.project(t.getNorthWest(),i)._subtract(n),this.project(t.getSouthEast(),i)._subtract(n),this.project(t.getNorthEast(),i)._subtract(n)])},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,i,e){if(!e)return t;var n=this.project(t,i),o=this.getSize().divideBy(2),s=new P(n.subtract(o),n.add(o)),r=this._getBoundsOffset(s,e,i);return r.round().equals([0,0])?t:this.unproject(n.add(r),i)},_limitOffset:function(t,i){if(!i)return t;var e=this.getPixelBounds(),n=new P(e.min.add(t),e.max.add(t));return t.add(this._getBoundsOffset(n,i))},_getBoundsOffset:function(t,i,e){var n=b(this.project(i.getNorthEast(),e),this.project(i.getSouthWest(),e)),o=n.min.subtract(t.min),s=n.max.subtract(t.max);return new x(this._rebound(o.x,-s.x),this._rebound(o.y,-s.y))},_rebound:function(t,i){return t+i>0?Math.round(t-i)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(i))},_limitZoom:function(t){var i=this.getMinZoom(),e=this.getMaxZoom(),n=Ni?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(i,Math.min(e,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){mt(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,i){var e=this._getCenterOffset(t)._trunc();return!(!0!==(i&&i.animate)&&!this.getSize().contains(e))&&(this.panBy(e,i),!0)},_createAnimProxy:function(){var t=this._proxy=ht("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(t){var i=pe,e=this._proxy.style[i];wt(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),e===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",function(){var t=this.getCenter(),i=this.getZoom();wt(this._proxy,this.project(t,i),this.getZoomScale(i,1))},this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){ut(this._proxy),delete this._proxy},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,i,e){if(this._animatingZoom)return!0;if(e=e||{},!this._zoomAnimated||!1===e.animate||this._nothingToAnimate()||Math.abs(i-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/n);return!(!0!==e.animate&&!this.getSize().contains(o))&&(f(function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)},this),!0)},_animateZoom:function(t,i,n,o){this._mapPane&&(n&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=i,pt(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:i,noUpdate:o}),setTimeout(e(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&mt(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),f(function(){this._moveEnd(!0)},this))}}),Pe=v.extend({options:{position:"topright"},initialize:function(t){l(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var i=this._container=this.onAdd(t),e=this.getPosition(),n=t._controlCorners[e];return pt(i,"leaflet-control"),-1!==e.indexOf("bottom")?n.insertBefore(i,n.firstChild):n.appendChild(i),this},remove:function(){return this._map?(ut(this._container),this.onRemove&&this.onRemove(this._map),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),be=function(t){return new Pe(t)};Le.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){function t(t,o){var s=e+t+" "+e+o;i[t+o]=ht("div",s,n)}var i=this._controlCorners={},e="leaflet-",n=this._controlContainer=ht("div",e+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)ut(this._controlCorners[t]);ut(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Te=Pe.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,i,e,n){return e<n?-1:n<e?1:0}},initialize:function(t,i,e){l(this,e),this._layerControlInputs=[],this._layers=[],this._lastZIndex=0,this._handlingClick=!1;for(var n in t)this._addLayer(t[n],n);for(n in i)this._addLayer(i[n],n,!0)},onAdd:function(t){this._initLayout(),this._update(),this._map=t,t.on("zoomend",this._checkDisabledLayers,this);for(var i=0;i<this._layers.length;i++)this._layers[i].layer.on("add remove",this._onLayerChange,this);return this._container},addTo:function(t){return Pe.prototype.addTo.call(this,t),this._expandIfNotCollapsed()},onRemove:function(){this._map.off("zoomend",this._checkDisabledLayers,this);for(var t=0;t<this._layers.length;t++)this._layers[t].layer.off("add remove",this._onLayerChange,this)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._map?this._update():this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._map?this._update():this},removeLayer:function(t){t.off("add remove",this._onLayerChange,this);var i=this._getLayer(n(t));return i&&this._layers.splice(this._layers.indexOf(i),1),this._map?this._update():this},expand:function(){pt(this._container,"leaflet-control-layers-expanded"),this._form.style.height=null;var t=this._map.getSize().y-(this._container.offsetTop+50);return t<this._form.clientHeight?(pt(this._form,"leaflet-control-layers-scrollbar"),this._form.style.height=t+"px"):mt(this._form,"leaflet-control-layers-scrollbar"),this._checkDisabledLayers(),this},collapse:function(){return mt(this._container,"leaflet-control-layers-expanded"),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=ht("div",t),e=this.options.collapsed;i.setAttribute("aria-haspopup",!0),J(i),X(i);var n=this._form=ht("form",t+"-list");e&&(this._map.on("click",this.collapse,this),Ti||V(i,{mouseenter:this.expand,mouseleave:this.collapse},this));var o=this._layersLink=ht("a",t+"-toggle",i);o.href="#",o.title="Layers",Vi?(V(o,"click",Q),V(o,"click",this.expand,this)):V(o,"focus",this.expand,this),e||this.expand(),this._baseLayersList=ht("div",t+"-base",n),this._separator=ht("div",t+"-separator",n),this._overlaysList=ht("div",t+"-overlays",n),i.appendChild(n)},_getLayer:function(t){for(var i=0;i<this._layers.length;i++)if(this._layers[i]&&n(this._layers[i].layer)===t)return this._layers[i]},_addLayer:function(t,i,n){this._map&&t.on("add remove",this._onLayerChange,this),this._layers.push({layer:t,name:i,overlay:n}),this.options.sortLayers&&this._layers.sort(e(function(t,i){return this.options.sortFunction(t.layer,i.layer,t.name,i.name)},this)),this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex)),this._expandIfNotCollapsed()},_update:function(){if(!this._container)return this;lt(this._baseLayersList),lt(this._overlaysList),this._layerControlInputs=[];var t,i,e,n,o=0;for(e=0;e<this._layers.length;e++)n=this._layers[e],this._addItem(n),i=i||n.overlay,t=t||!n.overlay,o+=n.overlay?0:1;return this.options.hideSingleBase&&(t=t&&o>1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=i&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var i=this._getLayer(n(t.target)),e=i.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;e&&this._map.fire(e,i)},_createRadioElement:function(t,i){var e='<input type="radio" class="leaflet-control-layers-selector" name="'+t+'"'+(i?' checked="checked"':"")+"/>",n=document.createElement("div");return n.innerHTML=e,n.firstChild},_addItem:function(t){var i,e=document.createElement("label"),o=this._map.hasLayer(t.layer);t.overlay?((i=document.createElement("input")).type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=o):i=this._createRadioElement("leaflet-base-layers",o),this._layerControlInputs.push(i),i.layerId=n(t.layer),V(i,"click",this._onInputClick,this);var s=document.createElement("span");s.innerHTML=" "+t.name;var r=document.createElement("div");return e.appendChild(r),r.appendChild(i),r.appendChild(s),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,i,e=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=e.length-1;s>=0;s--)t=e[s],i=this._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s=0;s<o.length;s++)this._map.hasLayer(o[s])&&this._map.removeLayer(o[s]);for(s=0;s<n.length;s++)this._map.hasLayer(n[s])||this._map.addLayer(n[s]);this._handlingClick=!1,this._refocusOnMap()},_checkDisabledLayers:function(){for(var t,i,e=this._layerControlInputs,n=this._map.getZoom(),o=e.length-1;o>=0;o--)t=e[o],i=this._getLayer(t.layerId).layer,t.disabled=void 0!==i.options.minZoom&&n<i.options.minZoom||void 0!==i.options.maxZoom&&n>i.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),ze=Pe.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"&#x2212;",zoomOutTitle:"Zoom out"},onAdd:function(t){var i="leaflet-control-zoom",e=ht("div",i+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,i+"-in",e,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,i+"-out",e,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),e},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoom<this._map.getMaxZoom()&&this._map.zoomIn(this._map.options.zoomDelta*(t.shiftKey?3:1))},_zoomOut:function(t){!this._disabled&&this._map._zoom>this._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var s=ht("a",e,n);return s.innerHTML=t,s.href="#",s.title=i,s.setAttribute("role","button"),s.setAttribute("aria-label",i),J(s),V(s,"click",Q),V(s,"click",o,this),V(s,"click",this._refocusOnMap,this),s},_updateDisabled:function(){var t=this._map,i="leaflet-disabled";mt(this._zoomInButton,i),mt(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMinZoom())&&pt(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMaxZoom())&&pt(this._zoomInButton,i)}});Le.mergeOptions({zoomControl:!0}),Le.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new ze,this.addControl(this.zoomControl))});var Me=Pe.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var i=ht("div","leaflet-control-scale"),e=this.options;return this._addScales(e,"leaflet-control-scale-line",i),t.on(e.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScale=ht("div",i,e)),t.imperial&&(this._iScale=ht("div",i,e))},_update:function(){var t=this._map,i=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,i]),t.containerPointToLatLng([this.options.maxWidth,i]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var i=this._getRoundNum(t),e=i<1e3?i+" m":i/1e3+" km";this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var i,e,n,o=3.2808399*t;o>5280?(i=o/5280,e=this._getRoundNum(i),this._updateScale(this._iScale,e+" mi",e/i)):(n=this._getRoundNum(o),this._updateScale(this._iScale,n+" ft",n/o))},_updateScale:function(t,i,e){t.style.width=Math.round(this.options.maxWidth*e)+"px",t.innerHTML=i},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),e=t/i;return e=e>=10?10:e>=5?5:e>=3?3:e>=2?2:1,i*e}}),Ce=Pe.extend({options:{position:"bottomright",prefix:'<a href="http://leafletjs.com" title="A JS library for interactive maps">Leaflet</a>'},initialize:function(t){l(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=ht("div","leaflet-control-attribution"),J(this._container);for(var i in t._layers)t._layers[i].getAttribution&&this.addAttribution(t._layers[i].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions[i]&&t.push(i);var e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(", ")),this._container.innerHTML=e.join(" | ")}}});Le.mergeOptions({attributionControl:!0}),Le.addInitHook(function(){this.options.attributionControl&&(new Ce).addTo(this)});Pe.Layers=Te,Pe.Zoom=ze,Pe.Scale=Me,Pe.Attribution=Ce,be.layers=function(t,i,e){return new Te(t,i,e)},be.zoom=function(t){return new ze(t)},be.scale=function(t){return new Me(t)},be.attribution=function(t){return new Ce(t)};var Ze=v.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});Ze.addTo=function(t,i){return t.addHandler(i,this),this};var Se,Ee={Events:hi},ke=Vi?"touchstart mousedown":"mousedown",Ie={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},Ae={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},Be=ui.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){l(this,n),this._element=t,this._dragStartTarget=i||t,this._preventOutline=e},enable:function(){this._enabled||(V(this._dragStartTarget,ke,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Be._dragging===this&&this.finishDrag(),q(this._dragStartTarget,ke,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved=!1,!dt(this._element,"leaflet-zoom-anim")&&!(Be._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(Be._dragging=this,this._preventOutline&&zt(this._element),bt(),mi(),this._moving)))){this.fire("down");var i=t.touches?t.touches[0]:t;this._startPoint=new x(i.clientX,i.clientY),V(document,Ae[t.type],this._onMove,this),V(document,Ie[t.type],this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&t.touches.length>1)this._moved=!0;else{var i=t.touches&&1===t.touches.length?t.touches[0]:t,e=new x(i.clientX,i.clientY).subtract(this._startPoint);(e.x||e.y)&&(Math.abs(e.x)+Math.abs(e.y)<this.options.clickTolerance||($(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=Pt(this._element).subtract(e),pt(document.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,window.SVGElementInstance&&this._lastTarget instanceof SVGElementInstance&&(this._lastTarget=this._lastTarget.correspondingUseElement),pt(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(e),this._moving=!0,g(this._animRequest),this._lastEvent=t,this._animRequest=f(this._updatePosition,this,!0)))}},_updatePosition:function(){var t={originalEvent:this._lastEvent};this.fire("predrag",t),Lt(this._element,this._newPos),this.fire("drag",t)},_onUp:function(t){!t._simulated&&this._enabled&&this.finishDrag()},finishDrag:function(){mt(document.body,"leaflet-dragging"),this._lastTarget&&(mt(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null);for(var t in Ae)q(document,Ae[t],this._onMove,this),q(document,Ie[t],this._onUp,this);Tt(),fi(),this._moved&&this._moving&&(g(this._animRequest),this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})),this._moving=!1,Be._dragging=!1}}),Oe=(Object.freeze||Object)({simplify:Ct,pointToSegmentDistance:Zt,closestPointOnSegment:function(t,i,e){return Rt(t,i,e)},clipSegment:It,_getEdgeIntersection:At,_getBitCode:Bt,_sqClosestPointOnSegment:Rt,isFlat:Dt,_flat:Nt}),Re=(Object.freeze||Object)({clipPolygon:jt}),De={project:function(t){return new x(t.lng,t.lat)},unproject:function(t){return new M(t.y,t.x)},bounds:new P([-180,-90],[180,90])},Ne={R:6378137,R_MINOR:6356752.314245179,bounds:new P([-20037508.34279,-15496570.73972],[20037508.34279,18764656.23138]),project:function(t){var i=Math.PI/180,e=this.R,n=t.lat*i,o=this.R_MINOR/e,s=Math.sqrt(1-o*o),r=s*Math.sin(n),a=Math.tan(Math.PI/4-n/2)/Math.pow((1-r)/(1+r),s/2);return n=-e*Math.log(Math.max(a,1e-10)),new x(t.lng*i*e,n)},unproject:function(t){for(var i,e=180/Math.PI,n=this.R,o=this.R_MINOR/n,s=Math.sqrt(1-o*o),r=Math.exp(-t.y/n),a=Math.PI/2-2*Math.atan(r),h=0,u=.1;h<15&&Math.abs(u)>1e-7;h++)i=s*Math.sin(a),i=Math.pow((1-i)/(1+i),s/2),a+=u=Math.PI/2-2*Math.atan(r*i)-a;return new M(a*e,t.x*e/n)}},je=(Object.freeze||Object)({LonLat:De,Mercator:Ne,SphericalMercator:di}),We=i({},_i,{code:"EPSG:3395",projection:Ne,transformation:function(){var t=.5/(Math.PI*Ne.R);return S(t,.5,-t,.5)}()}),He=i({},_i,{code:"EPSG:4326",projection:De,transformation:S(1/180,1,-1/180,.5)}),Fe=i({},ci,{projection:De,transformation:S(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,i){var e=i.lng-t.lng,n=i.lat-t.lat;return Math.sqrt(e*e+n*n)},infinite:!0});ci.Earth=_i,ci.EPSG3395=We,ci.EPSG3857=vi,ci.EPSG900913=yi,ci.EPSG4326=He,ci.Simple=Fe;var Ue=ui.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[n(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[n(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var i=t.target;if(i.hasLayer(this)){if(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents){var e=this.getEvents();i.on(e,this),this.once("remove",function(){i.off(e,this)},this)}this.onAdd(i),this.getAttribution&&i.attributionControl&&i.attributionControl.addAttribution(this.getAttribution()),this.fire("add"),i.fire("layeradd",{layer:this})}}});Le.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var i=n(t);return this._layers[i]?this:(this._layers[i]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var i=n(t);return this._layers[i]?(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),delete this._layers[i],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return!!t&&n(t)in this._layers},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layers[e]);return this},_addLayers:function(t){for(var i=0,e=(t=t?ei(t)?t:[t]:[]).length;i<e;i++)this.addLayer(t[i])},_addZoomLimit:function(t){!isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[n(t)]=t,this._updateZoomLevels())},_removeZoomLimit:function(t){var i=n(t);this._zoomBoundLayers[i]&&(delete this._zoomBoundLayers[i],this._updateZoomLevels())},_updateZoomLevels:function(){var t=1/0,i=-1/0,e=this._getZoomSpan();for(var n in this._zoomBoundLayers){var o=this._zoomBoundLayers[n].options;t=void 0===o.minZoom?t:Math.min(t,o.minZoom),i=void 0===o.maxZoom?i:Math.max(i,o.maxZoom)}this._layersMaxZoom=i===-1/0?void 0:i,this._layersMinZoom=t===1/0?void 0:t,e!==this._getZoomSpan()&&this.fire("zoomlevelschange"),void 0===this.options.maxZoom&&this._layersMaxZoom&&this.getZoom()>this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()<this._layersMinZoom&&this.setZoom(this._layersMinZoom)}});var Ve=Ue.extend({initialize:function(t,i){l(this,i),this._layers={};var e,n;if(t)for(e=0,n=t.length;e<n;e++)this.addLayer(t[e])},addLayer:function(t){var i=this.getLayerId(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[i]&&this._map.removeLayer(this._layers[i]),delete this._layers[i],this},hasLayer:function(t){return!!t&&(t in this._layers||this.getLayerId(t)in this._layers)},clearLayers:function(){return this.eachLayer(this.removeLayer,this)},invoke:function(t){var i,e,n=Array.prototype.slice.call(arguments,1);for(i in this._layers)(e=this._layers[i])[t]&&e[t].apply(e,n);return this},onAdd:function(t){this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t)},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layers[e]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];return this.eachLayer(t.push,t),t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:function(t){return n(t)}}),qe=Ve.extend({addLayer:function(t){return this.hasLayer(t)?this:(t.addEventParent(this),Ve.prototype.addLayer.call(this,t),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(t=this._layers[t]),t.removeEventParent(this),Ve.prototype.removeLayer.call(this,t),this.fire("layerremove",{layer:t})):this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new T;for(var i in this._layers){var e=this._layers[i];t.extend(e.getBounds?e.getBounds():e.getLatLng())}return t}}),Ge=v.extend({options:{popupAnchor:[0,0],tooltipAnchor:[0,0]},initialize:function(t){l(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,i){var e=this._getIconUrl(t);if(!e){if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null}var n=this._createImg(e,i&&"IMG"===i.tagName?i:null);return this._setIconStyles(n,t),n},_setIconStyles:function(t,i){var e=this.options,n=e[i+"Size"];"number"==typeof n&&(n=[n,n]);var o=w(n),s=w("shadow"===i&&e.shadowAnchor||e.iconAnchor||o&&o.divideBy(2,!0));t.className="leaflet-marker-"+i+" "+(e.className||""),s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),o&&(t.style.width=o.x+"px",t.style.height=o.y+"px")},_createImg:function(t,i){return i=i||document.createElement("img"),i.src=t,i},_getIconUrl:function(t){return Ki&&this.options[t+"RetinaUrl"]||this.options[t+"Url"]}}),Ke=Ge.extend({options:{iconUrl:"marker-icon.png",iconRetinaUrl:"marker-icon-2x.png",shadowUrl:"marker-shadow.png",iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],tooltipAnchor:[16,-28],shadowSize:[41,41]},_getIconUrl:function(t){return Ke.imagePath||(Ke.imagePath=this._detectIconPath()),(this.options.imagePath||Ke.imagePath)+Ge.prototype._getIconUrl.call(this,t)},_detectIconPath:function(){var t=ht("div","leaflet-default-icon-path",document.body),i=at(t,"background-image")||at(t,"backgroundImage");return document.body.removeChild(t),i=null===i||0!==i.indexOf("url")?"":i.replace(/^url\(["']?/,"").replace(/marker-icon\.png["']?\)$/,"")}}),Ye=Ze.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new Be(t,t,!0)),this._draggable.on({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).enable(),pt(t,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).disable(),this._marker._icon&&mt(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_adjustPan:function(t){var i=this._marker,e=i._map,n=this._marker.options.autoPanSpeed,o=this._marker.options.autoPanPadding,s=L.DomUtil.getPosition(i._icon),r=e.getPixelBounds(),a=e.getPixelOrigin(),h=b(r.min._subtract(a).add(o),r.max._subtract(a).subtract(o));if(!h.contains(s)){var u=w((Math.max(h.max.x,s.x)-h.max.x)/(r.max.x-h.max.x)-(Math.min(h.min.x,s.x)-h.min.x)/(r.min.x-h.min.x),(Math.max(h.max.y,s.y)-h.max.y)/(r.max.y-h.max.y)-(Math.min(h.min.y,s.y)-h.min.y)/(r.min.y-h.min.y)).multiplyBy(n);e.panBy(u,{animate:!1}),this._draggable._newPos._add(u),this._draggable._startPos._add(u),L.DomUtil.setPosition(i._icon,this._draggable._newPos),this._onDrag(t),this._panRequest=f(this._adjustPan.bind(this,t))}},_onDragStart:function(){this._oldLatLng=this._marker.getLatLng(),this._marker.closePopup().fire("movestart").fire("dragstart")},_onPreDrag:function(t){this._marker.options.autoPan&&(g(this._panRequest),this._panRequest=f(this._adjustPan.bind(this,t)))},_onDrag:function(t){var i=this._marker,e=i._shadow,n=Pt(i._icon),o=i._map.layerPointToLatLng(n);e&&Lt(e,n),i._latlng=o,t.latlng=o,t.oldLatLng=this._oldLatLng,i.fire("move",t).fire("drag",t)},_onDragEnd:function(t){g(this._panRequest),delete this._oldLatLng,this._marker.fire("moveend").fire("dragend",t)}}),Xe=Ue.extend({options:{icon:new Ke,interactive:!0,draggable:!1,autoPan:!1,autoPanPadding:[50,50],autoPanSpeed:10,keyboard:!0,title:"",alt:"",zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250,pane:"markerPane",bubblingMouseEvents:!1},initialize:function(t,i){l(this,i),this._latlng=C(t)},onAdd:function(t){this._zoomAnimated=this._zoomAnimated&&t.options.markerZoomAnimation,this._zoomAnimated&&t.on("zoomanim",this._animateZoom,this),this._initIcon(),this.update()},onRemove:function(t){this.dragging&&this.dragging.enabled()&&(this.options.draggable=!0,this.dragging.removeHooks()),delete this.dragging,this._zoomAnimated&&t.off("zoomanim",this._animateZoom,this),this._removeIcon(),this._removeShadow()},getEvents:function(){return{zoom:this.update,viewreset:this.update}},getLatLng:function(){return this._latlng},setLatLng:function(t){var i=this._latlng;return this._latlng=C(t),this.update(),this.fire("move",{oldLatLng:i,latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update()},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup,this._popup.options),this},getElement:function(){return this._icon},update:function(){if(this._icon&&this._map){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i="leaflet-zoom-"+(this._zoomAnimated?"animated":"hide"),e=t.icon.createIcon(this._icon),n=!1;e!==this._icon&&(this._icon&&this._removeIcon(),n=!0,t.title&&(e.title=t.title),"IMG"===e.tagName&&(e.alt=t.alt||"")),pt(e,i),t.keyboard&&(e.tabIndex="0"),this._icon=e,t.riseOnHover&&this.on({mouseover:this._bringToFront,mouseout:this._resetZIndex});var o=t.icon.createShadow(this._shadow),s=!1;o!==this._shadow&&(this._removeShadow(),s=!0),o&&(pt(o,i),o.alt=""),this._shadow=o,t.opacity<1&&this._updateOpacity(),n&&this.getPane().appendChild(this._icon),this._initInteraction(),o&&s&&this.getPane("shadowPane").appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&this.off({mouseover:this._bringToFront,mouseout:this._resetZIndex}),ut(this._icon),this.removeInteractiveTarget(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&ut(this._shadow),this._shadow=null},_setPos:function(t){Lt(this._icon,t),this._shadow&&Lt(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(i)},_initInteraction:function(){if(this.options.interactive&&(pt(this._icon,"leaflet-interactive"),this.addInteractiveTarget(this._icon),Ye)){var t=this.options.draggable;this.dragging&&(t=this.dragging.enabled(),this.dragging.disable()),this.dragging=new Ye(this),t&&this.dragging.enable()}},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},_updateOpacity:function(){var t=this.options.opacity;vt(this._icon,t),this._shadow&&vt(this._shadow,t)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)},_getPopupAnchor:function(){return this.options.icon.options.popupAnchor},_getTooltipAnchor:function(){return this.options.icon.options.tooltipAnchor}}),Je=Ue.extend({options:{stroke:!0,color:"#3388ff",weight:3,opacity:1,lineCap:"round",lineJoin:"round",dashArray:null,dashOffset:null,fill:!1,fillColor:null,fillOpacity:.2,f
vendor: 6,016 bytes, line 5
5illRule:"evenodd",interactive:!0,bubblingMouseEvents:!0},beforeAdd:function(t){this._renderer=t.getRenderer(this)},onAdd:function(){this._renderer._initPath(this),this._reset(),this._renderer._addPath(this)},onRemove:function(){this._renderer._removePath(this)},redraw:function(){return this._map&&this._renderer._updatePath(this),this},setStyle:function(t){return l(this,t),this._renderer&&this._renderer._updateStyle(this),this},bringToFront:function(){return this._renderer&&this._renderer._bringToFront(this),this},bringToBack:function(){return this._renderer&&this._renderer._bringToBack(this),this},getElement:function(){return this._path},_reset:function(){this._project(),this._update()},_clickTolerance:function(){return(this.options.stroke?this.options.weight/2:0)+this._renderer.options.tolerance}}),$e=Je.extend({options:{fill:!0,radius:10},initialize:function(t,i){l(this,i),this._latlng=C(t),this._radius=this.options.radius},setLatLng:function(t){return this._latlng=C(t),this.redraw(),this.fire("move",{latlng:this._latlng})},getLatLng:function(){return this._latlng},setRadius:function(t){return this.options.radius=this._radius=t,this.redraw()},getRadius:function(){return this._radius},setStyle:function(t){var i=t&&t.radius||this._radius;return Je.prototype.setStyle.call(this,t),this.setRadius(i),this},_project:function(){this._point=this._map.latLngToLayerPoint(this._latlng),this._updateBounds()},_updateBounds:function(){var t=this._radius,i=this._radiusY||t,e=this._clickTolerance(),n=[t+e,i+e];this._pxBounds=new P(this._point.subtract(n),this._point.add(n))},_update:function(){this._map&&this._updatePath()},_updatePath:function(){this._renderer._updateCircle(this)},_empty:function(){return this._radius&&!this._renderer._bounds.intersects(this._pxBounds)},_containsPoint:function(t){return t.distanceTo(this._point)<=this._radius+this._clickTolerance()}}),Qe=$e.extend({initialize:function(t,e,n){if("number"==typeof e&&(e=i({},n,{radius:e})),l(this,e),this._latlng=C(t),isNaN(this.options.radius))throw new Error("Circle radius cannot be NaN");this._mRadius=this.options.radius},setRadius:function(t){return this._mRadius=t,this.redraw()},getRadius:function(){return this._mRadius},getBounds:function(){var t=[this._radius,this._radiusY||this._radius];return new T(this._map.layerPointToLatLng(this._point.subtract(t)),this._map.layerPointToLatLng(this._point.add(t)))},setStyle:Je.prototype.setStyle,_project:function(){var t=this._latlng.lng,i=this._latlng.lat,e=this._map,n=e.options.crs;if(n.distance===_i.distance){var o=Math.PI/180,s=this._mRadius/_i.R/o,r=e.project([i+s,t]),a=e.project([i-s,t]),h=r.add(a).divideBy(2),u=e.unproject(h).lat,l=Math.acos((Math.cos(s*o)-Math.sin(i*o)*Math.sin(u*o))/(Math.cos(i*o)*Math.cos(u*o)))/o;(isNaN(l)||0===l)&&(l=s/Math.cos(Math.PI/180*i)),this._point=h.subtract(e.getPixelOrigin()),this._radius=isNaN(l)?0:h.x-e.project([u,t-l]).x,this._radiusY=h.y-r.y}else{var c=n.unproject(n.project(this._latlng).subtract([this._mRadius,0]));this._point=e.latLngToLayerPoint(this._latlng),this._radius=this._point.x-e.latLngToLayerPoint(c).x}this._updateBounds()}}),tn=Je.extend({options:{smoothFactor:1,noClip:!1},initialize:function(t,i){l(this,i),this._setLatLngs(t)},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._setLatLngs(t),this.redraw()},isEmpty:function(){return!this._latlngs.length},closestLayerPoint:function(t){for(var i,e,n=1/0,o=null,s=Rt,r=0,a=this._parts.length;r<a;r++)for(var h=this._parts[r],u=1,l=h.length;u<l;u++){var c=s(t,i=h[u-1],e=h[u],!0);c<n&&(n=c,o=s(t,i,e))}return o&&(o.distance=Math.sqrt(n)),o},getCenter:function(){if(!this._map)throw new Error("Must add layer to map before using getCenter()");var t,i,e,n,o,s,r,a=this._rings[0],h=a.length;if(!h)return null;for(t=0,i=0;t<h-1;t++)i+=a[t].distanceTo(a[t+1])/2;if(0===i)return this._map.layerPointToLatLng(a[0]);for(t=0,n=0;t<h-1;t++)if(o=a[t],s=a[t+1],e=o.distanceTo(s),(n+=e)>i)return r=(n-i)/e,this._map.layerPointToLatLng([s.x-r*(s.x-o.x),s.y-r*(s.y-o.y)])},getBounds:function(){return this._bounds},addLatLng:function(t,i){return i=i||this._defaultShape(),t=C(t),i.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new T,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return Dt(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var i=[],e=Dt(t),n=0,o=t.length;n<o;n++)e?(i[n]=C(t[n]),this._bounds.extend(i[n])):i[n]=this._convertLatLngs(t[n]);return i},_project:function(){var t=new P;this._rings=[],this._projectLatlngs(this._latlngs,this._rings,t);var i=this._clickTolerance(),e=new x(i,i);this._bounds.isValid()&&t.isValid()&&(t.min._subtract(e),t.max._add(e),this._pxBounds=t)},_projectLatlngs:function(t,i,e){var n,o,s=t[0]instanceof M,r=t.length;if(s){for(o=[],n=0;n<r;n++)o[n]=this._map.latLngToLayerPoint(t[n]),e.extend(o[n]);i.push(o)}else for(n=0;n<r;n++)this._projectLatlngs(t[n],i,e)},_clipPoints:function(){var t=this._renderer._bounds;if(this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else{var i,e,n,o,s,r,a,h=this._parts;for(i=0,n=0,o=this._rings.length;i<o;i++)for(e=0,s=(a=this._rings[i]).length;e<s-1;e++)(r=It(a[e],a[e+1],t,e,!0))&&(h[n]=h[n]||[],h[n].push(r[0]),r[1]===a[e+1]&&e!==s-2||(h[n].push(r[1]),n++))}},_simplifyPoints:function(){for(var t=this._parts,i=this.options.smoothFactor,e=0,n=t.length;e<n;e++)t[e]=Ct(t[e],i)},_update:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),this._updatePath())},_updatePath:function(){this._renderer._updatePoly(this)},_containsPoint:function(t,i){var e,n,o,s,r,a,h=this._clickTolerance();if(!this._pxBounds||!this._pxBounds.contains(t))return!1;for(e=0,s=this._parts.length;e<s;e++)for(n=0,o=(r=(a=this._parts[e]).length)-1;n<r;o=n++)if((i||0!==n)&&Zt(t,a[o],a[n])<=h)return!0;return!1}});tn._flat=Nt;var en=tn.extend({options:{fill:!0},isEmpty:function(){return!this._latlngs.length||!this._latlngs[0].length}
vendor: 40,401 bytes, line 5
5,getCenter:function(){if(!this._map)throw new Error("Must add layer to map before using getCenter()");var t,i,e,n,o,s,r,a,h,u=this._rings[0],l=u.length;if(!l)return null;for(s=r=a=0,t=0,i=l-1;t<l;i=t++)e=u[t],n=u[i],o=e.y*n.x-n.y*e.x,r+=(e.x+n.x)*o,a+=(e.y+n.y)*o,s+=3*o;return h=0===s?u[0]:[r/s,a/s],this._map.layerPointToLatLng(h)},_convertLatLngs:function(t){var i=tn.prototype._convertLatLngs.call(this,t),e=i.length;return e>=2&&i[0]instanceof M&&i[0].equals(i[e-1])&&i.pop(),i},_setLatLngs:function(t){tn.prototype._setLatLngs.call(this,t),Dt(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return Dt(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,i=this.options.weight,e=new x(i,i);if(t=new P(t.min.subtract(e),t.max.add(e)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var n,o=0,s=this._rings.length;o<s;o++)(n=jt(this._rings[o],t,!0)).length&&this._parts.push(n)},_updatePath:function(){this._renderer._updatePoly(this,!0)},_containsPoint:function(t){var i,e,n,o,s,r,a,h,u=!1;if(!this._pxBounds.contains(t))return!1;for(o=0,a=this._parts.length;o<a;o++)for(s=0,r=(h=(i=this._parts[o]).length)-1;s<h;r=s++)e=i[s],n=i[r],e.y>t.y!=n.y>t.y&&t.x<(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(u=!u);return u||tn.prototype._containsPoint.call(this,t,!0)}}),nn=qe.extend({initialize:function(t,i){l(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,e,n,o=ei(t)?t:t.features;if(o){for(i=0,e=o.length;i<e;i++)((n=o[i]).geometries||n.geometry||n.features||n.coordinates)&&this.addData(n);return this}var s=this.options;if(s.filter&&!s.filter(t))return this;var r=Wt(t,s);return r?(r.feature=Gt(t),r.defaultOptions=r.options,this.resetStyle(r),s.onEachFeature&&s.onEachFeature(t,r),this.addLayer(r)):this},resetStyle:function(t){return t.options=i({},t.defaultOptions),this._setLayerStyle(t,this.options.style),this},setStyle:function(t){return this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),on={toGeoJSON:function(t){return qt(this,{type:"Point",coordinates:Ut(this.getLatLng(),t)})}};Xe.include(on),Qe.include(on),$e.include(on),tn.include({toGeoJSON:function(t){var i=!Dt(this._latlngs),e=Vt(this._latlngs,i?1:0,!1,t);return qt(this,{type:(i?"Multi":"")+"LineString",coordinates:e})}}),en.include({toGeoJSON:function(t){var i=!Dt(this._latlngs),e=i&&!Dt(this._latlngs[0]),n=Vt(this._latlngs,e?2:i?1:0,!0,t);return i||(n=[n]),qt(this,{type:(e?"Multi":"")+"Polygon",coordinates:n})}}),Ve.include({toMultiPoint:function(t){var i=[];return this.eachLayer(function(e){i.push(e.toGeoJSON(t).geometry.coordinates)}),qt(this,{type:"MultiPoint",coordinates:i})},toGeoJSON:function(t){var i=this.feature&&this.feature.geometry&&this.feature.geometry.type;if("MultiPoint"===i)return this.toMultiPoint(t);var e="GeometryCollection"===i,n=[];return this.eachLayer(function(i){if(i.toGeoJSON){var o=i.toGeoJSON(t);if(e)n.push(o.geometry);else{var s=Gt(o);"FeatureCollection"===s.type?n.push.apply(n,s.features):n.push(s)}}}),e?qt(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}});var sn=Kt,rn=Ue.extend({options:{opacity:1,alt:"",interactive:!1,crossOrigin:!1,errorOverlayUrl:"",zIndex:1,className:""},initialize:function(t,i,e){this._url=t,this._bounds=z(i),l(this,e)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(pt(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){ut(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&ct(this._image),this},bringToBack:function(){return this._map&&_t(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=z(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t="IMG"===this._url.tagName,i=this._image=t?this._url:ht("img");pt(i,"leaflet-image-layer"),this._zoomAnimated&&pt(i,"leaflet-zoom-animated"),this.options.className&&pt(i,this.options.className),i.onselectstart=r,i.onmousemove=r,i.onload=e(this.fire,this,"load"),i.onerror=e(this._overlayOnError,this,"error"),this.options.crossOrigin&&(i.crossOrigin=""),this.options.zIndex&&this._updateZIndex(),t?this._url=i.src:(i.src=this._url,i.alt=this.options.alt)},_animateZoom:function(t){var i=this._map.getZoomScale(t.zoom),e=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;wt(this._image,e,i)},_reset:function(){var t=this._image,i=new P(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),e=i.getSize();Lt(t,i.min),t.style.width=e.x+"px",t.style.height=e.y+"px"},_updateOpacity:function(){vt(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire("error");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)}}),an=rn.extend({options:{autoplay:!0,loop:!0},_initImage:function(){var t="VIDEO"===this._url.tagName,i=this._image=t?this._url:ht("video");if(pt(i,"leaflet-image-layer"),this._zoomAnimated&&pt(i,"leaflet-zoom-animated"),i.onselectstart=r,i.onmousemove=r,i.onloadeddata=e(this.fire,this,"load"),t){for(var n=i.getElementsByTagName("source"),o=[],s=0;s<n.length;s++)o.push(n[s].src);this._url=n.length>0?o:[i.src]}else{ei(this._url)||(this._url=[this._url]),i.autoplay=!!this.options.autoplay,i.loop=!!this.options.loop;for(var a=0;a<this._url.length;a++){var h=ht("source");h.src=this._url[a],i.appendChild(h)}}}}),hn=Ue.extend({options:{offset:[0,7],className:"",pane:"popupPane"},initialize:function(t,i){l(this,t),this._source=i},onAdd:function(t){this._zoomAnimated=t._zoomAnimated,this._container||this._initLayout(),t._fadeAnimated&&vt(this._container,0),clearTimeout(this._removeTimeout),this.getPane().appendChild(this._container),this.update(),t._fadeAnimated&&vt(this._container,1),this.bringToFront()},onRemove:function(t){t._fadeAnimated?(vt(this._container,0),this._removeTimeout=setTimeout(e(ut,void 0,this._container),200)):ut(this._container)},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=C(t),this._map&&(this._updatePosition(),this._adjustPan()),this},getContent:function(){return this._content},setContent:function(t){return this._content=t,this.update(),this},getElement:function(){return this._container},update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},getEvents:function(){var t={zoom:this._updatePosition,viewreset:this._updatePosition};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},isOpen:function(){return!!this._map&&this._map.hasLayer(this)},bringToFront:function(){return this._map&&ct(this._container),this},bringToBack:function(){return this._map&&_t(this._container),this},_updateContent:function(){if(this._content){var t=this._contentNode,i="function"==typeof this._content?this._content(this._source||this):this._content;if("string"==typeof i)t.innerHTML=i;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(i)}this.fire("contentupdate")}},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=w(this.options.offset),e=this._getAnchor();this._zoomAnimated?Lt(this._container,t.add(e)):i=i.add(t).add(e);var n=this._containerBottom=-i.y,o=this._containerLeft=-Math.round(this._containerWidth/2)+i.x;this._container.style.bottom=n+"px",this._container.style.left=o+"px"}},_getAnchor:function(){return[0,0]}}),un=hn.extend({options:{maxWidth:300,minWidth:50,maxHeight:null,autoPan:!0,autoPanPaddingTopLeft:null,autoPanPaddingBottomRight:null,autoPanPadding:[5,5],keepInView:!1,closeButton:!0,autoClose:!0,closeOnEscapeKey:!0,className:""},openOn:function(t){return t.openPopup(this),this},onAdd:function(t){hn.prototype.onAdd.call(this,t),t.fire("popupopen",{popup:this}),this._source&&(this._source.fire("popupopen",{popup:this},!0),this._source instanceof Je||this._source.on("preclick",Y))},onRemove:function(t){hn.prototype.onRemove.call(this,t),t.fire("popupclose",{popup:this}),this._source&&(this._source.fire("popupclose",{popup:this},!0),this._source instanceof Je||this._source.off("preclick",Y))},getEvents:function(){var t=hn.prototype.getEvents.call(this);return(void 0!==this.options.closeOnClick?this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclick=this._close),this.options.keepInView&&(t.moveend=this._adjustPan),t},_close:function(){this._map&&this._map.closePopup(this)},_initLayout:function(){var t="leaflet-popup",i=this._container=ht("div",t+" "+(this.options.className||"")+" leaflet-zoom-animated"),e=this._wrapper=ht("div",t+"-content-wrapper",i);if(this._contentNode=ht("div",t+"-content",e),J(e),X(this._contentNode),V(e,"contextmenu",Y),this._tipContainer=ht("div",t+"-tip-container",i),this._tip=ht("div",t+"-tip",this._tipContainer),this.options.closeButton){var n=this._closeButton=ht("a",t+"-close-button",i);n.href="#close",n.innerHTML="&#215;",V(n,"click",this._onCloseButtonClick,this)}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var e=t.offsetWidth;e=Math.min(e,this.options.maxWidth),e=Math.max(e,this.options.minWidth),i.width=e+1+"px",i.whiteSpace="",i.height="";var n=t.offsetHeight,o=this.options.maxHeight;o&&n>o?(i.height=o+"px",pt(t,"leaflet-popup-scrolled")):mt(t,"leaflet-popup-scrolled"),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();Lt(this._container,i.add(e))},_adjustPan:function(){if(!(!this.options.autoPan||this._map._panAnim&&this._map._panAnim._inProgress)){var t=this._map,i=parseInt(at(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+i,n=this._containerWidth,o=new x(this._containerLeft,-e-this._containerBottom);o._add(Pt(this._container));var s=t.layerPointToContainerPoint(o),r=w(this.options.autoPanPadding),a=w(this.options.autoPanPaddingTopLeft||r),h=w(this.options.autoPanPaddingBottomRight||r),u=t.getSize(),l=0,c=0;s.x+n+h.x>u.x&&(l=s.x+n-u.x+h.x),s.x-l-a.x<0&&(l=s.x-a.x),s.y+e+h.y>u.y&&(c=s.y+e-u.y+h.y),s.y-c-a.y<0&&(c=s.y-a.y),(l||c)&&t.fire("autopanstart").panBy([l,c])}},_onCloseButtonClick:function(t){this._close(),Q(t)},_getAnchor:function(){return w(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}});Le.mergeOptions({closePopupOnClick:!0}),Le.include({openPopup:function(t,i,e){return t instanceof un||(t=new un(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),Ue.include({bindPopup:function(t,i){return t instanceof un?(l(t,i),this._popup=t,t._source=this):(this._popup&&!i||(this._popup=new un(i,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,i){if(t instanceof Ue||(i=t,t=this),t instanceof qe)for(var e in this._layers){t=this._layers[e];break}return i||(i=t.getCenter?t.getCenter():t.getLatLng()),this._popup&&this._map&&(this._popup._source=t,this._popup.update(),this._map.openPopup(this._popup,i)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var i=t.layer||t.target;this._popup&&this._map&&(Q(t),i instanceof Je?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===i?this.closePopup():this.openPopup(i,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var ln=hn.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){hn.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){hn.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var t=hn.prototype.getEvents.call(this);return Vi&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=ht("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var i=this._map,e=this._container,n=i.latLngToContainerPoint(i.getCenter()),o=i.layerPointToContainerPoint(t),s=this.options.direction,r=e.offsetWidth,a=e.offsetHeight,h=w(this.options.offset),u=this._getAnchor();"top"===s?t=t.add(w(-r/2+h.x,-a+h.y+u.y,!0)):"bottom"===s?t=t.subtract(w(r/2-h.x,-h.y,!0)):"center"===s?t=t.subtract(w(r/2+h.x,a/2-u.y+h.y,!0)):"right"===s||"auto"===s&&o.x<n.x?(s="right",t=t.add(w(h.x+u.x,u.y-a/2+h.y,!0))):(s="left",t=t.subtract(w(r+u.x-h.x,a/2-u.y-h.y,!0))),mt(e,"leaflet-tooltip-right"),mt(e,"leaflet-tooltip-left"),mt(e,"leaflet-tooltip-top"),mt(e,"leaflet-tooltip-bottom"),pt(e,"leaflet-tooltip-"+s),Lt(e,t)},_updatePosition:function(){var t=this._map.latLngToLayerPoint(this._latlng);this._setPosition(t)},setOpacity:function(t){this.options.opacity=t,this._container&&vt(this._container,t)},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPosition(i)},_getAnchor:function(){return w(this._source&&this._source._getTooltipAnchor&&!this.options.sticky?this._source._getTooltipAnchor():[0,0])}});Le.include({openTooltip:function(t,i,e){return t instanceof ln||(t=new ln(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:this.addLayer(t)},closeTooltip:function(t){return t&&this.removeLayer(t),this}}),Ue.include({bindTooltip:function(t,i){return t instanceof ln?(l(t,i),this._tooltip=t,t._source=this):(this._tooltip&&!i||(this._tooltip=new ln(i,this)),this._tooltip.setContent(t)),this._initTooltipInteractions(),this._tooltip.options.permanent&&this._map&&this._map.hasLayer(this)&&this.openTooltip(),this},unbindTooltip:function(){return this._tooltip&&(this._initTooltipInteractions(!0),this.closeTooltip(),this._tooltip=null),this},_initTooltipInteractions:function(t){if(t||!this._tooltipHandlersAdded){var i=t?"off":"on",e={remove:this.closeTooltip,move:this._moveTooltip};this._tooltip.options.permanent?e.add=this._openTooltip:(e.mouseover=this._openTooltip,e.mouseout=this.closeTooltip,this._tooltip.options.sticky&&(e.mousemove=this._moveTooltip),Vi&&(e.click=this._openTooltip)),this[i](e),this._tooltipHandlersAdded=!t}},openTooltip:function(t,i){if(t instanceof Ue||(i=t,t=this),t instanceof qe)for(var e in this._layers){t=this._layers[e];break}return i||(i=t.getCenter?t.getCenter():t.getLatLng()),this._tooltip&&this._map&&(this._tooltip._source=t,this._tooltip.update(),this._map.openTooltip(this._tooltip,i),this._tooltip.options.interactive&&this._tooltip._container&&(pt(this._tooltip._container,"leaflet-clickable"),this.addInteractiveTarget(this._tooltip._container))),this},closeTooltip:function(){return this._tooltip&&(this._tooltip._close(),this._tooltip.options.interactive&&this._tooltip._container&&(mt(this._tooltip._container,"leaflet-clickable"),this.removeInteractiveTarget(this._tooltip._container))),this},toggleTooltip:function(t){return this._tooltip&&(this._tooltip._map?this.closeTooltip():this.openTooltip(t)),this},isTooltipOpen:function(){return this._tooltip.isOpen()},setTooltipContent:function(t){return this._tooltip&&this._tooltip.setContent(t),this},getTooltip:function(){return this._tooltip},_openTooltip:function(t){var i=t.layer||t.target;this._tooltip&&this._map&&this.openTooltip(i,this._tooltip.options.sticky?t.latlng:void 0)},_moveTooltip:function(t){var i,e,n=t.latlng;this._tooltip.options.sticky&&t.originalEvent&&(i=this._map.mouseEventToContainerPoint(t.originalEvent),e=this._map.containerPointToLayerPoint(i),n=this._map.layerPointToLatLng(e)),this._tooltip.setLatLng(n)}});var cn=Ge.extend({options:{iconSize:[12,12],html:!1,bgPos:null,className:"leaflet-div-icon"},createIcon:function(t){var i=t&&"DIV"===t.tagName?t:document.createElement("div"),e=this.options;if(i.innerHTML=!1!==e.html?e.html:"",e.bgPos){var n=w(e.bgPos);i.style.backgroundPosition=-n.x+"px "+-n.y+"px"}return this._setIconStyles(i,"icon"),i},createShadow:function(){return null}});Ge.Default=Ke;var _n=Ue.extend({options:{tileSize:256,opacity:1,updateWhenIdle:ji,updateWhenZooming:!0,updateInterval:200,zIndex:1,bounds:null,minZoom:0,maxZoom:void 0,maxNativeZoom:void 0,minNativeZoom:void 0,noWrap:!1,pane:"tilePane",className:"",keepBuffer:2},initialize:function(t){l(this,t)},onAdd:function(){this._initContainer(),this._levels={},this._tiles={},this._resetView(),this._update()},beforeAdd:function(t){t._addZoomLimit(this)},onRemove:function(t){this._removeAllTiles(),ut(this._container),t._removeZoomLimit(this),this._container=null,this._tileZoom=void 0},bringToFront:function(){return this._map&&(ct(this._container),this._setAutoZIndex(Math.max)),this},bringToBack:function(){return this._map&&(_t(this._container),this._setAutoZIndex(Math.min)),this},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},isLoading:function(){return this._loading},redraw:function(){return this._map&&(this._removeAllTiles(),this._update()),this},getEvents:function(){var t={viewprereset:this._invalidateAll,viewreset:this._resetView,zoom:this._resetView,moveend:this._onMoveEnd};return this.options.updateWhenIdle||(this._onMove||(this._onMove=o(this._onMoveEnd,this.options.updateInterval,this)),t.move=this._onMove),this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},createTile:function(){return document.createElement("div")},getTileSize:function(){var t=this.options.tileSize;return t instanceof x?t:new x(t,t)},_updateZIndex:function(){this._container&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t){for(var i,e=this.getPane().children,n=-t(-1/0,1/0),o=0,s=e.length;o<s;o++)i=e[o].style.zIndex,e[o]!==this._container&&i&&(n=t(n,+i));isFinite(n)&&(this.options.zIndex=n+t(-1,1),this._updateZIndex())},_updateOpacity:function(){if(this._map&&!Li){vt(this._container,this.options.opacity);var t=+new Date,i=!1,e=!1;for(var n in this._tiles){var o=this._tiles[n];if(o.current&&o.loaded){var s=Math.min(1,(t-o.loaded)/200);vt(o.el,s),s<1?i=!0:(o.active?e=!0:this._onOpaqueTile(o),o.active=!0)}}e&&!this._noPrune&&this._pruneTiles(),i&&(g(this._fadeFrame),this._fadeFrame=f(this._updateOpacity,this))}},_onOpaqueTile:r,_initContainer:function(){this._container||(this._container=ht("div","leaflet-layer "+(this.options.className||"")),this._updateZIndex(),this.options.opacity<1&&this._updateOpacity(),this.getPane().appendChild(this._container))},_updateLevels:function(){var t=this._tileZoom,i=this.options.maxZoom;if(void 0!==t){for(var e in this._levels)this._levels[e].el.children.length||e===t?(this._levels[e].el.style.zIndex=i-Math.abs(t-e),this._onUpdateLevel(e)):(ut(this._levels[e].el),this._removeTilesAtZoom(e),this._onRemoveLevel(e),delete this._levels[e]);var n=this._levels[t],o=this._map;return n||((n=this._levels[t]={}).el=ht("div","leaflet-tile-container leaflet-zoom-animated",this._container),n.el.style.zIndex=i,n.origin=o.project(o.unproject(o.getPixelOrigin()),t).round(),n.zoom=t,this._setZoomTransform(n,o.getCenter(),o.getZoom()),n.el.offsetWidth,this._onCreateLevel(n)),this._level=n,n}},_onUpdateLevel:r,_onRemoveLevel:r,_onCreateLevel:r,_pruneTiles:function(){if(this._map){var t,i,e=this._map.getZoom();if(e>this.options.maxZoom||e<this.options.minZoom)this._removeAllTiles();else{for(t in this._tiles)(i=this._tiles[t]).retain=i.current;for(t in this._tiles)if((i=this._tiles[t]).current&&!i.active){var n=i.coords;this._retainParent(n.x,n.y,n.z,n.z-5)||this._retainChildren(n.x,n.y,n.z,n.z+2)}for(t in this._tiles)this._tiles[t].retain||this._removeTile(t)}}},_removeTilesAtZoom:function(t){for(var i in this._tiles)this._tiles[i].coords.z===t&&this._removeTile(i)},_removeAllTiles:function(){for(var t in this._tiles)this._removeTile(t)},_invalidateAll:function(){for(var t in this._levels)ut(this._levels[t].el),this._onRemoveLevel(t),delete this._levels[t];this._removeAllTiles(),this._tileZoom=void 0},_retainParent:function(t,i,e,n){var o=Math.floor(t/2),s=Math.floor(i/2),r=e-1,a=new x(+o,+s);a.z=+r;var h=this._tileCoordsToKey(a),u=this._tiles[h];return u&&u.active?(u.retain=!0,!0):(u&&u.loaded&&(u.retain=!0),r>n&&this._retainParent(o,s,r,n))},_retainChildren:function(t,i,e,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*i;s<2*i+2;s++){var r=new x(o,s);r.z=e+1;var a=this._tileCoordsToKey(r),h=this._tiles[a];h&&h.active?h.retain=!0:(h&&h.loaded&&(h.retain=!0),e+1<n&&this._retainChildren(o,s,e+1,n))}},_resetView:function(t){var i=t&&(t.pinch||t.flyTo);this._setView(this._map.getCenter(),this._map.getZoom(),i,i)},_animateZoom:function(t){this._setView(t.center,t.zoom,!0,t.noUpdate)},_clampZoom:function(t){var i=this.options;return void 0!==i.minNativeZoom&&t<i.minNativeZoom?i.minNativeZoom:void 0!==i.maxNativeZoom&&i.maxNativeZoom<t?i.maxNativeZoom:t},_setView:function(t,i,e,n){var o=this._clampZoom(Math.round(i));(void 0!==this.options.maxZoom&&o>this.options.maxZoom||void 0!==this.options.minZoom&&o<this.options.minZoom)&&(o=void 0);var s=this.options.updateWhenZooming&&o!==this._tileZoom;n&&!s||(this._tileZoom=o,this._abortLoading&&this._abortLoading(),this._updateLevels(),this._resetGrid(),void 0!==o&&this._update(t),e||this._pruneTiles(),this._noPrune=!!e),this._setZoomTransforms(t,i)},_setZoomTransforms:function(t,i){for(var e in this._levels)this._setZoomTransform(this._levels[e],t,i)},_setZoomTransform:function(t,i,e){var n=this._map.getZoomScale(e,t.zoom),o=t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(i,e)).round();Ni?wt(t.el,o,n):Lt(t.el,o)},_resetGrid:function(){var t=this._map,i=t.options.crs,e=this._tileSize=this.getTileSize(),n=this._tileZoom,o=this._map.getPixelWorldBounds(this._tileZoom);o&&(this._globalTileRange=this._pxBoundsToTileRange(o)),this._wrapX=i.wrapLng&&!this.options.noWrap&&[Math.floor(t.project([0,i.wrapLng[0]],n).x/e.x),Math.ceil(t.project([0,i.wrapLng[1]],n).x/e.y)],this._wrapY=i.wrapLat&&!this.options.noWrap&&[Math.floor(t.project([i.wrapLat[0],0],n).y/e.x),Math.ceil(t.project([i.wrapLat[1],0],n).y/e.y)]},_onMoveEnd:function(){this._map&&!this._map._animatingZoom&&this._update()},_getTiledPixelBounds:function(t){var i=this._map,e=i._animatingZoom?Math.max(i._animateToZoom,i.getZoom()):i.getZoom(),n=i.getZoomScale(e,this._tileZoom),o=i.project(t,this._tileZoom).floor(),s=i.getSize().divideBy(2*n);return new P(o.subtract(s),o.add(s))},_update:function(t){var i=this._map;if(i){var e=this._clampZoom(i.getZoom());if(void 0===t&&(t=i.getCenter()),void 0!==this._tileZoom){var n=this._getTiledPixelBounds(t),o=this._pxBoundsToTileRange(n),s=o.getCenter(),r=[],a=this.options.keepBuffer,h=new P(o.getBottomLeft().subtract([a,-a]),o.getTopRight().add([a,-a]));if(!(isFinite(o.min.x)&&isFinite(o.min.y)&&isFinite(o.max.x)&&isFinite(o.max.y)))throw new Error("Attempted to load an infinite number of tiles");for(var u in this._tiles){var l=this._tiles[u].coords;l.z===this._tileZoom&&h.contains(new x(l.x,l.y))||(this._tiles[u].current=!1)}if(Math.abs(e-this._tileZoom)>1)this._setView(t,e);else{for(var c=o.min.y;c<=o.max.y;c++)for(var _=o.min.x;_<=o.max.x;_++){var d=new x(_,c);if(d.z=this._tileZoom,this._isValidTile(d)){var p=this._tiles[this._tileCoordsToKey(d)];p?p.current=!0:r.push(d)}}if(r.sort(function(t,i){return t.distanceTo(s)-i.distanceTo(s)}),0!==r.length){this._loading||(this._loading=!0,this.fire("loading"));var m=document.createDocumentFragment();for(_=0;_<r.length;_++)this._addTile(r[_],m);this._level.el.appendChild(m)}}}}},_isValidTile:function(t){var i=this._map.options.crs;if(!i.infinite){var e=this._globalTileRange;if(!i.wrapLng&&(t.x<e.min.x||t.x>e.max.x)||!i.wrapLat&&(t.y<e.min.y||t.y>e.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return z(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var i=this._map,e=this.getTileSize(),n=t.scaleBy(e),o=n.add(e);return[i.unproject(n,t.z),i.unproject(o,t.z)]},_tileCoordsToBounds:function(t){var i=this._tileCoordsToNwSe(t),e=new T(i[0],i[1]);return this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var i=t.split(":"),e=new x(+i[0],+i[1]);return e.z=+i[2],e},_removeTile:function(t){var i=this._tiles[t];i&&(Ci||i.el.setAttribute("src",ni),ut(i.el),delete this._tiles[t],this.fire("tileunload",{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){pt(t,"leaflet-tile");var i=this.getTileSize();t.style.width=i.x+"px",t.style.height=i.y+"px",t.onselectstart=r,t.onmousemove=r,Li&&this.options.opacity<1&&vt(t,this.options.opacity),Ti&&!zi&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,i){var n=this._getTilePos(t),o=this._tileCoordsToKey(t),s=this.createTile(this._wrapCoords(t),e(this._tileReady,this,t));this._initTile(s),this.createTile.length<2&&f(e(this._tileReady,this,t,null,s)),Lt(s,n),this._tiles[o]={el:s,coords:t,current:!0},i.appendChild(s),this.fire("tileloadstart",{tile:s,coords:t})},_tileReady:function(t,i,n){if(this._map){i&&this.fire("tileerror",{error:i,tile:n,coords:t});var o=this._tileCoordsToKey(t);(n=this._tiles[o])&&(n.loaded=+new Date,this._map._fadeAnimated?(vt(n.el,0),g(this._fadeFrame),this._fadeFrame=f(this._updateOpacity,this)):(n.active=!0,this._pruneTiles()),i||(pt(n.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:n.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),Li||!this._map._fadeAnimated?f(this._pruneTiles,this):setTimeout(e(this._pruneTiles,this),250)))}},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var i=new x(this._wrapX?s(t.x,this._wrapX):t.x,this._wrapY?s(t.y,this._wrapY):t.y);return i.z=t.z,i},_pxBoundsToTileRange:function(t){var i=this.getTileSize();return new P(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}}),dn=_n.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,i){this._url=t,(i=l(this,i)).detectRetina&&Ki&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomReverse?(i.zoomOffset--,i.minZoom++):(i.zoomOffset++,i.maxZoom--),i.minZoom=Math.max(0,i.minZoom)),"string"==typeof i.subdomains&&(i.subdomains=i.subdomains.split("")),Ti||this.on("tileunload",this._onTileRemove)},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},createTile:function(t,i){var n=document.createElement("img");return V(n,"load",e(this._tileOnLoad,this,i,n)),V(n,"error",e(this._tileOnError,this,i,n)),this.options.crossOrigin&&(n.crossOrigin=""),n.alt="",n.setAttribute("role","presentation"),n.src=this.getTileUrl(t),n},getTileUrl:function(t){var e={r:Ki?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var n=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=n),e["-y"]=n}return _(this._url,i(e,this.options))},_tileOnLoad:function(t,i){Li?setTimeout(e(t,this,null,i),0):t(null,i)},_tileOnError:function(t,i,e){var n=this.options.errorTileUrl;n&&i.getAttribute("src")!==n&&(i.src=n),t(e,i)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,i=this.options.maxZoom,e=this.options.zoomReverse,n=this.options.zoomOffset;return e&&(t=i-t),t+n},_getSubdomain:function(t){var i=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_abortLoading:function(){var t,i;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=r,i.onerror=r,i.complete||(i.src=ni,ut(i),delete this._tiles[t]))}}),pn=dn.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var n=i({},this.defaultWmsParams);for(var o in e)o in this.options||(n[o]=e[o]);var s=(e=l(this,e)).detectRetina&&Ki?2:1,r=this.getTileSize();n.width=r.x*s,n.height=r.y*s,this.wmsParams=n},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var i=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[i]=this._crs.code,dn.prototype.onAdd.call(this,t)},getTileUrl:function(t){var i=this._tileCoordsToNwSe(t),e=this._crs,n=b(e.project(i[0]),e.project(i[1])),o=n.min,s=n.max,r=(this._wmsVersion>=1.3&&this._crs===He?[o.y,o.x,s.y,s.x]:[o.x,o.y,s.x,s.y]).join(","),a=L.TileLayer.prototype.getTileUrl.call(this,t);return a+c(this.wmsParams,a,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+r},setParams:function(t,e){return i(this.wmsParams,t),e||this.redraw(),this}});dn.WMS=pn,Yt.wms=function(t,i){return new pn(t,i)};var mn=Ue.extend({options:{padding:.1,tolerance:0},initialize:function(t){l(this,t),n(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&pt(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,i){var e=this._map.getZoomScale(i,this._zoom),n=Pt(this._container),o=this._map.getSize().multiplyBy(.5+this.options.padding),s=this._map.project(this._center,i),r=this._map.project(t,i).subtract(s),a=o.multiplyBy(-e).add(n).add(o).subtract(r);Ni?wt(this._container,a,e):Lt(this._container,a)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,i=this._map.getSize(),e=this._map.containerPointToLayerPoint(i.multiplyBy(-t)).round();this._bounds=new P(e,e.add(i.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),fn=mn.extend({getEvents:function(){var t=mn.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){mn.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");V(t,"mousemove",o(this._onMouseMove,32,this),this),V(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),V(t,"mouseout",this._handleMouseOut,this),this._ctx=t.getContext("2d")},_destroyContainer:function(){delete this._ctx,ut(this._container),q(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){this._redrawBounds=null;for(var t in this._layers)this._layers[t]._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){this._drawnLayers={},mn.prototype._update.call(this);var t=this._bounds,i=this._container,e=t.getSize(),n=Ki?2:1;Lt(i,t.min),i.width=n*e.x,i.height=n*e.y,i.style.width=e.x+"px",i.style.height=e.y+"px",Ki&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){mn.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[n(t)]=t;var i=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=i),this._drawLast=i,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var i=t._order,e=i.next,n=i.prev;e?e.prev=n:this._drawLast=n,n?n.next=e:this._drawFirst=e,delete t._order,delete this._layers[L.stamp(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(t.options.dashArray){var i,e=t.options.dashArray.split(","),n=[];for(i=0;i<e.length;i++)n.push(Number(e[i]));t.options._dashArray=n}},_requestRedraw:function(t){this._map&&(this._extendRedrawBounds(t),this._redrawRequest=this._redrawRequest||f(this._redraw,this))},_extendRedrawBounds:function(t){if(t._pxBounds){var i=(t.options.weight||0)+1;this._redrawBounds=this._redrawBounds||new P,this._redrawBounds.extend(t._pxBounds.min.subtract([i,i])),this._redrawBounds.extend(t._pxBounds.max.add([i,i]))}},_redraw:function(){this._redrawRequest=null,this._redrawBounds&&(this._redrawBounds.min._floor(),this._redrawBounds.max._ceil()),this._clear(),this._draw(),this._redrawBounds=null},_clear:function(){var t=this._redrawBounds;if(t){var i=t.getSize();this._ctx.clearRect(t.min.x,t.min.y,i.x,i.y)}else this._ctx.clearRect(0,0,this._container.width,this._container.height)},_draw:function(){var t,i=this._redrawBounds;if(this._ctx.save(),i){var e=i.getSize();this._ctx.beginPath(),this._ctx.rect(i.min.x,i.min.y,e.x,e.y),this._ctx.clip()}this._drawing=!0;for(var n=this._drawFirst;n;n=n.next)t=n.layer,(!i||t._pxBounds&&t._pxBounds.intersects(i))&&t._updatePath();this._drawing=!1,this._ctx.restore()},_updatePoly:function(t,i){if(this._drawing){var e,n,o,s,r=t._parts,a=r.length,h=this._ctx;if(a){for(this._drawnLayers[t._leaflet_id]=t,h.beginPath(),e=0;e<a;e++){for(n=0,o=r[e].length;n<o;n++)s=r[e][n],h[n?"lineTo":"moveTo"](s.x,s.y);i&&h.closePath()}this._fillStroke(h,t)}}},_updateCircle:function(t){if(this._drawing&&!t._empty()){var i=t._point,e=this._ctx,n=Math.max(Math.round(t._radius),1),o=(Math.max(Math.round(t._radiusY),1)||n)/n;this._drawnLayers[t._leaflet_id]=t,1!==o&&(e.save(),e.scale(1,o)),e.beginPath(),e.arc(i.x,i.y/o,n,0,2*Math.PI,!1),1!==o&&e.restore(),this._fillStroke(e,t)}},_fillStroke:function(t,i){var e=i.options;e.fill&&(t.globalAlpha=e.fillOpacity,t.fillStyle=e.fillColor||e.color,t.fill(e.fillRule||"evenodd")),e.stroke&&0!==e.weight&&(t.setLineDash&&t.setLineDash(i.options&&i.options._dashArray||[]),t.globalAlpha=e.opacity,t.lineWidth=e.weight,t.strokeStyle=e.color,t.lineCap=e.lineCap,t.lineJoin=e.lineJoin,t.stroke())},_onClick:function(t){for(var i,e,n=this._map.mouseEventToLayerPoint(t),o=this._drawFirst;o;o=o.next)(i=o.layer).options.interactive&&i._containsPoint(n)&&!this._map._draggableMoved(i)&&(e=i);e&&(et(t),this._fireEvent([e],t))},_onMouseMove:function(t){if(this._map&&!this._map.dragging.moving()&&!this._map._animatingZoom){var i=this._map.mouseEventToLayerPoint(t);this._handleMouseHover(t,i)}},_handleMouseOut:function(t){var i=this._hoveredLayer;i&&(mt(this._container,"leaflet-interactive"),this._fireEvent([i],t,"mouseout"),this._hoveredLayer=null)},_handleMouseHover:function(t,i){for(var e,n,o=this._drawFirst;o;o=o.next)(e=o.layer).options.interactive&&e._containsPoint(i)&&(n=e);n!==this._hoveredLayer&&(this._handleMouseOut(t),n&&(pt(this._container,"leaflet-interactive"),this._fireEvent([n],t,"mouseover"),this._hoveredLayer=n)),this._hoveredLayer&&this._fireEvent([this._hoveredLayer],t)},_fireEvent:function(t,i,e){this._map._fireDOMEvent(i,e||i.type,t)},_bringToFront:function(t){var i=t._order,e=i.next,n=i.prev;e&&(e.prev=n,n?n.next=e:e&&(this._drawFirst=e),i.prev=this._drawLast,this._drawLast.next=i,i.next=null,this._drawLast=i,this._requestRedraw(t))},_bringToBack:function(t){var i=t._order,e=i.next,n=i.prev;n&&(n.next=e,e?e.prev=n:n&&(this._drawLast=n),i.prev=null,i.next=this._drawFirst,this._drawFirst.prev=i,this._drawFirst=i,this._requestRedraw(t))}}),gn=function(){try{return document.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return document.createElement("<lvml:"+t+' class="lvml">')}}catch(t){return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),vn={_initContainer:function(){this._container=ht("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(mn.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var i=t._container=gn("shape");pt(i,"leaflet-vml-shape "+(this.options.className||"")),i.coordsize="1 1",t._path=gn("path"),i.appendChild(t._path),this._updateStyle(t),this._layers[n(t)]=t},_addPath:function(t){var i=t._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var i=t._container;ut(i),t.removeInteractiveTarget(i),delete this._layers[n(t)]},_updateStyle:function(t){var i=t._stroke,e=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(i||(i=t._stroke=gn("stroke")),o.appendChild(i),i.weight=n.weight+"px",i.color=n.color,i.opacity=n.opacity,n.dashArray?i.dashStyle=ei(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):i.dashStyle="",i.endcap=n.lineCap.replace("butt","flat"),i.joinstyle=n.lineJoin):i&&(o.removeChild(i),t._stroke=null),n.fill?(e||(e=t._fill=gn("fill")),o.appendChild(e),e.color=n.fillColor||n.color,e.opacity=n.fillOpacity):e&&(o.removeChild(e),t._fill=null)},_updateCircle:function(t){var i=t._point.round(),e=Math.round(t._radius),n=Math.round(t._radiusY||e);this._setPath(t,t._empty()?"M0 0":"AL "+i.x+","+i.y+" "+e+","+n+" 0,23592600")},_setPath:function(t,i){t._path.v=i},_bringToFront:function(t){ct(t._container)},_bringToBack:function(t){_t(t._container)}},yn=Ji?gn:E,xn=mn.extend({getEvents:function(){var t=mn.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=yn("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=yn("g"),this._container.appendChild(this._rootGroup)}
vendor: 2,722 bytes, line 5
5,_destroyContainer:function(){ut(this._container),q(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){mn.prototype._update.call(this);var t=this._bounds,i=t.getSize(),e=this._container;this._svgSize&&this._svgSize.equals(i)||(this._svgSize=i,e.setAttribute("width",i.x),e.setAttribute("height",i.y)),Lt(e,t.min),e.setAttribute("viewBox",[t.min.x,t.min.y,i.x,i.y].join(" ")),this.fire("update")}},_initPath:function(t){var i=t._path=yn("path");t.options.className&&pt(i,t.options.className),t.options.interactive&&pt(i,"leaflet-interactive"),this._updateStyle(t),this._layers[n(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ut(t._path),t.removeInteractiveTarget(t._path),delete this._layers[n(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var i=t._path,e=t.options;i&&(e.stroke?(i.setAttribute("stroke",e.color),i.setAttribute("stroke-opacity",e.opacity),i.setAttribute("stroke-width",e.weight),i.setAttribute("stroke-linecap",e.lineCap),i.setAttribute("stroke-linejoin",e.lineJoin),e.dashArray?i.setAttribute("stroke-dasharray",e.dashArray):i.removeAttribute("stroke-dasharray"),e.dashOffset?i.setAttribute("stroke-dashoffset",e.dashOffset):i.removeAttribute("stroke-dashoffset")):i.setAttribute("stroke","none"),e.fill?(i.setAttribute("fill",e.fillColor||e.color),i.setAttribute("fill-opacity",e.fillOpacity),i.setAttribute("fill-rule",e.fillRule||"evenodd")):i.setAttribute("fill","none"))},_updatePoly:function(t,i){this._setPath(t,k(t._parts,i))},_updateCircle:function(t){var i=t._point,e=Math.max(Math.round(t._radius),1),n="a"+e+","+(Math.max(Math.round(t._radiusY),1)||e)+" 0 1,0 ",o=t._empty()?"M0 0":"M"+(i.x-e)+","+i.y+n+2*e+",0 "+n+2*-e+",0 ";this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute("d",i)},_bringToFront:function(t){ct(t._path)},_bringToBack:function(t){_t(t._path)}});Ji&&xn.include(vn),Le.include({getRenderer:function(t){var i=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return i||(i=this._renderer=this.options.preferCanvas&&Xt()||Jt()),this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if("overlayPane"===t||void 0===t)return!1;var i=this._paneRenderers[t];return void 0===i&&(i=xn&&Jt({pane:t})||fn&&Xt({pane:t}),this._paneRenderers[t]=i),i}});var wn=en.extend({initialize:function(t,i){en.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))}
vendor: 13,842 bytes, line 5
5,_boundsToLatLngs:function(t){return t=z(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});xn.create=yn,xn.pointsToPath=k,nn.geometryToLayer=Wt,nn.coordsToLatLng=Ht,nn.coordsToLatLngs=Ft,nn.latLngToCoords=Ut,nn.latLngsToCoords=Vt,nn.getFeature=qt,nn.asFeature=Gt,Le.mergeOptions({boxZoom:!0});var Ln=Ze.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){V(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){q(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ut(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),mi(),bt(),this._startPoint=this._map.mouseEventToContainerPoint(t),V(document,{contextmenu:Q,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=ht("div","leaflet-zoom-box",this._container),pt(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var i=new P(this._point,this._startPoint),e=i.getSize();Lt(this._box,i.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(ut(this._box),mt(this._container,"leaflet-crosshair")),fi(),Tt(),q(document,{contextmenu:Q,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(e(this._resetState,this),0);var i=new T(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire("boxzoomend",{boxZoomBounds:i})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});Le.addInitHook("addHandler","boxZoom",Ln),Le.mergeOptions({doubleClickZoom:!0});var Pn=Ze.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var i=this._map,e=i.getZoom(),n=i.options.zoomDelta,o=t.originalEvent.shiftKey?e-n:e+n;"center"===i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});Le.addInitHook("addHandler","doubleClickZoom",Pn),Le.mergeOptions({dragging:!0,inertia:!zi,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var bn=Ze.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new Be(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}pt(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){mt(this._map._container,"leaflet-grab"),mt(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var i=z(this._map.options.maxBounds);this._offsetLimit=b(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var i=this._lastTime=+new Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(i),this._prunePositions(i)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),i=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,i){return t-(t-i)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos),i=this._offsetLimit;t.x<i.min.x&&(t.x=this._viscousLimit(t.x,i.min.x)),t.y<i.min.y&&(t.y=this._viscousLimit(t.y,i.min.y)),t.x>i.max.x&&(t.x=this._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.y=this._viscousLimit(t.y,i.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,i=Math.round(t/2),e=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-i+e)%t+i-e,s=(n+i+e)%t-i-e,r=Math.abs(o+e)<Math.abs(s+e)?o:s;this._draggable._absPos=this._draggable._newPos.clone(),this._draggable._newPos.x=r},_onDragEnd:function(t){var i=this._map,e=i.options,n=!e.inertia||this._times.length<2;if(i.fire("dragend",t),n)i.fire("moveend");else{this._prunePositions(+new Date);var o=this._lastPos.subtract(this._positions[0]),s=(this._lastTime-this._times[0])/1e3,r=e.easeLinearity,a=o.multiplyBy(r/s),h=a.distanceTo([0,0]),u=Math.min(e.inertiaMaxSpeed,h),l=a.multiplyBy(u/h),c=u/(e.inertiaDeceleration*r),_=l.multiplyBy(-c/2).round();_.x||_.y?(_=i._limitOffset(_,i.options.maxBounds),f(function(){i.panBy(_,{duration:c,easeLinearity:r,noMoveStart:!0,animate:!0})})):i.fire("moveend")}}});Le.addInitHook("addHandler","dragging",bn),Le.mergeOptions({keyboard:!0,keyboardPanDelta:80});var Tn=Ze.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,54,173]},initialize:function(t){this._map=t,this._setPanDelta(t.options.keyboardPanDelta),this._setZoomDelta(t.options.zoomDelta)},addHooks:function(){var t=this._map._container;t.tabIndex<=0&&(t.tabIndex="0"),V(t,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.on({focus:this._addHooks,blur:this._removeHooks},this)},removeHooks:function(){this._removeHooks(),q(this._map._container,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.off({focus:this._addHooks,blur:this._removeHooks},this)},_onMouseDown:function(){if(!this._focused){var t=document.body,i=document.documentElement,e=t.scrollTop||i.scrollTop,n=t.scrollLeft||i.scrollLeft;this._map._container.focus(),window.scrollTo(n,e)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanDelta:function(t){var i,e,n=this._panKeys={},o=this.keyCodes;for(i=0,e=o.left.length;i<e;i++)n[o.left[i]]=[-1*t,0];for(i=0,e=o.right.length;i<e;i++)n[o.right[i]]=[t,0];for(i=0,e=o.down.length;i<e;i++)n[o.down[i]]=[0,t];for(i=0,e=o.up.length;i<e;i++)n[o.up[i]]=[0,-1*t]},_setZoomDelta:function(t){var i,e,n=this._zoomKeys={},o=this.keyCodes;for(i=0,e=o.zoomIn.length;i<e;i++)n[o.zoomIn[i]]=t;for(i=0,e=o.zoomOut.length;i<e;i++)n[o.zoomOut[i]]=-t},_addHooks:function(){V(document,"keydown",this._onKeyDown,this)},_removeHooks:function(){q(document,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var i,e=t.keyCode,n=this._map;if(e in this._panKeys){if(n._panAnim&&n._panAnim._inProgress)return;i=this._panKeys[e],t.shiftKey&&(i=w(i).multiplyBy(3)),n.panBy(i),n.options.maxBounds&&n.panInsideBounds(n.options.maxBounds)}else if(e in this._zoomKeys)n.setZoom(n.getZoom()+(t.shiftKey?3:1)*this._zoomKeys[e]);else{if(27!==e||!n._popup||!n._popup.options.closeOnEscapeKey)return;n.closePopup()}Q(t)}}});Le.addInitHook("addHandler","keyboard",Tn),Le.mergeOptions({scrollWheelZoom:!0,wheelDebounceTime:40,wheelPxPerZoomLevel:60});var zn=Ze.extend({addHooks:function(){V(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){q(this._map._container,"mousewheel",this._onWheelScroll,this)},_onWheelScroll:function(t){var i=it(t),n=this._map.options.wheelDebounceTime;this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var o=Math.max(n-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e(this._performZoom,this),o),Q(t)},_performZoom:function(){var t=this._map,i=t.getZoom(),e=this._map.options.zoomSnap||0;t._stop();var n=this._delta/(4*this._map.options.wheelPxPerZoomLevel),o=4*Math.log(2/(1+Math.exp(-Math.abs(n))))/Math.LN2,s=e?Math.ceil(o/e)*e:o,r=t._limitZoom(i+(this._delta>0?s:-s))-i;this._delta=0,this._startTime=null,r&&("center"===t.options.scrollWheelZoom?t.setZoom(i+r):t.setZoomAround(this._lastMousePos,i+r))}});Le.addInitHook("addHandler","scrollWheelZoom",zn),Le.mergeOptions({tap:!0,tapTolerance:15});var Mn=Ze.extend({addHooks:function(){V(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){q(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if($(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new x(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&pt(n,"leaflet-active"),this._holdTimeout=setTimeout(e(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),this._simulateEvent("mousedown",i),V(document,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),q(document,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],e=i.target;e&&e.tagName&&"a"===e.tagName.toLowerCase()&&mt(e,"leaflet-active"),this._simulateEvent("mouseup",i),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var i=t.touches[0];this._newPos=new x(i.clientX,i.clientY),this._simulateEvent("mousemove",i)},_simulateEvent:function(t,i){var e=document.createEvent("MouseEvents");e._simulated=!0,i.target._simulatedClick=!0,e.initMouseEvent(t,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),i.target.dispatchEvent(e)}});Vi&&!Ui&&Le.addInitHook("addHandler","tap",Mn),Le.mergeOptions({touchZoom:Vi&&!zi,bounceAtZoomLimits:!0});var Cn=Ze.extend({addHooks:function(){pt(this._map._container,"leaflet-touch-zoom"),V(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){mt(this._map._container,"leaflet-touch-zoom"),q(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=i.getSize()._divideBy(2),this._startLatLng=i.containerPointToLatLng(this._centerPoint),"center"!==i.options.touchZoom&&(this._pinchStartLatLng=i.containerPointToLatLng(e.add(n)._divideBy(2))),this._startDist=e.distanceTo(n),this._startZoom=i.getZoom(),this._moved=!1,this._zooming=!0,i._stop(),V(document,"touchmove",this._onTouchMove,this),V(document,"touchend",this._onTouchEnd,this),$(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var i=this._map,n=i.mouseEventToContainerPoint(t.touches[0]),o=i.mouseEventToContainerPoint(t.touches[1]),s=n.distanceTo(o)/this._startDist;if(this._zoom=i.getScaleZoom(s,this._startZoom),!i.options.bounceAtZoomLimits&&(this._zoom<i.getMinZoom()&&s<1||this._zoom>i.getMaxZoom()&&s>1)&&(this._zoom=i._limitZoom(this._zoom)),"center"===i.options.touchZoom){if(this._center=this._startLatLng,1===s)return}else{var r=n._add(o)._divideBy(2)._subtract(this._centerPoint);if(1===s&&0===r.x&&0===r.y)return;this._center=i.unproject(i.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(i._moveStart(!0,!1),this._moved=!0),g(this._animRequest);var a=e(i._move,i,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=f(a,this,!0),$(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,g(this._animRequest),q(document,"touchmove",this._onTouchMove),q(document,"touchend",this._onTouchEnd),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}});Le.addInitHook("addHandler","touchZoom",Cn),Le.BoxZoom=Ln,Le.DoubleClickZoom=Pn,Le.Drag=bn,Le.Keyboard=Tn,Le.ScrollWheelZoom=zn,Le.Tap=Mn,Le.TouchZoom=Cn;var Zn=window.L;window.L=t,Object.freeze=$t,t.version="1.3.1",t.noConflict=function(){return window.L=Zn,this},t.Control=Pe,t.control=be,t.Browser=$i,t.Evented=ui,t.Mixin=Ee,t.Util=ai,t.Class=v,t.Handler=Ze,t.extend=i,t.bind=e,t.stamp=n,t.setOptions=l,t.DomEvent=de,t.DomUtil=xe,t.PosAnimation=we,t.Draggable=Be,t.LineUtil=Oe,t.PolyUtil=Re,t.Point=x,t.point=w,t.Bounds=P,t.bounds=b,t.Transformation=Z,t.transformation=S,t.Projection=je,t.LatLng=M,t.latLng=C,t.LatLngBounds=T,t.latLngBounds=z,t.CRS=ci,t.GeoJSON=nn,t.geoJSON=Kt,t.geoJ
vendor: 21,895 bytes, lines 5-723
5son=sn,t.Layer=Ue,t.LayerGroup=Ve,t.layerGroup=function(t,i){return new Ve(t,i)},t.FeatureGroup=qe,t.featureGroup=function(t){return new qe(t)},t.ImageOverlay=rn,t.imageOverlay=function(t,i,e){return new rn(t,i,e)},t.VideoOverlay=an,t.videoOverlay=function(t,i,e){return new an(t,i,e)},t.DivOverlay=hn,t.Popup=un,t.popup=function(t,i){return new un(t,i)},t.Tooltip=ln,t.tooltip=function(t,i){return new ln(t,i)},t.Icon=Ge,t.icon=function(t){return new Ge(t)},t.DivIcon=cn,t.divIcon=function(t){return new cn(t)},t.Marker=Xe,t.marker=function(t,i){return new Xe(t,i)},t.TileLayer=dn,t.tileLayer=Yt,t.GridLayer=_n,t.gridLayer=function(t){return new _n(t)},t.SVG=xn,t.svg=Jt,t.Renderer=mn,t.Canvas=fn,t.canvas=Xt,t.Path=Je,t.CircleMarker=$e,t.circleMarker=function(t,i){return new $e(t,i)},t.Circle=Qe,t.circle=function(t,i,e){return new Qe(t,i,e)},t.Polyline=tn,t.polyline=function(t,i){return new tn(t,i)},t.Polygon=en,t.polygon=function(t,i){return new en(t,i)},t.Rectangle=wn,t.rectangle=function(t,i){return new wn(t,i)},t.Map=Le,t.map=function(t,i){return new Le(t,i)}});
6
7(function (root, factory) {
8	if (typeof define === 'function' && define.amd) {
9		// AMD. Register as an anonymous module.
10		define(['leaflet'], factory);
11	} else if (typeof modules === 'object' && module.exports) {
12		// define a Common JS module that relies on 'leaflet'
13		module.exports = factory(require('leaflet'));
14	} else {
15		// Assume Leaflet is loaded into global object L already
16		factory(L);
17	}
18}(this, function (L) {
19	'use strict';
20
21	L.TileLayer.Provider = L.TileLayer.extend({
22		initialize: function (arg, options) {
23			var providers = L.TileLayer.Provider.providers;
24			var parts = arg.split('.');
25
26			var providerName = parts[0];
27			var variantName = parts[1];
28
29			if (!providers[providerName]) {
30				throw 'No such provider (' + providerName + ')';
31			}
32
33			var provider = {
34				url: providers[providerName].url,
35				options: providers[providerName].options
36			};
37
38
39
40			// overwrite values in provider from variant.
41			if (variantName && 'variants' in providers[providerName]) {
42				if (!(variantName in providers[providerName].variants)) {
43					throw 'No such variant of ' + providerName + ' (' + variantName + ')';
44				}
45				var variant = providers[providerName].variants[variantName];
46				var variantOptions;
47				if (typeof variant === 'string') {
48					variantOptions = {
49						variant: variant
50					};
51				} else {
52					variantOptions = variant.options;
53				}
54				provider = {
55					url: variant.url || provider.url,
56					options: L.Util.extend({}, provider.options, variantOptions)
57				};
58			}
59
60			// replace attribution placeholders with their values from toplevel provider attribution,
61			// recursively
62			var attributionReplacer = function (attr) {
63				if (attr.indexOf('{attribution.') === -1) {
64					return attr;
65				}
66				return attr.replace(/\{attribution.(\w*)\}/g,
67					function (match, attributionName) {
68						return attributionReplacer(providers[attributionName].options.attribution);
69					}
70				);
71			};
72			provider.options.attribution = attributionReplacer(provider.options.attribution);
73
74			// Compute final options combining provider options with any user overrides
75			var layerOpts = L.Util.extend({}, provider.options, options);
76			L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
77		}
78	});
79
80	/**
81	 * Definition of providers.
82	 * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
83	 */
84
85	L.TileLayer.Provider.providers = {
86		OpenStreetMap: {
87			url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
88			options: {
89				maxZoom: 19,
90				attribution:
91					'&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
92			},
93			variants: {
94				Mapnik: {},
95				DE: {
96					url: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
97					options: {
98						maxZoom: 18
99					}
100				},
101				CH: {
102					url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',
103					options: {
104						maxZoom: 18,
105						bounds: [[45, 5], [48, 11]]
106					}
107				},
108				France: {
109					url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',
110					options: {
111						maxZoom: 20,
112						attribution: '&copy; Openstreetmap France | {attribution.OpenStreetMap}'
113					}
114				},
115				HOT: {
116					url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
117					options: {
118						attribution:
119							'{attribution.OpenStreetMap}, ' +
120							'Tiles style by <a href="https://www.hotosm.org/" target="_blank">Humanitarian OpenStreetMap Team</a> ' +
121							'hosted by <a href="https://openstreetmap.fr/" target="_blank">OpenStreetMap France</a>'
122					}
123				},
124				BZH: {
125					url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',
126					options: {
127						attribution: '{attribution.OpenStreetMap}, Tiles courtesy of <a href="http://www.openstreetmap.bzh/" target="_blank">Breton OpenStreetMap Team</a>',
128						bounds: [[46.2, -5.5], [50, 0.7]]
129					}
130				}
131			}
132		},
133		OpenSeaMap: {
134			url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
135			options: {
136				attribution: 'Map data: &copy; <a href="http://www.openseamap.org">OpenSeaMap</a> contributors'
137			}
138		},
139		OpenPtMap: {
140			url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png',
141			options: {
142				maxZoom: 17,
143				attribution: 'Map data: &copy; <a href="http://www.openptmap.org">OpenPtMap</a> contributors'
144			}
145		},
146		OpenTopoMap: {
147			url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
148			options: {
149				maxZoom: 17,
150				attribution: 'Map data: {attribution.OpenStreetMap}, <a href="http://viewfinderpanoramas.org">SRTM</a> | Map style: &copy; <a href="https://opentopomap.org">OpenTopoMap</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)'
151			}
152		},
153		OpenRailwayMap: {
154			url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',
155			options: {
156				maxZoom: 19,
157				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &copy; <a href="https://www.OpenRailwayMap.org">OpenRailwayMap</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)'
158			}
159		},
160		OpenFireMap: {
161			url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',
162			options: {
163				maxZoom: 19,
164				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &copy; <a href="http://www.openfiremap.org">OpenFireMap</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)'
165			}
166		},
167		SafeCast: {
168			url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',
169			options: {
170				maxZoom: 16,
171				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &copy; <a href="https://blog.safecast.org/about/">SafeCast</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)'
172			}
173		},
174		Thunderforest: {
175			url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',
176			options: {
177				attribution:
178					'&copy; <a href="http://www.thunderforest.com/">Thunderforest</a>, {attribution.OpenStreetMap}',
179				variant: 'cycle',
180				apikey: '<insert your api key here>',
181				maxZoom: 22
182			},
183			variants: {
184				OpenCycleMap: 'cycle',
185				Transport: {
186					options: {
187						variant: 'transport'
188					}
189				},
190				TransportDark: {
191					options: {
192						variant: 'transport-dark'
193					}
194				},
195				SpinalMap: {
196					options: {
197						variant: 'spinal-map'
198					}
199				},
200				Landscape: 'landscape',
201				Outdoors: 'outdoors',
202				Pioneer: 'pioneer',
203				MobileAtlas: 'mobile-atlas',
204				Neighbourhood: 'neighbourhood'
205			}
206		},
207		CyclOSM: {
208			url: 'https://dev.{s}.tile.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',
209			options: {
210				maxZoom: 20,
211				attribution: '<a href="https://github.com/cyclosm/cyclosm-cartocss-style/releases" title="CyclOSM - Open Bicycle render">CyclOSM</a> | Map data: {attribution.OpenStreetMap}'
212			}
213		},
214		OpenMapSurfer: {
215			url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png',
216			options: {
217				maxZoom: 19,
218				variant: 'roads',
219				attribution: 'Imagery from <a href="http://giscience.uni-hd.de/">GIScience Research Group @ University of Heidelberg</a> | Map data '
220			},
221			variants: {
222				Roads: {
223					options: {
224						variant: 'roads',
225						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
226					}
227				},
228				Hybrid: {
229					options: {
230						variant: 'hybrid',
231						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
232					}
233				},
234				AdminBounds: {
235					options: {
236						variant: 'adminb',
237						maxZoom: 18,
238						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
239					}
240				},
241				ContourLines: {
242					options: {
243						variant: 'asterc',
244						maxZoom: 18,
245						minZoom: 13,
246						attribution: '{attribution.OpenMapSurfer} <a href="https://lpdaac.usgs.gov/products/aster_policies">ASTER GDEM</a>'
247					}
248				},
249				Hillshade: {
250					options: {
251						variant: 'asterh',
252						maxZoom: 18,
253						attribution: '{attribution.OpenMapSurfer} <a href="https://lpdaac.usgs.gov/products/aster_policies">ASTER GDEM</a>, <a href="http://srtm.csi.cgiar.org/">SRTM</a>'
254					}
255				},
256				ElementsAtRisk: {
257					options: {
258						variant: 'elements_at_risk',
259						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
260					}
261				}
262			}
263		},
264		Hydda: {
265			url: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',
266			options: {
267				maxZoom: 18,
268				variant: 'full',
269				attribution: 'Tiles courtesy of <a href="http://openstreetmap.se/" target="_blank">OpenStreetMap Sweden</a> &mdash; Map data {attribution.OpenStreetMap}'
270			},
271			variants: {
272				Full: 'full',
273				Base: 'base',
274				RoadsAndLabels: 'roads_and_labels'
275			}
276		},
277		MapBox: {
278			url: 'https://api.mapbox.com/styles/v1/mapbox/streets-v11/tiles/{z}/{x}/{y}?access_token={accessToken}',
279			options: {
280				attribution:
281					'<a href="https://www.mapbox.com/about/maps/" target="_blank">&copy; Mapbox</a> ' +
282					'{attribution.OpenStreetMap} ' +
283					'<a href="https://www.mapbox.com/map-feedback/" target="_blank">Improve this map</a>',
284				subdomains: 'abcd',
285				id: 'mapbox.streets',
286				accessToken: '<insert your access token here>',
287				maxZoom: 25,
288				tileSize: 512,
289  				zoomOffset: -1,
290			}
291		},
292		Stamen: {
293			url: 'https://tiles.stadiamaps.com/tiles/stamen_toner/{z}/{x}/{y}{r}.{ext}',
294			options: {
295				attribution:
296					'Map tiles by <a href="http://stamen.com">Stamen Design</a>, ' +
297					'<a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; ' +
298					'Map data {attribution.OpenStreetMap}',
299				subdomains: 'abcd',
300				minZoom: 0,
301				maxZoom: 20,
302				variant: 'toner',
303				ext: 'png'
304			},
305			variants: {
306				Toner: 'toner',
307				TonerBackground: 'toner-background',
308				TonerHybrid: 'toner-hybrid',
309				TonerLines: 'toner-lines',
310				TonerLabels: 'toner-labels',
311				TonerLite: 'toner-lite',
312				Watercolor: {
313					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
314					options: {
315						variant: 'watercolor',
316						ext: 'jpg',
317						minZoom: 1,
318						maxZoom: 16
319					}
320				},
321				Terrain: {
322					options: {
323						variant: 'terrain',
324						minZoom: 0,
325						maxZoom: 18
326					}
327				},
328				TerrainBackground: {
329					options: {
330						variant: 'terrain-background',
331						minZoom: 0,
332						maxZoom: 18
333					}
334				},
335				TerrainLabels: {
336					options: {
337						variant: 'terrain-labels',
338						minZoom: 0,
339						maxZoom: 18
340					}
341				},
342				TopOSMRelief: {
343					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
344					options: {
345						variant: 'toposm-color-relief',
346						ext: 'jpg',
347						bounds: [[22, -132], [51, -56]]
348					}
349				},
350				TopOSMFeatures: {
351					options: {
352						variant: 'toposm-features',
353						bounds: [[22, -132], [51, -56]],
354						opacity: 0.9
355					}
356				}
357			}
358		},
359		TomTom: {
360			url: 'https://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}',
361			options: {
362				variant: 'basic',
363				maxZoom: 22,
364				attribution:
365					'<a href="https://tomtom.com" target="_blank">&copy;  1992 - ' + new Date().getFullYear() + ' TomTom.</a> ',
366				subdomains: 'abcd',
367				style: 'main',
368				ext: 'png',
369				apikey: '<insert your API key here>',
370			},
371			variants: {
372				Basic: 'basic',
373				Hybrid: 'hybrid',
374				Labels: 'labels'
375			}
376		},
377		Esri: {
378			url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
379			options: {
380				variant: 'World_Street_Map',
381				attribution: 'Tiles &copy; Esri'
382			},
383			variants: {
384				WorldStreetMap: {
385					options: {
386						attribution:
387							'{attribution.Esri} &mdash; ' +
388							'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
389					}
390				},
391				DeLorme: {
392					options: {
393						variant: 'Specialty/DeLorme_World_Base_Map',
394						minZoom: 1,
395						maxZoom: 11,
396						attribution: '{attribution.Esri} &mdash; Copyright: &copy;2012 DeLorme'
397					}
398				},
399				WorldTopoMap: {
400					options: {
401						variant: 'World_Topo_Map',
402						attribution:
403							'{attribution.Esri} &mdash; ' +
404							'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
405					}
406				},
407				WorldImagery: {
408					options: {
409						variant: 'World_Imagery',
410						attribution:
411							'{attribution.Esri} &mdash; ' +
412							'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
413					}
414				},
415				WorldTerrain: {
416					options: {
417						variant: 'World_Terrain_Base',
418						maxZoom: 13,
419						attribution:
420							'{attribution.Esri} &mdash; ' +
421							'Source: USGS, Esri, TANA, DeLorme, and NPS'
422					}
423				},
424				WorldShadedRelief: {
425					options: {
426						variant: 'World_Shaded_Relief',
427						maxZoom: 13,
428						attribution: '{attribution.Esri} &mdash; Source: Esri'
429					}
430				},
431				WorldPhysical: {
432					options: {
433						variant: 'World_Physical_Map',
434						maxZoom: 8,
435						attribution: '{attribution.Esri} &mdash; Source: US National Park Service'
436					}
437				},
438				OceanBasemap: {
439					options: {
440						variant: 'Ocean_Basemap',
441						maxZoom: 13,
442						attribution: '{attribution.Esri} &mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
443					}
444				},
445				NatGeoWorldMap: {
446					options: {
447						variant: 'NatGeo_World_Map',
448						maxZoom: 16,
449						attribution: '{attribution.Esri} &mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
450					}
451				},
452				WorldGrayCanvas: {
453					options: {
454						variant: 'Canvas/World_Light_Gray_Base',
455						maxZoom: 16,
456						attribution: '{attribution.Esri} &mdash; Esri, DeLorme, NAVTEQ'
457					}
458				}
459			}
460		},
461		OpenWeatherMap: {
462			url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',
463			options: {
464				maxZoom: 19,
465				attribution: 'Map data &copy; <a href="http://openweathermap.org">OpenWeatherMap</a>',
466				apiKey:'<insert your api key here>',
467				opacity: 0.5
468			},
469			variants: {
470				Clouds: 'clouds',
471				CloudsClassic: 'clouds_cls',
472				Precipitation: 'precipitation',
473				PrecipitationClassic: 'precipitation_cls',
474				Rain: 'rain',
475				RainClassic: 'rain_cls',
476				Pressure: 'pressure',
477				PressureContour: 'pressure_cntr',
478				Wind: 'wind',
479				Temperature: 'temp',
480				Snow: 'snow'
481			}
482		},
483		HERE: {
484			/*
485			 * HERE maps, formerly Nokia maps.
486			 * These basemaps are free, but you need an API key. Please sign up at
487			 * https://developer.here.com/plans
488			 */
489			url:
490				'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +
491				'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +
492				'app_id={app_id}&app_code={app_code}&lg={language}',
493			options: {
494				attribution:
495					'Map &copy; 1987-' + new Date().getFullYear() + ' <a href="http://developer.here.com">HERE</a>',
496				subdomains: '1234',
497				mapID: 'newest',
498				'app_id': '<insert your app_id here>',
499				'app_code': '<insert your app_code here>',
500				base: 'base',
501				variant: 'normal.day',
502				maxZoom: 20,
503				type: 'maptile',
504				language: 'eng',
505				format: 'png8',
506				size: '256'
507			},
508			variants: {
509				normalDay: 'normal.day',
510				normalDayCustom: 'normal.day.custom',
511				normalDayGrey: 'normal.day.grey',
512				normalDayMobile: 'normal.day.mobile',
513				normalDayGreyMobile: 'normal.day.grey.mobile',
514				normalDayTransit: 'normal.day.transit',
515				normalDayTransitMobile: 'normal.day.transit.mobile',
516				normalDayTraffic: {
517					options: {
518						variant: 'normal.traffic.day',
519						base: 'traffic',
520						type: 'traffictile'
521					}
522				},
523				normalNight: 'normal.night',
524				normalNightMobile: 'normal.night.mobile',
525				normalNightGrey: 'normal.night.grey',
526				normalNightGreyMobile: 'normal.night.grey.mobile',
527				normalNightTransit: 'normal.night.transit',
528				normalNightTransitMobile: 'normal.night.transit.mobile',
529				reducedDay: 'reduced.day',
530				reducedNight: 'reduced.night',
531				basicMap: {
532					options: {
533						type: 'basetile'
534					}
535				},
536				mapLabels: {
537					options: {
538						type: 'labeltile',
539						format: 'png'
540					}
541				},
542				trafficFlow: {
543					options: {
544						base: 'traffic',
545						type: 'flowtile'
546					}
547				},
548				carnavDayGrey: 'carnav.day.grey',
549				hybridDay: {
550					options: {
551						base: 'aerial',
552						variant: 'hybrid.day'
553					}
554				},
555				hybridDayMobile: {
556					options: {
557						base: 'aerial',
558						variant: 'hybrid.day.mobile'
559					}
560				},
561				hybridDayTransit: {
562					options: {
563						base: 'aerial',
564						variant: 'hybrid.day.transit'
565					}
566				},
567				hybridDayGrey: {
568					options: {
569						base: 'aerial',
570						variant: 'hybrid.grey.day'
571					}
572				},
573				hybridDayTraffic: {
574					options: {
575						variant: 'hybrid.traffic.day',
576						base: 'traffic',
577						type: 'traffictile'
578					}
579				},
580				pedestrianDay: 'pedestrian.day',
581				pedestrianNight: 'pedestrian.night',
582				satelliteDay: {
583					options: {
584						base: 'aerial',
585						variant: 'satellite.day'
586					}
587				},
588				terrainDay: {
589					options: {
590						base: 'aerial',
591						variant: 'terrain.day'
592					}
593				},
594				terrainDayMobile: {
595					options: {
596						base: 'aerial',
597						variant: 'terrain.day.mobile'
598					}
599				}
600			}
601		},
602		FreeMapSK: {
603			url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',
604			options: {
605				minZoom: 8,
606				maxZoom: 16,
607				subdomains: '1234',
608				bounds: [[47.204642, 15.996093], [49.830896, 22.576904]],
609				attribution:
610					'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 <a href="http://freemap.sk">Freemap.sk</a>'
611			}
612		},
613		MtbMap: {
614			url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',
615			options: {
616				attribution:
617					'{attribution.OpenStreetMap} &amp; USGS'
618			}
619		},
620		CartoDB: {
621			url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',
622			options: {
623				attribution: '{attribution.OpenStreetMap} &copy; <a href="https://carto.com/attributions">CARTO</a>',
624				subdomains: 'abcd',
625				maxZoom: 19,
626				variant: 'light_all'
627			},
628			variants: {
629				Positron: 'light_all',
630				PositronNoLabels: 'light_nolabels',
631				PositronOnlyLabels: 'light_only_labels',
632				DarkMatter: 'dark_all',
633				DarkMatterNoLabels: 'dark_nolabels',
634				DarkMatterOnlyLabels: 'dark_only_labels',
635				Voyager: 'rastertiles/voyager',
636				VoyagerNoLabels: 'rastertiles/voyager_nolabels',
637				VoyagerOnlyLabels: 'rastertiles/voyager_only_labels',
638				VoyagerLabelsUnder: 'rastertiles/voyager_labels_under'
639			}
640		},
641		HikeBike: {
642			url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',
643			options: {
644				maxZoom: 19,
645				attribution: '{attribution.OpenStreetMap}',
646				variant: 'hikebike'
647			},
648			variants: {
649				HikeBike: {},
650				HillShading: {
651					options: {
652						maxZoom: 15,
653						variant: 'hillshading'
654					}
655				}
656			}
657		},
658		BasemapAT: {
659			url: 'https://maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}',
660			options: {
661				maxZoom: 19,
662				attribution: 'Datenquelle: <a href="https://www.basemap.at">basemap.at</a>',
663				subdomains: ['', '1', '2', '3', '4'],
664				format: 'png',
665				bounds: [[46.358770, 8.782379], [49.037872, 17.189532]],
666				variant: 'geolandbasemap'
667			},
668			variants: {
669				basemap: {
670					options: {
671						maxZoom: 20, // currently only in Vienna
672						variant: 'geolandbasemap'
673					}
674				},
675				grau: 'bmapgrau',
676				overlay: 'bmapoverlay',
677				highdpi: {
678					options: {
679						variant: 'bmaphidpi',
680						format: 'jpeg'
681					}
682				},
683				orthofoto: {
684					options: {
685						maxZoom: 20, // currently only in Vienna
686						variant: 'bmaporthofoto30cm',
687						format: 'jpeg'
688					}
689				}
690			}
691		},
692		nlmaps: {
693			url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',
694			options: {
695				minZoom: 6,
696				maxZoom: 19,
697				bounds: [[50.5, 3.25], [54, 7.6]],
698				attribution: 'Kaartgegevens &copy; <a href="kadaster.nl">Kadaster</a>'
699			},
700			variants: {
701				'standaard': 'brtachtergrondkaart',
702				'pastel': 'brtachtergrondkaartpastel',
703				'grijs': 'brtachtergrondkaartgrijs',
704				'luchtfoto': {
705					'url': 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png',
706				}
707			}
708		},
709		NASAGIBS: {
710			url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',
711			options: {
712				attribution:
713					'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +
714					'(<a href="https://earthdata.nasa.gov">ESDIS</a>) with funding provided by NASA/HQ.',
715				bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],
716				minZoom: 1,
717				maxZoom: 9,
718				format: 'jpg',
719				time: '',
720				tilematrixset: 'GoogleMapsCompatible_Level'
721			},
722			variants: {
723				ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_True
723Color',
724				ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',
725				ViirsEarthAtNight2012: {
726					options: {
727						variant: 'VIIRS_CityLights_2012',
728						maxZoom: 8
729					}
730				},
731				ModisTerraLSTDay: {
732					options: {
733						variant: 'MODIS_Terra_Land_Surface_Temp_Day',
734						format: 'png',
735						maxZoom: 7,
736						opacity: 0.75
737					}
738				},
739				ModisTerraSnowCover: {
740					options: {
741						variant: 'MODIS_Terra_Snow_Cover',
742						format: 'png',
743						maxZoom: 8,
744						opacity: 0.75
745					}
746				},
747				ModisTerraAOD: {
748					options: {
749						variant: 'MODIS_Terra_Aerosol',
750						format: 'png',
751						maxZoom: 6,
752						opacity: 0.75
753					}
754				},
755				ModisTerraChlorophyll: {
756					options: {
757						variant: 'MODIS_Terra_Chlorophyll_A',
758						format: 'png',
759						maxZoom: 7,
760						opacity: 0.75
761					}
762				}
763			}
764		},
765		NLS: {
766			// NLS maps are copyright National library of Scotland.
767			// http://maps.nls.uk/projects/api/index.html
768			// Please contact NLS for anything other than non-commercial low volume usage
769			//
770			// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s
771			//   z0-9  - 1:1m
772			//  z10-11 - quarter inch (1:253440)
773			//  z12-18 - one inch (1:63360)
774			url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',
775			options: {
776				attribution: '<a href="http://geo.nls.uk/maps/">National Library of Scotland Historic Maps</a>',
777				bounds: [[49.6, -12], [61.7, 3]],
778				minZoom: 1,
779				maxZoom: 18,
780				subdomains: '0123',
781			}
782		},
783		JusticeMap: {
784			// Justice Map (http://www.justicemap.org/)
785			// Visualize race and income data for your community, county and country.
786			// Includes tools for data journalists, bloggers and community activists.
787			url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',
788			options: {
789				attribution: '<a href="http://www.justicemap.org/terms.php">Justice Map</a>',
790				// one of 'county', 'tract', 'block'
791				size: 'county',
792				// Bounds for USA, including Alaska and Hawaii
793				bounds: [[14, -180], [72, -56]]
794			},
795			variants: {
796				income: 'income',
797				americanIndian: 'indian',
798				asian: 'asian',
799				black: 'black',
800				hispanic: 'hispanic',
801				multi: 'multi',
802				nonWhite: 'nonwhite',
803				white: 'white',
804				plurality: 'plural'
805			}
806		},
807		Wikimedia: {
808			url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png',
809			options: {
810				attribution: '<a href="https://wikimediafoundation.org/wiki/Maps_Terms_of_Use">Wikimedia</a>',
811				minZoom: 1,
812				maxZoom: 19
813			}
814		},
815		GeoportailFrance: {
816			url: 'https://wxs.ign.fr/{apikey}
816/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET=PM&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}',
817			options: {
818				attribution: '<a target="_blank" href="https://www.geoportail.gouv.fr/">Geoportail France</a>',
819				bounds: [[-75, -180], [81, 180]],
820				minZoom: 2,
821				maxZoom: 18,
822				// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/
823				// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee
824				apikey: 'choisirgeoportail',
825				format: 'image/jpeg',
826				style : 'normal',
827				variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD'
828			},
829			variants: {
830				parcels: {
831					options : {
832						variant: 'CADASTRALPARCELS.PARCELS',
833						maxZoom: 20,
834						style : 'bdparcellaire',
835						format: 'image/png'
836					}
837				},
838				ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS',
839				maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD',
840				orthos: {
841					options: {
842						maxZoom: 19,
843						variant: 'ORTHOIMAGERY.ORTHOPHOTOS'
844					}
845				}
846			}
847		},
848		OneMapSG: {
849			url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',
850			options: {
851				variant: 'Default',
852				minZoom: 11,
853				maxZoom: 18,
854				bounds: [[1.56073, 104.11475], [1.16, 103.502]],
855				attribution: '<img src="https://docs.onemap.sg/maps/images/oneMap64-01.png" style="height:20px;width:20px;"/> New OneMap | Map data &copy; contributors, <a href="http://SLA.gov.sg">Singapore Land Authority</a>'
856			},
857			variants: {
858				Default: 'Default',
859				Night: 'Night',
860				Original: 'Original',
861				Grey: 'Grey',
862				LandLot: 'LandLot'
863			}
864		}
865	};
866
867	L.tileLayer.provider = function (provider, options) {
868		return new L.TileLayer.Provider(provider, options);
869	};
870
871	return L;
872}));
873
874(function ($) {
875
876    class GeoJsonAutocomplete {
877        constructor(inputElement, options = {}) {
878          this.inputElement = inputElement;
879          this.settings = Object.assign({
880            geojsonServiceAddress: "https://nominatim.openstreetmap.org/search",
881            placeholderMessage: "Search...",
882            foundRecordsMessage: "showing results.",
883            limit: 10,
884            notFoundMessage: "not found.",
885            notFoundHint: "Make sure your search criteria is correct and try again.",
886            drawColor: "blue",
887            pointGeometryZoomLevel: -1,
888            pagingActive: true,
889            map_obj: null,
890            onSelect: null, // this is the callback
891          }, options);
892      
893          this.activeResult = -1;
894          this.resultCount = 0;
895          this.lastSearch = "";
896          this.searchLayer = null;
897          this.focusLayer = null;
898          this.searchLayerType = 0;
899          this.features = [];
900          this.featureCollection = [];
901          this.offset = 0;
902          this.collapseOnBlur = true;
903      
904          this._init();
905        }
906      
907        _init() {
908          const $input = $(this.inputElement);
909          $input.parent().addClass("searchContainer wpgmp-autocomplete-wrapper");
910          $input.val("");
911      
912          $input.on("keyup", this._debounce((e) => this._handleKeyUp(e), 300));
913          $input.on("focus", () => this._showResults());
914          $input.on("blur", (e) => this._handleBlur(e));
915        }
916      
917        _handleKeyUp(event) {
918          const target = $(event.target);
919          const keyCode = event.keyCode;
920      
921          switch (keyCode) {
922            case 13:
923              this._search(target);
924              break;
925            case 38:
926              this._prevResult(target);
927              break;
928            case 40:
929              this._nextResult(target);
930              break;
931            case 37:
932            case 39:
933              break;
934            default:
935              if (target.val().length > 0) {
936                this.offset = 0;
937                this._fetchResults(false, target);
938              } else {
939                this._clearResults(target);
940              }
941              break;
942          }
943        }
944      
945        _fetchResults(withPaging, target) {
946          this.activeResult = -1;
947          this.features = [];
948          this.featureCollection = [];
949          this.lastSearch = target.val();
950      
951          const query = {
952            q: this.lastSearch,
953            limit: this.settings.limit + (withPaging ? 1 : 0),
954            format: "json",
955            addressdetails: 1,
956          };
957      
958          if (this.settings.pagingActive) query.offset = this.offset;
959      
960          $.getJSON(this.settings.geojsonServiceAddress, query)
961            .done((json) => {
962              this.resultCount = json.length;
963              this.features = json;
964              this.featureCollection = withPaging ? json.slice(0, json.length - 1) : json;
965              this._renderDropdown(withPaging, target);
966            })
967            .fail(() => this._handleNoResults(target));
968        }
969      
970        _renderDropdown(withPaging, target) {
971          const $parent = $(target).parent();
972          $parent.find(".resultsDiv").remove();
973      
974          const $resultsDiv = $(`
975            <div class='result resultsDiv'>
976              <ul class='list resultList wpgmp-autosuggest-results'></ul>
977            </div>
978          `);
979          $parent.append($resultsDiv);
980      
981          const $list = $resultsDiv.find("ul");
982      
983          const loopCount = this.features.length - (withPaging ? 1 : 0);
984      
985          for (let i = 0; i < loopCount; i++) {
986            const feature = this.features[i];
987            const $item = $(`
988              <li class='listResult listElement${i}' data-index='${i}'>
989                <span class='content listElementContent${i}'>
990                  <strong>${feature.display_name}</strong><br/>
991                  <small>${feature.lat}, ${feature.lon}</small>
992                </span>
993              </li>
994            `);
995            $list.append($item);
996      
997            $item.on("mouseenter", () => this._highlightItem(i, target));
998            $item.on("mouseleave", () => this._unhighlightItem(i, target));
999            $item.on("mousedown", () => this._selectItem(i, target));
1000          }
1001      
1002          // You can also add paging and styling logic here.
1003        }
1004      
1005        _highlightItem(index, target) {
1006          $(target).parent().find(`.listElement${index}`).addClass("mouseover");
1007        }
1008      
1009        _unhighlightItem(index, target) {
1010          $(target).parent().find(`.listElement${index}`).removeClass("mouseover");
1011        }
1012      
1013        _selectItem(index, target) {
1014          this.activeResult = index;
1015          this._fillSearchBox(target);
1016        }
1017      
1018        _showResults() {
1019          $(this.inputElement).parent().find(".wpgmp-autosuggest-results").show();
1020        }
1021      
1022        _handleBlur(e) {
1023            const input = e.target;
1024            const resultsDiv = $(input).closest('.searchContainer').find('.resultsDiv');
1025    
1026            setTimeout(() => {
1027                // Only hide if mouse is NOT on the results dropdown
1028                if (this.collapseOnBlur && !resultsDiv.is(':hover')) {
1029                resultsDiv.find('.wpgmp-autosuggest-results').hide();
1030                } else {
1031                this.collapseOnBlur = true;
1032                $(input).focus(); // optional: re-focus if needed
1033                }
1034            }, 150);
1035            }
1036    
1037      
1038        _clearResults(target) {
1039          this.activeResult = -1;
1040          this.features = [];
1041          this.lastSearch = "";
1042          $(target).parent().find(".resultsDiv").remove();
1043        }
1044      
1045        _handleNoResults(target) {
1046          this._clearResults(target);
1047          $(target).parent().append(`<div class='resultsDiv'><i>${this.lastSearch} ${this.settings.notFoundMessage}</i><p><small>${this.settings.notFoundHint}</small></p></div>`);
1048        }
1049      
1050        _search(target) {
1051          this._fetchResults(this.settings.pagingActive, target);
1052        }
1053      
1054        _prevResult(target) {
1055          if (this.resultCount <= 0) return;
1056          if (this.activeResult > 0) this.activeResult--;
1057          this._fillSearchBox(target);
1058        }
1059      
1060        _nextResult(target) {
1061          if (this.resultCount <= 0) return;
1062          if (this.activeResult < this.resultCount - 1) this.activeResult++;
1063          this._fillSearchBox(target);
1064        }
1065      
1066        _fillSearchBox(target) {
1067          const feature = this.features[this.activeResult];
1068          if (!feature) return;
1069          
1070          if (this.settings && typeof this.settings.onSelect === 'function') {
1071            this.settings.onSelect({
1072                target,        // input element
1073                feature,       // selected GeoJSON result
1074              });
1075          }
1076          
1077          
1078        }
1079      
1080        _debounce(fn, delay) {
1081          let timer = null;
1082          return function (...args) {
1083            clearTimeout(timer);
1084            timer = setTimeout(() => fn.apply(this, args), delay);
1085          };
1086        }
1087      }
1088      
1089     
1090        $.fn.GeoJsonAutocomplete = function (userOptions) {
1091          return this.each(function () {
1092            if (!this._geoJsonAutocompleteInstance) {
1093              this._geoJsonAutocompleteInstance = new GeoJsonAutocomplete(this, userOptions);
1094            }
1095          });
1096        };
1097      })(jQuery);
1098    
1099(function (factory) {
1100    if (typeof define === 'function' && define.amd) {
1101        // AMD
1102        define(['leaflet'], factory);
1103    } else if (typeof module !== 'undefined') {
1104        // Node/CommonJS
1105        module.exports = factory(require('leaflet'));
1106    } else {
1107        // Browser globals
1108        if (typeof window.L === 'undefined') {
1109            throw new Error('Leaflet must be loaded first');
1110        }
1111        factory(window.L);
1112    }
1113}(function (L) {
1114    L.Control.Fullscreen = L.Control.extend({
1115        options: {
1116            position: 'topleft',
1117            title: {
1118                'false': 'View Fullscreen',
1119                'true': 'Exit Fullscreen'
1120            }
1121        },
1122
1123        onAdd: function (map) {
1124            var container = L.DomUtil.create('div', 'leaflet-control-fullscreen leaflet-bar leaflet-control');
1125
1126            this.link = L.DomUtil.create('a', 'leaflet-control-fullscreen-button leaflet-bar-part', container);
1127            this.link.href = '#';
1128
1129            this._map = map;
1130            this._map.on('fullscreenchange', this._toggleTitle, this);
1131            this._toggleTitle();
1132
1133            L.DomEvent.on(this.link, 'click', this._click, this);
1134
1135            return container;
1136        },
1137
1138        _click: function (e) {
1139            L.DomEvent.stopPropagation(e);
1140            L.DomEvent.preventDefault(e);
1141            this._map.toggleFullscreen(this.options);
1142        },
1143
1144        _toggleTitle: function() {
1145            this.link.title = this.options.title[this._map.isFullscreen()];
1146        }
1147    });
1148
1149    L.Map.include({
1150        isFullscreen: function () {
1151            return this._isFullscreen || false;
1152        },
1153
1154        toggleFullscreen: function (options) {
1155            var container = this.getContainer();
1156            if (this.isFullscreen()) {
1157                if (options && options.pseudoFullscreen) {
1158                    this._disablePseudoFullscreen(container);
1159                } else if (document.exitFullscreen) {
1160                    document.exitFullscreen();
1161                } else if (document.mozCancelFullScreen) {
1162                    document.mozCancelFullScreen();
1163                } else if (document.webkitCancelFullScreen) {
1164                    document.webkitCancelFullScreen();
1165                } else if (document.msExitFullscreen) {
1166                    document.msExitFullscreen();
1167                } else {
1168                    this._disablePseudoFullscreen(container);
1169                }
1170            } else {
1171                if (options && options.pseudoFullscreen) {
1172                    this._enablePseudoFullscreen(container);
1173                } else if (container.requestFullscreen) {
1174                    container.requestFullscreen();
1175                } else if (container.mozRequestFullScreen) {
1176                    container.mozRequestFullScreen();
1177                } else if (container.webkitRequestFullscreen) {
1178                    container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
1179                } else if (container.msRequestFullscreen) {
1180                    container.msRequestFullscreen();
1181                } else {
1182                    this._enablePseudoFullscreen(container);
1183                }
1184            }
1185
1186        },
1187
1188        _enablePseudoFullscreen: function (container) {
1189            L.DomUtil.addClass(container, 'leaflet-pseudo-fullscreen');
1190            this._setFullscreen(true);
1191            this.fire('fullscreenchange');
1192        },
1193
1194        _disablePseudoFullscreen: function (container) {
1195            L.DomUtil.removeClass(container, 'leaflet-pseudo-fullscreen');
1196            this._setFullscreen(false);
1197            this.fire('fullscreenchange');
1198        },
1199
1200        _setFullscreen: function(fullscreen) {
1201            this._isFullscreen = fullscreen;
1202            var container = this.getContainer();
1203            if (fullscreen) {
1204                L.DomUtil.addClass(container, 'leaflet-fullscreen-on');
1205            } else {
1206                L.DomUtil.removeClass(container, 'leaflet-fullscreen-on');
1207            }
1208            this.invalidateSize();
1209        },
1210
1211        _onFullscreenChange: function (e) {
1212            var fullscreenElement =
1213                document.fullscreenElement ||
1214                document.mozFullScreenElement ||
1215                document.webkitFullscreenElement ||
1216                document.msFullscreenElement;
1217
1218            if (fullscreenElement === this.getContainer() && !this._isFullscreen) {
1219                this._setFullscreen(true);
1220                this.fire('fullscreenchange');
1221            } else if (fullscreenElement !== this.getContainer() && this._isFullscreen) {
1222                this._setFullscreen(false);
1223                this.fire('fullscreenchange');
1224            }
1225        }
1226    });
1227
1228    L.Map.mergeOptions({
1229        fullscreenControl: false
1230    });
1231
1232    L.Map.addInitHook(function () {
1233        if (this.options.fullscreenControl) {
1234            this.fullscreenControl = new L.Control.Fullscreen(this.options.fullscreenControl);
1235            this.addControl(this.fullscreenControl);
1236        }
1237
1238        var fullscreenchange;
1239
1240        if ('onfullscreenchange' in document) {
1241            fullscreenchange = 'fullscreenchange';
1242        } else if ('onmozfullscreenchange' in document) {
1243            fullscreenchange = 'mozfullscreenchange';
1244        } else if ('onwebkitfullscreenchange' in document) {
1245            fullscreenchange = 'webkitfullscreenchange';
1246        } else if ('onmsfullscreenchange' in document) {
1247            fullscreenchange = 'MSFullscreenChange';
1248        }
1249
1250        if (fullscreenchange) {
1251            var onFullscreenChange = L.bind(this._onFullscreenChange, this);
1252
1253            this.whenReady(function () {
1254                L.DomEvent.on(document, fullscreenchange, onFullscreenChange);
1255            });
1256
1257            this.on('unload', function () {
1258                L.DomEvent.off(document, fullscreenchange, onFullscreenChange);
1259            });
1260        }
1261    });
1262
1263    L.control.fullscreen = function (options) {
1264        return new L.Control.Fullscreen(options);
1265    };
1266}));
1267/*!
1268Copyright (c) 2016 Dominik Moritz
1269
1270This file is part of the leaflet locate control. It is licensed under the MIT license.
1271You can find the project at: https://github.com/domoritz/leaflet-locatecontrol
1272*/
1273(function (factory, window) {
1274     // see https://github.com/Leaflet/Leaflet/blob/master/PLUGIN-GUIDE.md#module-loaders
1275     // for details on how to structure a leaflet plugin.
1276
1277    // define an AMD module that relies on 'leaflet'
1278    if (typeof define === 'function' && define.amd) {
1279        define(['leaflet'], factory);
1280
1281    // define a Common JS module that relies on 'leaflet'
1282    } else if (typeof exports === 'object') {
1283        if (typeof window !== 'undefined' && window.L) {
1284            module.exports = factory(L);
1285        } else {
1286            module.exports = factory(require('leaflet'));
1287        }
1288    }
1289
1290    // attach your plugin to the global 'L' variable
1291    if (typeof window !== 'undefined' && window.L){
1292        window.L.Control.Locate = factory(L);
1293    }
1294} (function (L) {
1295    var LDomUtilApplyClassesMethod = function(method, element, classNames) {
1296        classNames = classNames.split(' ');
1297        classNames.forEach(function(className) {
1298            L.DomUtil[method].call(this, element, className);
1299        });
1300    };
1301
1302    var addClasses = function(el, names) { LDomUtilApplyClassesMethod('addClass', el, names); };
1303    var removeClasses = function(el, names) { LDomUtilApplyClassesMethod('removeClass', el, names); };
1304
1305    /**
1306     * Compatible with L.Circle but a true marker instead of a path
1307     */
1308    var LocationMarker = L.Marker.extend({
1309        initialize: function (latlng, options) {
1310            L.Util.setOptions(this, options);
1311            this._latlng = latlng;
1312            this.createIcon();
1313        },
1314
1315        /**
1316         * Create a styled circle location marker
1317         */
1318        createIcon: function() {
1319            var opt = this.options;
1320
1321            var style = '';
1322
1323            if (opt.color !== undefined) {
1324                style += 'stroke:'+opt.color+';';
1325            }
1326            if (opt.weight !== undefined) {
1327                style += 'stroke-width:'+opt.weight+';';
1328            }
1329            if (opt.fillColor !== undefined) {
1330                style += 'fill:'+opt.fillColor+';';
1331            }
1332            if (opt.fillOpacity !== undefined) {
1333                style += 'fill-opacity:'+opt.fillOpacity+';';
1334            }
1335            if (opt.opacity !== undefined) {
1336                style += 'opacity:'+opt.opacity+';';
1337            }
1338
1339            var icon = this._getIconSVG(opt, style);
1340
1341            this._locationIcon = L.divIcon({
1342                className: icon.className,
1343                html: icon.svg,
1344                iconSize: [icon.w,icon.h],
1345            });
1346
1347            this.setIcon(this._locationIcon);
1348        },
1349
1350        /**
1351         * Return the raw svg for the shape
1352         *
1353         * Split so can be easily overridden
1354         */
1355        _getIconSVG: function(options, style) {
1356            var r = options.radius;
1357            var w = options.weight;
1358            var s = r + w;
1359            var s2 = s * 2;
1360            var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="'+s2+'" height="'+s2+'" version="1.1" viewBox="-'+s+' -'+s+' '+s2+' '+s2+'">' +
1361            '<circle r="'+r+'" style="'+style+'" />' +
1362            '</svg>';
1363            return {
1364                className: 'leaflet-control-locate-location',
1365                svg: svg,
1366                w: s2,
1367                h: s2
1368            };
1369        },
1370
1371        setStyle: function(style) {
1372            L.Util.setOptions(this, style);
1373            this.createIcon();
1374        }
1375    });
1376
1377    var CompassMarker = LocationMarker.extend({
1378        initialize: function (latlng, heading, options) {
1379            L.Util.setOptions(this, options);
1380            this._latlng = latlng;
1381            this._heading = heading;
1382            this.createIcon();
1383        },
1384
1385        setHeading: function(heading) {
1386            this._heading = heading;
1387        },
1388
1389        /**
1390         * Create a styled arrow compass marker
1391         */
1392        _getIconSVG: function(options, style) {
1393            var r = options.radius;
1394            var w = (options.width + options.weight);
1395            var h = (r+options.depth + options.weight)*2;
1396            var path = 'M0,0 l'+(options.width/2)+','+options.depth+' l-'+(w)+',0 z';
1397            var svgstyle = 'transform: rotate('+this._heading+'deg)';
1398            var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="'+(w)+'" height="'+h+'" version="1.1" viewBox="-'+(w/2)+' 0 '+w+' '+h+'" style="'+svgstyle+'">'+
1399            '<path d="'+path+'" style="'+style+'" />'+
1400            '</svg>';
1401            return {
1402                className: 'leaflet-control-locate-heading',
1403                svg: svg,
1404                w: w,
1405                h: h
1406            };
1407        },
1408    });
1409
1410
1411    var LocateControl = L.Control.extend({
1412        options: {
1413            /** Position of the control */
1414            position: 'topleft',
1415            /** The layer that the user's location should be drawn on. By default creates a new layer. */
1416            layer: undefined,
1417            /**
1418             * Automatically sets the map view (zoom and pan) to the user's location as it updates.
1419             * While the map is following the user's location, the control is in the `following` state,
1420             * which changes the style of the control and the circle marker.
1421             *
1422             * Possible values:
1423             *  - false: never updates the map view when location changes.
1424             *  - 'once': set the view when the location is first determined
1425             *  - 'always': always updates the map view when location changes.
1426             *              The map view follows the user's location.
1427             *  - 'untilPan': like 'always', except stops updating the
1428             *                view if the user has manually panned the map.
1429             *                The map view follows the user's location until she pans.
1430             *  - 'untilPanOrZoom': (default) like 'always', except stops updating the
1431             *                view if the user has manually panned the map.
1432             *                The map view follows the user's location until she pans.
1433             */
1434            setView: 'untilPanOrZoom',
1435            /** Keep the current map zoom level when setting the view and only pan. */
1436            keepCurrentZoomLevel: false,
1437            /**
1438             * This callback can be used to override the viewport tracking
1439             * This function should return a LatLngBounds object.
1440             *
1441             * For example to extend the viewport to ensure that a particular LatLng is visible:
1442             *
1443             * getLocationBounds: function(locationEvent) {
1444             *    return locationEvent.bounds.extend([-33.873085, 151.219273]);
1445             * },
1446             */
1447            getLocationBounds: function (locationEvent) {
1448                return locationEvent.bounds;
1449            },
1450            /** Smooth pan and zoom to the location of the marker. Only works in Leaflet 1.0+. */
1451            flyTo: false,
1452            /**
1453             * The user location can be inside and outside the current view when the user clicks on the
1454             * control that is already active. Both cases can be configures separately.
1455             * Possible values are:
1456             *  - 'setView': zoom and pan to the current location
1457             *  - 'stop': stop locating and remove the location marker
1458             */
1459            clickBehavior: {
1460                /** What should happen if the user clicks on the control while the location is within the current view. */
1461                inView: 'stop',
1462                /** What should happen if the user clicks on the control while the location is outside the current view. */
1463                outOfView: 'setView',
1464                /**
1465                 * What should happen if the user clicks on the control while the location is within the current view
1466                 * and we could be following but are not. Defaults to a special value which inherits from 'inView';
1467                 */
1468                inViewNotFollowing: 'inView',
1469            },
1470            /**
1471             * If set, save the map bounds just before centering to the user's
1472             * location. When control is disabled, set the view back to the
1473             * bounds that were saved.
1474             */
1475            returnToPrevBounds: false,
1476            /**
1477             * Keep a cache of the location after the user deactivates the control. If set to false, the user has to wait
1478             * until the locate API returns a new location before they see where they are again.
1479             */
1480            cacheLocation: true,
1481            /** If set, a circle that shows the location accuracy is drawn. */
1482            drawCircle: true,
1483            /** If set, the marker at the users' location is drawn. */
1484            drawMarker: true,
1485            /** If set and supported then show the compass heading */
1486            showCompass: true,
1487            /** The class to be used to create the marker. For example L.CircleMarker or L.Marker */
1488            markerClass: LocationMarker,
1489            /** The class us be used to create the compass bearing arrow */
1490            compassClass: CompassMarker,
1491            /** Accuracy circle style properties. NOTE these styles should match the css animations styles */
1492            circleStyle: {
1493                className:   'leaflet-control-locate-circle',
1494                color:       '#136AEC',
1495                fillColor:   '#136AEC',
1496                fillOpacity: 0.15,
1497                weight:      0
1498            },
1499            /** Inner marker style properties. Only works if your marker class supports `setStyle`. */
1500            markerStyle: {
1501                className:   'leaflet-control-locate-marker',
1502                color:       '#fff',
1503                fillColor:   '#2A93EE',
1504                fillOpacity: 1,
1505                weight:      3,
1506                opacity:     1,
1507                radius:      9
1508            },
1509            /** Compass */
1510            compassStyle: {
1511                fillColor:   '#2A93EE',
1512                fillOpacity: 1,
1513                weight:      0,
1514                color:       '#fff',
1515                opacity:     1,
1516                radius:      9, // How far is the arrow is from the center of of the marker
1517                width:       9, // Width of the arrow
1518                depth:       6  // Length of the arrow
1519            },
1520            /**
1521             * Changes to accuracy circle and inner marker while following.
1522             * It is only necessary to provide the properties that should change.
1523             */
1524            followCircleStyle: {},
1525            followMarkerStyle: {
1526                // color: '#FFA500',
1527                // fillColor: '#FFB000'
1528            },
1529            followCompassStyle: {},
1530            /** The CSS class for the icon. For example fa-location-arrow or fa-map-marker */
1531            icon: 'fa fa-map-marker',
1532            iconLoading: 'fa fa-spinner fa-spin',
1533            /** The element to be created for icons. For example span or i */
1534            iconElementTag: 'span',
1535            /** Padding around the accuracy circle. */
1536            circlePadding: [0, 0],
1537            /** Use metric units. */
1538            metric: true,
1539            /**
1540             * This callback can be used in case you would like to override button creation behavior.
1541             * This is useful for DOM manipulation frameworks such as angular etc.
1542             * This function should return an object with HtmlElement for the button (link property) and the icon (icon property).
1543             */
1544            createButtonCallback: function (container, options) {
1545                var link = L.DomUtil.create('a', 'leaflet-bar-part leaflet-bar-part-single', container);
1546                link.title = options.strings.title;
1547                var icon = L.DomUtil.create(options.iconElementTag, options.icon, link);
1548                return { link: link, icon: icon };
1549            },
1550            /** This event is called in case of any location error that is not a time out error. */
1551            onLocationError: function(err, control) {
1552                alert(err.message);
1553            },
1554            /**
1555             * This event is called when the user's location is outside the bounds set on the map.
1556             * The event is called repeatedly when the location changes.
1557             */
1558            onLocationOutsideMapBounds: function(control) {
1559                control.stop();
1560                alert(control.options.strings.outsideMapBoundsMsg);
1561            },
1562            /** Display a pop-up when the user click on the inner marker. */
1563            showPopup: true,
1564            strings: {
1565                title: "Show me where I am",
1566                metersUnit: "meters",
1567                feetUnit: "feet",
1568                popup: "You are within {distance} {unit} from this point",
1569                outsideMapBoundsMsg: "You seem located outside the boundaries of the map"
1570            },
1571            /** The default options passed to leaflets locate method. */
1572            locateOptions: {
1573                maxZoom: Infinity,
1574                watch: true,  // if you overwrite this, visualization cannot be updated
1575                setView: false // have to set this to false because we have to
1576                               // do setView manually
1577            }
1578        },
1579
1580        initialize: function (options) {
1581            // set default options if nothing is set (merge one step deep)
1582            for (var i in options) {
1583                if (typeof this.options[i] === 'object') {
1584                    L.extend(this.options[i], options[i]);
1585                } else {
1586                    this.options[i] = options[i];
1587                }
1588            }
1589
1590            // extend the follow marker style and circle from the normal style
1591            this.options.followMarkerStyle = L.extend({}, this.options.markerStyle, this.options.followMarkerStyle);
1592            this.options.followCircleStyle = L.extend({}, this.options.circleStyle, this.options.followCircleStyle);
1593            this.options.followCompassStyle = L.extend({}, this.options.compassStyle, this.options.followCompassStyle);
1594        },
1595
1596        /**
1597         * Add control to map. Returns the container for the control.
1598         */
1599        onAdd: function (map) {
1600            var container = L.DomUtil.create('div',
1601                'leaflet-control-locate leaflet-bar leaflet-control');
1602
1603            this._layer = this.options.layer || new L.LayerGroup();
1604            this._layer.addTo(map);
1605            this._event = undefined;
1606            this._compassHeading = null;
1607            this._prevBounds = null;
1608
1609            var linkAndIcon = this.options.createButtonCallback(container, this.options);
1610            this._link = linkAndIcon.link;
1611            this._icon = linkAndIcon.icon;
1612
1613            L.DomEvent
1614                .on(this._link, 'click', L.DomEvent.stopPropagation)
1615                .on(this._link, 'click', L.DomEvent.preventDefault)
1616                .on(this._link, 'click', this._onClick, this)
1617                .on(this._link, 'dblclick', L.DomEvent.stopPropagation);
1618
1619            this._resetVariables();
1620
1621            this._map.on('unload', this._unload, this);
1622
1623            return container;
1624        },
1625
1626        /**
1627         * This method is called when the user clicks on the control.
1628         */
1629        _onClick: function() {
1630            this._justClicked = true;
1631            var wasFollowing =  this._isFollowing();
1632            this._userPanned = false;
1633            this._userZoomed = false;
1634
1635            if (this._active && !this._event) {
1636                // click while requesting
1637                this.stop();
1638            } else if (this._active && this._event !== undefined) {
1639                var behaviors = this.options.clickBehavior;
1640                var behavior = behaviors.outOfView;
1641                if (this._map.getBounds().contains(this._event.latlng)) {
1642                    behavior = wasFollowing ? behaviors.inView : behaviors.inViewNotFollowing;
1643                }
1644
1645                // Allow inheriting from another behavior
1646                if (behaviors[behavior]) {
1647                    behavior = behaviors[behavior];
1648                }
1649
1650                switch (behavior) {
1651                    case 'setView':
1652                        this.setView();
1653                        break;
1654                    case 'stop':
1655                        this.stop();
1656                        if (this.options.returnToPrevBounds) {
1657                            var f = this.options.flyTo ? this._map.flyToBounds : this._map.fitBounds;
1658                            f.bind(this._map)(this._prevBounds);
1659                        }
1660                        break;
1661                }
1662            } else {
1663                if (this.options.returnToPrevBounds) {
1664                  this._prevBounds = this._map.getBounds();
1665                }
1666                this.start();
1667            }
1668
1669            this._updateContainerStyle();
1670        },
1671
1672        /**
1673         * Starts the plugin:
1674         * - activates the engine
1675         * - draws the marker (if coordinates available)
1676         */
1677        start: function() {
1678            this._activate();
1679
1680            if (this._event) {
1681                this._drawMarker(this._map);
1682
1683                // if we already have a location but the user clicked on the control
1684                if (this.options.setView) {
1685                    this.setView();
1686                }
1687            }
1688            this._updateContainerStyle();
1689        },
1690
1691        /**
1692         * Stops the plugin:
1693         * - deactivates the engine
1694         * - reinitializes the button
1695         * - removes the marker
1696         */
1697        stop: function() {
1698            this._deactivate();
1699
1700            this._cleanClasses();
1701            this._resetVariables();
1702
1703            this._removeMarker();
1704        },
1705
1706        /**
1707         * Keep the control active but stop following the location
1708         */
1709        stopFollowing: function() {
1710            this._userPanned = true;
1711            this._updateContainerStyle();
1712            this._drawMarker();
1713        },
1714
1715        /**
1716         * This method launches the location engine.
1717         * It is called before the marker is updated,
1718         * event if it does not mean that the event will be ready.
1719         *
1720         * Override it if you want to add more functionalities.
1721         * It should set the this._active to true and do nothing if
1722         * this._active is true.
1723         */
1724        _activate: function() {
1725            if (!this._active) {
1726                this._map.locate(this.options.locateOptions);
1727                this._active = true;
1728
1729                // bind event listeners
1730                this._map.on('locationfound', this._onLocationFound, this);
1731                this._map.on('locationerror', this._onLocationError, this);
1732                this._map.on('dragstart', this._onDrag, this);
1733                this._map.on('zoomstart', this._onZoom, this);
1734                this._map.on('zoomend', this._onZoomEnd, this);
1735                if (this.options.showCompass) {
1736                    if ('ondeviceorientationabsolute' in window) {
1737                        L.DomEvent.on(window, 'deviceorientationabsolute', this._onDeviceOrientation, this);
1738                    } else if ('ondeviceorientation' in window) {
1739                        L.DomEvent.on(window, 'deviceorientation', this._onDeviceOrientation, this);
1740                    }
1741                }
1742            }
1743        },
1744
1745        /**
1746         * Called to stop the location engine.
1747         *
1748         * Override it to shutdown any functionalities you added on start.
1749         */
1750        _deactivate: function() {
1751            this._map.stopLocate();
1752            this._active = false;
1753
1754            if (!this.options.cacheLocation) {
1755                this._event = undefined;
1756            }
1757
1758            // unbind event listeners
1759            this._map.off('locationfound', this._onLocationFound, this);
1760            this._map.off('locationerror', this._onLocationError, this);
1761            this._map.off('dragstart', this._onDrag, this);
1762            this._map.off('zoomstart', this._onZoom, this);
1763            this._map.off('zoomend', this._onZoomEnd, this);
1764            if (this.options.showCompass) {
1765                this._compassHeading = null;
1766                if ('ondeviceorientationabsolute' in window) {
1767                    L.DomEvent.off(window, 'deviceorientationabsolute', this._onDeviceOrientation, this);
1768                } else if ('ondeviceorientation' in window) {
1769                    L.DomEvent.off(window, 'deviceorientation', this._onDeviceOrientation, this);
1770                }
1771            }
1772        },
1773
1774        /**
1775         * Zoom (unless we should keep the zoom level) and an to the current view.
1776         */
1777        setView: function() {
1778            this._drawMarker();
1779            if (this._isOutsideMapBounds()) {
1780                this._event = undefined;  // clear the current location so we can get back into the bounds
1781                this.options.onLocationOutsideMapBounds(this);
1782            } else {
1783                if (this.options.keepCurrentZoomLevel) {
1784                    var f = this.options.flyTo ? this._map.flyTo : this._map.panTo;
1785                    f.bind(this._map)([this._event.latitude, this._event.longitude]);
1786                } else {
1787                    var f = this.options.flyTo ? this._map.flyToBounds : this._map.fitBounds;
1788                    // Ignore zoom events while setting the viewport as these would stop following
1789                    this._ignoreEvent = true;
1790                    f.bind(this._map)(this.options.getLocationBounds(this._event), {
1791                        padding: this.options.circlePadding,
1792                        maxZoom: this.options.locateOptions.maxZoom
1793                    });
1794                    L.Util.requestAnimFrame(function(){
1795                        // Wait until after the next animFrame because the flyTo can be async
1796                        this._ignoreEvent = false;
1797                    }, this);
1798
1799                }
1800            }
1801        },
1802
1803        /**
1804         *
1805         */
1806        _drawCompass: function() {
1807            if (!this._event) {
1808                return;
1809            }
1810
1811            var latlng = this._event.latlng;
1812
1813            if (this.options.showCompass && latlng && this._compassHeading !== null) {
1814                var cStyle = this._isFollowing() ? this.options.followCompassStyle : this.options.compassStyle;
1815                if (!this._compass) {
1816                    this._compass = new this.options.compassClass(latlng, this._compassHeading, cStyle).addTo(this._layer);
1817                } else {
1818                    this._compass.setLatLng(latlng);
1819                    this._compass.setHeading(this._compassHeading);
1820                    // If the compassClass can be updated with setStyle, update it.
1821                    if (this._compass.setStyle) {
1822                        this._compass.setStyle(cStyle);
1823                    }
1824                }
1825                // 
1826            }
1827            if (this._compass && (!this.options.showCompass || this._compassHeading === null)) {
1828                this._compass.removeFrom(this._layer);
1829                this._compass = null;
1830            }
1831        },
1832
1833        /**
1834         * Draw the marker and accuracy circle on the map.
1835         *
1836         * Uses the event retrieved from onLocationFound from the map.
1837         */
1838        _drawMarker: function() {
1839            if (this._event.accuracy === undefined) {
1840                this._event.accuracy = 0;
1841            }
1842
1843            var radius = this._event.accuracy;
1844            var latlng = this._event.latlng;
1845
1846            // circle with the radius of the location's accuracy
1847            if (this.options.drawCircle) {
1848                var style = this._isFollowing() ? this.options.followCircleStyle : this.options.circleStyle;
1849
1850                if (!this._circle) {
1851                    this._circle = L.circle(latlng, radius, style).addTo(this._layer);
1852                } else {
1853                    this._circle.setLatLng(latlng).setRadius(radius).setStyle(style);
1854                }
1855            }
1856
1857            var distance, unit;
1858            if (this.options.metric) {
1859                distance = radius.toFixed(0);
1860                unit =  this.options.strings.metersUnit;
1861            } else {
1862                distance = (radius * 3.2808399).toFixed(0);
1863                unit = this.options.strings.feetUnit;
1864            }
1865
1866            // small inner marker
1867            if (this.options.drawMarker) {
1868                var mStyle = this._isFollowing() ? this.options.followMarkerStyle : this.options.markerStyle;
1869                if (!this._marker) {
1870                    this._marker = new this.options.markerClass(latlng, mStyle).addTo(this._layer);
1871                } else {
1872                    this._marker.setLatLng(latlng);
1873                    // If the markerClass can be updated with setStyle, update it.
1874                    if (this._marker.setStyle) {
1875                        this._marker.setStyle(mStyle);
1876                    }
1877                }
1878            }
1879
1880            this._drawCompass();
1881
1882            var t = this.options.strings.popup;
1883            if (this.options.showPopup && t && this._marker) {
1884                this._marker
1885                    .bindPopup(L.Util.template(t, {distance: distance, unit: unit}))
1886                    ._popup.setLatLng(latlng);
1887            }
1888            if (this.options.showPopup && t && this._compass) {
1889                this._compass
1890                    .bindPopup(L.Util.template(t, {distance: distance, unit: unit}))
1891                    ._popup.setLatLng(latlng);
1892            }
1893        },
1894
1895        /**
1896         * Remove the marker from map.
1897         */
1898        _removeMarker: function() {
1899            this._layer.clearLayers();
1900            this._marker = undefined;
1901            this._circle = undefined;
1902        },
1903
1904        /**
1905         * Unload the plugin and all event listeners.
1906         * Kind of the opposite of onAdd.
1907         */
1908        _unload: function() {
1909            this.stop();
1910            this._map.off('unload', this._unload, this);
1911        },
1912
1913        /**
1914         * Sets the compass heading
1915         */
1916        _setCompassHeading: function(angle) {
1917            if (!isNaN(parseFloat(angle)) && isFinite(angle)) {
1918                angle = Math.round(angle);
1919
1920                this._compassHeading = angle;
1921                L.Util.requestAnimFrame(this._drawCompass, this);
1922            } else {
1923                this._compassHeading = null;
1924            }
1925        },
1926
1927        /**
1928         * If the compass fails calibration just fail safely and remove the compass
1929         */
1930        _onCompassNeedsCalibration: function() {
1931            this._setCompassHeading();
1932        },
1933
1934        /**
1935         * Process and normalise compass events
1936         */
1937        _onDeviceOrientation: function(e) {
1938            if (!this._active) {
1939                return;
1940            }
1941
1942            if (e.webkitCompassHeading) {
1943                // iOS
1944                this._setCompassHeading(e.webkitCompassHeading);
1945            } else if (e.absolute && e.alpha) {
1946                // Android
1947                this._setCompassHeading(360 - e.alpha)
1948            }
1949        },
1950
1951        /**
1952         * Calls deactivate and dispatches an error.
1953         */
1954        _onLocationError: function(err) {
1955            // ignore time out error if the location is watched
1956            if (err.code == 3 && this.options.locateOptions.watch) {
1957                return;
1958            }
1959
1960            this.stop();
1961            this.options.onLocationError(err, this);
1962        },
1963
1964        /**
1965         * Stores the received event and updates the marker.
1966         */
1967        _onLocationFound: function(e) {
1968            // no need to do anything if the location has not changed
1969            if (this._event &&
1970                (this._event.latlng.lat === e.latlng.lat &&
1971                 this._event.latlng.lng === e.latlng.lng &&
1972                     this._event.accuracy === e.accuracy)) {
1973                return;
1974            }
1975
1976            if (!this._active) {
1977                // we may have a stray event
1978                return;
1979            }
1980
1981            this._event = e;
1982
1983            this._drawMarker();
1984            this._updateContainerStyle();
1985
1986            switch (this.options.setView) {
1987                case 'once':
1988                    if (this._justClicked) {
1989                        this.setView();
1990                    }
1991                    break;
1992                case 'untilPan':
1993                    if (!this._userPanned) {
1994                        this.setView();
1995                    }
1996                    break;
1997                case 'untilPanOrZoom':
1998                    if (!this._userPanned && !this._userZoomed) {
1999                        this.setView();
2000                    }
2001                    break;
2002                case 'always':
2003                    this.setView();
2004                    break;
2005                case false:
2006                    // don't set the view
2007                    break;
2008            }
2009
2010            this._justClicked = false;
2011        },
2012
2013        /**
2014         * When the user drags. Need a separate event so we can bind and unbind event listeners.
2015         */
2016        _onDrag: function() {
2017            // only react to drags once we have a location
2018            if (this._event && !this._ignoreEvent) {
2019                this._userPanned = true;
2020                this._updateContainerStyle();
2021                this._drawMarker();
2022            }
2023        },
2024
2025        /**
2026         * When the user zooms. Need a separate event so we can bind and unbind event listeners.
2027         */
2028        _onZoom: function() {
2029            // only react to drags once we have a location
2030            if (this._event && !this._ignoreEvent) {
2031                this._userZoomed = true;
2032                this._updateContainerStyle();
2033                this._drawMarker();
2034            }
2035        },
2036
2037        /**
2038         * After a zoom ends update the compass and handle sideways zooms
2039         */
2040        _onZoomEnd: function() {
2041            if (this._event) {
2042                this._drawCompass();
2043            }
2044
2045            if (this._event && !this._ignoreEvent) {
2046                // If we have zoomed in and out and ended up sideways treat it as a pan
2047                if (this._marker && !this._map.getBounds().pad(-.3).contains(this._marker.getLatLng())) {
2048                    this._userPanned = true;
2049                    this._updateContainerStyle();
2050                    this._drawMarker();
2051                }
2052            }
2053        },
2054
2055        /**
2056         * Compute whether the map is following the user location with pan and zoom.
2057         */
2058        _isFollowing: function() {
2059            if (!this._active) {
2060                return false;
2061            }
2062
2063            if (this.options.setView === 'always') {
2064                return true;
2065            } else if (this.options.setView === 'untilPan') {
2066                return !this._userPanned;
2067            } else if (this.options.setView === 'untilPanOrZoom') {
2068                return !this._userPanned && !this._userZoomed;
2069            }
2070        },
2071
2072        /**
2073         * Check if location is in map bounds
2074         */
2075        _isOutsideMapBounds: function() {
2076            if (this._event === undefined) {
2077                return false;
2078            }
2079            return this._map.options.maxBounds &&
2080                !this._map.options.maxBounds.contains(this._event.latlng);
2081        },
2082
2083        /**
2084         * Toggles button class between following and active.
2085         */
2086        _updateContainerStyle: function() {
2087            if (!this._container) {
2088                return;
2089            }
2090
2091            if (this._active && !this._event) {
2092                // active but don't have a location yet
2093                this._setClasses('requesting');
2094            } else if (this._isFollowing()) {
2095                this._setClasses('following');
2096            } else if (this._active) {
2097                this._setClasses('active');
2098            } else {
2099                this._cleanClasses();
2100            }
2101        },
2102
2103        /**
2104         * Sets the CSS classes for the state.
2105         */
2106        _setClasses: function(state) {
2107            if (state == 'requesting') {
2108                removeClasses(this._container, "active following");
2109                addClasses(this._container, "requesting");
2110
2111                removeClasses(this._icon, this.options.icon);
2112                addClasses(this._icon, this.options.iconLoading);
2113            } else if (state == 'active') {
2114                removeClasses(this._container, "requesting following");
2115                addClasses(this._container, "active");
2116
2117                removeClasses(this._icon, this.options.iconLoading);
2118                addClasses(this._icon, this.options.icon);
2119            } else if (state == 'following') {
2120                removeClasses(this._container, "requesting");
2121                addClasses(this._container, "active following");
2122
2123                removeClasses(this._icon, this.options.iconLoading);
2124                addClasses(this._icon, this.options.icon);
2125            }
2126        },
2127
2128        /**
2129         * Removes all classes from button.
2130         */
2131        _cleanClasses: function() {
2132            L.DomUtil.removeClass(this._container, "requesting");
2133            L.DomUtil.removeClass(this._container, "active");
2134            L.DomUtil.removeClass(this._container, "following");
2135
2136            removeClasses(this._icon, this.options.iconLoading);
2137            addClasses(this._icon, this.options.icon);
2138        },
2139
2140        /**
2141         * Reinitializes state variables.
2142         */
2143        _resetVariables: function() {
2144            // whether locate is active or not
2145            this._active = false;
2146
2147            // true if the control was clicked for the first time
2148            // we need this so we can pan and zoom once we have the location
2149            this._justClicked = false;
2150
2151            // true if the user has panned the map after clicking the control
2152            this._userPanned = false;
2153
2154            // true if the user has zoomed the map after clicking the control
2155            this._userZoomed = false;
2156        }
2157    });
2158
2159    L.control.locate = function (options) {
2160        return new L.Control.Locate(options);
2161    };
2162
2163    return LocateControl;
2164}, window));
vendor: 564,710 bytes, lines 2165-2180
2165(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(_dereq_,module,exports){function corslite(url,callback,cors){var sent=false;if(typeof window.XMLHttpRequest==="undefined"){return callback(Error("Browser not supported"))}if(typeof cors==="undefined"){var m=url.match(/^\s*https?:\/\/[^\/]*/);cors=m&&m[0]!==location.protocol+"//"+location.hostname+(location.port?":"+location.port:"")}var x=new window.XMLHttpRequest;function isSuccessful(status){return status>=200&&status<300||status===304}if(cors&&!("withCredentials"in x)){x=new window.XDomainRequest;var original=callback;callback=function(){if(sent){original.apply(this,arguments)}else{var that=this,args=arguments;setTimeout(function(){original.apply(that,args)},0)}}}function loaded(){if(x.status===undefined||isSuccessful(x.status))callback.call(x,null,x);else callback.call(x,x,null)}if("onload"in x){x.onload=loaded}else{x.onreadystatechange=function readystate(){if(x.readyState===4){loaded()}}}x.onerror=function error(evt){callback.call(this,evt||true,null);callback=function(){}};x.onprogress=function(){};x.ontimeout=function(evt){callback.call(this,evt,null);callback=function(){}};x.onabort=function(evt){callback.call(this,evt,null);callback=function(){}};x.open("GET",url,true);x.send(null);sent=true;return x}if(typeof module!=="undefined")module.exports=corslite},{}],2:[function(_dereq_,module,exports){"use strict";var polyline={};function py2_round(value){return Math.floor(Math.abs(value)+.5)*Math.sign(value)}function encode(current,previous,factor){current=py2_round(current*factor);previous=py2_round(previous*factor);var coordinate=current-previous;coordinate<<=1;if(current-previous<0){coordinate=~coordinate}var output="";while(coordinate>=32){output+=String.fromCharCode((32|coordinate&31)+63);coordinate>>=5}output+=String.fromCharCode(coordinate+63);return output}polyline.decode=function(str,precision){var index=0,lat=0,lng=0,coordinates=[],shift=0,result=0,byte=null,latitude_change,longitude_change,factor=Math.pow(10,precision||5);while(index<str.length){byte=null;shift=0;result=0;do{byte=str.charCodeAt(index++)-63;result|=(byte&31)<<shift;shift+=5}while(byte>=32);latitude_change=result&1?~(result>>1):result>>1;shift=result=0;do{byte=str.charCodeAt(index++)-63;result|=(byte&31)<<shift;shift+=5}while(byte>=32);longitude_change=result&1?~(result>>1):result>>1;lat+=latitude_change;lng+=longitude_change;coordinates.push([lat/factor,lng/factor])}return coordinates};polyline.encode=function(coordinates,precision){if(!coordinates.length){return""}var factor=Math.pow(10,precision||5),output=encode(coordinates[0][0],0,factor)+encode(coordinates[0][1],0,factor);for(var i=1;i<coordinates.length;i++){var a=coordinates[i],b=coordinates[i-1];output+=encode(a[0],b[0],factor);output+=encode(a[1],b[1],factor)}return output};function flipped(coords){var flipped=[];for(var i=0;i<coords.length;i++){flipped.push(coords[i].slice().reverse())}return flipped}polyline.fromGeoJSON=function(geojson,precision){if(geojson&&geojson.type==="Feature"){geojson=geojson.geometry}if(!geojson||geojson.type!=="LineString"){throw new Error("Input must be a GeoJSON LineString")}return polyline.encode(flipped(geojson.coordinates),precision)};polyline.toGeoJSON=function(str,precision){var coords=polyline.decode(str,precision);return{type:"LineString",coordinates:flipped(coords)}};if(typeof module==="object"&&module.exports){module.exports=polyline}},{}],3:[function(_dereq_,module,exports){var languages=_dereq_("./languages");var instructions=languages.instructions;var grammars=languages.grammars;var abbreviations=languages.abbreviations;module.exports=function(version){Object.keys(instructions).forEach(function(code){if(!instructions[code][version]){throw"invalid version "+version+": "+code+" not supported"}});return{capitalizeFirstLetter:function(language,string){return string.charAt(0).toLocaleUpperCase(language)+string.slice(1)},ordinalize:function(language,number){if(!language)throw new Error("No language code provided");return instructions[language][version].constants.ordinalize[number.toString()]||""},directionFromDegree:function(language,degree){if(!language)throw new Error("No language code provided");if(!degree&&degree!==0){return""}else if(degree>=0&&degree<=20){return instructions[language][version].constants.direction.north}else if(degree>20&&degree<70){return instructions[language][version].constants.direction.northeast}else if(degree>=70&&degree<=110){return instructions[language][version].constants.direction.east}else if(degree>110&&degree<160){return instructions[language][version].constants.direction.southeast}else if(degree>=160&&degree<=200){return instructions[language][version].constants.direction.south}else if(degree>200&&degree<250){return instructions[language][version].constants.direction.southwest}else if(degree>=250&&degree<=290){return instructions[language][version].constants.direction.west}else if(degree>290&&degree<340){return instructions[language][version].constants.direction.northwest}else if(degree>=340&&degree<=360){return instructions[language][version].constants.direction.north}else{throw new Error("Degree "+degree+" invalid")}},laneConfig:function(step){if(!step.intersections||!step.intersections[0].lanes)throw new Error("No lanes object");var config=[];var currentLaneValidity=null;step.intersections[0].lanes.forEach(function(lane){if(currentLaneValidity===null||currentLaneValidity!==lane.valid){if(lane.valid){config.push("o")}else{config.push("x")}currentLaneValidity=lane.valid}});return config.join("")},getWayName:function(language,step,options){var classes=options?options.classes||[]:[];if(typeof step!=="object")throw new Error("step must be an Object");if(!language)throw new Error("No language code provided");if(!Array.isArray(classes))throw new Error("classes must be an Array or undefined");var wayName;var name=step.name||"";var ref=(step.ref||"").split(";")[0];if(name===step.ref){name=""}name=name.replace(" ("+step.ref+")","");var wayMotorway=classes.indexOf("motorway")!==-1;if(name&&ref&&name!==ref&&!wayMotorway){var phrase=instructions[language][version].phrase["name and ref"]||instructions.en[version].phrase["name and ref"];wayName=this.tokenize(language,phrase,{name:name,ref:ref},options)}else if(name&&ref&&wayMotorway&&/\d/.test(ref)){wayName=options&&options.formatToken?options.formatToken("ref",ref):ref}else if(!name&&ref){wayName=options&&options.formatToken?options.formatToken("ref",ref):ref}else{wayName=options&&options.formatToken?options.formatToken("name",name):name}return wayName},compile:function(language,step,opts){if(!language)throw new Error("No language code provided");if(languages.supportedCodes.indexOf(language)===-1)throw new Error("language code "+language+" not loaded");if(!step.maneuver)throw new Error("No step maneuver provided");var options=opts||{};var type=step.maneuver.type;var modifier=step.maneuver.modifier;var mode=step.mode;var side=step.driving_side;if(!type){throw new Error("Missing step maneuver type")}if(type!=="depart"&&type!=="arrive"&&!modifier){throw new Error("Missing step maneuver modifier")}if(!instructions[language][version][type]){console.log("Encountered unknown instruction type: "+type);type="turn"}var instructionObject;if(instructions[language][version].modes[mode]){instructionObject=instructions[language][version].modes[mode]}else{var omitSide=type==="off ramp"&&modifier.indexOf(side)>=0;if(instructions[language][version][type][modifier]&&!omitSide){instructionObject=instructions[language][version][type][modifier]}else{instructionObject=instructions[language][version][type].default}}var laneInstruction;switch(type){case"use lane":laneInstruction=instructions[language][version].constants.lanes[this.laneConfig(step)];if(!laneInstruction){instructionObject=instructions[language][version]["use lane"].no_lanes}break;case"rotary":case"roundabout":if(step.rotary_name&&step.maneuver.exit&&instructionObject.name_exit){instructionObject=instructionObject.name_exit}else if(step.rotary_name&&instructionObject.name){instructionObject=instructionObject.name}else if(step.maneuver.exit&&instructionObject.exit){instructionObject=instructionObject.exit}else{instructionObject=instructionObject.default}break;default:}var wayName=this.getWayName(language,step,options);var instruction;if(step.destinations&&step.exits&&instructionObject.exit_destination){instruction=instructionObject.exit_destination}else if(step.destinations&&instructionObject.destination){instruction=instructionObject.destination}else if(step.exits&&instructionObject.exit){instruction=instructionObject.exit}else if(wayName&&instructionObject.name){instruction=instructionObject.name}else if(options.waypointName&&instructionObject.named){instruction=instructionObject.named}else{instruction=instructionObject.default}var destinations=step.destinations&&step.destinations.split(": ");var destinationRef=destinations&&destinations[0].split(",")[0];var destination=destinations&&destinations[1]&&destinations[1].split(",")[0];var firstDestination;if(destination&&destinationRef){firstDestination=destinationRef+": "+destination}else{firstDestination=destinationRef||destination||""}var nthWaypoint=options.legIndex>=0&&options.legIndex!==options.legCount-1?this.ordinalize(language,options.legIndex+1):"";var replaceTokens={way_name:wayName,destination:firstDestination,exit:(step.exits||"").split(";")[0],exit_number:this.ordinalize(language,step.maneuver.exit||1),rotary_name:step.rotary_name,lane_instruction:laneInstruction,modifier:instructions[language][version].constants.modifier[modifier],direction:this.directionFromDegree(language,step.maneuver.bearing_after),nth:nthWaypoint,waypoint_name:options.waypointName};return this.tokenize(language,instruction,replaceTokens,options)},grammarize:function(language,name,grammar){if(!language)throw new Error("No language code provided");if(name&&grammar&&grammars&&grammars[language]&&grammars[language][version]){var rules=grammars[language][version][grammar];if(rules){var n=" "+name+" ";var flags=grammars[language].meta.regExpFlags||"";rules.forEach(function(rule){var re=new RegExp(rule[0],flags);n=n.replace(re,rule[1])});return n.trim()}}return name},abbreviations:abbreviations,tokenize:function(language,instruction,tokens,options){if(!language)throw new Error("No language code provided");var that=this;var startedWithToken=false;var output=instruction.replace(/\{(\w+)(?::(\w+))?\}/g,function(token,tag,grammar,offset){var value=tokens[tag];if(typeof value==="undefined"){return token}value=that.grammarize(language,value,grammar);if(offset===0&&instructions[language].meta.capitalizeFirstLetter){startedWithToken=true;value=that.capitalizeFirstLetter(language,value)}if(options&&options.formatToken){value=options.formatToken(tag,value)}return value}).replace(/ {2}/g," ");if(!startedWithToken&&instructions[language].meta.capitalizeFirstLetter){return this.capitalizeFirstLetter(language,output)}return output}}}},{"./languages":4}],4:[function(_dereq_,module,exports){var instructionsDa=_dereq_("./languages/translations/da.json");var instructionsDe=_dereq_("./languages/translations/de.json");var instructionsEn=_dereq_("./languages/translations/en.json");var instructionsEo=_dereq_("./languages/translations/eo.json");var instructionsEs=_dereq_("./languages/translations/es.json");var instructionsEsEs=_dereq_("./languages/translations/es-ES.json");var instructionsFi=_dereq_("./languages/translations/fi.json");var instructionsFr=_dereq_("./languages/translations/fr.json");var instructionsHe=_dereq_("./languages/translations/he.json");var instructionsId=_dereq_("./languages/translations/id.json");var instructionsIt=_dereq_("./languages/translations/it.json");var instructionsKo=_dereq_("./languages/translations/ko.json");var instructionsMy=_dereq_("./languages/translations/my.json");var instructionsNl=_dereq_("./languages/translations/nl.json");var instructionsNo=_dereq_("./languages/translations/no.json");var instructionsPl=_dereq_("./languages/translations/pl.json");var instructionsPtBr=_dereq_("./languages/translations/pt-BR.json");var instructionsPtPt=_dereq_("./languages/translations/pt-PT.json");var instructionsRo=_dereq_("./languages/translations/ro.json");var instructionsRu=_dereq_("./languages/translations/ru.json");var instructionsSv=_dereq_("./languages/translations/sv.json");var instructionsTr=_dereq_("./languages/translations/tr.json");var instructionsUk=_dereq_("./languages/translations/uk.json");var instructionsVi=_dereq_("./languages/translations/vi.json");var instructionsZhHans=_dereq_("./languages/translations/zh-Hans.json");var grammarFr=_dereq_("./languages/grammar/fr.json");var grammarRu=_dereq_("./languages/grammar/ru.json");var abbreviationsBg=_dereq_("./languages/abbreviations/bg.json");var abbreviationsCa=_dereq_("./languages/abbreviations/ca.json");var abbreviationsDa=_dereq_("./languages/abbreviations/da.json");var ebbreviationsDe=_dereq_("./languages/abbreviations/de.json");var abbreviationsEn=_dereq_("./languages/abbreviations/en.json");var abbreviationsEs=_dereq_("./languages/abbreviations/es.json");var abbreviationsFr=_dereq_("./languages/abbreviations/fr.json");var abbreviationsHe=_dereq_("./languages/abbreviations/he.json");var abbreviationsHu=_dereq_("./languages/abbreviations/hu.json");var abbreviationsLt=_dereq_("./languages/abbreviations/lt.json");var abbreviationsNl=_dereq_("./languages/abbreviations/nl.json");var abbreviationsRu=_dereq_("./languages/abbreviations/ru.json");var abbreviationsSl=_dereq_("./languages/abbreviations/sl.json");var abbreviationsSv=_dereq_("./languages/abbreviations/sv.json");var abbreviationsUk=_dereq_("./languages/abbreviations/uk.json");var abbreviationsVi=_dereq_("./languages/abbreviations/vi.json");var instructions={da:instructionsDa,de:instructionsDe,en:instructionsEn,eo:instructionsEo,es:instructionsEs,"es-ES":instructionsEsEs,fi:instructionsFi,fr:instructionsFr,he:instructionsHe,id:instructionsId,it:instructionsIt,ko:instructionsKo,my:instructionsMy,nl:instructionsNl,no:instructionsNo,pl:instructionsPl,"pt-BR":instructionsPtBr,"pt-PT":instructionsPtPt,ro:instructionsRo,ru:instructionsRu,sv:instructionsSv,tr:instructionsTr,uk:instructionsUk,vi:instructionsVi,"zh-Hans":instructionsZhHans};var grammars={fr:grammarFr,ru:grammarRu};var abbreviations={bg:abbreviationsBg,ca:abbreviationsCa,da:abbreviationsDa,de:ebbreviationsDe,en:abbreviationsEn,es:abbreviationsEs,fr:abbreviationsFr,he:abbreviationsHe,hu:abbreviationsHu,lt:abbreviationsLt,nl:abbreviationsNl,ru:abbreviationsRu,sl:abbreviationsSl,sv:abbreviationsSv,uk:abbreviationsUk,vi:abbreviationsVi};module.exports={supportedCodes:Object.keys(instructions),instructions:instructions,grammars:grammars,abbreviations:abbreviations}},{"./languages/abbreviations/bg.json":5,"./languages/abbreviations/ca.json":6,"./languages/abbreviations/da.json":7,"./languages/abbreviations/de.json":8,"./languages/abbreviations/en.json":9,"./languages/abbreviations/es.json":10,"./languages/abbreviations/fr.json":11,"./languages/abbreviations/he.json":12,"./languages/abbreviations/hu.json":13,"./languages/abbreviations/lt.json":14,"./languages/abbreviations/nl.json":15,"./languages/abbreviations/ru.json":16,"./languages/abbreviations/sl.json":17,"./languages/abbreviations/sv.json":18,"./languages/abbreviations/uk.json":19,"./languages/abbreviations/vi.json":20,"./languages/grammar/fr.json":21,"./languages/grammar/ru.json":22,"./languages/translations/da.json":23,"./languages/translations/de.json":24,"./languages/translations/en.json":25,"./languages/translations/eo.json":26,"./languages/translations/es-ES.json":27,"./languages/translations/es.json":28,"./languages/translations/fi.json":29,"./languages/translations/fr.json":30,"./languages/translations/he.json":31,"./languages/translations/id.json":32,"./languages/translations/it.json":33,"./languages/translations/ko.json":34,"./languages/translations/my.json":35,"./languages/translations/nl.json":36,"./languages/translations/no.json":37,"./languages/translations/pl.json":38,"./languages/translations/pt-BR.json":39,"./languages/translations/pt-PT.json":40,"./languages/translations/ro.json":41,"./languages/translations/ru.json":42,"./languages/translations/sv.json":43,"./languages/translations/tr.json":44,"./languages/translations/uk.json":45,"./languages/translations/vi.json":46,"./languages/translations/zh-Hans.json":47}],5:[function(_dereq_,module,exports){module.exports={abbreviations:{"международен":"Межд","старши":"Стрш","възел":"Въз","пазар":"Mkt","светисвети":"СвСв","сестра":"сес","уилям":"Ум","апартаменти":"ап","езеро":"Ез","свети":"Св","център":"Ц-р","парк":"Пк","маршрут":"М-т","площад":"Пл","национален":"Нац","училище":"Уч","река":"Рек","поток":"П-к","район":"Р-н","крепост":"К-т","паметник":"Пам","университет":"Уни","Връх":"Вр","точка":"Точ","планина":"Пл","село":"с.","височини":"вис","младши":"Мл","станция":"С-я","проход":"Прох","баща":"Бщ"},classifications:{"шофиране":"Шоф","плавен":"Пл","място":"Мя","тераса":"Тер","магистрала":"М-ла","площад":"Пл","пеш":"Пеш","залив":"З-в","пътека":"П-ка","платно":"Пл","улица":"Ул","алея":"Ал","пешеходна":"Пеш","точка":"Тч","задминаване":"Задм","кръгово":"Кр","връх":"Вр","съд":"Сд","булевард":"Бул","път":"Път","скоростна":"Скор","мост":"Мо"},directions:{"северозапад":"СЗ","североизток":"СИ","югозапад":"ЮЗ","югоизток":"ЮИ","север":"С","изток":"И","юг":"Ю"}}},{}],6:[function(_dereq_,module,exports){module.exports={abbreviations:{comunicacions:"Com.","entitat de població":"Nucli",disseminat:"Diss.","cap de municipi":"Cap",indret:"Indr.",comarca:"Cca.","relleu del litoral":"Lit.",municipi:"Mun.","xarxa hidrogràfica":"Curs Fluv.",equipament:"Equip.",orografia:"Orogr.",barri:"Barri","edificació":"Edif.","edificació històrica":"Edif. Hist.","entitat descentralitzada":"E.M.D.","element hidrogràfic":"Hidr."},classifications:{rotonda:"Rot.",carrerada:"Ca.","jardí":"J.",paratge:"Pge.",pont:"Pont",lloc:"Lloc",rambla:"Rbla.",cases:"Cses.",barranc:"Bnc.",plana:"Plana","polígon":"Pol.",muralla:"Mur.","enllaç":"Ellaç","antiga carretera":"Actra",glorieta:"Glor.",autovia:"Autv.","prolongació":"Prol.","calçada":"Cda.",carretera:"Ctra.",pujada:"Pda.",torrent:"T.",disseminat:"Disse",barri:"B.","cinturó":"Cinto",passera:"Psera",sender:"Send.",carrer:"C.","sèquia":"Sèq.",blocs:"Bloc",rambleta:"Rblt.",partida:"Par.",costa:"Cos.",sector:"Sec.","corraló":"Crral","urbanització":"Urb.",autopista:"Autp.",grup:"Gr.",platja:"Pja.",jardins:"J.",complex:"Comp.",portals:"Ptals",finca:"Fin.",travessera:"Trav.","plaça":"Pl.",travessia:"Trv.","polígon industrial":"PI.",passatge:"Ptge.",apartaments:"Apmt.",mirador:"Mira.",antic:"Antic","accés":"Acc.","colònia":"Col.",corriol:"Crol.",portal:"Ptal.",porta:"Pta.",port:"Port","carreró":"Cró.",riera:"Ra.","circumval·lació":"Cval.",baixada:"Bda.",placeta:"Plta.",escala:"Esc.","gran via":"GV",rial:"Rial",conjunt:"Conj.",avinguda:"Av.",esplanada:"Esp.",cantonada:"Cant.",ronda:"Rda.",corredor:"Cdor.",drecera:"Drec.","passadís":"Pdís.",viaducte:"Vdct.",passeig:"Pg.","veïnat":"Veï."},directions:{sudest:"SE",sudoest:"SO",nordest:"NE",nordoest:"NO",est:"E",nord:"N",oest:"O",sud:"S"}}},{}],7:[function(_dereq_,module,exports){module.exports={abbreviations:{skole:"Sk.",ved:"v.",centrum:"C.",sankt:"Skt.",vestre:"v.",hospital:"Hosp.","stræde":"Str.",nordre:"Nr.",plads:"Pl.",universitet:"Uni.","vænge":"vg.",station:"St."},classifications:{avenue:"Ave",gammel:"Gl.",dronning:"Dronn.","sønder":"Sdr.","nørre":"Nr.",vester:"V.",vestre:"V.","øster":"Ø.","østre":"Ø.",boulevard:"Boul."},directions:{"sydøst":"SØ",nordvest:"NV",syd:"S","nordøst":"NØ",sydvest:"SV",vest:"V",nord:"N","øst":"Ø"}}},{}],8:[function(_dereq_,module,exports){module.exports={abbreviations:{},classifications:{},directions:{osten:"O",nordosten:"NO","süden":"S",nordwest:"NW",norden:"N","südost":"SO","südwest":"SW",westen:"W"}}},{}],9:[function(_dereq_,module,exports){module.exports={abbreviations:{square:"Sq",centre:"Ctr",sister:"Sr",lake:"Lk",fort:"Ft",route:"Rte",william:"Wm",national:"Nat’l",junction:"Jct",center:"Ctr",saint:"St",saints:"SS",station:"Sta",mount:"Mt",junior:"Jr",mountain:"Mtn",heights:"Hts",university:"Univ",school:"Sch",international:"Int’l",apartments:"Apts",crossing:"Xing",creek:"Crk",township:"Twp",downtown:"Dtwn",father:"Fr",senior:"Sr",point:"Pt",river:"Riv",market:"Mkt",village:"Vil",park:"Pk",memorial:"Mem"},classifications:{place:"Pl",circle:"Cir",bypass:"Byp",motorway:"Mwy",crescent:"Cres",road:"Rd",cove:"Cv",lane:"Ln",square:"Sq",street:"St",freeway:"Fwy",walk:"Wk",plaza:"Plz",parkway:"Pky",avenue:"Ave",pike:"Pk",drive:"Dr",highway:"Hwy",footway:"Ftwy",point:"Pt",court:"Ct",terrace:"Ter",walkway:"Wky",alley:"Aly",expressway:"Expy",bridge:"Br",boulevard:"Blvd",turnpike:"Tpk"},directions:{southeast:"SE",northwest:"NW",south:"S",west:"W",southwest:"SW",north:"N",east:"E",northeast:"NE"}}},{}],10:[function(_dereq_,module,exports){module.exports={abbreviations:{segunda:"2ª",octubre:"8bre",doctores:"Drs",doctora:"Dra",internacional:"Intl",doctor:"Dr",segundo:"2º","señorita":"Srta",doctoras:"Drs",primera:"1ª",primero:"1º",san:"S",colonia:"Col","doña":"Dña",septiembre:"7bre",diciembre:"10bre","señor":"Sr",ayuntamiento:"Ayto","señora":"Sra",tercera:"3ª",tercero:"3º",don:"D",santa:"Sta",ciudad:"Cdad",noviembre:"9bre",departamento:"Dep"},classifications:{camino:"Cmno",avenida:"Av",paseo:"Pº",autopista:"Auto",calle:"C",plaza:"Pza",carretera:"Crta"},directions:{este:"E",noreste:"NE",sur:"S",suroeste:"SO",noroeste:"NO",oeste:"O",sureste:"SE",norte:"N"}}},{}],11:[function(_dereq_,module,exports){module.exports={abbreviations:{"allée":"All","aérodrome":"Aérod","aéroport":"Aérop"},classifications:{centrale:"Ctrale",campings:"Camp.",urbains:"Urb.",mineure:"Min.",publique:"Publ.","supérieur":"Sup.","fédération":"Féd.","notre-dame":"ND",saint:"St","centre hospitalier régional":"CHR",exploitation:"Exploit.","général":"Gal",civiles:"Civ.",maritimes:"Marit.",aviation:"Aviat.",iii:"3","archéologique":"Archéo.",musical:"Music.",musicale:"Music.",immeuble:"Imm.",xv:"15","hôtel":"Hôt.",alpine:"Alp.",communale:"Commun.",v:"5",global:"Glob.","université":"Univ.","confédéral":"Conféd.",xx:"20",x:"10",piscine:"Pisc.",dimanche:"di.",fleuve:"Flv",postaux:"Post.",musicienne:"Music.","département":"Dépt","février":"Févr.",municipales:"Munic.",province:"Prov.","communautés":"Commtés",barrage:"Barr.",mercredi:"me.","présidentes":"Pdtes","cafétérias":"Cafét.","théâtral":"Thé.",viticulteur:"Vitic.",poste:"Post.","spécialisée":"Spéc.",agriculture:"Agric.",infirmier:"Infirm.",animation:"Anim.",mondiale:"Mond.","arrêt":"Arr.",zone:"zon.",municipaux:"Munic.",grand:"Gd",janvier:"Janv.",fondateur:"Fond.","première":"1re",municipale:"Munic.",direction:"Dir.",anonyme:"Anon.","départementale":"Dépt",moyens:"Moy.",novembre:"Nov.",jardin:"Jard.",petites:"Pet.","privé":"Priv.",centres:"Ctres",forestier:"Forest.",xiv:"14",africaines:"Afric.",sergent:"Sgt","européenne":"Eur.","privée":"Priv.","café":"Cfé",xix:"19",hautes:"Htes",major:"Mjr",vendredi:"ve.","municipalité":"Munic.","sous-préfecture":"Ss-préf.","spéciales":"Spéc.",secondaires:"Second.",viie:"7e",moyenne:"Moy.",commerciale:"Commerc.","région":"Rég.","américaines":"Amér.","américains":"Amér.",service:"Sce",professeur:"Prof.","départemental":"Dépt","hôtels":"Hôt.",mondiales:"Mond.",ire:"1re",caporal:"Capo.",militaire:"Milit.","lycée d'enseignement professionnel":"LEP",adjudant:"Adj.","médicale":"Méd.","conférences":"Confér.",universelle:"Univ.",xiie:"12e","supérieures":"Sup.",naturel:"Natur.","société nationale":"SN",hospitalier:"Hosp.",culturelle:"Cult.","américain":"Amér.","son altesse royale":"S.A.R.","infirmière":"Infirm.",viii:"8",fondatrice:"Fond.",madame:"Mme","métropolitain":"Métrop.",ophtalmologues:"Ophtalmos",xviie:"18e",viiie:"8e","commerçante":"Commerç.","centre d'enseignement du second degré":"CES",septembre:"Sept.",agriculteur:"Agric.",xiii:"13",pontifical:"Pontif.","cafétéria":"Cafét.",prince:"Pce",vie:"6e",archiduchesse:"Archid.",occidental:"Occ.",spectacles:"Spect.",camping:"Camp.","métro":"Mº",arrondissement:"Arrond.",viticole:"Vitic.",ii:"2","siècle":"Si.",chapelles:"Chap.",centre:"Ctre","sapeur-pompiers":"Sap.-pomp.","établissements":"Étabts","société anonyme":"SA",directeurs:"Dir.",vii:"7",culturel:"Cult.",central:"Ctral","métropolitaine":"Métrop.",administrations:"Admin.",amiraux:"Amir.",sur:"s/",premiers:"1ers","provence-alpes-côte d'azur":"PACA","cathédrale":"Cathéd.",iv:"4",postale:"Post.",social:"Soc.","spécialisé":"Spéc.",district:"Distr.",technologique:"Techno.",viticoles:"Vitic.",ix:"9","protégés":"Prot.",historiques:"Hist.",sous:"s/s",national:"Nal",ambassade:"Amb.","cafés":"Cfés",agronomie:"Agro.",sapeurs:"Sap.",petits:"Pet.",monsieur:"M.",boucher:"Bouch.",restaurant:"Restau.","lycée":"Lyc.",urbaine:"Urb.","préfecture":"Préf.",districts:"Distr.",civil:"Civ.","protégées":"Prot.",sapeur:"Sap.","théâtre":"Thé.","collège":"Coll.",mardi:"ma.","mémorial":"Mémor.",africain:"Afric.","républicaine":"Républ.",sociale:"Soc.","spécial":"Spéc.",technologie:"Techno.",charcuterie:"Charc.",commerces:"Commerc.",fluviale:"Flv",parachutistes:"Para.",primaires:"Prim.",directions:"Dir.","présidentiel":"Pdtl",nationales:"Nales","après":"apr.",samedi:"sa.","unité":"U.",xxiii:"23","associé":"Assoc.","électrique":"Électr.",populaire:"Pop.",asiatique:"Asiat.",navigable:"Navig.","présidente":"Pdte",xive:"14e","associés":"Assoc.",pompiers:"Pomp.",agricoles:"Agric.","élém":"Élém.","décembre":"Déc.","son altesse":"S.Alt.","après-midi":"a.-m.",mineures:"Min.",juillet:"Juil.",aviatrices:"Aviat.",fondation:"Fond.",pontificaux:"Pontif.",temple:"Tple","européennes":"Eur.","régionale":"Rég.",informations:"Infos",mondiaux:"Mond.",infanterie:"Infant.","archéologie":"Archéo.",dans:"d/",hospice:"Hosp.",spectacle:"Spect.","hôtels-restaurants":"Hôt.-Rest.","hôtel-restaurant":"Hôt.-Rest.","hélicoptère":"hélico",xixe:"19e",cliniques:"Clin.",docteur:"Dr",secondaire:"Second.",municipal:"Munic.","générale":"Gale","château":"Chât.","commerçant":"Commerç.",avril:"Avr.",clinique:"Clin.",urbaines:"Urb.",navale:"Nav.",navigation:"Navig.",asiatiques:"Asiat.",pontificales:"Pontif.",administrative:"Admin.",syndicat:"Synd.",lundi:"lu.",petite:"Pet.",maritime:"Marit.","métros":"Mº",enseignement:"Enseign.",fluviales:"Flv",historique:"Hist.","comtés":"Ctés","résidentiel":"Résid.",international:"Int.","supérieure":"Sup.","centre hospitalier universitaire":"CHU","confédération":"Conféd.",boucherie:"Bouch.",fondatrices:"Fond.","médicaux":"Méd.","européens":"Eur.",orientaux:"Ori.",naval:"Nav.","étang":"Étg",provincial:"Prov.",junior:"Jr","départementales":"Dépt",musique:"Musiq.",directrices:"Dir.","maréchal":"Mal",civils:"Civ.","protégé":"Prot.","établissement":"Étabt",trafic:"Traf.",aviateur:"Aviat.",archives:"Arch.",africains:"Afric.",maternelle:"Matern.",industrielle:"Ind.",administratif:"Admin.",oriental:"Ori.",universitaire:"Univ.",majeur:"Maj.",haute:"Hte",communal:"Commun.",petit:"Pet.",commune:"Commun.",exploitant:"Exploit.","conférence":"Confér.",monseigneur:"Mgr",pharmacien:"Pharm.",jeudi:"je.",primaire:"Prim.","hélicoptères":"hélicos",agronomique:"Agro.","médecin":"Méd.",ve:"5e",pontificale:"Pontif.",ier:"1er","cinéma":"Ciné",fluvial:"Flv",occidentaux:"Occ.","commerçants":"Commerç.",banque:"Bq",moyennes:"Moy.",pharmacienne:"Pharm.","démocratique":"Dém.","cinémas":"Cinés","spéciale":"Spéc.","présidents":"Pdts",directrice:"Dir.",vi:"6",basse:"Bas.",xve:"15e","état":"É.",aviateurs:"Aviat.",majeurs:"Maj.",infirmiers:"Infirm.","église":"Égl.","confédérale":"Conféd.",xxie:"21e",comte:"Cte","européen":"Eur.",union:"U.",pharmacie:"Pharm.","infirmières":"Infirm.","comté":"Cté",sportive:"Sport.","deuxième":"2e",xvi:"17",haut:"Ht","médicales":"Méd.","développé":"Dévelop.","bâtiment":"Bât.",commerce:"Commerc.",ive:"4e",associatif:"Assoc.",rural:"Rur.","cimetière":"Cim.","régional":"Rég.",ferroviaire:"Ferr.",vers:"v/","mosquée":"Mosq.",mineurs:"Min.",nautique:"Naut.","châteaux":"Chât.",sportif:"Sport.",mademoiselle:"Mle","école":"Éc.",doyen:"Doy.",industriel:"Ind.",chapelle:"Chap.","sociétés":"Stés",internationale:"Int.","coopératif":"Coop.",hospices:"Hosp.",xxii:"22",parachutiste:"Para.",alpines:"Alp.",civile:"Civ.",xvie:"17e","états":"É.","musée":"Msée",centrales:"Ctrales",globaux:"Glob.","supérieurs":"Sup.",syndicats:"Synd.","archevêque":"Archev.",docteurs:"Drs","bibliothèque":"Biblio.",lieutenant:"Lieut.","république":"Rép.","vétérinaire":"Vét.","départementaux":"Dépt",premier:"1er",fluviaux:"Flv","animé":"Anim.",orientales:"Ori.",technologiques:"Techno.",princesse:"Pse","routière":"Rout.","coopérative":"Coop.",scolaire:"Scol.","écoles":"Éc.",football:"Foot",territoriale:"Territ.",commercial:"Commerc.",mineur:"Min.","millénaires":"Mill.",association:"Assoc.",catholique:"Cathol.",administration:"Admin.",mairie:"Mair.",portuaire:"Port.",tertiaires:"Terti.","théâtrale":"Thé.",palais:"Pal.","troisième":"3e",directeur:"Dir.","vétérinaires":"Vét.","faculté":"Fac.",occidentales:"Occ.",viticulteurs:"Vitic.",xvii:"18",occidentale:"Occ.",amiral:"Amir.",professionnel:"Profess.",administratives:"Admin.",commerciales:"Commerc.",saints:"Sts",agronomes:"Agro.",stade:"Std","sous-préfet":"Ss-préf.",senior:"Sr",agronome:"Agro.",terrain:"Terr.",catholiques:"Cathol.","résidentielle":"Résid.",grands:"Gds",exploitants:"Exploit.",xiiie:"13e",croix:"Cx","généraux":"Gaux","crédit":"Créd.","cimetières":"Cim.",antenne:"Ant.","médical":"Méd.","collèges":"Coll.",musicien:"Music.",apostolique:"Apost.",postal:"Post.",territorial:"Territ.",urbanisme:"Urb.","préfectorale":"Préf.",fondateurs:"Fond.",information:"Info.","églises":"Égl.",ophtalmologue:"Ophtalmo","congrégation":"Congrég.",charcutier:"Charc.","étage":"ét.",consulat:"Consul.",public:"Publ.","ferrée":"Ferr.",matin:"mat.","société anonyme à responsabilité limitée":"SARL",monuments:"Mmts",protection:"Prot.",universel:"Univ.",nationale:"Nale","président":"Pdt",provinciale:"Prov.",agriculteurs:"Agric.","préfectoral":"Préf.",xxe:"20e",alpins:"Alp.",avant:"av.",infirmerie:"Infirm.","deux mil":"2000",rurale:"Rur.",administratifs:"Admin.",octobre:"Oct.",archipel:"Archip.","communauté":"Commté",globales:"Glob.",alpin:"Alp.","numéros":"Nºˢ","lieutenant-colonel":"Lieut.-Col.","jésus-christ":"J.-C.",agricole:"Agric.","sa majesté":"S.Maj.",associative:"Assoc.",xxi:"21","présidentielle":"Pdtle",moyen:"Moy.","fédéral":"Féd.",professionnelle:"Profess.",tertiaire:"Terti.",ixe:"9e","hôpital":"Hôp.",technologies:"Techno.",iiie:"3e","développement":"Dévelop.",monument:"Mmt","forestière":"Forest.","numéro":"Nº",viticulture:"Vitic.","traversière":"Traver.",technique:"Tech.","électriques":"Électr.",militaires:"Milit.",pompier:"Pomp.","américaine":"Amér.","préfet":"Préf.","congrégations":"Congrég.","pâtissier":"Pâtiss.",mondial:"Mond.",ophtalmologie:"Ophtalm.",sainte:"Ste",africaine:"Afric.",aviatrice:"Aviat.",doyens:"Doy.","société":"Sté",majeures:"Maj.",orientale:"Ori.","ministère":"Min.",archiduc:"Archid.",territoire:"Territ.",techniques:"Tech.","île-de-france":"IDF",globale:"Glob.",xe:"10e",xie:"11e",majeure:"Maj.",commerciaux:"Commerc.",maire:"Mair.","spéciaux":"Spéc.",grande:"Gde",messieurs:"MM",colonel:"Col.","millénaire":"Mill.",xi:"11",urbain:"Urb.","fédérale":"Féd.","ferré":"Ferr.","rivière":"Riv.","républicain":"Républ.",grandes:"Gdes","régiment":"Régim.",hauts:"Hts","catégorie":"Catég.",basses:"Bas.",xii:"12",agronomiques:"Agro.",iie:"2e","protégée":"Prot.","sapeur-pompier":"Sap.-pomp."},directions:{"est-nord-est":"ENE",
2166"nord-est":"NE",ouest:"O","sud-est":"SE","est-sud-est":"ESE","nord-nord-est":"NNE",sud:"S","nord-nord-ouest":"NNO","nord-ouest":"NO",nord:"N","ouest-sud-ouest":"OSO","ouest-nord-ouest":"ONO","sud-ouest":"SO","sud-sud-est":"SSE","sud-sud-ouest":"SSO",est:"E"}}},{}],12:[function(_dereq_,module,exports){module.exports={abbreviations:{"שדרות":"שד'"},classifications:{},directions:{}}},{}],13:[function(_dereq_,module,exports){module.exports={abbreviations:{},classifications:{},directions:{kelet:"K","északkelet":"ÉK","dél":"D","északnyugat":"ÉNY","észak":"É","délkelet":"DK","délnyugat":"DNY",nyugat:"NY"}}},{}],14:[function(_dereq_,module,exports){module.exports={abbreviations:{apartamentai:"Apt","aukštumos":"Aukš",centras:"Ctr","ežeras":"Ež",fortas:"Ft",greitkelis:"Grtkl",juosta:"Jst",kaimas:"Km",kalnas:"Kln",kelias:"Kl",kiemelis:"Kml",miestelis:"Mstl","miesto centras":"M.Ctr",mokykla:"Mok",nacionalinis:"Nac",paminklas:"Pmkl",parkas:"Pk",pusratis:"Psrt","sankryža":"Skrž","sesė":"Sesė",skveras:"Skv",stotis:"St","šv":"Šv",tarptautinis:"Trptaut","taškas":"Tšk","tėvas":"Tėv",turgus:"Tgs",universitetas:"Univ","upė":"Up",upelis:"Up",vieta:"Vt"},classifications:{"aikštė":"a.","alėja":"al.",aplinkkelis:"aplinkl.",autostrada:"auto.",bulvaras:"b.","gatvė":"g.",kelias:"kel.","krantinė":"krant.",prospektas:"pr.",plentas:"pl.",skersgatvis:"skg.",takas:"tak.",tiltas:"tlt."},directions:{"pietūs":"P",vakarai:"V","šiaurė":"Š","šiaurės vakarai":"ŠV","pietryčiai":"PR","šiaurės rytai":"ŠR",rytai:"R",pietvakariai:"PV"}}},{}],15:[function(_dereq_,module,exports){module.exports={abbreviations:{centrum:"Cntrm",nationaal:"Nat’l",berg:"Brg",meer:"Mr",kruising:"Krsng",toetreden:"Ttrdn"},classifications:{bypass:"Pass",brug:"Br",straat:"Str",rechtbank:"Rbank",snoek:"Snk",autobaan:"Baan",terras:"Trrs",punt:"Pt",plaza:"Plz",rijden:"Rijd",parkway:"Pky",inham:"Nham",snelweg:"Weg","halve maan":"Maan",cirkel:"Crkl",laan:"Ln",rijbaan:"Strook",weg:"Weg",lopen:"Lpn",autoweg:"Weg",boulevard:"Blvd",plaats:"Plts",steeg:"Stg",voetpad:"Stoep"},directions:{noordoost:"NO",westen:"W",zuiden:"Z",zuidwest:"ZW",oost:"O",zuidoost:"ZO",noordwest:"NW",noorden:"N"}}},{}],16:[function(_dereq_,module,exports){module.exports={abbreviations:{"апостола":"ап.","апостолов":"апп.","великомученика":"вмч","великомученицы":"вмц.","владение":"вл.","город":"г.","деревня":"д.","имени":"им.","мученика":"мч.","мучеников":"мчч.","мучениц":"мцц.","мученицы":"мц.","озеро":"о.","посёлок":"п.","преподобного":"прп.","преподобных":"прпп.","река":"р.","святителей":"свтт.","святителя":"свт.","священномученика":"сщмч.","священномучеников":"сщмчч.","станция":"ст.","участок":"уч."},classifications:{"проезд":"пр-д","проспект":"пр.","переулок":"пер.","набережная":"наб.","площадь":"пл.","шоссе":"ш.","бульвар":"б.","тупик":"туп.","улица":"ул."},directions:{"восток":"В","северо-восток":"СВ","юго-восток":"ЮВ","юго-запад":"ЮЗ","северо-запад":"СЗ","север":"С","запад":"З","юг":"Ю"}}},{}],17:[function(_dereq_,module,exports){module.exports={abbreviations:{},classifications:{},directions:{vzhod:"V",severovzhod:"SV",jug:"J",severozahod:"SZ",sever:"S",jugovzhod:"JV",jugozahod:"JZ",zahod:"Z"}}},{}],18:[function(_dereq_,module,exports){module.exports={abbreviations:{sankta:"s:ta",gamla:"G:la",sankt:"s:t"},classifications:{Bro:"Br"},directions:{norr:"N","sydöst":"SO","väster":"V","öster":"O","nordväst":"NV","sydväst":"SV","söder":"S","nordöst":"NO"}}},{}],19:[function(_dereq_,module,exports){module.exports={abbreviations:{},classifications:{},directions:{"схід":"Сх","північний схід":"ПнСх","південь":"Пд","північний захід":"ПнЗд","північ":"Пн","південний схід":"ПдСх","південний захід":"ПдЗх","захід":"Зх"}}},{}],20:[function(_dereq_,module,exports){module.exports={abbreviations:{"viện bảo tàng":"VBT","thị trấn":"Tt","đại học":"ĐH","căn cứ không quan":"CCKQ","câu lạc bộ":"CLB","bưu điện":"BĐ","khách sạn":"KS","khu du lịch":"KDL","khu công nghiệp":"KCN","khu nghỉ mát":"KNM","thị xã":"Tx","khu chung cư":"KCC","phi trường":"PT","trung tâm":"TT","tổng công ty":"TCty","trung học cơ sở":"THCS","sân bay quốc tế":"SBQT","trung học phổ thông":"THPT","cao đẳng":"CĐ","công ty":"Cty","sân bay":"SB","thành phố":"Tp","công viên":"CV","sân vận động":"SVĐ","linh mục":"LM","vườn quốc gia":"VQG"},classifications:{"huyện lộ":"HL","đường tỉnh":"ĐT","quốc lộ":"QL","xa lộ":"XL","hương lộ":"HL","tỉnh lộ":"TL","đường huyện":"ĐH","đường cao tốc":"ĐCT","đại lộ":"ĐL","việt nam":"VN","quảng trường":"QT","đường bộ":"ĐB"},directions:{"tây":"T",nam:"N","đông nam":"ĐN","đông bắc":"ĐB","tây nam":"TN","đông":"Đ","bắc":"B"}}},{}],21:[function(_dereq_,module,exports){module.exports={meta:{regExpFlags:"gi"},v5:{article:[["^ Acc[èe]s "," l’accès "],["^ Aire "," l’aire "],["^ All[ée]e "," l’allée "],["^ Anse "," l’anse "],["^ (L['’])?Autoroute "," l’autoroute "],["^ Avenue "," l’avenue "],["^ Barreau "," le barreau "],["^ Boulevard "," le boulevard "],["^ Chemin "," le chemin "],["^ Petit[\\- ]Chemin "," le petit chemin "],["^ Cit[ée] "," la cité "],["^ Clos "," le clos "],["^ Corniche "," la corniche "],["^ Cour "," la cour "],["^ Cours "," le cours "],["^ D[ée]viation "," la déviation "],["^ Entr[ée]e "," l’entrée "],["^ Esplanade "," l’esplanade "],["^ Galerie "," la galerie "],["^ Impasse "," l’impasse "],["^ Lotissement "," le lotissement "],["^ Mont[ée]e "," la montée "],["^ Parc "," le parc "],["^ Parvis "," le parvis "],["^ Passage "," le passage "],["^ Place "," la place "],["^ Petit[\\- ]Pont "," le petit-pont "],["^ Pont "," le pont "],["^ Promenade "," la promenade "],["^ Quai "," le quai "],["^ Rocade "," la rocade "],["^ Rond[\\- ]?Point "," le rond-point "],["^ Route "," la route "],["^ Rue "," la rue "],["^ Grande Rue "," la grande rue "],["^ Sente "," la sente "],["^ Sentier "," le sentier "],["^ Sortie "," la sortie "],["^ Souterrain "," le souterrain "],["^ Square "," le square "],["^ Terrasse "," la terrasse "],["^ Traverse "," la traverse "],["^ Tunnel "," le tunnel "],["^ Viaduc "," le viaduc "],["^ Villa "," la villa "],["^ Village "," le village "],["^ Voie "," la voie "],[" ([dl])'"," $1’"]],preposition:[["^ Le ","  du "],["^ Les ","  des "],["^ La ","  de La "],["^ Acc[èe]s ","  de l’accès "],["^ Aire ","  de l’aire "],["^ All[ée]e ","  de l’allée "],["^ Anse ","  de l’anse "],["^ (L['’])?Autoroute ","  de l’autoroute "],["^ Avenue ","  de l’avenue "],["^ Barreau ","  du barreau "],["^ Boulevard ","  du boulevard "],["^ Chemin ","  du chemin "],["^ Petit[\\- ]Chemin ","  du petit chemin "],["^ Cit[ée] ","  de la cité "],["^ Clos ","  du clos "],["^ Corniche ","  de la corniche "],["^ Cour ","  de la cour "],["^ Cours ","  du cours "],["^ D[ée]viation ","  de la déviation "],["^ Entr[ée]e ","  de l’entrée "],["^ Esplanade ","  de l’esplanade "],["^ Galerie ","  de la galerie "],["^ Impasse ","  de l’impasse "],["^ Lotissement ","  du lotissement "],["^ Mont[ée]e ","  de la montée "],["^ Parc ","  du parc "],["^ Parvis ","  du parvis "],["^ Passage ","  du passage "],["^ Place ","  de la place "],["^ Petit[\\- ]Pont ","  du petit-pont "],["^ Pont ","  du pont "],["^ Promenade ","  de la promenade "],["^ Quai ","  du quai "],["^ Rocade ","  de la rocade "],["^ Rond[\\- ]?Point ","  du rond-point "],["^ Route ","  de la route "],["^ Rue ","  de la rue "],["^ Grande Rue ","  de la grande rue "],["^ Sente ","  de la sente "],["^ Sentier ","  du sentier "],["^ Sortie ","  de la sortie "],["^ Souterrain ","  du souterrain "],["^ Square ","  du square "],["^ Terrasse ","  de la terrasse "],["^ Traverse ","  de la traverse "],["^ Tunnel ","  du tunnel "],["^ Viaduc ","  du viaduc "],["^ Villa ","  de la villa "],["^ Village ","  du village "],["^ Voie ","  de la voie "],["^ ([AÂÀEÈÉÊËIÎÏOÔUÙÛÜYŸÆŒ])","  d’$1"],["^ (\\S)","  de $1"],[" ([dl])'"," $1’"]],rotary:[["^ Le ","  le rond-point du "],["^ Les ","  le rond-point des "],["^ La ","  le rond-point de La "],["^ Acc[èe]s "," le rond-point de l’accès "],["^ Aire ","  le rond-point de l’aire "],["^ All[ée]e ","  le rond-point de l’allée "],["^ Anse ","  le rond-point de l’anse "],["^ (L['’])?Autoroute ","  le rond-point de l’autoroute "],["^ Avenue ","  le rond-point de l’avenue "],["^ Barreau ","  le rond-point du barreau "],["^ Boulevard ","  le rond-point du boulevard "],["^ Chemin ","  le rond-point du chemin "],["^ Petit[\\- ]Chemin ","  le rond-point du petit chemin "],["^ Cit[ée] ","  le rond-point de la cité "],["^ Clos ","  le rond-point du clos "],["^ Corniche ","  le rond-point de la corniche "],["^ Cour ","  le rond-point de la cour "],["^ Cours ","  le rond-point du cours "],["^ D[ée]viation ","  le rond-point de la déviation "],["^ Entr[ée]e ","  le rond-point de l’entrée "],["^ Esplanade ","  le rond-point de l’esplanade "],["^ Galerie ","  le rond-point de la galerie "],["^ Impasse ","  le rond-point de l’impasse "],["^ Lotissement ","  le rond-point du lotissement "],["^ Mont[ée]e ","  le rond-point de la montée "],["^ Parc ","  le rond-point du parc "],["^ Parvis ","  le rond-point du parvis "],["^ Passage ","  le rond-point du passage "],["^ Place ","  le rond-point de la place "],["^ Petit[\\- ]Pont ","  le rond-point du petit-pont "],["^ Pont ","  le rond-point du pont "],["^ Promenade ","  le rond-point de la promenade "],["^ Quai ","  le rond-point du quai "],["^ Rocade ","  le rond-point de la rocade "],["^ Rond[\\- ]?Point ","  le rond-point "],["^ Route ","  le rond-point de la route "],["^ Rue ","  le rond-point de la rue "],["^ Grande Rue ","  le rond-point de la grande rue "],["^ Sente ","  le rond-point de la sente "],["^ Sentier ","  le rond-point du sentier "],["^ Sortie ","  le rond-point de la sortie "],["^ Souterrain ","  le rond-point du souterrain "],["^ Square ","  le rond-point du square "],["^ Terrasse ","  le rond-point de la terrasse "],["^ Traverse ","  le rond-point de la traverse "],["^ Tunnel ","  le rond-point du tunnel "],["^ Viaduc ","  le rond-point du viaduc "],["^ Villa ","  le rond-point de la villa "],["^ Village ","  le rond-point du village "],["^ Voie ","  le rond-point de la voie "],["^ ([AÂÀEÈÉÊËIÎÏOÔUÙÛÜYŸÆŒ])","  le rond-point d’$1"],["^ (\\S)","  le rond-point de $1"],[" ([dl])'"," $1’"]],arrival:[["^ Le ","  au "],["^ Les ","  aux "],["^ La ","  à La "],["^ (\\S)","  à $1"],[" ([dl])'"," $1’"]]}}},{}],22:[function(_dereq_,module,exports){module.exports={meta:{regExpFlags:""},v5:{accusative:[['^ ([«"])'," трасса $1"],["^ (\\S+)ая [Аа]ллея "," $1ую аллею "],["^ (\\S+)ья [Аа]ллея "," $1ью аллею "],["^ (\\S+)яя [Аа]ллея "," $1юю аллею "],["^ (\\d+)-я (\\S+)ая [Аа]ллея "," $1-ю $2ую аллею "],["^ [Аа]ллея "," аллею "],["^ (\\S+)ая-(\\S+)ая [Уу]лица "," $1ую-$2ую улицу "],["^ (\\S+)ая [Уу]лица "," $1ую улицу "],["^ (\\S+)ья [Уу]лица "," $1ью улицу "],["^ (\\S+)яя [Уу]лица "," $1юю улицу "],["^ (\\d+)-я [Уу]лица "," $1-ю улицу "],["^ (\\d+)-я (\\S+)ая [Уу]лица "," $1-ю $2ую улицу "],["^ (\\S+)ая (\\S+)ая [Уу]лица "," $1ую $2ую улицу "],["^ (\\S+[вн])а [Уу]лица "," $1у улицу "],["^ (\\S+)ая (\\S+[вн])а [Уу]лица "," $1ую $2у улицу "],["^ Даньславля [Уу]лица "," Даньславлю улицу "],["^ Добрыня [Уу]лица "," Добрыню улицу "],["^ Людогоща [Уу]лица "," Людогощу улицу "],["^ [Уу]лица "," улицу "],["^ (\\d+)-я [Лл]иния "," $1-ю линию "],["^ (\\d+)-(\\d+)-я [Лл]иния "," $1-$2-ю линию "],["^ (\\S+)ая [Лл]иния "," $1ую линию "],["^ (\\S+)ья [Лл]иния "," $1ью линию "],["^ (\\S+)яя [Лл]иния "," $1юю линию "],["^ (\\d+)-я (\\S+)ая [Лл]иния "," $1-ю $2ую линию "],["^ [Лл]иния "," линию "],["^ (\\d+)-(\\d+)-я [Лл]инии "," $1-$2-ю линии "],["^ (\\S+)ая [Нн]абережная "," $1ую набережную "],["^ (\\S+)ья [Нн]абережная "," $1ью набережную "],["^ (\\S+)яя [Нн]абережная "," $1юю набережную "],["^ (\\d+)-я (\\S+)ая [Нн]абережная "," $1-ю $2ую набережную "],["^ [Нн]абережная "," набережную "],["^ (\\S+)ая [Пп]лощадь "," $1ую площадь "],["^ (\\S+)ья [Пп]лощадь "," $1ью площадь "],["^ (\\S+)яя [Пп]лощадь "," $1юю площадь "],["^ (\\S+[вн])а [Пп]лощадь "," $1у площадь "],["^ (\\d+)-я (\\S+)ая [Пп]лощадь "," $1-ю $2ую площадь "],["^ [Пп]лощадь "," площадь "],["^ (\\S+)ая [Пп]росека "," $1ую просеку "],["^ (\\S+)ья [Пп]росека "," $1ью просеку "],["^ (\\S+)яя [Пп]росека "," $1юю просеку "],["^ (\\d+)-я [Пп]росека "," $1-ю просеку "],["^ [Пп]росека "," просеку "],["^ (\\S+)ая [Ээ]стакада "," $1ую эстакаду "],["^ (\\S+)ья [Ээ]стакада "," $1ью эстакаду "],["^ (\\S+)яя [Ээ]стакада "," $1юю эстакаду "],["^ (\\d+)-я (\\S+)ая [Ээ]стакада "," $1-ю $2ую эстакаду "],["^ [Ээ]стакада "," эстакаду "],["^ (\\S+)ая [Мм]агистраль "," $1ую магистраль "],["^ (\\S+)ья [Мм]агистраль "," $1ью магистраль "],["^ (\\S+)яя [Мм]агистраль "," $1юю магистраль "],["^ (\\S+)ая (\\S+)ая [Мм]агистраль "," $1ую $2ую магистраль "],["^ (\\d+)-я (\\S+)ая [Мм]агистраль "," $1-ю $2ую магистраль "],["^ [Мм]агистраль "," магистраль "],["^ (\\S+)ая [Рр]азвязка "," $1ую развязку "],["^ (\\S+)ья [Рр]азвязка "," $1ью развязку "],["^ (\\S+)яя [Рр]азвязка "," $1юю развязку "],["^ (\\d+)-я (\\S+)ая [Рр]азвязка "," $1-ю $2ую развязку "],["^ [Рр]азвязка "," развязку "],["^ (\\S+)ая [Тт]расса "," $1ую трассу "],["^ (\\S+)ья [Тт]расса "," $1ью трассу "],["^ (\\S+)яя [Тт]расса "," $1юю трассу "],["^ (\\d+)-я (\\S+)ая [Тт]расса "," $1-ю $2ую трассу "],["^ [Тт]расса "," трассу "],["^ (\\S+)ая ([Аа]вто)?[Дд]орога "," $1ую $2дорогу "],["^ (\\S+)ья ([Аа]вто)?[Дд]орога "," $1ью $2дорогу "],["^ (\\S+)яя ([Аа]вто)?[Дд]орога "," $1юю $2дорогу "],["^ (\\S+)ая (\\S+)ая ([Аа]вто)?[Дд]орога "," $1ую $2ую $3дорогу "],["^ (\\d+)-я (\\S+)ая ([Аа]вто)?[Дд]орога "," $1-ю $2ую $3дорогу "],["^ ([Аа]вто)?[Дд]орога "," $1дорогу "],["^ (\\S+)ая [Дд]орожка "," $1ую дорожку "],["^ (\\S+)ья [Дд]орожка "," $1ью дорожку "],["^ (\\S+)яя [Дд]орожка "," $1юю дорожку "],["^ (\\d+)-я (\\S+)ая [Дд]орожка "," $1-ю $2ую дорожку "],["^ [Дд]орожка "," дорожку "],["^ (\\S+)ая [Кк]оса "," $1ую косу "],["^ (\\S+)ая [Хх]орда "," $1ую хорду "],["^ [Дд]убл[её]р "," дублёр "]],dative:[['^ ([«"])'," трасса $1"],["^ (\\S+)ая [Аа]ллея "," $1ой аллее "],["^ (\\S+)ья [Аа]ллея "," $1ьей аллее "],["^ (\\S+)яя [Аа]ллея "," $1ей аллее "],["^ (\\d+)-я (\\S+)ая [Аа]ллея "," $1-й $2ой аллее "],["^ [Аа]ллея "," аллее "],["^ (\\S+)ая-(\\S+)ая [Уу]лица "," $1ой-$2ой улице "],["^ (\\S+)ая [Уу]лица "," $1ой улице "],["^ (\\S+)ья [Уу]лица "," $1ьей улице "],["^ (\\S+)яя [Уу]лица "," $1ей улице "],["^ (\\d+)-я [Уу]лица "," $1-й улице "],["^ (\\d+)-я (\\S+)ая [Уу]лица "," $1-й $2ой улице "],["^ (\\S+)ая (\\S+)ая [Уу]лица "," $1ой $2ой улице "],["^ (\\S+[вн])а [Уу]лица "," $1ой улице "],["^ (\\S+)ая (\\S+[вн])а [Уу]лица "," $1ой $2ой улице "],["^ Даньславля [Уу]лица "," Даньславлей улице "],["^ Добрыня [Уу]лица "," Добрыней улице "],["^ Людогоща [Уу]лица "," Людогощей улице "],["^ [Уу]лица "," улице "],["^ (\\d+)-я [Лл]иния "," $1-й линии "],["^ (\\d+)-(\\d+)-я [Лл]иния "," $1-$2-й линии "],["^ (\\S+)ая [Лл]иния "," $1ой линии "],["^ (\\S+)ья [Лл]иния "," $1ьей линии "],["^ (\\S+)яя [Лл]иния "," $1ей линии "],["^ (\\d+)-я (\\S+)ая [Лл]иния "," $1-й $2ой линии "],["^ [Лл]иния "," линии "],["^ (\\d+)-(\\d+)-я [Лл]инии "," $1-$2-й линиям "],["^ (\\S+)ая [Нн]абережная "," $1ой набережной "],["^ (\\S+)ья [Нн]абережная "," $1ьей набережной "],["^ (\\S+)яя [Нн]абережная "," $1ей набережной "],["^ (\\d+)-я (\\S+)ая [Нн]абережная "," $1-й $2ой набережной "],["^ [Нн]абережная "," набережной "],["^ (\\S+)ая [Пп]лощадь "," $1ой площади "],["^ (\\S+)ья [Пп]лощадь "," $1ьей площади "],["^ (\\S+)яя [Пп]лощадь "," $1ей площади "],["^ (\\S+[вн])а [Пп]лощадь "," $1ой площади "],["^ (\\d+)-я (\\S+)ая [Пп]лощадь "," $1-й $2ой площади "],["^ [Пп]лощадь "," площади "],["^ (\\S+)ая [Пп]росека "," $1ой просеке "],["^ (\\S+)ья [Пп]росека "," $1ьей просеке "],["^ (\\S+)яя [Пп]росека "," $1ей просеке "],["^ (\\d+)-я [Пп]росека "," $1-й просеке "],["^ [Пп]росека "," просеке "],["^ (\\S+)ая [Ээ]стакада "," $1ой эстакаде "],["^ (\\S+)ья [Ээ]стакада "," $1ьей эстакаде "],["^ (\\S+)яя [Ээ]стакада "," $1ей эстакаде "],["^ (\\d+)-я (\\S+)ая [Ээ]стакада "," $1-й $2ой эстакаде "],["^ [Ээ]стакада "," эстакаде "],["^ (\\S+)ая [Мм]агистраль "," $1ой магистрали "],["^ (\\S+)ья [Мм]агистраль "," $1ьей магистрали "],["^ (\\S+)яя [Мм]агистраль "," $1ей магистрали "],["^ (\\S+)ая (\\S+)ая [Мм]агистраль "," $1ой $2ой магистрали "],["^ (\\d+)-я (\\S+)ая [Мм]агистраль "," $1-й $2ой магистрали "],["^ [Мм]агистраль "," магистрали "],["^ (\\S+)ая [Рр]азвязка "," $1ой развязке "],["^ (\\S+)ья [Рр]азвязка "," $1ьей развязке "],["^ (\\S+)яя [Рр]азвязка "," $1ей развязке "],["^ (\\d+)-я (\\S+)ая [Рр]азвязка "," $1-й $2ой развязке "],["^ [Рр]азвязка "," развязке "],["^ (\\S+)ая [Тт]расса "," $1ой трассе "],["^ (\\S+)ья [Тт]расса "," $1ьей трассе "],["^ (\\S+)яя [Тт]расса "," $1ей трассе "],["^ (\\d+)-я (\\S+)ая [Тт]расса "," $1-й $2ой трассе "],["^ [Тт]расса "," трассе "],["^ (\\S+)ая ([Аа]вто)?[Дд]орога "," $1ой $2дороге "],["^ (\\S+)ья ([Аа]вто)?[Дд]орога "," $1ьей $2дороге "],["^ (\\S+)яя ([Аа]вто)?[Дд]орога "," $1ей $2дороге "],["^ (\\S+)ая (\\S+)ая ([Аа]вто)?[Дд]орога "," $1ой $2ой $3дороге "],["^ (\\d+)-я (\\S+)ая ([Аа]вто)?[Дд]орога "," $1-й $2ой $3дороге "],["^ ([Аа]вто)?[Дд]орога "," $1дороге "],["^ (\\S+)ая [Дд]орожка "," $1ой дорожке "],["^ (\\S+)ья [Дд]орожка "," $1ьей дорожке "],["^ (\\S+)яя [Дд]орожка "," $1ей дорожке "],["^ (\\d+)-я (\\S+)ая [Дд]орожка "," $1-й $2ой дорожке "],["^ [Дд]орожка "," дорожке "],["^ (\\S+)во [Пп]оле "," $1ву полю "],["^ (\\S+)ая [Кк]оса "," $1ой косе "],["^ (\\S+)ая [Хх]орда "," $1ой хорде "],["^ (\\S+)[иоы]й [Пп]роток "," $1ому протоку "],["^ (\\S+н)ий [Бб]ульвар "," $1ему бульвару "],["^ (\\S+)[иоы]й [Бб]ульвар "," $1ому бульвару "],["^ (\\S+[иы]н) [Бб]ульвар "," $1у бульвару "],["^ (\\S+)[иоы]й (\\S+н)ий [Бб]ульвар "," $1ому $2ему бульвару "],["^ (\\S+н)ий (\\S+)[иоы]й [Бб]ульвар "," $1ему $2ому бульвару "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Бб]ульвар "," $1ому $2ому бульвару "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Бб]ульвар "," $1ому $2у бульвару "],["^ (\\d+)-й (\\S+н)ий [Бб]ульвар "," $1-му $2ему бульвару "],["^ (\\d+)-й (\\S+)[иоы]й [Бб]ульвар "," $1-му $2ому бульвару "],["^ (\\d+)-й (\\S+[иы]н) [Бб]ульвар "," $1-му $2у бульвару "],["^ [Бб]ульвар "," бульвару "],["^ [Дд]убл[её]р "," дублёру "],["^ (\\S+н)ий [Зз]аезд "," $1ему заезду "],["^ (\\S+)[иоы]й [Зз]аезд "," $1ому заезду "],["^ (\\S+[еёо]в) [Зз]аезд "," $1у заезду "],["^ (\\S+[иы]н) [Зз]аезд "," $1у заезду "],["^ (\\S+)[иоы]й (\\S+н)ий [Зз]аезд "," $1ому $2ему заезду "],["^ (\\S+н)ий (\\S+)[иоы]й [Зз]аезд "," $1ему $2ому заезду "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Зз]аезд "," $1ому $2ому заезду "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Зз]аезд "," $1ому $2у заезду "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Зз]аезд "," $1ому $2у заезду "],["^ (\\d+)-й (\\S+н)ий [Зз]аезд "," $1-му $2ему заезду "],["^ (\\d+)-й (\\S+)[иоы]й [Зз]аезд "," $1-му $2ому заезду "],["^ (\\d+)-й (\\S+[еёо]в) [Зз]аезд "," $1-му $2у заезду "],["^ (\\d+)-й (\\S+[иы]н) [Зз]аезд "," $1-му $2у заезду "],["^ [Зз]аезд "," заезду "],["^ (\\S+н)ий [Мм]ост "," $1ему мосту "],["^ (\\S+)[иоы]й [Мм]ост "," $1ому мосту "],["^ (\\S+[еёо]в) [Мм]ост "," $1у мосту "],["^ (\\S+[иы]н) [Мм]ост "," $1у мосту "],["^ (\\S+)[иоы]й (\\S+н)ий [Мм]ост "," $1ому $2ему мосту "],["^ (\\S+н)ий (\\S+)[иоы]й [Мм]ост "," $1ему $2ому мосту "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Мм]ост "," $1ому $2ому мосту "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Мм]ост "," $1ому $2у мосту "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Мм]ост "," $1ому $2у мосту "],["^ (\\d+)-й [Мм]ост "," $1-му мосту "],["^ (\\d+)-й (\\S+н)ий [Мм]ост "," $1-му $2ему мосту "],["^ (\\d+)-й (\\S+)[иоы]й [Мм]ост "," $1-му $2ому мосту "],["^ (\\d+)-й (\\S+[еёо]в) [Мм]ост "," $1-му $2у мосту "],["^ (\\d+)-й (\\S+[иы]н) [Мм]ост "," $1-му $2у мосту "],["^ [Мм]ост "," мосту "],["^ (\\S+н)ий [Оо]бход "," $1ему обходу "],["^ (\\S+)[иоы]й [Оо]бход "," $1ому обходу "],["^ [Оо]бход "," обходу "],["^ (\\S+н)ий [Пп]арк "," $1ему парку "],["^ (\\S+)[иоы]й [Пп]арк "," $1ому парку "],["^ (\\S+[иы]н) [Пп]арк "," $1у парку "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]арк "," $1ому $2ему парку "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]арк "," $1ему $2ому парку "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]арк "," $1ому $2ому парку "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]арк "," $1ому $2у парку "],["^ (\\d+)-й (\\S+н)ий [Пп]арк "," $1-му $2ему парку "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]арк "," $1-му $2ому парку "],["^ (\\d+)-й (\\S+[иы]н) [Пп]арк "," $1-му $2у парку "],["^ [Пп]арк "," парку "],["^ (\\S+)[иоы]й-(\\S+)[иоы]й [Пп]ереулок "," $1ому-$2ому переулку "],["^ (\\d+)-й (\\S+)[иоы]й-(\\S+)[иоы]й [Пп]ереулок "," $1-му $2ому-$3ому переулку "],["^ (\\S+н)ий [Пп]ереулок "," $1ему переулку "],["^ (\\S+)[иоы]й [Пп]ереулок "," $1ому переулку "],["^ (\\S+[еёо]в) [Пп]ереулок "," $1у переулку "],["^ (\\S+[иы]н) [Пп]ереулок "," $1у переулку "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]ереулок "," $1ому $2ему переулку "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]ереулок "," $1ему $2ому переулку "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]ереулок "," $1ому $2ому переулку "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Пп]ереулок "," $1ому $2у переулку "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]ереулок "," $1ому $2у переулку "],["^ (\\d+)-й [Пп]ереулок "," $1-му переулку "],["^ (\\d+)-й (\\S+н)ий [Пп]ереулок "," $1-му $2ему переулку "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]ереулок "," $1-му $2ому переулку "],["^ (\\d+)-й (\\S+[еёо]в) [Пп]ереулок "," $1-му $2у переулку "],["^ (\\d+)-й (\\S+[иы]н) [Пп]ереулок "," $1-му $2у переулку "],["^ [Пп]ереулок "," переулку "],["^ [Пп]одъезд "," подъезду "],["^ (\\S+[еёо]в)-(\\S+)[иоы]й [Пп]роезд "," $1у-$2ому проезду "],["^ (\\S+н)ий [Пп]роезд "," $1ему проезду "],["^ (\\S+)[иоы]й [Пп]роезд "," $1ому проезду "],["^ (\\S+[еёо]в) [Пп]роезд "," $1у проезду "],["^ (\\S+[иы]н) [Пп]роезд "," $1у проезду "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]роезд "," $1ому $2ему проезду "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]роезд "," $1ему $2ому проезду "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]роезд "," $1ому $2ому проезду "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Пп]роезд "," $1ому $2у проезду "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]роезд "," $1ому $2у проезду "],["^ (\\d+)-й [Пп]роезд "," $1-му проезду "],["^ (\\d+)-й (\\S+н)ий [Пп]роезд "," $1-му $2ему проезду "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]роезд "," $1-му $2ому проезду "],["^ (\\d+)-й (\\S+[еёо]в) [Пп]роезд "," $1-му $2у проезду "],["^ (\\d+)-й (\\S+[иы]н) [Пп]роезд "," $1-му $2у проезду "],["^ (\\d+)-й (\\S+н)ий (\\S+)[иоы]й [Пп]роезд "," $1-му $2ему $3ому проезду "],["^ (\\d+)-й (\\S+)[иоы]й (\\S+)[иоы]й [Пп]роезд "," $1-му $2ому $3ому проезду "],["^ [Пп]роезд "," проезду "],["^ (\\S+н)ий [Пп]роспект "," $1ему проспекту "],["^ (\\S+)[иоы]й [Пп]роспект "," $1ому проспекту "],["^ (\\S+[иы]н) [Пп]роспект "," $1у проспекту "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]роспект "," $1ому $2ему проспекту "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]роспект "," $1ему $2ому проспекту "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]роспект "," $1ому $2ому проспекту "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]роспект "," $1ому $2у проспекту "],["^ (\\d+)-й (\\S+н)ий [Пп]роспект "," $1-му $2ему проспекту "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]роспект "," $1-му $2ому проспекту "],["^ (\\d+)-й (\\S+[иы]н) [Пп]роспект "," $1-му $2у проспекту "],["^ [Пп]роспект "," проспекту "],["^ (\\S+н)ий [Пп]утепровод "," $1ему путепроводу "],["^ (\\S+)[иоы]й [Пп]утепровод "," $1ому путепроводу "],["^ (\\S+[иы]н) [Пп]утепровод "," $1у путепроводу "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]утепровод "," $1ому $2ему путепроводу "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]утепровод "," $1ему $2ому путепроводу "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]утепровод "," $1ому $2ому путепроводу "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]утепровод "," $1ому $2у путепроводу "],["^ (\\d+)-й (\\S+н)ий [Пп]утепровод "," $1-му $2ему путепроводу "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]утепровод "," $1-му $2ому путепроводу "],["^ (\\d+)-й (\\S+[иы]н) [Пп]утепровод "," $1-му $2у путепроводу "],["^ [Пп]утепровод "," путепроводу "],["^ (\\S+н)ий [Сс]пуск "," $1ему спуску "],["^ (\\S+)[иоы]й [Сс]пуск "," $1ому спуску "],["^ (\\S+[еёо]в) [Сс]пуск "," $1у спуску "],["^ (\\S+[иы]н) [Сс]пуск "," $1у спуску "],["^ (\\S+)[иоы]й (\\S+н)ий [Сс]пуск "," $1ому $2ему спуску "],["^ (\\S+н)ий (\\S+)[иоы]й [Сс]пуск "," $1ему $2ому спуску "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Сс]пуск "," $1ому $2ому спуску "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Сс]пуск "," $1ому $2у спуску "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Сс]пуск "," $1ому $2у спуску "],["^ (\\d+)-й (\\S+н)ий [Сс]пуск "," $1-му $2ему спуску "],["^ (\\d+)-й (\\S+)[иоы]й [Сс]пуск "," $1-му $2ому спуску "],["^ (\\d+)-й (\\S+[еёо]в) [Сс]пуск "," $1-му $2у спуску "],["^ (\\d+)-й (\\S+[иы]н) [Сс]пуск "," $1-му $2у спуску "],["^ [Сс]пуск "," спуску "],["^ (\\S+н)ий [Сс]ъезд "," $1ему съезду "],["^ (\\S+)[иоы]й [Сс]ъезд "," $1ому съезду "],["^ (\\S+[иы]н) [Сс]ъезд "," $1у съезду "],["^ (\\S+)[иоы]й (\\S+н)ий [Сс]ъезд "," $1ому $2ему съезду "],["^ (\\S+н)ий (\\S+)[иоы]й [Сс]ъезд "," $1ему $2ому съезду "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Сс]ъезд "," $1ому $2ому съезду "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Сс]ъезд "," $1ому $2у съезду "],["^ (\\d+)-й (\\S+н)ий [Сс]ъезд "," $1-му $2ему съезду "],["^ (\\d+)-й (\\S+)[иоы]й [Сс]ъезд "," $1-му $2ому съезду "],["^ (\\d+)-й (\\S+[иы]н) [Сс]ъезд "," $1-му $2у съезду "],["^ [Сс]ъезд "," съезду "],["^ (\\S+н)ий [Тт][уо]ннель "," $1ему тоннелю "],["^ (\\S+)[иоы]й [Тт][уо]ннель "," $1ому тоннелю "],["^ (\\S+[иы]н) [Тт][уо]ннель "," $1у тоннелю "],["^ (\\S+)[иоы]й (\\S+н)ий [Тт][уо]ннель "," $1ому $2ему тоннелю "],["^ (\\S+н)ий (\\S+)[иоы]й [Тт][уо]ннель "," $1ему $2ому тоннелю "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Тт][уо]ннель "," $1ому $2ому тоннелю "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Тт][уо]ннель "," $1ому $2у тоннелю "],["^ (\\d+)-й (\\S+н)ий [Тт][уо]ннель "," $1-му $2ему тоннелю "],["^ (\\d+)-й (\\S+)[иоы]й [Тт][уо]ннель "," $1-му $2ому тоннелю "],["^ (\\d+)-й (\\S+[иы]н) [Тт][уо]ннель "," $1-му $2у тоннелю "],["^ [Тт][уо]ннель "," тоннелю "],["^ (\\S+н)ий [Тт]ракт "," $1ему тракту "],["^ (\\S+)[иоы]й [Тт]ракт "," $1ому тракту "],["^ (\\S+[еёо]в) [Тт]ракт "," $1у тракту "],["^ (\\S+[иы]н) [Тт]ракт "," $1у тракту "],["^ (\\S+)[иоы]й (\\S+н)ий [Тт]ракт "," $1ому $2ему тракту "],["^ (\\S+н)ий (\\S+)[иоы]й [Тт]ракт "," $1ему $2ому тракту "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Тт]ракт "," $1ому $2ому тракту "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Тт]ракт "," $1ому $2у тракту "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Тт]ракт "," $1ому $2у тракту "],["^ (\\d+)-й (\\S+н)ий [Тт]ракт "," $1-му $2ему тракту "],["^ (\\d+)-й (\\S+)[иоы]й [Тт]ракт "," $1-му $2ому тракту "],["^ (\\d+)-й (\\S+[еёо]в) [Тт]ракт "," $1-му $2у тракту "],["^ (\\d+)-й (\\S+[иы]н) [Тт]ракт "," $1-му $2у тракту "],["^ [Тт]ракт "," тракту "],["^ (\\S+н)ий [Тт]упик "," $1ему тупику "],["^ (\\S+)[иоы]й [Тт]упик "," $1ому тупику "],["^ (\\S+[еёо]в) [Тт]упик "," $1у тупику "],["^ (\\S+[иы]н) [Тт]упик "," $1у тупику "],["^ (\\S+)[иоы]й (\\S+н)ий [Тт]упик "," $1ому $2ему тупику "],["^ (\\S+н)ий (\\S+)[иоы]й [Тт]упик "," $1ему $2ому тупику "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Тт]упик "," $1ому $2ому тупику "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Тт]упик "," $1ому $2у тупику "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Тт]упик "," $1ому $2у тупику "],["^ (\\d+)-й [Тт]упик "," $1-му тупику "],["^ (\\d+)-й (\\S+н)ий [Тт]упик "," $1-му $2ему тупику "],["^ (\\d+)-й (\\S+)[иоы]й [Тт]упик "," $1-му $2ому тупику "],["^ (\\d+)-й (\\S+[еёо]в) [Тт]упик "," $1-му $2у тупику "],["^ (\\d+)-й (\\S+[иы]н) [Тт]упик "," $1-му $2у тупику "],["^ [Тт]упик "," тупику "],["^ (\\S+[ео])е ([Пп]олу)?[Кк]ольцо "," $1му $2кольцу "],["^ (\\S+ье) ([Пп]олу)?[Кк]ольцо "," $1му $2кольцу "],["^ (\\S+[ео])е (\\S+[ео])е ([Пп]олу)?[Кк]ольцо "," $1му $2му $3кольцу "],["^ (\\S+ье) (\\S+[ео])е ([Пп]олу)?[Кк]ольцо "," $1му $2му $3кольцу "],["^ (\\d+)-е (\\S+[ео])е ([Пп]олу)?[Кк]ольцо "," $1-му $2му $3кольцу "],["^ (\\d+)-е (\\S+ье) ([Пп]олу)?[Кк]ольцо "," $1-му $2му $3кольцу "],["^ ([Пп]олу)?[Кк]ольцо "," $1кольцу "],["^ (\\S+[ео])е [Шш]оссе "," $1му шоссе "],["^ (\\S+ье) [Шш]оссе "," $1му шоссе "],["^ (\\S+[ео])е (\\S+[ео])е [Шш]оссе "," $1му $2му шоссе "],["^ (\\S+ье) (\\S+[ео])е [Шш]оссе "," $1му $2му шоссе "],["^ (\\d+)-е (\\S+[ео])е [Шш]оссе "," $1-му $2му шоссе "],["^ (\\d+)-е (\\S+ье) [Шш]оссе "," $1-му $2му шоссе "],[" ([Тт])ретому "," $1ретьему "],["([жч])ому ","$1ьему "],["([жч])ой ","$1ей "]],
2167genitive:[['^ ([«"])'," трасса $1"],["^ (\\S+)ая [Аа]ллея "," $1ой аллеи "],["^ (\\S+)ья [Аа]ллея "," $1ьей аллеи "],["^ (\\S+)яя [Аа]ллея "," $1ей аллеи "],["^ (\\d+)-я (\\S+)ая [Аа]ллея "," $1-й $2ой аллеи "],["^ [Аа]ллея "," аллеи "],["^ (\\S+)ая-(\\S+)ая [Уу]лица "," $1ой-$2ой улицы "],["^ (\\S+)ая [Уу]лица "," $1ой улицы "],["^ (\\S+)ья [Уу]лица "," $1ьей улицы "],["^ (\\S+)яя [Уу]лица "," $1ей улицы "],["^ (\\d+)-я [Уу]лица "," $1-й улицы "],["^ (\\d+)-я (\\S+)ая [Уу]лица "," $1-й $2ой улицы "],["^ (\\S+)ая (\\S+)ая [Уу]лица "," $1ой $2ой улицы "],["^ (\\S+[вн])а [Уу]лица "," $1ой улицы "],["^ (\\S+)ая (\\S+[вн])а [Уу]лица "," $1ой $2ой улицы "],["^ Даньславля [Уу]лица "," Даньславлей улицы "],["^ Добрыня [Уу]лица "," Добрыней улицы "],["^ Людогоща [Уу]лица "," Людогощей улицы "],["^ [Уу]лица "," улицы "],["^ (\\d+)-я [Лл]иния "," $1-й линии "],["^ (\\d+)-(\\d+)-я [Лл]иния "," $1-$2-й линии "],["^ (\\S+)ая [Лл]иния "," $1ой линии "],["^ (\\S+)ья [Лл]иния "," $1ьей линии "],["^ (\\S+)яя [Лл]иния "," $1ей линии "],["^ (\\d+)-я (\\S+)ая [Лл]иния "," $1-й $2ой линии "],["^ [Лл]иния "," линии "],["^ (\\d+)-(\\d+)-я [Лл]инии "," $1-$2-й линий "],["^ (\\S+)ая [Нн]абережная "," $1ой набережной "],["^ (\\S+)ья [Нн]абережная "," $1ьей набережной "],["^ (\\S+)яя [Нн]абережная "," $1ей набережной "],["^ (\\d+)-я (\\S+)ая [Нн]абережная "," $1-й $2ой набережной "],["^ [Нн]абережная "," набережной "],["^ (\\S+)ая [Пп]лощадь "," $1ой площади "],["^ (\\S+)ья [Пп]лощадь "," $1ьей площади "],["^ (\\S+)яя [Пп]лощадь "," $1ей площади "],["^ (\\S+[вн])а [Пп]лощадь "," $1ой площади "],["^ (\\d+)-я (\\S+)ая [Пп]лощадь "," $1-й $2ой площади "],["^ [Пп]лощадь "," площади "],["^ (\\S+)ая [Пп]росека "," $1ой просеки "],["^ (\\S+)ья [Пп]росека "," $1ьей просеки "],["^ (\\S+)яя [Пп]росека "," $1ей просеки "],["^ (\\d+)-я [Пп]росека "," $1-й просеки "],["^ [Пп]росека "," просеки "],["^ (\\S+)ая [Ээ]стакада "," $1ой эстакады "],["^ (\\S+)ья [Ээ]стакада "," $1ьей эстакады "],["^ (\\S+)яя [Ээ]стакада "," $1ей эстакады "],["^ (\\d+)-я (\\S+)ая [Ээ]стакада "," $1-й $2ой эстакады "],["^ [Ээ]стакада "," эстакады "],["^ (\\S+)ая [Мм]агистраль "," $1ой магистрали "],["^ (\\S+)ья [Мм]агистраль "," $1ьей магистрали "],["^ (\\S+)яя [Мм]агистраль "," $1ей магистрали "],["^ (\\S+)ая (\\S+)ая [Мм]агистраль "," $1ой $2ой магистрали "],["^ (\\d+)-я (\\S+)ая [Мм]агистраль "," $1-й $2ой магистрали "],["^ [Мм]агистраль "," магистрали "],["^ (\\S+)ая [Рр]азвязка "," $1ой развязки "],["^ (\\S+)ья [Рр]азвязка "," $1ьей развязки "],["^ (\\S+)яя [Рр]азвязка "," $1ей развязки "],["^ (\\d+)-я (\\S+)ая [Рр]азвязка "," $1-й $2ой развязки "],["^ [Рр]азвязка "," развязки "],["^ (\\S+)ая [Тт]расса "," $1ой трассы "],["^ (\\S+)ья [Тт]расса "," $1ьей трассы "],["^ (\\S+)яя [Тт]расса "," $1ей трассы "],["^ (\\d+)-я (\\S+)ая [Тт]расса "," $1-й $2ой трассы "],["^ [Тт]расса "," трассы "],["^ (\\S+)ая ([Аа]вто)?[Дд]орога "," $1ой $2дороги "],["^ (\\S+)ья ([Аа]вто)?[Дд]орога "," $1ьей $2дороги "],["^ (\\S+)яя ([Аа]вто)?[Дд]орога "," $1ей $2дороги "],["^ (\\S+)ая (\\S+)ая ([Аа]вто)?[Дд]орога "," $1ой $2ой $3дороги "],["^ (\\d+)-я (\\S+)ая ([Аа]вто)?[Дд]орога "," $1-й $2ой $3дороги "],["^ ([Аа]вто)?[Дд]орога "," $1дороги "],["^ (\\S+)ая [Дд]орожка "," $1ой дорожки "],["^ (\\S+)ья [Дд]орожка "," $1ьей дорожки "],["^ (\\S+)яя [Дд]орожка "," $1ей дорожки "],["^ (\\d+)-я (\\S+)ая [Дд]орожка "," $1-й $2ой дорожки "],["^ [Дд]орожка "," дорожки "],["^ (\\S+)во [Пп]оле "," $1ва поля "],["^ (\\S+)ая [Кк]оса "," $1ой косы "],["^ (\\S+)ая [Хх]орда "," $1ой хорды "],["^ (\\S+)[иоы]й [Пп]роток "," $1ого протока "],["^ (\\S+н)ий [Бб]ульвар "," $1его бульвара "],["^ (\\S+)[иоы]й [Бб]ульвар "," $1ого бульвара "],["^ (\\S+[иы]н) [Бб]ульвар "," $1ого бульвара "],["^ (\\S+)[иоы]й (\\S+н)ий [Бб]ульвар "," $1ого $2его бульвара "],["^ (\\S+н)ий (\\S+)[иоы]й [Бб]ульвар "," $1его $2ого бульвара "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Бб]ульвар "," $1ого $2ого бульвара "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Бб]ульвар "," $1ого $2ого бульвара "],["^ (\\d+)-й (\\S+н)ий [Бб]ульвар "," $1-го $2его бульвара "],["^ (\\d+)-й (\\S+)[иоы]й [Бб]ульвар "," $1-го $2ого бульвара "],["^ (\\d+)-й (\\S+[иы]н) [Бб]ульвар "," $1-го $2ого бульвара "],["^ [Бб]ульвар "," бульвара "],["^ [Дд]убл[её]р "," дублёра "],["^ (\\S+н)ий [Зз]аезд "," $1его заезда "],["^ (\\S+)[иоы]й [Зз]аезд "," $1ого заезда "],["^ (\\S+[еёо]в) [Зз]аезд "," $1а заезда "],["^ (\\S+[иы]н) [Зз]аезд "," $1а заезда "],["^ (\\S+)[иоы]й (\\S+н)ий [Зз]аезд "," $1ого $2его заезда "],["^ (\\S+н)ий (\\S+)[иоы]й [Зз]аезд "," $1его $2ого заезда "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Зз]аезд "," $1ого $2ого заезда "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Зз]аезд "," $1ого $2а заезда "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Зз]аезд "," $1ого $2а заезда "],["^ (\\d+)-й (\\S+н)ий [Зз]аезд "," $1-го $2его заезда "],["^ (\\d+)-й (\\S+)[иоы]й [Зз]аезд "," $1-го $2ого заезда "],["^ (\\d+)-й (\\S+[еёо]в) [Зз]аезд "," $1-го $2а заезда "],["^ (\\d+)-й (\\S+[иы]н) [Зз]аезд "," $1-го $2а заезда "],["^ [Зз]аезд "," заезда "],["^ (\\S+н)ий [Мм]ост "," $1его моста "],["^ (\\S+)[иоы]й [Мм]ост "," $1ого моста "],["^ (\\S+[еёо]в) [Мм]ост "," $1а моста "],["^ (\\S+[иы]н) [Мм]ост "," $1а моста "],["^ (\\S+)[иоы]й (\\S+н)ий [Мм]ост "," $1ого $2его моста "],["^ (\\S+н)ий (\\S+)[иоы]й [Мм]ост "," $1его $2ого моста "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Мм]ост "," $1ого $2ого моста "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Мм]ост "," $1ого $2а моста "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Мм]ост "," $1ого $2а моста "],["^ (\\d+)-й [Мм]ост "," $1-го моста "],["^ (\\d+)-й (\\S+н)ий [Мм]ост "," $1-го $2его моста "],["^ (\\d+)-й (\\S+)[иоы]й [Мм]ост "," $1-го $2ого моста "],["^ (\\d+)-й (\\S+[еёо]в) [Мм]ост "," $1-го $2а моста "],["^ (\\d+)-й (\\S+[иы]н) [Мм]ост "," $1-го $2а моста "],["^ [Мм]ост "," моста "],["^ (\\S+н)ий [Оо]бход "," $1его обхода "],["^ (\\S+)[иоы]й [Оо]бход "," $1ого обхода "],["^ [Оо]бход "," обхода "],["^ (\\S+н)ий [Пп]арк "," $1его парка "],["^ (\\S+)[иоы]й [Пп]арк "," $1ого парка "],["^ (\\S+[иы]н) [Пп]арк "," $1ого парка "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]арк "," $1ого $2его парка "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]арк "," $1его $2ого парка "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]арк "," $1ого $2ого парка "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]арк "," $1ого $2ого парка "],["^ (\\d+)-й (\\S+н)ий [Пп]арк "," $1-го $2его парка "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]арк "," $1-го $2ого парка "],["^ (\\d+)-й (\\S+[иы]н) [Пп]арк "," $1-го $2ого парка "],["^ [Пп]арк "," парка "],["^ (\\S+)[иоы]й-(\\S+)[иоы]й [Пп]ереулок "," $1ого-$2ого переулка "],["^ (\\d+)-й (\\S+)[иоы]й-(\\S+)[иоы]й [Пп]ереулок "," $1-го $2ого-$3ого переулка "],["^ (\\S+н)ий [Пп]ереулок "," $1его переулка "],["^ (\\S+)[иоы]й [Пп]ереулок "," $1ого переулка "],["^ (\\S+[еёо]в) [Пп]ереулок "," $1а переулка "],["^ (\\S+[иы]н) [Пп]ереулок "," $1а переулка "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]ереулок "," $1ого $2его переулка "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]ереулок "," $1его $2ого переулка "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]ереулок "," $1ого $2ого переулка "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Пп]ереулок "," $1ого $2а переулка "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]ереулок "," $1ого $2а переулка "],["^ (\\d+)-й [Пп]ереулок "," $1-го переулка "],["^ (\\d+)-й (\\S+н)ий [Пп]ереулок "," $1-го $2его переулка "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]ереулок "," $1-го $2ого переулка "],["^ (\\d+)-й (\\S+[еёо]в) [Пп]ереулок "," $1-го $2а переулка "],["^ (\\d+)-й (\\S+[иы]н) [Пп]ереулок "," $1-го $2а переулка "],["^ [Пп]ереулок "," переулка "],["^ [Пп]одъезд "," подъезда "],["^ (\\S+[еёо]в)-(\\S+)[иоы]й [Пп]роезд "," $1а-$2ого проезда "],["^ (\\S+н)ий [Пп]роезд "," $1его проезда "],["^ (\\S+)[иоы]й [Пп]роезд "," $1ого проезда "],["^ (\\S+[еёо]в) [Пп]роезд "," $1а проезда "],["^ (\\S+[иы]н) [Пп]роезд "," $1а проезда "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]роезд "," $1ого $2его проезда "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]роезд "," $1его $2ого проезда "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]роезд "," $1ого $2ого проезда "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Пп]роезд "," $1ого $2а проезда "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]роезд "," $1ого $2а проезда "],["^ (\\d+)-й [Пп]роезд "," $1-го проезда "],["^ (\\d+)-й (\\S+н)ий [Пп]роезд "," $1-го $2его проезда "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]роезд "," $1-го $2ого проезда "],["^ (\\d+)-й (\\S+[еёо]в) [Пп]роезд "," $1-го $2а проезда "],["^ (\\d+)-й (\\S+[иы]н) [Пп]роезд "," $1-го $2а проезда "],["^ (\\d+)-й (\\S+н)ий (\\S+)[иоы]й [Пп]роезд "," $1-го $2его $3ого проезда "],["^ (\\d+)-й (\\S+)[иоы]й (\\S+)[иоы]й [Пп]роезд "," $1-го $2ого $3ого проезда "],["^ [Пп]роезд "," проезда "],["^ (\\S+н)ий [Пп]роспект "," $1его проспекта "],["^ (\\S+)[иоы]й [Пп]роспект "," $1ого проспекта "],["^ (\\S+[иы]н) [Пп]роспект "," $1ого проспекта "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]роспект "," $1ого $2его проспекта "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]роспект "," $1его $2ого проспекта "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]роспект "," $1ого $2ого проспекта "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]роспект "," $1ого $2ого проспекта "],["^ (\\d+)-й (\\S+н)ий [Пп]роспект "," $1-го $2его проспекта "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]роспект "," $1-го $2ого проспекта "],["^ (\\d+)-й (\\S+[иы]н) [Пп]роспект "," $1-го $2ого проспекта "],["^ [Пп]роспект "," проспекта "],["^ (\\S+н)ий [Пп]утепровод "," $1его путепровода "],["^ (\\S+)[иоы]й [Пп]утепровод "," $1ого путепровода "],["^ (\\S+[иы]н) [Пп]утепровод "," $1ого путепровода "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]утепровод "," $1ого $2его путепровода "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]утепровод "," $1его $2ого путепровода "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]утепровод "," $1ого $2ого путепровода "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]утепровод "," $1ого $2ого путепровода "],["^ (\\d+)-й (\\S+н)ий [Пп]утепровод "," $1-го $2его путепровода "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]утепровод "," $1-го $2ого путепровода "],["^ (\\d+)-й (\\S+[иы]н) [Пп]утепровод "," $1-го $2ого путепровода "],["^ [Пп]утепровод "," путепровода "],["^ (\\S+н)ий [Сс]пуск "," $1его спуска "],["^ (\\S+)[иоы]й [Сс]пуск "," $1ого спуска "],["^ (\\S+[еёо]в) [Сс]пуск "," $1а спуска "],["^ (\\S+[иы]н) [Сс]пуск "," $1а спуска "],["^ (\\S+)[иоы]й (\\S+н)ий [Сс]пуск "," $1ого $2его спуска "],["^ (\\S+н)ий (\\S+)[иоы]й [Сс]пуск "," $1его $2ого спуска "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Сс]пуск "," $1ого $2ого спуска "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Сс]пуск "," $1ого $2а спуска "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Сс]пуск "," $1ого $2а спуска "],["^ (\\d+)-й (\\S+н)ий [Сс]пуск "," $1-го $2его спуска "],["^ (\\d+)-й (\\S+)[иоы]й [Сс]пуск "," $1-го $2ого спуска "],["^ (\\d+)-й (\\S+[еёо]в) [Сс]пуск "," $1-го $2а спуска "],["^ (\\d+)-й (\\S+[иы]н) [Сс]пуск "," $1-го $2а спуска "],["^ [Сс]пуск "," спуска "],["^ (\\S+н)ий [Сс]ъезд "," $1его съезда "],["^ (\\S+)[иоы]й [Сс]ъезд "," $1ого съезда "],["^ (\\S+[иы]н) [Сс]ъезд "," $1ого съезда "],["^ (\\S+)[иоы]й (\\S+н)ий [Сс]ъезд "," $1ого $2его съезда "],["^ (\\S+н)ий (\\S+)[иоы]й [Сс]ъезд "," $1его $2ого съезда "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Сс]ъезд "," $1ого $2ого съезда "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Сс]ъезд "," $1ого $2ого съезда "],["^ (\\d+)-й (\\S+н)ий [Сс]ъезд "," $1-го $2его съезда "],["^ (\\d+)-й (\\S+)[иоы]й [Сс]ъезд "," $1-го $2ого съезда "],["^ (\\d+)-й (\\S+[иы]н) [Сс]ъезд "," $1-го $2ого съезда "],["^ [Сс]ъезд "," съезда "],["^ (\\S+н)ий [Тт][уо]ннель "," $1его тоннеля "],["^ (\\S+)[иоы]й [Тт][уо]ннель "," $1ого тоннеля "],["^ (\\S+[иы]н) [Тт][уо]ннель "," $1ого тоннеля "],["^ (\\S+)[иоы]й (\\S+н)ий [Тт][уо]ннель "," $1ого $2его тоннеля "],["^ (\\S+н)ий (\\S+)[иоы]й [Тт][уо]ннель "," $1его $2ого тоннеля "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Тт][уо]ннель "," $1ого $2ого тоннеля "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Тт][уо]ннель "," $1ого $2ого тоннеля "],["^ (\\d+)-й (\\S+н)ий [Тт][уо]ннель "," $1-го $2его тоннеля "],["^ (\\d+)-й (\\S+)[иоы]й [Тт][уо]ннель "," $1-го $2ого тоннеля "],["^ (\\d+)-й (\\S+[иы]н) [Тт][уо]ннель "," $1-го $2ого тоннеля "],["^ [Тт][уо]ннель "," тоннеля "],["^ (\\S+н)ий [Тт]ракт "," $1ем тракта "],["^ (\\S+)[иоы]й [Тт]ракт "," $1ого тракта "],["^ (\\S+[еёо]в) [Тт]ракт "," $1а тракта "],["^ (\\S+[иы]н) [Тт]ракт "," $1а тракта "],["^ (\\S+)[иоы]й (\\S+н)ий [Тт]ракт "," $1ого $2его тракта "],["^ (\\S+н)ий (\\S+)[иоы]й [Тт]ракт "," $1его $2ого тракта "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Тт]ракт "," $1ого $2ого тракта "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Тт]ракт "," $1ого $2а тракта "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Тт]ракт "," $1ого $2а тракта "],["^ (\\d+)-й (\\S+н)ий [Тт]ракт "," $1-го $2его тракта "],["^ (\\d+)-й (\\S+)[иоы]й [Тт]ракт "," $1-го $2ого тракта "],["^ (\\d+)-й (\\S+[еёо]в) [Тт]ракт "," $1-го $2а тракта "],["^ (\\d+)-й (\\S+[иы]н) [Тт]ракт "," $1-го $2а тракта "],["^ [Тт]ракт "," тракта "],["^ (\\S+н)ий [Тт]упик "," $1его тупика "],["^ (\\S+)[иоы]й [Тт]упик "," $1ого тупика "],["^ (\\S+[еёо]в) [Тт]упик "," $1а тупика "],["^ (\\S+[иы]н) [Тт]упик "," $1а тупика "],["^ (\\S+)[иоы]й (\\S+н)ий [Тт]упик "," $1ого $2его тупика "],["^ (\\S+н)ий (\\S+)[иоы]й [Тт]упик "," $1его $2ого тупика "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Тт]упик "," $1ого $2ого тупика "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Тт]упик "," $1ого $2а тупика "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Тт]упик "," $1ого $2а тупика "],["^ (\\d+)-й [Тт]упик "," $1-го тупика "],["^ (\\d+)-й (\\S+н)ий [Тт]упик "," $1-го $2его тупика "],["^ (\\d+)-й (\\S+)[иоы]й [Тт]упик "," $1-го $2ого тупика "],["^ (\\d+)-й (\\S+[еёо]в) [Тт]упик "," $1-го $2а тупика "],["^ (\\d+)-й (\\S+[иы]н) [Тт]упик "," $1-го $2а тупика "],["^ [Тт]упик "," тупика "],["^ (\\S+[ео])е ([Пп]олу)?[Кк]ольцо "," $1го $2кольца "],["^ (\\S+ье) ([Пп]олу)?[Кк]ольцо "," $1го $2кольца "],["^ (\\S+[ео])е (\\S+[ео])е ([Пп]олу)?[Кк]ольцо "," $1го $2го $3кольца "],["^ (\\S+ье) (\\S+[ео])е ([Пп]олу)?[Кк]ольцо "," $1го $2го $3кольца "],["^ (\\d+)-е (\\S+[ео])е ([Пп]олу)?[Кк]ольцо "," $1-го $2го $3кольца "],["^ (\\d+)-е (\\S+ье) ([Пп]олу)?[Кк]ольцо "," $1-го $2го $3кольца "],["^ ([Пп]олу)?[Кк]ольцо "," $1кольца "],["^ (\\S+[ео])е [Шш]оссе "," $1го шоссе "],["^ (\\S+ье) [Шш]оссе "," $1го шоссе "],["^ (\\S+[ео])е (\\S+[ео])е [Шш]оссе "," $1го $2го шоссе "],["^ (\\S+ье) (\\S+[ео])е [Шш]оссе "," $1го $2го шоссе "],["^ (\\d+)-е (\\S+[ео])е [Шш]оссе "," $1-го $2го шоссе "],["^ (\\d+)-е (\\S+ье) [Шш]оссе "," $1-го $2го шоссе "],[" ([Тт])ретого "," $1ретьего "],["([жч])ого ","$1ьего "]],prepositional:[['^ ([«"])'," трасса $1"],["^ (\\S+)ая [Аа]ллея "," $1ой аллее "],["^ (\\S+)ья [Аа]ллея "," $1ьей аллее "],["^ (\\S+)яя [Аа]ллея "," $1ей аллее "],["^ (\\d+)-я (\\S+)ая [Аа]ллея "," $1-й $2ой аллее "],["^ [Аа]ллея "," аллее "],["^ (\\S+)ая-(\\S+)ая [Уу]лица "," $1ой-$2ой улице "],["^ (\\S+)ая [Уу]лица "," $1ой улице "],["^ (\\S+)ья [Уу]лица "," $1ьей улице "],["^ (\\S+)яя [Уу]лица "," $1ей улице "],["^ (\\d+)-я [Уу]лица "," $1-й улице "],["^ (\\d+)-я (\\S+)ая [Уу]лица "," $1-й $2ой улице "],["^ (\\S+)ая (\\S+)ая [Уу]лица "," $1ой $2ой улице "],["^ (\\S+[вн])а [Уу]лица "," $1ой улице "],["^ (\\S+)ая (\\S+[вн])а [Уу]лица "," $1ой $2ой улице "],["^ Даньславля [Уу]лица "," Даньславлей улице "],["^ Добрыня [Уу]лица "," Добрыней улице "],["^ Людогоща [Уу]лица "," Людогощей улице "],["^ [Уу]лица "," улице "],["^ (\\d+)-я [Лл]иния "," $1-й линии "],["^ (\\d+)-(\\d+)-я [Лл]иния "," $1-$2-й линии "],["^ (\\S+)ая [Лл]иния "," $1ой линии "],["^ (\\S+)ья [Лл]иния "," $1ьей линии "],["^ (\\S+)яя [Лл]иния "," $1ей линии "],["^ (\\d+)-я (\\S+)ая [Лл]иния "," $1-й $2ой линии "],["^ [Лл]иния "," линии "],["^ (\\d+)-(\\d+)-я [Лл]инии "," $1-$2-й линиях "],["^ (\\S+)ая [Нн]абережная "," $1ой набережной "],["^ (\\S+)ья [Нн]абережная "," $1ьей набережной "],["^ (\\S+)яя [Нн]абережная "," $1ей набережной "],["^ (\\d+)-я (\\S+)ая [Нн]абережная "," $1-й $2ой набережной "],["^ [Нн]абережная "," набережной "],["^ (\\S+)ая [Пп]лощадь "," $1ой площади "],["^ (\\S+)ья [Пп]лощадь "," $1ьей площади "],["^ (\\S+)яя [Пп]лощадь "," $1ей площади "],["^ (\\S+[вн])а [Пп]лощадь "," $1ой площади "],["^ (\\d+)-я (\\S+)ая [Пп]лощадь "," $1-й $2ой площади "],["^ [Пп]лощадь "," площади "],["^ (\\S+)ая [Пп]росека "," $1ой просеке "],["^ (\\S+)ья [Пп]росека "," $1ьей просеке "],["^ (\\S+)яя [Пп]росека "," $1ей просеке "],["^ (\\d+)-я [Пп]росека "," $1-й просеке "],["^ [Пп]росека "," просеке "],["^ (\\S+)ая [Ээ]стакада "," $1ой эстакаде "],["^ (\\S+)ья [Ээ]стакада "," $1ьей эстакаде "],["^ (\\S+)яя [Ээ]стакада "," $1ей эстакаде "],["^ (\\d+)-я (\\S+)ая [Ээ]стакада "," $1-й $2ой эстакаде "],["^ [Ээ]стакада "," эстакаде "],["^ (\\S+)ая [Мм]агистраль "," $1ой магистрали "],["^ (\\S+)ья [Мм]агистраль "," $1ьей магистрали "],["^ (\\S+)яя [Мм]агистраль "," $1ей магистрали "],["^ (\\S+)ая (\\S+)ая [Мм]агистраль "," $1ой $2ой магистрали "],["^ (\\d+)-я (\\S+)ая [Мм]агистраль "," $1-й $2ой магистрали "],["^ [Мм]агистраль "," магистрали "],["^ (\\S+)ая [Рр]азвязка "," $1ой развязке "],["^ (\\S+)ья [Рр]азвязка "," $1ьей развязке "],["^ (\\S+)яя [Рр]азвязка "," $1ей развязке "],["^ (\\d+)-я (\\S+)ая [Рр]азвязка "," $1-й $2ой развязке "],["^ [Рр]азвязка "," развязке "],["^ (\\S+)ая [Тт]расса "," $1ой трассе "],["^ (\\S+)ья [Тт]расса "," $1ьей трассе "],["^ (\\S+)яя [Тт]расса "," $1ей трассе "],["^ (\\d+)-я (\\S+)ая [Тт]расса "," $1-й $2ой трассе "],["^ [Тт]расса "," трассе "],["^ (\\S+)ая ([Аа]вто)?[Дд]орога "," $1ой $2дороге "],["^ (\\S+)ья ([Аа]вто)?[Дд]орога "," $1ьей $2дороге "],["^ (\\S+)яя ([Аа]вто)?[Дд]орога "," $1ей $2дороге "],["^ (\\S+)ая (\\S+)ая ([Аа]вто)?[Дд]орога "," $1ой $2ой $3дороге "],["^ (\\d+)-я (\\S+)ая ([Аа]вто)?[Дд]орога "," $1-й $2ой $3дороге "],["^ ([Аа]вто)?[Дд]орога "," $1дороге "],["^ (\\S+)ая [Дд]орожка "," $1ой дорожке "],["^ (\\S+)ья [Дд]орожка "," $1ьей дорожке "],["^ (\\S+)яя [Дд]орожка "," $1ей дорожке "],["^ (\\d+)-я (\\S+)ая [Дд]орожка "," $1-й $2ой дорожке "],["^ [Дд]орожка "," дорожке "],["^ (\\S+)во [Пп]оле "," $1вом поле "],["^ (\\S+)ая [Кк]оса "," $1ой косе "],["^ (\\S+)ая [Хх]орда "," $1ой хорде "],["^ (\\S+)[иоы]й [Пп]роток "," $1ом протоке "],["^ (\\S+н)ий [Бб]ульвар "," $1ем бульваре "],["^ (\\S+)[иоы]й [Бб]ульвар "," $1ом бульваре "],["^ (\\S+[иы]н) [Бб]ульвар "," $1ом бульваре "],["^ (\\S+)[иоы]й (\\S+н)ий [Бб]ульвар "," $1ом $2ем бульваре "],["^ (\\S+н)ий (\\S+)[иоы]й [Бб]ульвар "," $1ем $2ом бульваре "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Бб]ульвар "," $1ом $2ом бульваре "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Бб]ульвар "," $1ом $2ом бульваре "],["^ (\\d+)-й (\\S+н)ий [Бб]ульвар "," $1-м $2ем бульваре "],["^ (\\d+)-й (\\S+)[иоы]й [Бб]ульвар "," $1-м $2ом бульваре "],["^ (\\d+)-й (\\S+[иы]н) [Бб]ульвар "," $1-м $2ом бульваре "],["^ [Бб]ульвар "," бульваре "],["^ [Дд]убл[её]р "," дублёре "],["^ (\\S+н)ий [Зз]аезд "," $1ем заезде "],["^ (\\S+)[иоы]й [Зз]аезд "," $1ом заезде "],["^ (\\S+[еёо]в) [Зз]аезд "," $1ом заезде "],["^ (\\S+[иы]н) [Зз]аезд "," $1ом заезде "],["^ (\\S+)[иоы]й (\\S+н)ий [Зз]аезд "," $1ом $2ем заезде "],["^ (\\S+н)ий (\\S+)[иоы]й [Зз]аезд "," $1ем $2ом заезде "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Зз]аезд "," $1ом $2ом заезде "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Зз]аезд "," $1ом $2ом заезде "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Зз]аезд "," $1ом $2ом заезде "],["^ (\\d+)-й (\\S+н)ий [Зз]аезд "," $1-м $2ем заезде "],["^ (\\d+)-й (\\S+)[иоы]й [Зз]аезд "," $1-м $2ом заезде "],["^ (\\d+)-й (\\S+[еёо]в) [Зз]аезд "," $1-м $2ом заезде "],["^ (\\d+)-й (\\S+[иы]н) [Зз]аезд "," $1-м $2ом заезде "],["^ [Зз]аезд "," заезде "],["^ (\\S+н)ий [Мм]ост "," $1ем мосту "],["^ (\\S+)[иоы]й [Мм]ост "," $1ом мосту "],["^ (\\S+[еёо]в) [Мм]ост "," $1ом мосту "],["^ (\\S+[иы]н) [Мм]ост "," $1ом мосту "],["^ (\\S+)[иоы]й (\\S+н)ий [Мм]ост "," $1ом $2ем мосту "],["^ (\\S+н)ий (\\S+)[иоы]й [Мм]ост "," $1ем $2ом мосту "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Мм]ост "," $1ом $2ом мосту "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Мм]ост "," $1ом $2ом мосту "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Мм]ост "," $1ом $2ом мосту "],["^ (\\d+)-й [Мм]ост "," $1-м мосту "],["^ (\\d+)-й (\\S+н)ий [Мм]ост "," $1-м $2ем мосту "],["^ (\\d+)-й (\\S+)[иоы]й [Мм]ост "," $1-м $2ом мосту "],["^ (\\d+)-й (\\S+[еёо]в) [Мм]ост "," $1-м $2ом мосту "],["^ (\\d+)-й (\\S+[иы]н) [Мм]ост "," $1-м $2ом мосту "],["^ [Мм]ост "," мосту "],["^ (\\S+н)ий [Оо]бход "," $1ем обходе "],["^ (\\S+)[иоы]й [Оо]бход "," $1ом обходе "],["^ [Оо]бход "," обходе "],["^ (\\S+н)ий [Пп]арк "," $1ем парке "],["^ (\\S+)[иоы]й [Пп]арк "," $1ом парке "],["^ (\\S+[иы]н) [Пп]арк "," $1ом парке "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]арк "," $1ом $2ем парке "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]арк "," $1ем $2ом парке "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]арк "," $1ом $2ом парке "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]арк "," $1ом $2ом парке "],["^ (\\d+)-й (\\S+н)ий [Пп]арк "," $1-м $2ем парке "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]арк "," $1-м $2ом парке "],["^ (\\d+)-й (\\S+[иы]н) [Пп]арк "," $1-м $2ом парке "],["^ [Пп]арк "," парке "],["^ (\\S+)[иоы]й-(\\S+)[иоы]й [Пп]ереулок "," $1ом-$2ом переулке "],["^ (\\d+)-й (\\S+)[иоы]й-(\\S+)[иоы]й [Пп]ереулок "," $1-м $2ом-$3ом переулке "],["^ (\\S+н)ий [Пп]ереулок "," $1ем переулке "],["^ (\\S+)[иоы]й [Пп]ереулок "," $1ом переулке "],["^ (\\S+[еёо]в) [Пп]ереулок "," $1ом переулке "],["^ (\\S+[иы]н) [Пп]ереулок "," $1ом переулке "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]ереулок "," $1ом $2ем переулке "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]ереулок "," $1ем $2ом переулке "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]ереулок "," $1ом $2ом переулке "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Пп]ереулок "," $1ом $2ом переулке "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]ереулок "," $1ом $2ом переулке "],["^ (\\d+)-й [Пп]ереулок "," $1-м переулке "],["^ (\\d+)-й (\\S+н)ий [Пп]ереулок "," $1-м $2ем переулке "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]ереулок "," $1-м $2ом переулке "],["^ (\\d+)-й (\\S+[еёо]в) [Пп]ереулок "," $1-м $2ом переулке "],["^ (\\d+)-й (\\S+[иы]н) [Пп]ереулок "," $1-м $2ом переулке "],["^ [Пп]ереулок "," переулке "],["^ [Пп]одъезд "," подъезде "],["^ (\\S+[еёо]в)-(\\S+)[иоы]й [Пп]роезд "," $1ом-$2ом проезде "],["^ (\\S+н)ий [Пп]роезд "," $1ем проезде "],["^ (\\S+)[иоы]й [Пп]роезд "," $1ом проезде "],["^ (\\S+[еёо]в) [Пп]роезд "," $1ом проезде "],["^ (\\S+[иы]н) [Пп]роезд "," $1ом проезде "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]роезд "," $1ом $2ем проезде "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]роезд "," $1ем $2ом проезде "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]роезд "," $1ом $2ом проезде "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Пп]роезд "," $1ом $2ом проезде "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]роезд "," $1ом $2ом проезде "],["^ (\\d+)-й [Пп]роезд "," $1-м проезде "],["^ (\\d+)-й (\\S+н)ий [Пп]роезд "," $1-м $2ем проезде "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]роезд "," $1-м $2ом проезде "],["^ (\\d+)-й (\\S+[еёо]в) [Пп]роезд "," $1-м $2ом проезде "],["^ (\\d+)-й (\\S+[иы]н) [Пп]роезд "," $1-м $2ом проезде "],["^ (\\d+)-й (\\S+н)ий (\\S+)[иоы]й [Пп]роезд "," $1-м $2ем $3ом проезде "],["^ (\\d+)-й (\\S+)[иоы]й (\\S+)[иоы]й [Пп]роезд "," $1-м $2ом $3ом проезде "],["^ [Пп]роезд "," проезде "],["^ (\\S+н)ий [Пп]роспект "," $1ем проспекте "],["^ (\\S+)[иоы]й [Пп]роспект "," $1ом проспекте "],["^ (\\S+[иы]н) [Пп]роспект "," $1ом проспекте "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]роспект "," $1ом $2ем проспекте "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]роспект "," $1ем $2ом проспекте "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]роспект "," $1ом $2ом проспекте "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]роспект "," $1ом $2ом проспекте "],["^ (\\d+)-й (\\S+н)ий [Пп]роспект "," $1-м $2ем проспекте "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]роспект "," $1-м $2ом проспекте "],["^ (\\d+)-й (\\S+[иы]н) [Пп]роспект "," $1-м $2ом проспекте "],["^ [Пп]роспект "," проспекте "],["^ (\\S+н)ий [Пп]утепровод "," $1ем путепроводе "],["^ (\\S+)[иоы]й [Пп]утепровод "," $1ом путепроводе "],["^ (\\S+[иы]н) [Пп]утепровод "," $1ом путепроводе "],["^ (\\S+)[иоы]й (\\S+н)ий [Пп]утепровод "," $1ом $2ем путепроводе "],["^ (\\S+н)ий (\\S+)[иоы]й [Пп]утепровод "," $1ем $2ом путепроводе "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Пп]утепровод "," $1ом $2ом путепроводе "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Пп]утепровод "," $1ом $2ом путепроводе "],["^ (\\d+)-й (\\S+н)ий [Пп]утепровод "," $1-м $2ем путепроводе "],["^ (\\d+)-й (\\S+)[иоы]й [Пп]утепровод "," $1-м $2ом путепроводе "],["^ (\\d+)-й (\\S+[иы]н) [Пп]утепровод "," $1-м $2ом путепроводе "],["^ [Пп]утепровод "," путепроводе "],["^ (\\S+н)ий [Сс]пуск "," $1ем спуске "],["^ (\\S+)[иоы]й [Сс]пуск "," $1ом спуске "],["^ (\\S+[еёо]в) [Сс]пуск "," $1ом спуске "],["^ (\\S+[иы]н) [Сс]пуск "," $1ом спуске "],["^ (\\S+)[иоы]й (\\S+н)ий [Сс]пуск "," $1ом $2ем спуске "],["^ (\\S+н)ий (\\S+)[иоы]й [Сс]пуск "," $1ем $2ом спуске "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Сс]пуск "," $1ом $2ом спуске "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Сс]пуск "," $1ом $2ом спуске "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Сс]пуск "," $1ом $2ом спуске "],["^ (\\d+)-й (\\S+н)ий [Сс]пуск "," $1-м $2ем спуске "],["^ (\\d+)-й (\\S+)[иоы]й [Сс]пуск "," $1-м $2ом спуске "],["^ (\\d+)-й (\\S+[еёо]в) [Сс]пуск "," $1-м $2ом спуске "],["^ (\\d+)-й (\\S+[иы]н) [Сс]пуск "," $1-м $2ом спуске "],["^ [Сс]пуск "," спуске "],["^ (\\S+н)ий [Сс]ъезд "," $1ем съезде "],["^ (\\S+)[иоы]й [Сс]ъезд "," $1ом съезде "],["^ (\\S+[иы]н) [Сс]ъезд "," $1ом съезде "],["^ (\\S+)[иоы]й (\\S+н)ий [Сс]ъезд "," $1ом $2ем съезде "],["^ (\\S+н)ий (\\S+)[иоы]й [Сс]ъезд "," $1ем $2ом съезде "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Сс]ъезд "," $1ом $2ом съезде "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Сс]ъезд "," $1ом $2ом съезде "],["^ (\\d+)-й (\\S+н)ий [Сс]ъезд "," $1-м $2ем съезде "],["^ (\\d+)-й (\\S+)[иоы]й [Сс]ъезд "," $1-м $2ом съезде "],["^ (\\d+)-й (\\S+[иы]н) [Сс]ъезд "," $1-м $2ом съезде "],["^ [Сс]ъезд "," съезде "],["^ (\\S+н)ий [Тт][уо]ннель "," $1ем тоннеле "],["^ (\\S+)[иоы]й [Тт][уо]ннель "," $1ом тоннеле "],["^ (\\S+[иы]н) [Тт][уо]ннель "," $1ом тоннеле "],["^ (\\S+)[иоы]й (\\S+н)ий [Тт][уо]ннель "," $1ом $2ем тоннеле "],["^ (\\S+н)ий (\\S+)[иоы]й [Тт][уо]ннель "," $1ем $2ом тоннеле "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Тт][уо]ннель "," $1ом $2ом тоннеле "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Тт][уо]ннель "," $1ом $2ом тоннеле "],["^ (\\d+)-й (\\S+н)ий [Тт][уо]ннель "," $1-м $2ем тоннеле "],["^ (\\d+)-й (\\S+)[иоы]й [Тт][уо]ннель "," $1-м $2ом тоннеле "],["^ (\\d+)-й (\\S+[иы]н) [Тт][уо]ннель "," $1-м $2ом тоннеле "],["^ [Тт][уо]ннель "," тоннеле "],["^ (\\S+н)ий [Тт]ракт "," $1ем тракте "],["^ (\\S+)[иоы]й [Тт]ракт "," $1ом тракте "],["^ (\\S+[еёо]в) [Тт]ракт "," $1ом тракте "],["^ (\\S+[иы]н) [Тт]ракт "," $1ом тракте "],["^ (\\S+)[иоы]й (\\S+н)ий [Тт]ракт "," $1ом $2ем тракте "],["^ (\\S+н)ий (\\S+)[иоы]й [Тт]ракт "," $1ем $2ом тракте "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Тт]ракт "," $1ом $2ом тракте "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Тт]ракт "," $1ом $2ом тракте "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Тт]ракт "," $1ом $2ом тракте "],["^ (\\d+)-й (\\S+н)ий [Тт]ракт "," $1-м $2ем тракте "],["^ (\\d+)-й (\\S+)[иоы]й [Тт]ракт "," $1-м $2ом тракте "],["^ (\\d+)-й (\\S+[еёо]в) [Тт]ракт "," $1-м $2ом тракте "],["^ (\\d+)-й (\\S+[иы]н) [Тт]ракт "," $1-м $2ом тракте "],["^ [Тт]ракт "," тракте "],["^ (\\S+н)ий [Тт]упик "," $1ем тупике "],["^ (\\S+)[иоы]й [Тт]упик "," $1ом тупике "],["^ (\\S+[еёо]в) [Тт]упик "," $1ом тупике "],["^ (\\S+[иы]н) [Тт]упик "," $1ом тупике "],["^ (\\S+)[иоы]й (\\S+н)ий [Тт]упик "," $1ом $2ем тупике "],["^ (\\S+н)ий (\\S+)[иоы]й [Тт]упик "," $1ем $2ом тупике "],["^ (\\S+)[иоы]й (\\S+)[иоы]й [Тт]упик "," $1ом $2ом тупике "],["^ (\\S+)[иоы]й (\\S+[еёо]в) [Тт]упик "," $1ом $2ом тупике "],["^ (\\S+)[иоы]й (\\S+[иы]н) [Тт]упик "," $1ом $2ом тупике "],["^ (\\d+)-й [Тт]упик "," $1-м тупике "],["^ (\\d+)-й (\\S+н)ий [Тт]упик "," $1-м $2ем тупике "],["^ (\\d+)-й (\\S+)[иоы]й [Тт]упик "," $1-м $2ом тупике "],["^ (\\d+)-й (\\S+[еёо]в) [Тт]упик "," $1-м $2ом тупике "],["^ (\\d+)-й (\\S+[иы]н) [Тт]упик "," $1-м $2ом тупике "],["^ [Тт]упик "," тупике "],["^ (\\S+[ео])е ([Пп]олу)?[Кк]ольцо "," $1м $2кольце "],["^ (\\S+ье) ([Пп]олу)?[Кк]ольцо "," $1м $2кольце "],["^ (\\S+[ео])е (\\S+[ео])е ([Пп]олу)?[Кк]ольцо "," $1м $2м $3кольце "],["^ (\\S+ье) (\\S+[ео])е ([Пп]олу)?[Кк]ольцо "," $1м $2м $3кольце "],["^ (\\d+)-е (\\S+[ео])е ([Пп]олу)?[Кк]ольцо "," $1-м $2м $3кольце "],["^ (\\d+)-е (\\S+ье) ([Пп]олу)?[Кк]ольцо "," $1-м $2м $3кольце "],["^ ([Пп]олу)?[Кк]ольцо "," $1кольце "],["^ (\\S+[ео])е [Шш]оссе "," $1м шоссе "],["^ (\\S+ье) [Шш]оссе "," $1м шоссе "],["^ (\\S+[ео])е (\\S+[ео])е [Шш]оссе "," $1м $2м шоссе "],["^ (\\S+ье) (\\S+[ео])е [Шш]оссе "," $1м $2м шоссе "],["^ (\\d+)-е (\\S+[ео])е [Шш]оссе "," $1-м $2м шоссе "],["^ (\\d+)-е (\\S+ье) [Шш]оссе "," $1-м $2м шоссе "],[" ([Тт])ретом "," $1ретьем "],["([жч])ом ","$1ьем "]]}}},{}],23:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"første",2:"anden",3:"tredje",4:"fjerde",5:"femte",6:"sjette",7:"syvende",8:"ottende",9:"niende",10:"tiende"},direction:{north:"Nord",northeast:"Nordøst",east:"Øst",southeast:"Sydøst",south:"Syd",southwest:"Sydvest",west:"Vest",northwest:"Nordvest"},modifier:{left:"venstresving",right:"højresving","sharp left":"skarpt venstresving","sharp right":"skarpt højresving","slight left":"svagt venstresving","slight right":"svagt højresving",straight:"ligeud",uturn:"U-vending"},lanes:{xo:"Hold til højre",ox:"Hold til venstre",xox:"Benyt midterste spor",oxo:"Hold til højre eller venstre"}},modes:{ferry:{default:"Tag færgen",name:"Tag færgen {way_name}",destination:"Tag færgen i retning {destination}"}},phrase:{"two linked by distance":"{instruction_one} derefter, efter {distance}, {instruction_two}","two linked":"{instruction_one}, derefter {instruction_two}","one in distance":"Efter {distance} {instruction_one}","name and ref":"{name} ({ref})","exit with number":"afkørsel {exit}"},arrive:{default:{default:"Du er ankommet til din {nth} destination",upcoming:"Du vil ankomme til din {nth} destination",short:"Du er ankommet","short-upcoming":"Du vil ankomme",named:"Du er ankommet til {waypoint_name}"},left:{default:"Du er ankommet til din {nth} destination, som befinder sig til venstre",upcoming:"Du vil ankomme til din {nth} destination på venstre hånd",short:"Du er ankommet","short-upcoming":"Du vil ankomme",named:"Du er ankommet til {waypoint_name}, som befinder sig til venstre"},right:{default:"Du er ankommet til din {nth} destination, som befinder sig til højre",upcoming:"Du vil ankomme til din {nth} destination på højre hånd",short:"Du er ankommet","short-upcoming":"Du vil ankomme",named:"Du er ankommet til {waypoint_name}, som befinder sig til højre"},"sharp left":{default:"Du er ankommet til din {nth} destination, som befinder sig til venstre",upcoming:"Du vil ankomme til din {nth} destination på venstre hånd",short:"Du er ankommet","short-upcoming":"Du vil ankomme",named:"Du er ankommet til {waypoint_name}, som befinder sig til venstre"},"sharp right":{default:"Du er ankommet til din {nth} destination, som befinder sig til højre",upcoming:"Du vil ankomme til din {nth} destination på højre hånd",short:"Du er ankommet","short-upcoming":"Du vil ankomme",named:"Du er ankommet til {waypoint_name}, som befinder sig til højre"},"slight right":{default:"Du er ankommet til din {nth} destination, som befinder sig til højre",upcoming:"Du vil ankomme til din {nth} destination på højre hånd",short:"Du er ankommet","short-upcoming":"Du vil ankomme",named:"Du er ankommet til {waypoint_name}, som befinder sig til højre"},"slight left":{default:"Du er ankommet til din {nth} destination, som befinder sig til venstre",upcoming:"Du vil ankomme til din {nth} destination på venstre hånd",short:"Du er ankommet","short-upcoming":"Du vil ankomme",named:"Du er ankommet til {waypoint_name}, som befinder sig til venstre"},straight:{default:"Du er ankommet til din {nth} destination, der befinder sig lige frem",upcoming:"Du vil ankomme til din {nth} destination foran dig",short:"Du er ankommet","short-upcoming":"Du vil ankomme",named:"Du er ankommet til {waypoint_name}, der befinder sig lige frem"}},continue:{default:{default:"Drej til {modifier}",name:"Drej til {modifier} videre ad {way_name}",destination:"Drej til {modifier} mod {destination}",exit:"Drej til {modifier} ad {way_name}"},straight:{default:"Fortsæt ligeud",
2168name:"Fortsæt ligeud ad {way_name}",destination:"Fortsæt mod {destination}",distance:"Fortsæt {distance} ligeud",namedistance:"Fortsæt {distance} ad {way_name}"},"sharp left":{default:"Drej skarpt til venstre",name:"Drej skarpt til venstre videre ad {way_name}",destination:"Drej skarpt til venstre mod {destination}"},"sharp right":{default:"Drej skarpt til højre",name:"Drej skarpt til højre videre ad {way_name}",destination:"Drej skarpt til højre mod {destination}"},"slight left":{default:"Drej left til venstre",name:"Drej let til venstre videre ad {way_name}",destination:"Drej let til venstre mod {destination}"},"slight right":{default:"Drej let til højre",name:"Drej let til højre videre ad {way_name}",destination:"Drej let til højre mod {destination}"},uturn:{default:"Foretag en U-vending",name:"Foretag en U-vending tilbage ad {way_name}",destination:"Foretag en U-vending mod {destination}"}},depart:{default:{default:"Kør mod {direction}",name:"Kør mod {direction} ad {way_name}",namedistance:"Fortsæt {distance} ad {way_name}mod {direction}"}},"end of road":{default:{default:"Drej til {modifier}",name:"Drej til {modifier} ad {way_name}",destination:"Drej til {modifier} mof {destination}"},straight:{default:"Fortsæt ligeud",name:"Fortsæt ligeud ad {way_name}",destination:"Fortsæt ligeud mod {destination}"},uturn:{default:"Foretag en U-vending for enden af vejen",name:"Foretag en U-vending ad {way_name} for enden af vejen",destination:"Foretag en U-vending mod {destination} for enden af vejen"}},fork:{default:{default:"Hold til {modifier} ved udfletningen",name:"Hold mod {modifier} på {way_name}",destination:"Hold mod {modifier} mod {destination}"},"slight left":{default:"Hold til venstre ved udfletningen",name:"Hold til venstre på {way_name}",destination:"Hold til venstre mod {destination}"},"slight right":{default:"Hold til højre ved udfletningen",name:"Hold til højre på {way_name}",destination:"Hold til højre mod {destination}"},"sharp left":{default:"Drej skarpt til venstre ved udfletningen",name:"Drej skarpt til venstre ad {way_name}",destination:"Drej skarpt til venstre mod {destination}"},"sharp right":{default:"Drej skarpt til højre ved udfletningen",name:"Drej skarpt til højre ad {way_name}",destination:"Drej skarpt til højre mod {destination}"},uturn:{default:"Foretag en U-vending",name:"Foretag en U-vending ad {way_name}",destination:"Foretag en U-vending mod {destination}"}},merge:{default:{default:"Flet til {modifier}",name:"Flet til {modifier} ad {way_name}",destination:"Flet til {modifier} mod {destination}"},straight:{default:"Flet",name:"Flet ind på {way_name}",destination:"Flet ind mod {destination}"},"slight left":{default:"Flet til venstre",name:"Flet til venstre ad {way_name}",destination:"Flet til venstre mod {destination}"},"slight right":{default:"Flet til højre",name:"Flet til højre ad {way_name}",destination:"Flet til højre mod {destination}"},"sharp left":{default:"Flet til venstre",name:"Flet til venstre ad {way_name}",destination:"Flet til venstre mod {destination}"},"sharp right":{default:"Flet til højre",name:"Flet til højre ad {way_name}",destination:"Flet til højre mod {destination}"},uturn:{default:"Foretag en U-vending",name:"Foretag en U-vending ad {way_name}",destination:"Foretag en U-vending mod {destination}"}},"new name":{default:{default:"Fortsæt {modifier}",name:"Fortsæt {modifier} ad {way_name}",destination:"Fortsæt {modifier} mod {destination}"},straight:{default:"Fortsæt ligeud",name:"Fortsæt ad {way_name}",destination:"Fortsæt mod {destination}"},"sharp left":{default:"Drej skarpt til venstre",name:"Drej skarpt til venstre ad {way_name}",destination:"Drej skarpt til venstre mod {destination}"},"sharp right":{default:"Drej skarpt til højre",name:"Drej skarpt til højre ad {way_name}",destination:"Drej skarpt til højre mod {destination}"},"slight left":{default:"Fortsæt til venstre",name:"Fortsæt til venstre ad {way_name}",destination:"Fortsæt til venstre mod {destination}"},"slight right":{default:"Fortsæt til højre",name:"Fortsæt til højre ad {way_name}",destination:"Fortsæt til højre mod {destination}"},uturn:{default:"Foretag en U-vending",name:"Foretag en U-vending ad {way_name}",destination:"Foretag en U-vending mod {destination}"}},notification:{default:{default:"Fortsæt {modifier}",name:"Fortsæt {modifier} ad {way_name}",destination:"Fortsæt {modifier} mod {destination}"},uturn:{default:"Foretag en U-vending",name:"Foretag en U-vending ad {way_name}",destination:"Foretag en U-vending mod {destination}"}},"off ramp":{default:{default:"Tag afkørslen",name:"Tag afkørslen ad {way_name}",destination:"Tag afkørslen mod {destination}",exit:"Vælg afkørsel {exit}",exit_destination:"Vælg afkørsel {exit} mod {destination}"},left:{default:"Tag afkørslen til venstre",name:"Tag afkørslen til venstre ad {way_name}",destination:"Tag afkørslen til venstre mod {destination}",exit:"Vælg afkørsel {exit} til venstre",exit_destination:"Vælg afkørsel {exit} til venstre mod {destination}\n"},right:{default:"Tag afkørslen til højre",name:"Tag afkørslen til højre ad {way_name}",destination:"Tag afkørslen til højre mod {destination}",exit:"Vælg afkørsel {exit} til højre",exit_destination:"Vælg afkørsel {exit} til højre mod {destination}"},"sharp left":{default:"Tag afkørslen til venstre",name:"Tag afkørslen til venstre ad {way_name}",destination:"Tag afkørslen til venstre mod {destination}",exit:"Vælg afkørsel {exit} til venstre",exit_destination:"Vælg afkørsel {exit} til venstre mod {destination}\n"},"sharp right":{default:"Tag afkørslen til højre",name:"Tag afkørslen til højre ad {way_name}",destination:"Tag afkørslen til højre mod {destination}",exit:"Vælg afkørsel {exit} til højre",exit_destination:"Vælg afkørsel {exit} til højre mod {destination}"},"slight left":{default:"Tag afkørslen til venstre",name:"Tag afkørslen til venstre ad {way_name}",destination:"Tag afkørslen til venstre mod {destination}",exit:"Vælg afkørsel {exit} til venstre",exit_destination:"Vælg afkørsel {exit} til venstre mod {destination}\n"},"slight right":{default:"Tag afkørslen til højre",name:"Tag afkørslen til højre ad {way_name}",destination:"Tag afkørslen til højre mod {destination}",exit:"Vælg afkørsel {exit} til højre",exit_destination:"Vælg afkørsel {exit} til højre mod {destination}"}},"on ramp":{default:{default:"Tag afkørslen",name:"Tag afkørslen ad {way_name}",destination:"Tag afkørslen mod {destination}"},left:{default:"Tag afkørslen til venstre",name:"Tag afkørslen til venstre ad {way_name}",destination:"Tag afkørslen til venstre mod {destination}"},right:{default:"Tag afkørslen til højre",name:"Tag afkørslen til højre ad {way_name}",destination:"Tag afkørslen til højre mod {destination}"},"sharp left":{default:"Tag afkørslen til venstre",name:"Tag afkørslen til venstre ad {way_name}",destination:"Tag afkørslen til venstre mod {destination}"},"sharp right":{default:"Tag afkørslen til højre",name:"Tag afkørslen til højre ad {way_name}",destination:"Tag afkørslen til højre mod {destination}"},"slight left":{default:"Tag afkørslen til venstre",name:"Tag afkørslen til venstre ad {way_name}",destination:"Tag afkørslen til venstre mod {destination}"},"slight right":{default:"Tag afkørslen til højre",name:"Tag afkørslen til højre ad {way_name}",destination:"Tag afkørslen til højre mod {destination}"}},rotary:{default:{default:{default:"Kør ind i rundkørslen",name:"Tag rundkørslen og kør fra ad {way_name}",destination:"Tag rundkørslen og kør mod {destination}"},name:{default:"Kør ind i {rotary_name}",name:"Kør ind i {rotary_name} og kør ad {way_name} ",destination:"Kør ind i {rotary_name} og kør mod {destination}"},exit:{default:"Tag rundkørslen og forlad ved {exit_number} afkørsel",name:"Tag rundkørslen og forlad ved {exit_number} afkørsel ad {way_name}",destination:"Tag rundkørslen og forlad ved {exit_number} afkørsel mod {destination}"},name_exit:{default:"Kør ind i {rotary_name} og forlad ved {exit_number} afkørsel",name:"Kør ind i {rotary_name} og forlad ved {exit_number} afkørsel ad {way_name}",destination:"Kør ind i {rotary_name} og forlad ved {exit_number} afkørsel mod {destination}"}}},roundabout:{default:{exit:{default:"Tag rundkørslen og forlad ved {exit_number} afkørsel",name:"Tag rundkørslen og forlad ved {exit_number} afkørsel ad {way_name}",destination:"Tag rundkørslen og forlad ved {exit_number} afkørsel mod {destination}"},default:{default:"Kør ind i rundkørslen",name:"Tag rundkørslen og kør fra ad {way_name}",destination:"Tag rundkørslen og kør mod {destination}"}}},"roundabout turn":{default:{default:"Foretag et {modifier}",name:"Foretag et {modifier} ad {way_name}",destination:"Foretag et {modifier} mod {destination}"},left:{default:"Drej til venstre",name:"Drej til venstre ad {way_name}",destination:"Drej til venstre mod {destination}"},right:{default:"Drej til højre",name:"Drej til højre ad {way_name}",destination:"Drej til højre mod {destination}"},straight:{default:"Fortsæt ligeud",name:"Fortsæt ligeud ad {way_name}",destination:"Fortsæt ligeud mod {destination}"}},"exit roundabout":{default:{default:"Forlad rundkørslen",name:"Forlad rundkørslen ad {way_name}",destination:"Forlad rundkørslen mod  {destination}"}},"exit rotary":{default:{default:"Forlad rundkørslen",name:"Forlad rundkørslen ad {way_name}",destination:"Forlad rundkørslen mod {destination}"}},turn:{default:{default:"Foretag et {modifier}",name:"Foretag et {modifier} ad {way_name}",destination:"Foretag et {modifier} mod {destination}"},left:{default:"Drej til venstre",name:"Drej til venstre ad {way_name}",destination:"Drej til venstre mod {destination}"},right:{default:"Drej til højre",name:"Drej til højre ad {way_name}",destination:"Drej til højre mod {destination}"},straight:{default:"Fortsæt ligeud",name:"Kør ligeud ad {way_name}",destination:"Kør ligeud mod {destination}"}},"use lane":{no_lanes:{default:"Fortsæt ligeud"},default:{default:"{lane_instruction}"}}}}},{}],24:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"erste",2:"zweite",3:"dritte",4:"vierte",5:"fünfte",6:"sechste",7:"siebente",8:"achte",9:"neunte",10:"zehnte"},direction:{north:"Norden",northeast:"Nordosten",east:"Osten",southeast:"Südosten",south:"Süden",southwest:"Südwesten",west:"Westen",northwest:"Nordwesten"},modifier:{left:"links",right:"rechts","sharp left":"scharf links","sharp right":"scharf rechts","slight left":"leicht links","slight right":"leicht rechts",straight:"geradeaus",uturn:"180°-Wendung"},lanes:{xo:"Rechts halten",ox:"Links halten",xox:"Mittlere Spur nutzen",oxo:"Rechts oder links halten"}},modes:{ferry:{default:"Fähre nehmen",name:"Fähre nehmen {way_name}",destination:"Fähre nehmen Richtung {destination}"}},phrase:{"two linked by distance":"{instruction_one} danach in {distance} {instruction_two}","two linked":"{instruction_one} danach {instruction_two}","one in distance":"In {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"exit {exit}"},arrive:{default:{default:"Sie haben Ihr {nth} Ziel erreicht",upcoming:"Sie haben Ihr {nth} Ziel erreicht",short:"Sie haben Ihr {nth} Ziel erreicht","short-upcoming":"Sie haben Ihr {nth} Ziel erreicht",named:"Sie haben Ihr {waypoint_name}"},left:{default:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich links",upcoming:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich links",short:"Sie haben Ihr {nth} Ziel erreicht","short-upcoming":"Sie haben Ihr {nth} Ziel erreicht",named:"Sie haben Ihr {waypoint_name}, es befindet sich links"},right:{default:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich rechts",upcoming:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich rechts",short:"Sie haben Ihr {nth} Ziel erreicht","short-upcoming":"Sie haben Ihr {nth} Ziel erreicht",named:"Sie haben Ihr {waypoint_name}, es befindet sich rechts"},"sharp left":{default:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich links",upcoming:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich links",short:"Sie haben Ihr {nth} Ziel erreicht","short-upcoming":"Sie haben Ihr {nth} Ziel erreicht",named:"Sie haben Ihr {waypoint_name}, es befindet sich links"},"sharp right":{default:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich rechts",upcoming:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich rechts",short:"Sie haben Ihr {nth} Ziel erreicht","short-upcoming":"Sie haben Ihr {nth} Ziel erreicht",named:"Sie haben Ihr {waypoint_name}, es befindet sich rechts"},"slight right":{default:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich rechts",upcoming:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich rechts",short:"Sie haben Ihr {nth} Ziel erreicht","short-upcoming":"Sie haben Ihr {nth} Ziel erreicht",named:"Sie haben Ihr {waypoint_name}, es befindet sich rechts"},"slight left":{default:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich links",upcoming:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich links",short:"Sie haben Ihr {nth} Ziel erreicht","short-upcoming":"Sie haben Ihr {nth} Ziel erreicht",named:"Sie haben Ihr {waypoint_name}, es befindet sich links"},straight:{default:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich geradeaus",upcoming:"Sie haben Ihr {nth} Ziel erreicht, es befindet sich geradeaus",short:"Sie haben Ihr {nth} Ziel erreicht","short-upcoming":"Sie haben Ihr {nth} Ziel erreicht",named:"Sie haben Ihr {waypoint_name}, es befindet sich geradeaus"}},continue:{default:{default:"{modifier} abbiegen",name:"{modifier} weiterfahren auf {way_name}",destination:"{modifier} abbiegen Richtung {destination}",exit:"{modifier} abbiegen auf {way_name}"},straight:{default:"Geradeaus weiterfahren",name:"Geradeaus weiterfahren auf {way_name}",destination:"Weiterfahren in Richtung {destination}",distance:"Geradeaus weiterfahren für {distance}",namedistance:"Geradeaus weiterfahren auf {way_name} für {distance}"},"sharp left":{default:"Scharf links",name:"Scharf links weiterfahren auf {way_name}",destination:"Scharf links Richtung {destination}"},"sharp right":{default:"Scharf rechts",name:"Scharf rechts weiterfahren auf {way_name}",destination:"Scharf rechts Richtung {destination}"},"slight left":{default:"Leicht links",name:"Leicht links weiter auf {way_name}",destination:"Leicht links weiter Richtung {destination}"},"slight right":{default:"Leicht rechts weiter",name:"Leicht rechts weiter auf {way_name}",destination:"Leicht rechts weiter Richtung {destination}"},uturn:{default:"180°-Wendung",name:"180°-Wendung auf {way_name}",destination:"180°-Wendung Richtung {destination}"}},depart:{default:{default:"Fahren Sie Richtung {direction}",name:"Fahren Sie Richtung {direction} auf {way_name}",namedistance:"Fahren Sie Richtung {direction} auf {way_name} für {distance}"}},"end of road":{default:{default:"{modifier} abbiegen",name:"{modifier} abbiegen auf {way_name}",destination:"{modifier} abbiegen Richtung {destination}"},straight:{default:"Geradeaus weiterfahren",name:"Geradeaus weiterfahren auf {way_name}",destination:"Geradeaus weiterfahren Richtung {destination}"},uturn:{default:"180°-Wendung am Ende der Straße",name:"180°-Wendung auf {way_name} am Ende der Straße",destination:"180°-Wendung Richtung {destination} am Ende der Straße"}},fork:{default:{default:"{modifier} halten an der Gabelung",name:"{modifier} halten an der Gabelung auf {way_name}",destination:"{modifier}  halten an der Gabelung Richtung {destination}"},"slight left":{default:"Links halten an der Gabelung",name:"Links halten an der Gabelung auf {way_name}",destination:"Links halten an der Gabelung Richtung {destination}"},"slight right":{default:"Rechts halten an der Gabelung",name:"Rechts halten an der Gabelung auf {way_name}",destination:"Rechts halten an der Gabelung Richtung {destination}"},"sharp left":{default:"Scharf links abbiegen an der Gabelung",name:"Scharf links auf {way_name}",destination:"Scharf links Richtung {destination}"},"sharp right":{default:"Scharf rechts abbiegen an der Gabelung",name:"Scharf rechts auf {way_name}",destination:"Scharf rechts Richtung {destination}"},uturn:{default:"180°-Wendung",name:"180°-Wendung auf {way_name}",destination:"180°-Wendung Richtung {destination}"}},merge:{default:{default:"{modifier} auffahren",name:"{modifier} auffahren auf {way_name}",destination:"{modifier} auffahren Richtung {destination}"},straight:{default:"geradeaus auffahren",name:"geradeaus auffahren auf {way_name}",destination:"geradeaus auffahren Richtung {destination}"},"slight left":{default:"Leicht links auffahren",name:"Leicht links auffahren auf {way_name}",destination:"Leicht links auffahren Richtung {destination}"},"slight right":{default:"Leicht rechts auffahren",name:"Leicht rechts auffahren auf {way_name}",destination:"Leicht rechts auffahren Richtung {destination}"},"sharp left":{default:"Scharf links auffahren",name:"Scharf links auffahren auf {way_name}",destination:"Scharf links auffahren Richtung {destination}"},"sharp right":{default:"Scharf rechts auffahren",name:"Scharf rechts auffahren auf {way_name}",destination:"Scharf rechts auffahren Richtung {destination}"},uturn:{default:"180°-Wendung",name:"180°-Wendung auf {way_name}",destination:"180°-Wendung Richtung {destination}"}},"new name":{default:{default:"{modifier} weiterfahren",name:"{modifier} weiterfahren auf {way_name}",destination:"{modifier} weiterfahren Richtung {destination}"},straight:{default:"Geradeaus weiterfahren",name:"Weiterfahren auf {way_name}",destination:"Weiterfahren in Richtung {destination}"},"sharp left":{default:"Scharf links",name:"Scharf links auf {way_name}",destination:"Scharf links Richtung {destination}"},"sharp right":{default:"Scharf rechts",name:"Scharf rechts auf {way_name}",destination:"Scharf rechts Richtung {destination}"},"slight left":{default:"Leicht links weiter",name:"Leicht links weiter auf {way_name}",destination:"Leicht links weiter Richtung {destination}"},"slight right":{default:"Leicht rechts weiter",name:"Leicht rechts weiter auf {way_name}",destination:"Leicht rechts weiter Richtung {destination}"},uturn:{default:"180°-Wendung",name:"180°-Wendung auf {way_name}",destination:"180°-Wendung Richtung {destination}"}},notification:{default:{default:"{modifier} weiterfahren",name:"{modifier} weiterfahren auf {way_name}",destination:"{modifier} weiterfahren Richtung {destination}"},uturn:{default:"180°-Wendung",name:"180°-Wendung auf {way_name}",destination:"180°-Wendung Richtung {destination}"}},"off ramp":{default:{default:"Ausfahrt nehmen",name:"Ausfahrt nehmen auf {way_name}",destination:"Ausfahrt nehmen Richtung {destination}",exit:"Ausfahrt {exit} nehmen",exit_destination:"Ausfahrt {exit} nehmen Richtung {destination}"},left:{default:"Ausfahrt links nehmen",name:"Ausfahrt links nehmen auf {way_name}",destination:"Ausfahrt links nehmen Richtung {destination}",exit:"Ausfahrt {exit} links nehmen",exit_destination:"Ausfahrt {exit} links nehmen Richtung {destination}"},right:{default:"Ausfahrt rechts nehmen",name:"Ausfahrt rechts nehmen Richtung {way_name}",destination:"Ausfahrt rechts nehmen Richtung {destination}",exit:"Ausfahrt {exit} rechts nehmen",exit_destination:"Ausfahrt {exit} nehmen Richtung {destination}"},"sharp left":{default:"Ausfahrt links nehmen",name:"Ausfahrt links Seite nehmen auf {way_name}",destination:"Ausfahrt links nehmen Richtung {destination}",exit:"Ausfahrt {exit} links nehmen",exit_destination:"Ausfahrt{exit} links nehmen Richtung {destination}"},"sharp right":{default:"Ausfahrt rechts nehmen",name:"Ausfahrt rechts nehmen auf {way_name}",destination:"Ausfahrt rechts nehmen Richtung {destination}",exit:"Ausfahrt {exit} rechts nehmen",exit_destination:"Ausfahrt {exit} nehmen Richtung {destination}"},"slight left":{default:"Ausfahrt links nehmen",name:"Ausfahrt links nehmen auf {way_name}",destination:"Ausfahrt links nehmen Richtung {destination}",exit:"Ausfahrt {exit} nehmen",exit_destination:"Ausfahrt {exit} links nehmen Richtung {destination}"},"slight right":{default:"Ausfahrt rechts nehmen",name:"Ausfahrt rechts nehmen auf {way_name}",destination:"Ausfahrt rechts nehmen Richtung {destination}",exit:"Ausfahrt {exit} rechts nehmen",exit_destination:"Ausfahrt {exit} nehmen Richtung {destination}"}},"on ramp":{default:{default:"Auffahrt nehmen",name:"Auffahrt nehmen auf {way_name}",destination:"Auffahrt nehmen Richtung {destination}"},left:{default:"Auffahrt links nehmen",name:"Auffahrt links nehmen auf {way_name}",destination:"Auffahrt links nehmen Richtung {destination}"},right:{default:"Auffahrt rechts nehmen",name:"Auffahrt rechts nehmen auf {way_name}",destination:"Auffahrt rechts nehmen Richtung {destination}"},"sharp left":{default:"Auffahrt links nehmen",name:"Auffahrt links nehmen auf {way_name}",destination:"Auffahrt links nehmen Richtung {destination}"},"sharp right":{default:"Auffahrt rechts nehmen",name:"Auffahrt rechts nehmen auf {way_name}",destination:"Auffahrt rechts nehmen Richtung {destination}"},"slight left":{default:"Auffahrt links Seite nehmen",name:"Auffahrt links nehmen auf {way_name}",destination:"Auffahrt links nehmen Richtung {destination}"},"slight right":{default:"Auffahrt rechts nehmen",name:"Auffahrt rechts nehmen auf {way_name}",destination:"Auffahrt rechts nehmen Richtung {destination}"}},rotary:{default:{default:{default:"In den Kreisverkehr fahren",name:"Im Kreisverkehr die Ausfahrt auf {way_name} nehmen",destination:"Im Kreisverkehr die Ausfahrt Richtung {destination} nehmen"},name:{default:"In {rotary_name} fahren",name:"In {rotary_name} die Ausfahrt auf {way_name} nehmen",destination:"In {rotary_name} die Ausfahrt Richtung {destination} nehmen"},exit:{default:"Im Kreisverkehr die {exit_number} Ausfahrt nehmen",name:"Im Kreisverkehr die {exit_number} Ausfahrt nehmen auf {way_name}",destination:"Im Kreisverkehr die {exit_number} Ausfahrt nehmen Richtung {destination}"},name_exit:{default:"In den Kreisverkehr fahren und {exit_number} Ausfahrt nehmen",name:"In den Kreisverkehr fahren und {exit_number} Ausfahrt nehmen auf {way_name}",destination:"In den Kreisverkehr fahren und {exit_number} Ausfahrt nehmen Richtung {destination}"}}},roundabout:{default:{exit:{default:"Im Kreisverkehr die {exit_number} Ausfahrt nehmen",name:"Im Kreisverkehr die {exit_number} Ausfahrt nehmen auf {way_name}",destination:"Im Kreisverkehr die {exit_number} Ausfahrt nehmen Richtung {destination}"},default:{default:"In den Kreisverkehr fahren",name:"Im Kreisverkehr die Ausfahrt auf {way_name} nehmen",destination:"Im Kreisverkehr die Ausfahrt Richtung {destination} nehmen"}}},"roundabout turn":{default:{default:"{modifier} abbiegen",name:"{modifier} abbiegen auf {way_name}",destination:"{modifier} abbiegen Richtung {destination}"},left:{default:"Links abbiegen",name:"Links abbiegen auf {way_name}",destination:"Links abbiegen Richtung {destination}"},right:{default:"Rechts abbiegen",name:"Rechts abbiegen auf {way_name}",destination:"Rechts abbiegen Richtung {destination}"},straight:{default:"Geradeaus weiterfahren",name:"Geradeaus weiterfahren auf {way_name}",destination:"Geradeaus weiterfahren Richtung {destination}"}},"exit roundabout":{default:{default:"{modifier} abbiegen",name:"{modifier} abbiegen auf {way_name}",destination:"{modifier} abbiegen Richtung {destination}"},left:{default:"Links abbiegen",name:"Links abbiegen auf {way_name}",destination:"Links abbiegen Richtung {destination}"},right:{default:"Rechts abbiegen",name:"Rechts abbiegen auf {way_name}",destination:"Rechts abbiegen Richtung {destination}"},straight:{default:"Geradeaus weiterfahren",name:"Geradeaus weiterfahren auf {way_name}",destination:"Geradeaus weiterfahren Richtung {destination}"}},"exit rotary":{default:{default:"{modifier} abbiegen",name:"{modifier} abbiegen auf {way_name}",destination:"{modifier} abbiegen Richtung {destination}"},left:{default:"Links abbiegen",name:"Links abbiegen auf {way_name}",destination:"Links abbiegen Richtung {destination}"},right:{default:"Rechts abbiegen",name:"Rechts abbiegen auf {way_name}",destination:"Rechts abbiegen Richtung {destination}"},straight:{default:"Geradeaus weiterfahren",name:"Geradeaus weiterfahren auf {way_name}",destination:"Geradeaus weiterfahren Richtung {destination}"}},turn:{default:{default:"{modifier} abbiegen",name:"{modifier} abbiegen auf {way_name}",destination:"{modifier} abbiegen Richtung {destination}"},left:{default:"Links abbiegen",name:"Links abbiegen auf {way_name}",destination:"Links abbiegen Richtung {destination}"},right:{default:"Rechts abbiegen",name:"Rechts abbiegen auf {way_name}",destination:"Rechts abbiegen Richtung {destination}"},straight:{default:"Geradeaus weiterfahren",name:"Geradeaus weiterfahren auf {way_name}",destination:"Geradeaus weiterfahren Richtung {destination}"}},"use lane":{no_lanes:{default:"Geradeaus weiterfahren"},default:{default:"{lane_instruction}"}}}}},{}],25:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1st",2:"2nd",3:"3rd",4:"4th",5:"5th",6:"6th",7:"7th",8:"8th",9:"9th",10:"10th"},direction:{north:"north",northeast:"northeast",east:"east",southeast:"southeast",south:"south",southwest:"southwest",west:"west",northwest:"northwest"},modifier:{left:"left",right:"right","sharp left":"sharp left","sharp right":"sharp right","slight left":"slight left","slight right":"slight right",straight:"straight",uturn:"U-turn"},lanes:{xo:"Keep right",ox:"Keep left",xox:"Keep in the middle",oxo:"Keep left or right"}},modes:{ferry:{default:"Take the ferry",name:"Take the ferry {way_name}",destination:"Take the ferry towards {destination}"}},phrase:{"two linked by distance":"{instruction_one}, then, in {distance}, {instruction_two}","two linked":"{instruction_one}, then {instruction_two}","one in distance":"In {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"exit {exit}"},arrive:{default:{default:"You have arrived at your {nth} destination",upcoming:"You will arrive at your {nth} destination",short:"You have arrived","short-upcoming":"You will arrive",named:"You have arrived at {waypoint_name}"},left:{default:"You have arrived at your {nth} destination, on the left",upcoming:"You will arrive at your {nth} destination, on the left",short:"You have arrived","short-upcoming":"You will arrive",named:"You have arrived at {waypoint_name}, on the left"},right:{default:"You have arrived at your {nth} destination, on the right",upcoming:"You will arrive at your {nth} destination, on the right",short:"You have arrived","short-upcoming":"You will arrive",named:"You have arrived at {waypoint_name}, on the right"},"sharp left":{default:"You have arrived at your {nth} destination, on the left",upcoming:"You will arrive at your {nth} destination, on the left",short:"You have arrived","short-upcoming":"You will arrive",named:"You have arrived at {waypoint_name}, on the left"},"sharp right":{default:"You have arrived at your {nth} destination, on the right",upcoming:"You will arrive at your {nth} destination, on the right",short:"You have arrived","short-upcoming":"You will arrive",named:"You have arrived at {waypoint_name}, on the right"},"slight right":{default:"You have arrived at your {nth} destination, on the right",upcoming:"You will arrive at your {nth} destination, on the right",short:"You have arrived","short-upcoming":"You will arrive",named:"You have arrived at {waypoint_name}, on the right"},"slight left":{default:"You have arrived at your {nth} destination, on the left",upcoming:"You will arrive at your {nth} destination, on the left",short:"You have arrived","short-upcoming":"You will arrive",named:"You have arrived at {waypoint_name}, on the left"},straight:{default:"You have arrived at your {nth} destination, straight ahead",upcoming:"You will arrive at your {nth} destination, straight ahead",short:"You have arrived","short-upcoming":"You will arrive",named:"You have arrived at {waypoint_name}, straight ahead"}},continue:{default:{default:"Turn {modifier}",name:"Turn {modifier} to stay on {way_name}",destination:"Turn {modifier} towards {destination}",exit:"Turn {modifier} onto {way_name}"},straight:{default:"Continue straight",name:"Continue straight to stay on {way_name}",destination:"Continue towards {destination}",distance:"Continue straight for {distance}",namedistance:"Continue on {way_name} for {distance}"},"sharp left":{default:"Make a sharp left",name:"Make a sharp left to stay on {way_name}",destination:"Make a sharp left towards {destination}"},"sharp right":{default:"Make a sharp right",name:"Make a sharp right to stay on {way_name}",destination:"Make a sharp right towards {destination}"},"slight left":{default:"Make a slight left",name:"Make a slight left to stay on {way_name}",destination:"Make a slight left towards {destination}"},"slight right":{default:"Make a slight right",name:"Make a slight right to stay on {way_name}",destination:"Make a slight right towards {destination}"},uturn:{default:"Make a U-turn",name:"Make a U-turn and continue on {way_name}",destination:"Make a U-turn towards {destination}"}},depart:{default:{default:"Head {direction}",name:"Head {direction} on {way_name}",namedistance:"Head {direction} on {way_name} for {distance}"}},"end of road":{default:{default:"Turn {modifier}",name:"Turn {modifier} onto {way_name}",destination:"Turn {modifier} towards {destination}"},straight:{default:"Continue straight",name:"Continue straight onto {way_name}",destination:"Continue straight towards {destination}"},uturn:{default:"Make a U-turn at the end of the road",name:"Make a U-turn onto {way_name} at the end of the road",destination:"Make a U-turn towards {destination} at the end of the road"}},fork:{default:{default:"Keep {modifier} at the fork",name:"Keep {modifier} onto {way_name}",destination:"Keep {modifier} towards {destination}"},"slight left":{default:"Keep left at the fork",name:"Keep left onto {way_name}",destination:"Keep left towards {destination}"},"slight right":{default:"Keep right at the fork",name:"Keep right onto {way_name}",destination:"Keep right towards {destination}"},"sharp left":{default:"Take a sharp left at the fork",name:"Take a sharp left onto {way_name}",destination:"Take a sharp left towards {destination}"},"sharp right":{default:"Take a sharp right at the fork",name:"Take a sharp right onto {way_name}",destination:"Take a sharp right towards {destination}"},uturn:{default:"Make a U-turn",name:"Make a U-turn onto {way_name}",destination:"Make a U-turn towards {destination}"}},merge:{default:{default:"Merge {modifier}",name:"Merge {modifier} onto {way_name}",destination:"Merge {modifier} towards {destination}"},straight:{default:"Merge",name:"Merge onto {way_name}",destination:"Merge towards {destination}"},"slight left":{default:"Merge left",name:"Merge left onto {way_name}",destination:"Merge left towards {destination}"},"slight right":{default:"Merge right",name:"Merge right onto {way_name}",destination:"Merge right towards {destination}"},"sharp left":{default:"Merge left",name:"Merge left onto {way_name}",destination:"Merge left towards {destination}"},"sharp right":{default:"Merge right",name:"Merge right onto {way_name}",destination:"Merge right towards {destination}"},uturn:{default:"Make a U-turn",name:"Make a U-turn onto {way_name}",destination:"Make a U-turn towards {destination}"}},"new name":{default:{default:"Continue {modifier}",name:"Continue {modifier} onto {way_name}",destination:"Continue {modifier} towards {destination}"},straight:{default:"Continue straight",name:"Continue onto {way_name}",destination:"Continue towards {destination}"},"sharp left":{default:"Take a sharp left",name:"Take a sharp left onto {way_name}",destination:"Take a sharp left towards {destination}"},"sharp right":{default:"Take a sharp right",name:"Take a sharp right onto {way_name}",destination:"Take a sharp right towards {destination}"},"slight left":{default:"Continue slightly left",name:"Continue slightly left onto {way_name}",
2169destination:"Continue slightly left towards {destination}"},"slight right":{default:"Continue slightly right",name:"Continue slightly right onto {way_name}",destination:"Continue slightly right towards {destination}"},uturn:{default:"Make a U-turn",name:"Make a U-turn onto {way_name}",destination:"Make a U-turn towards {destination}"}},notification:{default:{default:"Continue {modifier}",name:"Continue {modifier} onto {way_name}",destination:"Continue {modifier} towards {destination}"},uturn:{default:"Make a U-turn",name:"Make a U-turn onto {way_name}",destination:"Make a U-turn towards {destination}"}},"off ramp":{default:{default:"Take the ramp",name:"Take the ramp onto {way_name}",destination:"Take the ramp towards {destination}",exit:"Take exit {exit}",exit_destination:"Take exit {exit} towards {destination}"},left:{default:"Take the ramp on the left",name:"Take the ramp on the left onto {way_name}",destination:"Take the ramp on the left towards {destination}",exit:"Take exit {exit} on the left",exit_destination:"Take exit {exit} on the left towards {destination}"},right:{default:"Take the ramp on the right",name:"Take the ramp on the right onto {way_name}",destination:"Take the ramp on the right towards {destination}",exit:"Take exit {exit} on the right",exit_destination:"Take exit {exit} on the right towards {destination}"},"sharp left":{default:"Take the ramp on the left",name:"Take the ramp on the left onto {way_name}",destination:"Take the ramp on the left towards {destination}",exit:"Take exit {exit} on the left",exit_destination:"Take exit {exit} on the left towards {destination}"},"sharp right":{default:"Take the ramp on the right",name:"Take the ramp on the right onto {way_name}",destination:"Take the ramp on the right towards {destination}",exit:"Take exit {exit} on the right",exit_destination:"Take exit {exit} on the right towards {destination}"},"slight left":{default:"Take the ramp on the left",name:"Take the ramp on the left onto {way_name}",destination:"Take the ramp on the left towards {destination}",exit:"Take exit {exit} on the left",exit_destination:"Take exit {exit} on the left towards {destination}"},"slight right":{default:"Take the ramp on the right",name:"Take the ramp on the right onto {way_name}",destination:"Take the ramp on the right towards {destination}",exit:"Take exit {exit} on the right",exit_destination:"Take exit {exit} on the right towards {destination}"}},"on ramp":{default:{default:"Take the ramp",name:"Take the ramp onto {way_name}",destination:"Take the ramp towards {destination}"},left:{default:"Take the ramp on the left",name:"Take the ramp on the left onto {way_name}",destination:"Take the ramp on the left towards {destination}"},right:{default:"Take the ramp on the right",name:"Take the ramp on the right onto {way_name}",destination:"Take the ramp on the right towards {destination}"},"sharp left":{default:"Take the ramp on the left",name:"Take the ramp on the left onto {way_name}",destination:"Take the ramp on the left towards {destination}"},"sharp right":{default:"Take the ramp on the right",name:"Take the ramp on the right onto {way_name}",destination:"Take the ramp on the right towards {destination}"},"slight left":{default:"Take the ramp on the left",name:"Take the ramp on the left onto {way_name}",destination:"Take the ramp on the left towards {destination}"},"slight right":{default:"Take the ramp on the right",name:"Take the ramp on the right onto {way_name}",destination:"Take the ramp on the right towards {destination}"}},rotary:{default:{default:{default:"Enter the traffic circle",name:"Enter the traffic circle and exit onto {way_name}",destination:"Enter the traffic circle and exit towards {destination}"},name:{default:"Enter {rotary_name}",name:"Enter {rotary_name} and exit onto {way_name}",destination:"Enter {rotary_name} and exit towards {destination}"},exit:{default:"Enter the traffic circle and take the {exit_number} exit",name:"Enter the traffic circle and take the {exit_number} exit onto {way_name}",destination:"Enter the traffic circle and take the {exit_number} exit towards {destination}"},name_exit:{default:"Enter {rotary_name} and take the {exit_number} exit",name:"Enter {rotary_name} and take the {exit_number} exit onto {way_name}",destination:"Enter {rotary_name} and take the {exit_number} exit towards {destination}"}}},roundabout:{default:{exit:{default:"Enter the traffic circle and take the {exit_number} exit",name:"Enter the traffic circle and take the {exit_number} exit onto {way_name}",destination:"Enter the traffic circle and take the {exit_number} exit towards {destination}"},default:{default:"Enter the traffic circle",name:"Enter the traffic circle and exit onto {way_name}",destination:"Enter the traffic circle and exit towards {destination}"}}},"roundabout turn":{default:{default:"Make a {modifier}",name:"Make a {modifier} onto {way_name}",destination:"Make a {modifier} towards {destination}"},left:{default:"Turn left",name:"Turn left onto {way_name}",destination:"Turn left towards {destination}"},right:{default:"Turn right",name:"Turn right onto {way_name}",destination:"Turn right towards {destination}"},straight:{default:"Continue straight",name:"Continue straight onto {way_name}",destination:"Continue straight towards {destination}"}},"exit roundabout":{default:{default:"Exit the traffic circle",name:"Exit the traffic circle onto {way_name}",destination:"Exit the traffic circle towards {destination}"}},"exit rotary":{default:{default:"Exit the traffic circle",name:"Exit the traffic circle onto {way_name}",destination:"Exit the traffic circle towards {destination}"}},turn:{default:{default:"Make a {modifier}",name:"Make a {modifier} onto {way_name}",destination:"Make a {modifier} towards {destination}"},left:{default:"Turn left",name:"Turn left onto {way_name}",destination:"Turn left towards {destination}"},right:{default:"Turn right",name:"Turn right onto {way_name}",destination:"Turn right towards {destination}"},straight:{default:"Go straight",name:"Go straight onto {way_name}",destination:"Go straight towards {destination}"}},"use lane":{no_lanes:{default:"Continue straight"},default:{default:"{lane_instruction}"}}}}},{}],26:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1.",2:"2.",3:"3.",4:"4.",5:"5.",6:"6.",7:"7.",8:"8.",9:"9.",10:"10."},direction:{north:"norden",northeast:"nord-orienten",east:"orienten",southeast:"sud-orienten",south:"suden",southwest:"sud-okcidenten",west:"okcidenten",northwest:"nord-okcidenten"},modifier:{left:"maldekstren",right:"dekstren","sharp left":"maldekstregen","sharp right":"dekstregen","slight left":"maldekstreten","slight right":"dekstreten",straight:"rekten",uturn:"turniĝu malantaŭen"},lanes:{xo:"Veturu dekstre",ox:"Veturu maldekstre",xox:"Veturu meze",oxo:"Veturu dekstre aŭ maldekstre"}},modes:{ferry:{default:"Enpramiĝu",name:"Enpramiĝu {way_name}",destination:"Enpramiĝu direkte al {destination}"}},phrase:{"two linked by distance":"{instruction_one} kaj post {distance} {instruction_two}","two linked":"{instruction_one} kaj sekve {instruction_two}","one in distance":"Post {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"elveturejo {exit}"},arrive:{default:{default:"Vi atingis vian {nth} celon",upcoming:"Vi atingos vian {nth} celon",short:"Vi atingis","short-upcoming":"Vi atingos",named:"Vi atingis {waypoint_name}"},left:{default:"Vi atingis vian {nth} celon ĉe maldekstre",upcoming:"Vi atingos vian {nth} celon ĉe maldekstre",short:"Vi atingis","short-upcoming":"Vi atingos",named:"Vi atingis {waypoint_name}, ĉe maldekstre"},right:{default:"Vi atingis vian {nth} celon ĉe dekstre",upcoming:"Vi atingos vian {nth} celon ĉe dekstre",short:"Vi atingis","short-upcoming":"Vi atingos",named:"Vi atingis {waypoint_name}, ĉe dekstre"},"sharp left":{default:"Vi atingis vian {nth} celon ĉe maldekstre",upcoming:"Vi atingos vian {nth} celon ĉe maldekstre",short:"Vi atingis","short-upcoming":"Vi atingos",named:"Vi atingis {waypoint_name}, ĉe maldekstre"},"sharp right":{default:"Vi atingis vian {nth} celon ĉe dekstre",upcoming:"Vi atingos vian {nth} celon ĉe dekstre",short:"Vi atingis","short-upcoming":"Vi atingos",named:"Vi atingis {waypoint_name}, ĉe dekstre"},"slight right":{default:"Vi atingis vian {nth} celon ĉe dekstre",upcoming:"Vi atingos vian {nth} celon ĉe dekstre",short:"Vi atingis","short-upcoming":"Vi atingos",named:"Vi atingis {waypoint_name}, ĉe dekstre"},"slight left":{default:"Vi atingis vian {nth} celon ĉe maldekstre",upcoming:"Vi atingos vian {nth} celon ĉe maldekstre",short:"Vi atingis","short-upcoming":"Vi atingos",named:"Vi atingis {waypoint_name}, ĉe maldekstre"},straight:{default:"Vi atingis vian {nth} celon",upcoming:"Vi atingos vian {nth} celon rekte",short:"Vi atingis","short-upcoming":"Vi atingos",named:"Vi atingis {waypoint_name} antaŭe"}},continue:{default:{default:"Veturu {modifier}",name:"Veturu {modifier} al {way_name}",destination:"Veturu {modifier} direkte al {destination}",exit:"Veturu {modifier} direkte al {way_name}"},straight:{default:"Veturu rekten",name:"Veturu rekten al {way_name}",destination:"Veturu rekten direkte al {destination}",distance:"Veturu rekten dum {distance}",namedistance:"Veturu rekten al {way_name} dum {distance}"},"sharp left":{default:"Turniĝu ege maldekstren",name:"Turniĝu ege maldekstren al {way_name}",destination:"Turniĝu ege maldekstren direkte al {destination}"},"sharp right":{default:"Turniĝu ege dekstren",name:"Turniĝu ege dekstren al {way_name}",destination:"Turniĝu ege dekstren direkte al {destination}"},"slight left":{default:"Turniĝu ete maldekstren",name:"Turniĝu ete maldekstren al {way_name}",destination:"Turniĝu ete maldekstren direkte al {destination}"},"slight right":{default:"Turniĝu ete dekstren",name:"Turniĝu ete dekstren al {way_name}",destination:"Turniĝu ete dekstren direkte al {destination}"},uturn:{default:"Turniĝu malantaŭen",name:"Turniĝu malantaŭen al {way_name}",destination:"Turniĝu malantaŭen direkte al {destination}"}},depart:{default:{default:"Direktiĝu {direction}",name:"Direktiĝu {direction} al {way_name}",namedistance:"Direktiĝu {direction} al {way_name} tra {distance}"}},"end of road":{default:{default:"Veturu {modifier}",name:"Veturu {modifier} direkte al {way_name}",destination:"Veturu {modifier} direkte al {destination}"},straight:{default:"Veturu rekten",name:"Veturu rekten al {way_name}",destination:"Veturu rekten direkte al {destination}"},uturn:{default:"Turniĝu malantaŭen ĉe fino de la vojo",name:"Turniĝu malantaŭen al {way_name} ĉe fino de la vojo",destination:"Turniĝu malantaŭen direkte al {destination} ĉe fino de la vojo"}},fork:{default:{default:"Daŭru {modifier} ĉe la vojforko",name:"Pluu {modifier} al {way_name}",destination:"Pluu {modifier} direkte al {destination}"},"slight left":{default:"Maldekstren ĉe la vojforko",name:"Pluu maldekstren al {way_name}",destination:"Pluu maldekstren direkte al {destination}"},"slight right":{default:"Dekstren ĉe la vojforko",name:"Pluu dekstren al {way_name}",destination:"Pluu dekstren direkte al {destination}"},"sharp left":{default:"Ege maldekstren ĉe la vojforko",name:"Turniĝu ege maldekstren al {way_name}",destination:"Turniĝu ege maldekstren direkte al {destination}"},"sharp right":{default:"Ege dekstren ĉe la vojforko",name:"Turniĝu ege dekstren al {way_name}",destination:"Turniĝu ege dekstren direkte al {destination}"},uturn:{default:"Turniĝu malantaŭen",name:"Turniĝu malantaŭen al {way_name}",destination:"Turniĝu malantaŭen direkte al {destination}"}},merge:{default:{default:"Enveturu {modifier}",name:"Enveturu {modifier} al {way_name}",destination:"Enveturu {modifier} direkte al {destination}"},straight:{default:"Enveturu",name:"Enveturu al {way_name}",destination:"Enveturu direkte al {destination}"},"slight left":{default:"Enveturu de maldekstre",name:"Enveturu de maldekstre al {way_name}",destination:"Enveturu de maldekstre direkte al {destination}"},"slight right":{default:"Enveturu de dekstre",name:"Enveturu de dekstre al {way_name}",destination:"Enveturu de dekstre direkte al {destination}"},"sharp left":{default:"Enveturu de maldekstre",name:"Enveture de maldekstre al {way_name}",destination:"Enveturu de maldekstre direkte al {destination}"},"sharp right":{default:"Enveturu de dekstre",name:"Enveturu de dekstre al {way_name}",destination:"Enveturu de dekstre direkte al {destination}"},uturn:{default:"Turniĝu malantaŭen",name:"Turniĝu malantaŭen al {way_name}",destination:"Turniĝu malantaŭen direkte al {destination}"}},"new name":{default:{default:"Pluu {modifier}",name:"Pluu {modifier} al {way_name}",destination:"Pluu {modifier} direkte al {destination}"},straight:{default:"Veturu rekten",name:"Veturu rekten al {way_name}",destination:"Veturu rekten direkte al {destination}"},"sharp left":{default:"Turniĝu ege maldekstren",name:"Turniĝu ege maldekstren al {way_name}",destination:"Turniĝu ege maldekstren direkte al {destination}"},"sharp right":{default:"Turniĝu ege dekstren",name:"Turniĝu ege dekstren al {way_name}",destination:"Turniĝu ege dekstren direkte al {destination}"},"slight left":{default:"Pluu ete maldekstren",name:"Pluu ete maldekstren al {way_name}",destination:"Pluu ete maldekstren direkte al {destination}"},"slight right":{default:"Pluu ete dekstren",name:"Pluu ete dekstren al {way_name}",destination:"Pluu ete dekstren direkte al {destination}"},uturn:{default:"Turniĝu malantaŭen",name:"Turniĝu malantaŭen al {way_name}",destination:"Turniĝu malantaŭen direkte al {destination}"}},notification:{default:{default:"Pluu {modifier}",name:"Pluu {modifier} al {way_name}",destination:"Pluu {modifier} direkte al {destination}"},uturn:{default:"Turniĝu malantaŭen",name:"Turniĝu malantaŭen al {way_name}",destination:"Turniĝu malantaŭen direkte al {destination}"}},"off ramp":{default:{default:"Direktiĝu al enveturejo",name:"Direktiĝu al enveturejo al {way_name}",destination:"Direktiĝu al enveturejo direkte al {destination}",exit:"Direktiĝu al elveturejo {exit}",exit_destination:"Direktiĝu al elveturejo {exit} direkte al {destination}"},left:{default:"Direktiĝu al enveturejo ĉe maldekstre",name:"Direktiĝu al enveturejo ĉe maldekstre al {way_name}",destination:"Direktiĝu al enveturejo ĉe maldekstre al {destination}",exit:"Direktiĝu al elveturejo {exit} ĉe maldekstre",exit_destination:"Direktiĝu al elveturejo {exit} ĉe maldekstre direkte al {destination}"},right:{default:"Direktiĝu al enveturejo ĉe dekstre",name:"Direktiĝu al enveturejo ĉe dekstre al {way_name}",destination:"Direktiĝu al enveturejo ĉe dekstre al {destination}",exit:"Direktiĝu al {exit} elveturejo ĉe ldekstre",exit_destination:"Direktiĝu al elveturejo {exit} ĉe dekstre direkte al {destination}"},"sharp left":{default:"Direktiĝu al enveturejo ĉe maldekstre",name:"Direktiĝu al enveturejo ĉe maldekstre al {way_name}",destination:"Direktiĝu al enveturejo ĉe maldekstre al {destination}",exit:"Direktiĝu al {exit} elveturejo ĉe maldekstre",exit_destination:"Direktiĝu al elveturejo {exit} ĉe maldekstre direkte al {destination}"},"sharp right":{default:"Direktiĝu al enveturejo ĉe dekstre",name:"Direktiĝu al enveturejo ĉe dekstre al {way_name}",destination:"Direktiĝu al enveturejo ĉe dekstre al {destination}",exit:"Direktiĝu al elveturejo {exit} ĉe dekstre",exit_destination:"Direktiĝu al elveturejo {exit} ĉe dekstre direkte al {destination}"},"slight left":{default:"Direktiĝu al enveturejo ĉe maldekstre",name:"Direktiĝu al enveturejo ĉe maldekstre al {way_name}",destination:"Direktiĝu al enveturejo ĉe maldekstre al {destination}",exit:"Direktiĝu al {exit} elveturejo ĉe maldekstre",exit_destination:"Direktiĝu al elveturejo {exit} ĉe maldekstre direkte al {destination}"},"slight right":{default:"Direktiĝu al enveturejo ĉe dekstre",name:"Direktiĝu al enveturejo ĉe dekstre al {way_name}",destination:"Direktiĝu al enveturejo ĉe dekstre al {destination}",exit:"Direktiĝu al {exit} elveturejo ĉe ldekstre",exit_destination:"Direktiĝu al elveturejo {exit} ĉe dekstre direkte al {destination}"}},"on ramp":{default:{default:"Direktiĝu al enveturejo",name:"Direktiĝu al enveturejo al {way_name}",destination:"Direktiĝu al enveturejo direkte al {destination}"},left:{default:"Direktiĝu al enveturejo ĉe maldekstre",name:"Direktiĝu al enveturejo ĉe maldekstre al {way_name}",destination:"Direktiĝu al enveturejo ĉe maldekstre al {destination}"},right:{default:"Direktiĝu al enveturejo ĉe dekstre",name:"Direktiĝu al enveturejo ĉe dekstre al {way_name}",destination:"Direktiĝu al enveturejo ĉe dekstre al {destination}"},"sharp left":{default:"Direktiĝu al enveturejo ĉe maldekstre",name:"Direktiĝu al enveturejo ĉe maldekstre al {way_name}",destination:"Direktiĝu al enveturejo ĉe maldekstre al {destination}"},"sharp right":{default:"Direktiĝu al enveturejo ĉe dekstre",name:"Direktiĝu al enveturejo ĉe dekstre al {way_name}",destination:"Direktiĝu al enveturejo ĉe dekstre al {destination}"},"slight left":{default:"Direktiĝu al enveturejo ĉe maldekstre",name:"Direktiĝu al enveturejo ĉe maldekstre al {way_name}",destination:"Direktiĝu al enveturejo ĉe maldekstre al {destination}"},"slight right":{default:"Direktiĝu al enveturejo ĉe dekstre",name:"Direktiĝu al enveturejo ĉe dekstre al {way_name}",destination:"Direktiĝu al enveturejo ĉe dekstre al {destination}"}},rotary:{default:{default:{default:"Enveturu trafikcirklegon",name:"Enveturu trafikcirklegon kaj elveturu al {way_name}",destination:"Enveturu trafikcirklegon kaj elveturu direkte al {destination}"},name:{default:"Enveturu {rotary_name}",name:"Enveturu {rotary_name} kaj elveturu al {way_name}",destination:"Enveturu {rotary_name} kaj elveturu direkte al {destination}"},exit:{default:"Enveturu trafikcirklegon kaj sekve al {exit_number} elveturejo",name:"Enveturu trafikcirklegon kaj sekve al {exit_number} elveturejo al {way_name}",destination:"Enveturu trafikcirklegon kaj sekve al {exit_number} elveturejo direkte al {destination}"},name_exit:{default:"Enveturu {rotary_name} kaj sekve al {exit_number} elveturejo",name:"Enveturu {rotary_name} kaj sekve al {exit_number} elveturejo al {way_name}",destination:"Enveturu {rotary_name} kaj sekve al {exit_number} elveturejo direkte al {destination}"}}},roundabout:{default:{exit:{default:"Enveturu trafikcirklegon kaj sekve al {exit_number} elveturejo",name:"Enveturu trafikcirklegon kaj sekve al {exit_number} elveturejo al {way_name}",destination:"Enveturu trafikcirklegon kaj sekve al {exit_number} elveturejo direkte al {destination}"},default:{default:"Enveturu trafikcirklegon",name:"Enveturu trafikcirklegon kaj elveturu al {way_name}",destination:"Enveturu trafikcirklegon kaj elveturu direkte al {destination}"}}},"roundabout turn":{default:{default:"Veturu {modifier}",name:"Veturu {modifier} al {way_name}",destination:"Veturu {modifier} direkte al {destination}"},left:{default:"Turniĝu maldekstren",name:"Turniĝu maldekstren al {way_name}",destination:"Turniĝu maldekstren direkte al {destination}"},right:{default:"Turniĝu dekstren",name:"Turniĝu dekstren al {way_name}",destination:"Turniĝu dekstren direkte al {destination}"},straight:{default:"Pluu rekten",name:"Veturu rekten al {way_name}",destination:"Veturu rekten direkte al {destination}"}},"exit roundabout":{default:{default:"Elveturu trafikcirklegon",name:"Elveturu trafikcirklegon al {way_name}",destination:"Elveturu trafikcirklegon direkte al {destination}"}},"exit rotary":{default:{default:"Eliru trafikcirklegon",name:"Elveturu trafikcirklegon al {way_name}",destination:"Elveturu trafikcirklegon direkte al {destination}"}},turn:{default:{default:"Veturu {modifier}",name:"Veturu {modifier} al {way_name}",destination:"Veturu {modifier} direkte al {destination}"},left:{default:"Turniĝu maldekstren",name:"Turniĝu maldekstren al {way_name}",destination:"Turniĝu maldekstren direkte al {destination}"},right:{default:"Turniĝu dekstren",name:"Turniĝu dekstren al {way_name}",destination:"Turniĝu dekstren direkte al {destination}"},straight:{default:"Veturu rekten",name:"Veturu rekten al {way_name}",destination:"Veturu rekten direkte al {destination}"}},"use lane":{no_lanes:{default:"Pluu rekten"},default:{default:"{lane_instruction}"}}}}},{}],27:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1ª",2:"2ª",3:"3ª",4:"4ª",5:"5ª",6:"6ª",7:"7ª",8:"8ª",9:"9ª",10:"10ª"},direction:{north:"norte",northeast:"noreste",east:"este",southeast:"sureste",south:"sur",southwest:"suroeste",west:"oeste",northwest:"noroeste"},modifier:{left:"a la izquierda",right:"a la derecha","sharp left":"cerrada a la izquierda","sharp right":"cerrada a la derecha","slight left":"ligeramente a la izquierda","slight right":"ligeramente a la derecha",straight:"recto",uturn:"cambio de sentido"},lanes:{xo:"Mantente a la derecha",ox:"Mantente a la izquierda",xox:"Mantente en el medio",oxo:"Mantente a la izquierda o a la derecha"}},modes:{ferry:{default:"Coge el ferry",name:"Coge el ferry {way_name}",destination:"Coge el ferry hacia {destination}"}},phrase:{"two linked by distance":"{instruction_one} y luego en {distance}, {instruction_two}","two linked":"{instruction_one} y luego {instruction_two}","one in distance":"A {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"salida {exit}"},arrive:{default:{default:"Has llegado a tu {nth} destino",upcoming:"Vas a llegar a tu {nth} destino",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}"},left:{default:"Has llegado a tu {nth} destino, a la izquierda",upcoming:"Vas a llegar a tu {nth} destino, a la izquierda",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, a la izquierda"},right:{default:"Has llegado a tu {nth} destino, a la derecha",upcoming:"Vas a llegar a tu {nth} destino, a la derecha",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, a la derecha"},"sharp left":{default:"Has llegado a tu {nth} destino, a la izquierda",upcoming:"Vas a llegar a tu {nth} destino, a la izquierda",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, a la izquierda"},"sharp right":{default:"Has llegado a tu {nth} destino, a la derecha",upcoming:"Vas a llegar a tu {nth} destino, a la derecha",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, a la derecha"},"slight right":{default:"Has llegado a tu {nth} destino, a la derecha",upcoming:"Vas a llegar a tu {nth} destino, a la derecha",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, a la derecha"},"slight left":{default:"Has llegado a tu {nth} destino, a la izquierda",upcoming:"Vas a llegar a tu {nth} destino, a la izquierda",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, a la izquierda"},straight:{default:"Has llegado a tu {nth} destino, en frente",upcoming:"Vas a llegar a tu {nth} destino, en frente",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, en frente"}},continue:{default:{default:"Gire {modifier}",name:"Cruce {modifier} en {way_name}",destination:"Gire {modifier} hacia {destination}",exit:"Gire {modifier} en {way_name}"},straight:{default:"Continúa recto",name:"Continúa en {way_name}",destination:"Continúa hacia {destination}",distance:"Continúa recto por {distance}",namedistance:"Continúa recto en {way_name} por {distance}"},"sharp left":{default:"Gire a la izquierda",name:"Gire a la izquierda en {way_name}",destination:"Gire a la izquierda hacia {destination}"},"sharp right":{default:"Gire a la derecha",name:"Gire a la derecha en {way_name}",destination:"Gire a la derecha hacia {destination}"},"slight left":{default:"Gire a la izquierda",name:"Doble levemente a la izquierda en {way_name}",destination:"Gire a la izquierda hacia {destination}"},"slight right":{default:"Gire a la izquierda",name:"Doble levemente a la derecha en {way_name}",destination:"Gire a la izquierda hacia {destination}"},uturn:{default:"Haz un cambio de sentido",name:"Haz un cambio de sentido y continúa en {way_name}",destination:"Haz un cambio de sentido hacia {destination}"}},depart:{default:{default:"Dirígete al {direction}",name:"Dirígete al {direction} por {way_name}",namedistance:"Dirígete al {direction} en {way_name} por {distance}"}},"end of road":{default:{default:"Al final de la calle gira {modifier}",name:"Al final de la calle gira {modifier} por {way_name}",destination:"Al final de la calle gira {modifier} hacia {destination}"},straight:{default:"Al final de la calle continúa recto",name:"Al final de la calle continúa recto por {way_name}",destination:"Al final de la calle continúa recto hacia {destination}"},uturn:{default:"Al final de la calle haz un cambio de sentido",name:"Al final de la calle haz un cambio de sentido en {way_name}",destination:"Al final de la calle haz un cambio de sentido hacia {destination}"}},fork:{default:{default:"Mantente {modifier} en el cruce",name:"Mantente {modifier} por {way_name}",destination:"Mantente {modifier} hacia {destination}"},"slight left":{default:"Mantente a la izquierda en el cruce",name:"Mantente a la izquierda por {way_name}",destination:"Mantente a la izquierda hacia {destination}"},"slight right":{default:"Mantente a la derecha en el cruce",name:"Mantente a la derecha por {way_name}",destination:"Mantente a la derecha hacia {destination}"},"sharp left":{default:"Gira la izquierda en el cruce",name:"Gira a la izquierda por {way_name}",destination:"Gira a la izquierda hacia {destination}"},"sharp right":{default:"Gira a la derecha en el cruce",name:"Gira a la derecha por {way_name}",destination:"Gira a la derecha hacia {destination}"},uturn:{default:"Haz un cambio de sentido",name:"Haz un cambio de sentido en {way_name}",destination:"Haz un cambio de sentido hacia {destination}"}},merge:{default:{default:"Incorpórate {modifier}",name:"Incorpórate {modifier} por {way_name}",destination:"Incorpórate {modifier} hacia {destination}"},straight:{default:"Incorpórate",name:"Incorpórate por {way_name}",destination:"Incorpórate hacia {destination}"},"slight left":{default:"Incorpórate a la izquierda",name:"Incorpórate a la izquierda por {way_name}",destination:"Incorpórate a la izquierda hacia {destination}"},"slight right":{default:"Incorpórate a la derecha",name:"Incorpórate a la derecha por {way_name}",destination:"Incorpórate a la derecha hacia {destination}"},"sharp left":{default:"Incorpórate a la izquierda",name:"Incorpórate a la izquierda por {way_name}",destination:"Incorpórate a la izquierda hacia {destination}"},"sharp right":{default:"Incorpórate a la derecha",name:"Incorpórate a la derecha por {way_name}",destination:"Incorpórate a la derecha hacia {destination}"},uturn:{default:"Haz un cambio de sentido",name:"Haz un cambio de sentido en {way_name}",destination:"Haz un cambio de sentido hacia {destination}"}},"new name":{default:{default:"Continúa {modifier}",name:"Continúa {modifier} por {way_name}",destination:"Continúa {modifier} hacia {destination}"},straight:{default:"Continúa recto",name:"Continúa por {way_name}",destination:"Continúa hacia {destination}"},"sharp left":{default:"Gira a la izquierda",name:"Gira a la izquierda por {way_name}",destination:"Gira a la izquierda hacia {destination}"},"sharp right":{default:"Gira a la derecha",name:"Gira a la derecha por {way_name}",destination:"Gira a la derecha hacia {destination}"},"slight left":{default:"Continúa ligeramente por la izquierda",name:"Continúa ligeramente por la izquierda por {way_name}",destination:"Continúa ligeramente por la izquierda hacia {destination}"},"slight right":{default:"Continúa ligeramente por la derecha",name:"Continúa ligeramente por la derecha por {way_name}",destination:"Continúa ligeramente por la derecha hacia {destination}"},uturn:{default:"Haz un cambio de sentido",name:"Haz un cambio de sentido en {way_name}",destination:"Haz un cambio de sentido hacia {destination}"}},notification:{default:{default:"Continúa {modifier}",name:"Continúa {modifier} por {way_name}",destination:"Continúa {modifier} hacia {destination}"},uturn:{default:"Haz un cambio de sentido",name:"Haz un cambio de sentido en {way_name}",destination:"Haz un cambio de sentido hacia {destination}"}},"off ramp":{default:{default:"Coge la cuesta abajo",name:"Coge la cuesta abajo por {way_name}",destination:"Coge la cuesta abajo hacia {destination}",exit:"Coge la cuesta abajo {exit}",exit_destination:"Coge la cuesta abajo {exit} hacia {destination}"},left:{default:"Coge la cuesta abajo de la izquierda",name:"Coge la cuesta abajo de la izquierda por {way_name}",destination:"Coge la cuesta abajo de la izquierda hacia {destination}",exit:"Coge la cuesta abajo {exit} a tu izquierda",exit_destination:"Coge la cuesta abajo {exit} a tu izquierda hacia {destination}"},right:{default:"Coge la cuesta abajo de la derecha",name:"Coge la cuesta abajo de la derecha por {way_name}",destination:"Coge la cuesta abajo de la derecha hacia {destination}",exit:"Coge la cuesta abajo {exit}",exit_destination:"Coge la cuesta abajo {exit} hacia {destination}"},"sharp left":{default:"Coge la cuesta abajo de la izquierda",name:"Coge la cuesta abajo de la izquierda por {way_name}",destination:"Coge la cuesta abajo de la izquierda hacia {destination}",exit:"Coge la cuesta abajo {exit} a tu izquierda",exit_destination:"Coge la cuesta abajo {exit} a tu izquierda hacia {destination}"},"sharp right":{default:"Coge la cuesta abajo de la derecha",name:"Coge la cuesta abajo de la derecha por {way_name}",destination:"Coge la cuesta abajo de la derecha hacia {destination}",exit:"Coge la cuesta abajo {exit}",exit_destination:"Coge la cuesta abajo {exit} hacia {destination}"},"slight left":{default:"Coge la cuesta abajo de la izquierda",name:"Coge la cuesta abajo de la izquierda por {way_name}",destination:"Coge la cuesta abajo de la izquierda hacia {destination}",exit:"Coge la cuesta abajo {exit} a tu izquierda",exit_destination:"Coge la cuesta abajo {exit} a tu izquierda hacia {destination}"},"slight right":{default:"Coge la cuesta abajo de la derecha",name:"Coge la cuesta abajo de la derecha por {way_name}",destination:"Coge la cuesta abajo de la derecha hacia {destination}",exit:"Coge la cuesta abajo {exit}",exit_destination:"Coge la cuesta abajo {exit} hacia {destination}"}},"on ramp":{default:{default:"Coge la cuesta",name:"Coge la cuesta por {way_name}",destination:"Coge la cuesta hacia {destination}"},left:{default:"Coge la cuesta de la izquierda",name:"Coge la cuesta de la izquierda por {way_name}",destination:"Coge la cuesta de la izquierda hacia {destination}"},right:{default:"Coge la cuesta de la derecha",name:"Coge la cuesta de la derecha por {way_name}",destination:"Coge la cuesta de la derecha hacia {destination}"},"sharp left":{default:"Coge la cuesta de la izquierda",name:"Coge la cuesta de la izquierda por {way_name}",destination:"Coge la cuesta de la izquierda hacia {destination}"},"sharp right":{default:"Coge la cuesta de la derecha",name:"Coge la cuesta de la derecha por {way_name}",destination:"Coge la cuesta de la derecha hacia {destination}"},"slight left":{default:"Coge la cuesta de la izquierda",name:"Coge la cuesta de la izquierda por {way_name}",destination:"Coge la cuesta de la izquierda hacia {destination}"},"slight right":{default:"Coge la cuesta de la derecha",name:"Coge la cuesta de la derecha por {way_name}",destination:"Coge la cuesta de la derecha hacia {destination}"}},rotary:{default:{default:{default:"Incorpórate en la rotonda",name:"En la rotonda sal por {way_name}",destination:"En la rotonda sal hacia {destination}"},name:{default:"En {rotary_name}",name:"En {rotary_name} sal por {way_name}",destination:"En {rotary_name} sal hacia {destination}"},exit:{default:"En la rotonda toma la {exit_number} salida",
2170name:"En la rotonda toma la {exit_number} salida por {way_name}",destination:"En la rotonda toma la {exit_number} salida hacia {destination}"},name_exit:{default:"En {rotary_name} toma la {exit_number} salida",name:"En {rotary_name} toma la {exit_number} salida por {way_name}",destination:"En {rotary_name} toma la {exit_number} salida hacia {destination}"}}},roundabout:{default:{exit:{default:"En la rotonda toma la {exit_number} salida",name:"En la rotonda toma la {exit_number} salida por {way_name}",destination:"En la rotonda toma la {exit_number} salida hacia {destination}"},default:{default:"Incorpórate en la rotonda",name:"Incorpórate en la rotonda y sal en {way_name}",destination:"Incorpórate en la rotonda y sal hacia {destination}"}}},"roundabout turn":{default:{default:"Siga {modifier}",name:"Siga {modifier} en {way_name}",destination:"Siga {modifier} hacia {destination}"},left:{default:"Gire a la izquierda",name:"Gire a la izquierda en {way_name}",destination:"Gire a la izquierda hacia {destination}"},right:{default:"Gire a la derecha",name:"Gire a la derecha en {way_name}",destination:"Gire a la derecha hacia {destination}"},straight:{default:"Continúa recto",name:"Continúa recto por {way_name}",destination:"Continúa recto hacia {destination}"}},"exit roundabout":{default:{default:"Sal la rotonda",name:"Toma la salida por {way_name}",destination:"Toma la salida hacia {destination}"}},"exit rotary":{default:{default:"Sal la rotonda",name:"Toma la salida por {way_name}",destination:"Toma la salida hacia {destination}"}},turn:{default:{default:"Gira {modifier}",name:"Gira {modifier} por {way_name}",destination:"Gira {modifier} hacia {destination}"},left:{default:"Gira a la izquierda",name:"Gira a la izquierda por {way_name}",destination:"Gira a la izquierda hacia {destination}"},right:{default:"Gira a la derecha",name:"Gira a la derecha por {way_name}",destination:"Gira a la derecha hacia {destination}"},straight:{default:"Continúa recto",name:"Continúa recto por {way_name}",destination:"Continúa recto hacia {destination}"}},"use lane":{no_lanes:{default:"Continúa recto"},default:{default:"{lane_instruction}"}}}}},{}],28:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1ª",2:"2ª",3:"3ª",4:"4ª",5:"5ª",6:"6ª",7:"7ª",8:"8ª",9:"9ª",10:"10ª"},direction:{north:"norte",northeast:"noreste",east:"este",southeast:"sureste",south:"sur",southwest:"suroeste",west:"oeste",northwest:"noroeste"},modifier:{left:"izquierda",right:"derecha","sharp left":"cerrada a la izquierda","sharp right":"cerrada a la derecha","slight left":"levemente a la izquierda","slight right":"levemente a la derecha",straight:"recto",uturn:"cambio de sentido"},lanes:{xo:"Mantente a la derecha",ox:"Mantente a la izquierda",xox:"Mantente en el medio",oxo:"Mantente a la izquierda o derecha"}},modes:{ferry:{default:"Coge el ferry",name:"Coge el ferry {way_name}",destination:"Coge el ferry a {destination}"}},phrase:{"two linked by distance":"{instruction_one} y luego a {distance}, {instruction_two}","two linked":"{instruction_one} y luego {instruction_two}","one in distance":"A {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"salida {exit}"},arrive:{default:{default:"Has llegado a tu {nth} destino",upcoming:"Vas a llegar a tu {nth} destino",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}"},left:{default:"Has llegado a tu {nth} destino, a la izquierda",upcoming:"Vas a llegar a tu {nth} destino, a la izquierda",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, a la izquierda"},right:{default:"Has llegado a tu {nth} destino, a la derecha",upcoming:"Vas a llegar a tu {nth} destino, a la derecha",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, a la derecha"},"sharp left":{default:"Has llegado a tu {nth} destino, a la izquierda",upcoming:"Vas a llegar a tu {nth} destino, a la izquierda",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, a la izquierda"},"sharp right":{default:"Has llegado a tu {nth} destino, a la derecha",upcoming:"Vas a llegar a tu {nth} destino, a la derecha",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, a la derecha"},"slight right":{default:"Has llegado a tu {nth} destino, a la derecha",upcoming:"Vas a llegar a tu {nth} destino, a la derecha",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, a la derecha"},"slight left":{default:"Has llegado a tu {nth} destino, a la izquierda",upcoming:"Vas a llegar a tu {nth} destino, a la izquierda",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, a la izquierda"},straight:{default:"Has llegado a tu {nth} destino, en frente",upcoming:"Vas a llegar a tu {nth} destino, en frente",short:"Has llegado","short-upcoming":"Vas a llegar",named:"Has llegado a {waypoint_name}, en frente"}},continue:{default:{default:"Gira a {modifier}",name:"Cruza a la{modifier}  en {way_name}",destination:"Gira a {modifier} hacia {destination}",exit:"Gira a {modifier} en {way_name}"},straight:{default:"Continúa recto",name:"Continúa en {way_name}",destination:"Continúa hacia {destination}",distance:"Continúa recto por {distance}",namedistance:"Continúa recto en {way_name} por {distance}"},"sharp left":{default:"Gira a la izquierda",name:"Gira a la izquierda en {way_name}",destination:"Gira a la izquierda hacia {destination}"},"sharp right":{default:"Gira a la derecha",name:"Gira a la derecha en {way_name}",destination:"Gira a la derecha hacia {destination}"},"slight left":{default:"Gira a la izquierda",name:"Dobla levemente a la izquierda en {way_name}",destination:"Gira a la izquierda hacia {destination}"},"slight right":{default:"Gira a la izquierda",name:"Dobla levemente a la derecha en {way_name}",destination:"Gira a la izquierda hacia {destination}"},uturn:{default:"Haz un cambio de sentido",name:"Haz un cambio de sentido y continúa en {way_name}",destination:"Haz un cambio de sentido hacia {destination}"}},depart:{default:{default:"Ve a {direction}",name:"Ve a {direction} en {way_name}",namedistance:"Ve a {direction} en {way_name} por {distance}"}},"end of road":{default:{default:"Gira  a {modifier}",name:"Gira a {modifier} en {way_name}",destination:"Gira a {modifier} hacia {destination}"},straight:{default:"Continúa recto",name:"Continúa recto en {way_name}",destination:"Continúa recto hacia {destination}"},uturn:{default:"Haz un cambio de sentido al final de la via",name:"Haz un cambio de sentido en {way_name} al final de la via",destination:"Haz un cambio de sentido hacia {destination} al final de la via"}},fork:{default:{default:"Mantente  {modifier} en el cruza",name:"Mantente {modifier} en {way_name}",destination:"Mantente {modifier} hacia {destination}"},"slight left":{default:"Mantente a la izquierda en el cruza",name:"Mantente a la izquierda en {way_name}",destination:"Mantente a la izquierda hacia {destination}"},"slight right":{default:"Mantente a la derecha en el cruza",name:"Mantente a la derecha en {way_name}",destination:"Mantente a la derecha hacia {destination}"},"sharp left":{default:"Gira a la izquierda en el cruza",name:"Gira a la izquierda en {way_name}",destination:"Gira a la izquierda hacia {destination}"},"sharp right":{default:"Gira a la derecha en el cruza",name:"Gira a la derecha en {way_name}",destination:"Gira a la derecha hacia {destination}"},uturn:{default:"Haz un cambio de sentido",name:"Haz un cambio de sentido en {way_name}",destination:"Haz un cambio de sentido hacia {destination}"}},merge:{default:{default:"Incorpórate a {modifier}",name:"Incorpórate a {modifier} en {way_name}",destination:"Incorpórate a {modifier} hacia {destination}"},straight:{default:"Incorpórate",name:"Incorpórate a {way_name}",destination:"Incorpórate hacia {destination}"},"slight left":{default:"Incorpórate a la izquierda",name:"Incorpórate a la izquierda en {way_name}",destination:"Incorpórate a la izquierda hacia {destination}"},"slight right":{default:"Incorpórate a la derecha",name:"Incorpórate a la derecha en {way_name}",destination:"Incorpórate a la derecha hacia {destination}"},"sharp left":{default:"Incorpórate a la izquierda",name:"Incorpórate a la izquierda en {way_name}",destination:"Incorpórate a la izquierda hacia {destination}"},"sharp right":{default:"Incorpórate a la derecha",name:"Incorpórate a la derecha en {way_name}",destination:"Incorpórate a la derecha hacia {destination}"},uturn:{default:"Haz un cambio de sentido",name:"Haz un cambio de sentido en {way_name}",destination:"Haz un cambio de sentido hacia {destination}"}},"new name":{default:{default:"Continúa {modifier}",name:"Continúa {modifier} en {way_name}",destination:"Continúa {modifier} hacia {destination}"},straight:{default:"Continúa recto",name:"Continúa en {way_name}",destination:"Continúa hacia {destination}"},"sharp left":{default:"Gira a la izquierda",name:"Gira a la izquierda en {way_name}",destination:"Gira a la izquierda hacia {destination}"},"sharp right":{default:"Gira a la derecha",name:"Gira a la derecha en {way_name}",destination:"Gira a la derecha hacia {destination}"},"slight left":{default:"Continúa levemente a la izquierda",name:"Continúa levemente a la izquierda en {way_name}",destination:"Continúa levemente a la izquierda hacia {destination}"},"slight right":{default:"Continúa levemente a la derecha",name:"Continúa levemente a la derecha en {way_name}",destination:"Continúa levemente a la derecha hacia {destination}"},uturn:{default:"Haz un cambio de sentido",name:"Haz un cambio de sentido en {way_name}",destination:"Haz un cambio de sentido hacia {destination}"}},notification:{default:{default:"Continúa {modifier}",name:"Continúa {modifier} en {way_name}",destination:"Continúa {modifier} hacia {destination}"},uturn:{default:"Haz un cambio de sentido",name:"Haz un cambio de sentido en {way_name}",destination:"Haz un cambio de sentido hacia {destination}"}},"off ramp":{default:{default:"Toma la salida",name:"Toma la salida en {way_name}",destination:"Toma la salida hacia {destination}",exit:"Toma la salida {exit}",exit_destination:"Toma la salida {exit} hacia {destination}"},left:{default:"Toma la salida en la izquierda",name:"Toma la salida en la izquierda en {way_name}",destination:"Toma la salida en la izquierda en {destination}",exit:"Toma la salida {exit} en la izquierda",exit_destination:"Toma la salida {exit} en la izquierda hacia {destination}"},right:{default:"Toma la salida en la derecha",name:"Toma la salida en la derecha en {way_name}",destination:"Toma la salida en la derecha hacia {destination}",exit:"Toma la salida {exit} en la derecha",exit_destination:"Toma la salida {exit} en la derecha hacia {destination}"},"sharp left":{default:"Ve cuesta abajo en la izquierda",name:"Ve cuesta abajo en la izquierda en {way_name}",destination:"Ve cuesta abajo en la izquierda hacia {destination}",exit:"Toma la salida {exit} en la izquierda",exit_destination:"Toma la salida {exit} en la izquierda hacia {destination}"},"sharp right":{default:"Ve cuesta abajo en la derecha",name:"Ve cuesta abajo en la derecha en {way_name}",destination:"Ve cuesta abajo en la derecha hacia {destination}",exit:"Toma la salida {exit} en la derecha",exit_destination:"Toma la salida {exit} en la derecha hacia {destination}"},"slight left":{default:"Ve cuesta abajo en la izquierda",name:"Ve cuesta abajo en la izquierda en {way_name}",destination:"Ve cuesta abajo en la izquierda hacia {destination}",exit:"Toma la salida {exit} en la izquierda",exit_destination:"Toma la salida {exit} en la izquierda hacia {destination}"},"slight right":{default:"Toma la salida en la derecha",name:"Toma la salida en la derecha en {way_name}",destination:"Toma la salida en la derecha hacia {destination}",exit:"Toma la salida {exit} en la derecha",exit_destination:"Toma la salida {exit} en la derecha hacia {destination}"}},"on ramp":{default:{default:"Toma la rampa",name:"Toma la rampa en {way_name}",destination:"Toma la rampa hacia {destination}"},left:{default:"Toma la rampa en la izquierda",name:"Toma la rampa en la izquierda en {way_name}",destination:"Toma la rampa en la izquierda hacia {destination}"},right:{default:"Toma la rampa en la derecha",name:"Toma la rampa en la derecha en {way_name}",destination:"Toma la rampa en la derecha hacia {destination}"},"sharp left":{default:"Toma la rampa en la izquierda",name:"Toma la rampa en la izquierda en {way_name}",destination:"Toma la rampa en la izquierda hacia {destination}"},"sharp right":{default:"Toma la rampa en la derecha",name:"Toma la rampa en la derecha en {way_name}",destination:"Toma la rampa en la derecha hacia {destination}"},"slight left":{default:"Toma la rampa en la izquierda",name:"Toma la rampa en la izquierda en {way_name}",destination:"Toma la rampa en la izquierda hacia {destination}"},"slight right":{default:"Toma la rampa en la derecha",name:"Toma la rampa en la derecha en {way_name}",destination:"Toma la rampa en la derecha hacia {destination}"}},rotary:{default:{default:{default:"Entra en la rotonda",name:"Entra en la rotonda y sal en {way_name}",destination:"Entra en la rotonda y sal hacia {destination}"},name:{default:"Entra en {rotary_name}",name:"Entra en {rotary_name} y sal en {way_name}",destination:"Entra en {rotary_name} y sal hacia {destination}"},exit:{default:"Entra en la rotonda y toma la {exit_number} salida",name:"Entra en la rotonda y toma la {exit_number} salida a {way_name}",destination:"Entra en la rotonda y toma la {exit_number} salida hacia {destination}"},name_exit:{default:"Entra en {rotary_name} y coge la {exit_number} salida",name:"Entra en {rotary_name} y coge la {exit_number} salida en {way_name}",destination:"Entra en {rotary_name} y coge la {exit_number} salida hacia {destination}"}}},roundabout:{default:{exit:{default:"Entra en la rotonda y toma la {exit_number} salida",name:"Entra en la rotonda y toma la {exit_number} salida a {way_name}",destination:"Entra en la rotonda y toma la {exit_number} salida hacia {destination}"},default:{default:"Entra en la rotonda",name:"Entra en la rotonda y sal en {way_name}",destination:"Entra en la rotonda y sal hacia {destination}"}}},"roundabout turn":{default:{default:"Sigue {modifier}",name:"Sigue {modifier} en {way_name}",destination:"Sigue {modifier} hacia {destination}"},left:{default:"Gira a la izquierda",name:"Gira a la izquierda en {way_name}",destination:"Gira a la izquierda hacia {destination}"},right:{default:"Gira a la derecha",name:"Gira a la derecha en {way_name}",destination:"Gira a la derecha hacia {destination}"},straight:{default:"Continúa recto",name:"Continúa recto en {way_name}",destination:"Continúa recto hacia {destination}"}},"exit roundabout":{default:{default:"Sal la rotonda",name:"Sal la rotonda en {way_name}",destination:"Sal la rotonda hacia {destination}"}},"exit rotary":{default:{default:"Sal la rotonda",name:"Sal la rotonda en {way_name}",destination:"Sal la rotonda hacia {destination}"}},turn:{default:{default:"Sigue {modifier}",name:"Sigue {modifier} en {way_name}",destination:"Sigue {modifier} hacia {destination}"},left:{default:"Gira a la izquierda",name:"Gira a la izquierda en {way_name}",destination:"Gira a la izquierda hacia {destination}"},right:{default:"Gira a la derecha",name:"Gira a la derecha en {way_name}",destination:"Gira a la derecha hacia {destination}"},straight:{default:"Ve recto",name:"Ve recto en {way_name}",destination:"Ve recto hacia {destination}"}},"use lane":{no_lanes:{default:"Continúa recto"},default:{default:"{lane_instruction}"}}}}},{}],29:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1.",2:"2.",3:"3.",4:"4.",5:"5.",6:"6.",7:"7.",8:"8.",9:"9.",10:"10."},direction:{north:"pohjoiseen",northeast:"koilliseen",east:"itään",southeast:"kaakkoon",south:"etelään",southwest:"lounaaseen",west:"länteen",northwest:"luoteeseen"},modifier:{left:"vasemmall(e/a)",right:"oikeall(e/a)","sharp left":"jyrkästi vasempaan","sharp right":"jyrkästi oikeaan","slight left":"loivasti vasempaan","slight right":"loivasti oikeaan",straight:"suoraan eteenpäin",uturn:"U-käännös"},lanes:{xo:"Pysy oikealla",ox:"Pysy vasemmalla",xox:"Pysy keskellä",oxo:"Pysy vasemmalla tai oikealla"}},modes:{ferry:{default:"Aja lautalle",name:"Aja lautalle {way_name}",destination:"Aja lautalle, jonka määränpää on {destination}"}},phrase:{"two linked by distance":"{instruction_one}, sitten {distance} päästä, {instruction_two}","two linked":"{instruction_one}, sitten {instruction_two}","one in distance":"{distance} päästä, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"{exit}"},arrive:{default:{default:"Olet saapunut {nth} määränpäähäsi",upcoming:"Saavut {nth} määränpäähäsi",short:"Olet saapunut","short-upcoming":"Saavut",named:"Olet saapunut määränpäähän {waypoint_name}"},left:{default:"Olet saapunut {nth} määränpäähäsi, joka on vasemmalla puolellasi",upcoming:"Saavut {nth} määränpäähäsi, joka on vasemmalla puolellasi",short:"Olet saapunut","short-upcoming":"Saavut",named:"Olet saapunut määränpäähän {waypoint_name}, joka on vasemmalla puolellasi"},right:{default:"Olet saapunut {nth} määränpäähäsi, joka on oikealla puolellasi",upcoming:"Saavut {nth} määränpäähäsi, joka on oikealla puolellasi",short:"Olet saapunut","short-upcoming":"Saavut",named:"Olet saapunut määränpäähän {waypoint_name}, joka on oikealla puolellasi"},"sharp left":{default:"Olet saapunut {nth} määränpäähäsi, joka on vasemmalla puolellasi",upcoming:"Saavut {nth} määränpäähäsi, joka on vasemmalla puolellasi",short:"Olet saapunut","short-upcoming":"Saavut",named:"Olet saapunut määränpäähän {waypoint_name}, joka on vasemmalla puolellasi"},"sharp right":{default:"Olet saapunut {nth} määränpäähäsi, joka on oikealla puolellasi",upcoming:"Saavut {nth} määränpäähäsi, joka on oikealla puolellasi",short:"Olet saapunut","short-upcoming":"Saavut",named:"Olet saapunut määränpäähän {waypoint_name}, joka on oikealla puolellasi"},"slight right":{default:"Olet saapunut {nth} määränpäähäsi, joka on oikealla puolellasi",upcoming:"Saavut {nth} määränpäähäsi, joka on oikealla puolellasi",short:"Olet saapunut","short-upcoming":"Saavut",named:"Olet saapunut määränpäähän {waypoint_name}, joka on oikealla puolellasi"},"slight left":{default:"Olet saapunut {nth} määränpäähäsi, joka on vasemmalla puolellasi",upcoming:"Saavut {nth} määränpäähäsi, joka on vasemmalla puolellasi",short:"Olet saapunut","short-upcoming":"Saavut",named:"Olet saapunut määränpäähän {waypoint_name}, joka on vasemmalla puolellasi"},straight:{default:"Olet saapunut {nth} määränpäähäsi, joka on suoraan edessäsi",upcoming:"Saavut {nth} määränpäähäsi, suoraan edessä",short:"Olet saapunut","short-upcoming":"Saavut",named:"Olet saapunut määränpäähän {waypoint_name}, joka on suoraan edessäsi"}},continue:{default:{default:"Käänny {modifier}",name:"Käänny {modifier} pysyäksesi tiellä {way_name}",destination:"Käänny {modifier} suuntana {destination}",exit:"Käänny {modifier} tielle {way_name}"},straight:{default:"Jatka suoraan eteenpäin",name:"Jatka suoraan pysyäksesi tiellä {way_name}",destination:"Jatka suuntana {destination}",distance:"Jatka suoraan {distance}",namedistance:"Jatka tiellä {way_name} {distance}"},"sharp left":{default:"Jatka jyrkästi vasempaan",name:"Jatka jyrkästi vasempaan pysyäksesi tiellä {way_name}",destination:"Jatka jyrkästi vasempaan suuntana {destination}"},"sharp right":{default:"Jatka jyrkästi oikeaan",name:"Jatka jyrkästi oikeaan pysyäksesi tiellä {way_name}",destination:"Jatka jyrkästi oikeaan suuntana {destination}"},"slight left":{default:"Jatka loivasti vasempaan",name:"Jatka loivasti vasempaan pysyäksesi tiellä {way_name}",destination:"Jatka loivasti vasempaan suuntana {destination}"},"slight right":{default:"Jatka loivasti oikeaan",name:"Jatka loivasti oikeaan pysyäksesi tiellä {way_name}",destination:"Jatka loivasti oikeaan suuntana {destination}"},uturn:{default:"Tee U-käännös",name:"Tee U-käännös ja jatka tietä {way_name}",destination:"Tee U-käännös suuntana {destination}"}},depart:{default:{default:"Aja {direction}",name:"Aja tietä {way_name} {direction}",namedistance:"Aja {distance} {direction} tietä {way_name} "}},"end of road":{default:{default:"Käänny {modifier}",name:"Käänny {modifier} tielle {way_name}",destination:"Käänny {modifier} suuntana {destination}"},straight:{default:"Jatka suoraan eteenpäin",name:"Jatka suoraan eteenpäin tielle {way_name}",destination:"Jatka suoraan eteenpäin suuntana {destination}"},uturn:{default:"Tien päässä tee U-käännös",name:"Tien päässä tee U-käännös tielle {way_name}",destination:"Tien päässä tee U-käännös suuntana {destination}"}},fork:{default:{default:"Jatka tienhaarassa {modifier}",name:"Jatka {modifier} tielle {way_name}",destination:"Jatka {modifier} suuntana {destination}"},"slight left":{default:"Pysy vasemmalla tienhaarassa",name:"Pysy vasemmalla tielle {way_name}",destination:"Pysy vasemmalla suuntana {destination}"},"slight right":{default:"Pysy oikealla tienhaarassa",name:"Pysy oikealla tielle {way_name}",destination:"Pysy oikealla suuntana {destination}"},"sharp left":{default:"Käänny tienhaarassa jyrkästi vasempaan",name:"Käänny tienhaarassa jyrkästi vasempaan tielle {way_name}",destination:"Käänny tienhaarassa jyrkästi vasempaan suuntana {destination}"},"sharp right":{default:"Käänny tienhaarassa jyrkästi oikeaan",name:"Käänny tienhaarassa jyrkästi oikeaan tielle {way_name}",destination:"Käänny tienhaarassa jyrkästi oikeaan suuntana {destination}"},uturn:{default:"Tee U-käännös",name:"Tee U-käännös tielle {way_name}",destination:"Tee U-käännös suuntana {destination}"}},merge:{default:{default:"Liity {modifier}",name:"Liity {modifier}, tielle {way_name}",destination:"Liity {modifier}, suuntana {destination}"},straight:{default:"Liity",name:"Liity tielle {way_name}",destination:"Liity suuntana {destination}"},"slight left":{default:"Liity vasemmalle",name:"Liity vasemmalle, tielle {way_name}",destination:"Liity vasemmalle, suuntana {destination}"},"slight right":{default:"Liity oikealle",name:"Liity oikealle, tielle {way_name}",destination:"Liity oikealle, suuntana {destination}"},"sharp left":{default:"Liity vasemmalle",name:"Liity vasemmalle, tielle {way_name}",destination:"Liity vasemmalle, suuntana {destination}"},"sharp right":{default:"Liity oikealle",name:"Liity oikealle, tielle {way_name}",destination:"Liity oikealle, suuntana {destination}"},uturn:{default:"Tee U-käännös",name:"Tee U-käännös tielle {way_name}",destination:"Tee U-käännös suuntana {destination}"}},"new name":{default:{default:"Jatka {modifier}",name:"Jatka {modifier} tielle {way_name}",destination:"Jatka {modifier} suuntana {destination}"},straight:{default:"Jatka suoraan eteenpäin",name:"Jatka tielle {way_name}",destination:"Jatka suuntana {destination}"},"sharp left":{default:"Käänny jyrkästi vasempaan",name:"Käänny jyrkästi vasempaan tielle {way_name}",destination:"Käänny jyrkästi vasempaan suuntana {destination}"},"sharp right":{default:"Käänny jyrkästi oikeaan",name:"Käänny jyrkästi oikeaan tielle {way_name}",destination:"Käänny jyrkästi oikeaan suuntana {destination}"},"slight left":{default:"Jatka loivasti vasempaan",name:"Jatka loivasti vasempaan tielle {way_name}",destination:"Jatka loivasti vasempaan suuntana {destination}"},"slight right":{default:"Jatka loivasti oikeaan",name:"Jatka loivasti oikeaan tielle {way_name}",destination:"Jatka loivasti oikeaan suuntana {destination}"},uturn:{default:"Tee U-käännös",name:"Tee U-käännös tielle {way_name}",destination:"Tee U-käännös suuntana {destination}"}},notification:{default:{default:"Jatka {modifier}",name:"Jatka {modifier} tielle {way_name}",destination:"Jatka {modifier} suuntana {destination}"},uturn:{default:"Tee U-käännös",name:"Tee U-käännös tielle {way_name}",destination:"Tee U-käännös suuntana {destination}"}},"off ramp":{default:{default:"Aja erkanemiskaistalle",name:"Aja erkanemiskaistaa tielle {way_name}",destination:"Aja erkanemiskaistalle suuntana {destination}",exit:"Ota poistuminen {exit}",exit_destination:"Ota poistuminen {exit}, suuntana {destination}"},left:{default:"Aja vasemmalla olevalle erkanemiskaistalle",name:"Aja vasemmalla olevaa erkanemiskaistaa tielle {way_name}",destination:"Aja vasemmalla olevalle erkanemiskaistalle suuntana {destination}",exit:"Ota poistuminen {exit} vasemmalla",exit_destination:"Ota poistuminen {exit} vasemmalla, suuntana {destination}"},right:{default:"Aja oikealla olevalle erkanemiskaistalle",name:"Aja oikealla olevaa erkanemiskaistaa tielle {way_name}",destination:"Aja oikealla olevalle erkanemiskaistalle suuntana {destination}",exit:"Ota poistuminen {exit} oikealla",exit_destination:"Ota poistuminen {exit} oikealla, suuntana {destination}"},"sharp left":{default:"Aja vasemmalla olevalle erkanemiskaistalle",name:"Aja vasemmalla olevaa erkanemiskaistaa tielle {way_name}",destination:"Aja vasemmalla olevalle erkanemiskaistalle suuntana {destination}",exit:"Ota poistuminen {exit} vasemmalla",exit_destination:"Ota poistuminen {exit} vasemmalla, suuntana {destination}"},"sharp right":{default:"Aja oikealla olevalle erkanemiskaistalle",name:"Aja oikealla olevaa erkanemiskaistaa tielle {way_name}",destination:"Aja oikealla olevalle erkanemiskaistalle suuntana {destination}",exit:"Ota poistuminen {exit} oikealla",exit_destination:"Ota poistuminen {exit} oikealla, suuntana {destination}"},"slight left":{default:"Aja vasemmalla olevalle erkanemiskaistalle",name:"Aja vasemmalla olevaa erkanemiskaistaa tielle {way_name}",destination:"Aja vasemmalla olevalle erkanemiskaistalle suuntana {destination}",exit:"Ota poistuminen {exit} vasemmalla",exit_destination:"Ota poistuminen {exit} vasemmalla, suuntana {destination}"},"slight right":{default:"Aja oikealla olevalle erkanemiskaistalle",name:"Aja oikealla olevaa erkanemiskaistaa tielle {way_name}",destination:"Aja oikealla olevalle erkanemiskaistalle suuntana {destination}",exit:"Ota poistuminen {exit} oikealla",exit_destination:"Ota poistuminen {exit} oikealla, suuntana {destination}"}},"on ramp":{default:{default:"Aja erkanemiskaistalle",name:"Aja erkanemiskaistaa tielle {way_name}",destination:"Aja erkanemiskaistalle suuntana {destination}"},left:{default:"Aja vasemmalla olevalle erkanemiskaistalle",name:"Aja vasemmalla olevaa erkanemiskaistaa tielle {way_name}",destination:"Aja vasemmalla olevalle erkanemiskaistalle suuntana {destination}"},right:{default:"Aja oikealla olevalle erkanemiskaistalle",name:"Aja oikealla olevaa erkanemiskaistaa tielle {way_name}",destination:"Aja oikealla olevalle erkanemiskaistalle suuntana {destination}"},"sharp left":{default:"Aja vasemmalla olevalle erkanemiskaistalle",name:"Aja vasemmalla olevaa erkanemiskaistaa tielle {way_name}",destination:"Aja vasemmalla olevalle erkanemiskaistalle suuntana {destination}"},"sharp right":{default:"Aja oikealla olevalle erkanemiskaistalle",name:"Aja oikealla olevaa erkanemiskaistaa tielle {way_name}",destination:"Aja oikealla olevalle erkanemiskaistalle suuntana {destination}"},"slight left":{default:"Aja vasemmalla olevalle erkanemiskaistalle",name:"Aja vasemmalla olevaa erkanemiskaistaa tielle {way_name}",destination:"Aja vasemmalla olevalle erkanemiskaistalle suuntana {destination}"},"slight right":{default:"Aja oikealla olevalle erkanemiskaistalle",name:"Aja oikealla olevaa erkanemiskaistaa tielle {way_name}",destination:"Aja oikealla olevalle erkanemiskaistalle suuntana {destination}"}},rotary:{default:{default:{default:"Aja liikenneympyrään",name:"Aja liikenneympyrään ja valitse erkanemiskaista tielle {way_name}",destination:"Aja liikenneympyrään ja valitse erkanemiskaista suuntana {destination}"},name:{default:"Aja liikenneympyrään {rotary_name}",name:"Aja liikenneympyrään {rotary_name} ja valitse erkanemiskaista tielle {way_name}",destination:"Aja liikenneympyrään {rotary_name} ja valitse erkanemiskaista suuntana {destination}"},exit:{default:"Aja liikenneympyrään ja valitse {exit_number} erkanemiskaista",name:"Aja liikenneympyrään ja valitse {exit_number} erkanemiskaista tielle {way_name}",destination:"Aja liikenneympyrään ja valitse {exit_number} erkanemiskaista suuntana {destination}"},name_exit:{default:"Aja liikenneympyrään {rotary_name} ja valitse {exit_number} erkanemiskaista",name:"Aja liikenneympyrään {rotary_name} ja valitse {exit_number} erkanemiskaista tielle {way_name}",destination:"Aja liikenneympyrään {rotary_name} ja valitse {exit_number} erkanemiskaista suuntana {destination}"}}},roundabout:{default:{exit:{default:"Aja liikenneympyrään ja valitse {exit_number} erkanemiskaista",name:"Aja liikenneympyrään ja valitse {exit_number} erkanemiskaista tielle {way_name}",destination:"Aja liikenneympyrään ja valitse {exit_number} erkanemiskaista suuntana {destination}"},default:{default:"Aja liikenneympyrään",name:"Aja liikenneympyrään ja valitse erkanemiskaista tielle {way_name}",destination:"Aja liikenneympyrään ja valitse erkanemiskaista suuntana {destination}"}}},"roundabout turn":{default:{default:"Käänny {modifier}",name:"Käänny {modifier} tielle {way_name}",destination:"Käänny {modifier} suuntana {destination}"},left:{default:"Käänny vasempaan",name:"Käänny vasempaan tielle {way_name}",destination:"Käänny vasempaan suuntana {destination}"},right:{default:"Käänny oikeaan",name:"Käänny oikeaan tielle {way_name}",destination:"Käänny oikeaan suuntana {destination}"},straight:{default:"Jatka suoraan eteenpäin",name:"Jatka suoraan eteenpäin tielle {way_name}",destination:"Jatka suoraan eteenpäin suuntana {destination}"}},"exit roundabout":{default:{default:"Poistu liikenneympyrästä",name:"Poistu liikenneympyrästä tielle {way_name}",destination:"Poistu liikenneympyrästä suuntana {destination}"}},"exit rotary":{default:{default:"Poistu liikenneympyrästä",name:"Poistu liikenneympyrästä tielle {way_name}",destination:"Poistu liikenneympyrästä suuntana {destination}"}},turn:{default:{default:"Käänny {modifier}",name:"Käänny {modifier} tielle {way_name}",destination:"Käänny {modifier} suuntana {destination}"},left:{default:"Käänny vasempaan",name:"Käänny vasempaan tielle {way_name}",destination:"Käänny vasempaan suuntana {destination}"},right:{default:"Käänny oikeaan",name:"Käänny oikeaan tielle {way_name}",destination:"Käänny oikeaan suuntana {destination}"},straight:{default:"Aja suoraan eteenpäin",name:"Aja suoraan eteenpäin tielle {way_name}",destination:"Aja suoraan eteenpäin suuntana {destination}"}},"use lane":{no_lanes:{default:"Jatka suoraan eteenpäin"},default:{default:"{lane_instruction}"}}}}},{}],30:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"première",2:"seconde",3:"troisième",4:"quatrième",5:"cinquième",6:"sixième",7:"septième",8:"huitième",9:"neuvième",10:"dixième"},direction:{north:"le nord",northeast:"le nord-est",east:"l’est",southeast:"le sud-est",south:"le sud",southwest:"le sud-ouest",west:"l’ouest",northwest:"le nord-ouest"},modifier:{left:"à gauche",right:"à droite","sharp left":"franchement à gauche","sharp right":"franchement à droite","slight left":"légèrement à gauche","slight right":"légèrement à droite",straight:"tout droit",uturn:"demi-tour"},lanes:{xo:"Tenir la droite",ox:"Tenir la gauche",xox:"Rester au milieu",oxo:"Tenir la gauche ou la droite"}},modes:{ferry:{default:"Prendre le ferry",name:"Prendre le ferry {way_name:article}",destination:"Prendre le ferry en direction {destination:preposition}"}},phrase:{"two linked by distance":"{instruction_one}, puis, dans {distance}, {instruction_two}","two linked":"{instruction_one}, puis {instruction_two}","one in distance":"Dans {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"sortie n°{exit}"},arrive:{default:{
2171default:"Vous êtes arrivé à votre {nth} destination",upcoming:"Vous arriverez à votre {nth} destination",short:"Vous êtes arrivé","short-upcoming":"Vous arriverez",named:"Vous êtes arrivé {waypoint_name:arrival}"},left:{default:"Vous êtes arrivé à votre {nth} destination, sur la gauche",upcoming:"Vous arriverez à votre {nth} destination, sur la gauche",short:"Vous êtes arrivé","short-upcoming":"Vous arriverez",named:"Vous êtes arrivé {waypoint_name:arrival}, sur la gauche"},right:{default:"Vous êtes arrivé à votre {nth} destination, sur la droite",upcoming:"Vous arriverez à votre {nth} destination, sur la droite",short:"Vous êtes arrivé","short-upcoming":"Vous arriverez",named:"Vous êtes arrivé à  {waypoint_name:arrival}, sur la droite"},"sharp left":{default:"Vous êtes arrivé à votre {nth} destination, sur la gauche",upcoming:"Vous arriverez à votre {nth} destination, sur la gauche",short:"Vous êtes arrivé","short-upcoming":"Vous arriverez",named:"Vous êtes arrivé {waypoint_name:arrival}, sur la gauche"},"sharp right":{default:"Vous êtes arrivé à votre {nth} destination, sur la droite",upcoming:"Vous arriverez à votre {nth} destination, sur la droite",short:"Vous êtes arrivé","short-upcoming":"Vous arriverez",named:"Vous êtes arrivé {waypoint_name:arrival}, sur la droite"},"slight right":{default:"Vous êtes arrivé à votre {nth} destination, sur la droite",upcoming:"Vous arriverez à votre {nth} destination, sur la droite",short:"Vous êtes arrivé","short-upcoming":"Vous arriverez",named:"Vous êtes arrivé {waypoint_name:arrival}, sur la droite"},"slight left":{default:"Vous êtes arrivé à votre {nth} destination, sur la gauche",upcoming:"Vous arriverez à votre {nth} destination, sur la gauche",short:"Vous êtes arrivé","short-upcoming":"Vous êtes arrivé",named:"Vous êtes arrivé {waypoint_name:arrival}, sur la gauche"},straight:{default:"Vous êtes arrivé à votre {nth} destination, droit devant",upcoming:"Vous arriverez à votre {nth} destination, droit devant",short:"Vous êtes arrivé","short-upcoming":"Vous êtes arrivé",named:"Vous êtes arrivé {waypoint_name:arrival}, droit devant"}},continue:{default:{default:"Tourner {modifier}",name:"Tourner {modifier} pour rester sur {way_name:article}",destination:"Tourner {modifier} en direction {destination:preposition}",exit:"Tourner {modifier} sur {way_name:article}"},straight:{default:"Continuer tout droit",name:"Continuer tout droit pour rester sur {way_name:article}",destination:"Continuer tout droit en direction {destination:preposition}",distance:"Continuer tout droit sur {distance}",namedistance:"Continuer sur {way_name:article} sur {distance}"},"sharp left":{default:"Tourner franchement à gauche",name:"Tourner franchement à gauche pour rester sur {way_name:article}",destination:"Tourner franchement à gauche en direction {destination:preposition}"},"sharp right":{default:"Tourner franchement à droite",name:"Tourner franchement à droite pour rester sur {way_name:article}",destination:"Tourner franchement à droite en direction {destination:preposition}"},"slight left":{default:"Tourner légèrement à gauche",name:"Tourner légèrement à gauche pour rester sur {way_name:article}",destination:"Tourner légèrement à gauche en direction {destination:preposition}"},"slight right":{default:"Tourner légèrement à droite",name:"Tourner légèrement à droite pour rester sur {way_name:article}",destination:"Tourner légèrement à droite en direction {destination:preposition}"},uturn:{default:"Faire demi-tour",name:"Faire demi-tour et continuer sur {way_name:article}",destination:"Faire demi-tour en direction {destination:preposition}"}},depart:{default:{default:"Se diriger vers {direction}",name:"Se diriger vers {direction} sur {way_name:article}",namedistance:"Se diriger vers {direction} sur {way_name:article} sur {distance}"}},"end of road":{default:{default:"Tourner {modifier}",name:"Tourner {modifier} sur {way_name:article}",destination:"Tourner {modifier} en direction {destination:preposition}"},straight:{default:"Continuer tout droit",name:"Continuer tout droit sur {way_name:article}",destination:"Continuer tout droit en direction {destination:preposition}"},uturn:{default:"Faire demi-tour à la fin de la route",name:"Faire demi-tour à la fin {way_name:preposition}",destination:"Faire demi-tour à la fin de la route en direction {destination:preposition}"}},fork:{default:{default:"Tenir {modifier} à l’embranchement",name:"Tenir {modifier} sur {way_name:article}",destination:"Tenir {modifier} en direction {destination:preposition}"},"slight left":{default:"Tenir la gauche à l’embranchement",name:"Tenir la gauche sur {way_name:article}",destination:"Tenir la gauche en direction {destination:preposition}"},"slight right":{default:"Tenir la droite à l’embranchement",name:"Tenir la droite sur {way_name:article}",destination:"Tenir la droite en direction {destination:preposition}"},"sharp left":{default:"Tourner franchement à gauche à l’embranchement",name:"Tourner franchement à gauche sur {way_name:article}",destination:"Tourner franchement à gauche en direction {destination:preposition}"},"sharp right":{default:"Tourner franchement à droite à l’embranchement",name:"Tourner franchement à droite sur {way_name:article}",destination:"Tourner franchement à droite en direction {destination:preposition}"},uturn:{default:"Faire demi-tour",name:"Faire demi-tour sur {way_name:article}",destination:"Faire demi-tour en direction {destination:preposition}"}},merge:{default:{default:"S’insérer {modifier}",name:"S’insérer {modifier} sur {way_name:article}",destination:"S’insérer {modifier} en direction {destination:preposition}"},straight:{default:"S’insérer",name:"S’insérer sur {way_name:article}",destination:"S’insérer en direction {destination:preposition}"},"slight left":{default:"S’insérer légèrement à gauche",name:"S’insérer légèrement à gauche sur {way_name:article}",destination:"S’insérer légèrement à gauche en direction {destination:preposition}"},"slight right":{default:"S’insérer légèrement à droite",name:"S’insérer légèrement à droite sur {way_name:article}",destination:"S’insérer à droite en direction {destination:preposition}"},"sharp left":{default:"S’insérer à gauche",name:"S’insérer à gauche sur {way_name:article}",destination:"S’insérer à gauche en direction {destination:preposition}"},"sharp right":{default:"S’insérer à droite",name:"S’insérer à droite sur {way_name:article}",destination:"S’insérer à droite en direction {destination:preposition}"},uturn:{default:"Faire demi-tour",name:"Faire demi-tour sur {way_name:article}",destination:"Faire demi-tour en direction {destination:preposition}"}},"new name":{default:{default:"Continuer {modifier}",name:"Continuer {modifier} sur {way_name:article}",destination:"Continuer {modifier} en direction {destination:preposition}"},straight:{default:"Continuer tout droit",name:"Continuer tout droit sur {way_name:article}",destination:"Continuer tout droit en direction {destination:preposition}"},"sharp left":{default:"Tourner franchement à gauche",name:"Tourner franchement à gauche sur {way_name:article}",destination:"Tourner franchement à gauche en direction {destination:preposition}"},"sharp right":{default:"Tourner franchement à droite",name:"Tourner franchement à droite sur {way_name:article}",destination:"Tourner franchement à droite en direction {destination:preposition}"},"slight left":{default:"Continuer légèrement à gauche",name:"Continuer légèrement à gauche sur {way_name:article}",destination:"Continuer légèrement à gauche en direction {destination:preposition}"},"slight right":{default:"Continuer légèrement à droite",name:"Continuer légèrement à droite sur {way_name:article}",destination:"Continuer légèrement à droite en direction {destination:preposition}"},uturn:{default:"Faire demi-tour",name:"Faire demi-tour sur {way_name:article}",destination:"Faire demi-tour en direction {destination:preposition}"}},notification:{default:{default:"Continuer {modifier}",name:"Continuer {modifier} sur {way_name:article}",destination:"Continuer {modifier} en direction {destination:preposition}"},uturn:{default:"Faire demi-tour",name:"Faire demi-tour sur {way_name:article}",destination:"Faire demi-tour en direction {destination:preposition}"}},"off ramp":{default:{default:"Prendre la sortie",name:"Prendre la sortie sur {way_name:article}",destination:"Prendre la sortie en direction {destination:preposition}",exit:"Prendre la sortie {exit}",exit_destination:"Prendre la sortie {exit} en direction {destination:preposition}"},left:{default:"Prendre la sortie à gauche",name:"Prendre la sortie à gauche sur {way_name:article}",destination:"Prendre la sortie à gauche en direction {destination:preposition}",exit:"Prendre la sortie {exit} sur la gauche",exit_destination:"Prendre la sortie {exit} sur la gauche en direction {destination:preposition}"},right:{default:"Prendre la sortie à droite",name:"Prendre la sortie à droite sur {way_name:article}",destination:"Prendre la sortie à droite en direction {destination:preposition}",exit:"Prendre la sortie {exit} sur la droite",exit_destination:"Prendre la sortie {exit} sur la droite en direction {destination:preposition}"},"sharp left":{default:"Prendre la sortie à gauche",name:"Prendre la sortie à gauche sur {way_name:article}",destination:"Prendre la sortie à gauche en direction {destination:preposition}",exit:"Prendre la sortie {exit} sur la gauche",exit_destination:"Prendre la sortie {exit} sur la gauche en direction {destination:preposition}"},"sharp right":{default:"Prendre la sortie à droite",name:"Prendre la sortie à droite sur {way_name:article}",destination:"Prendre la sortie à droite en direction {destination:preposition}",exit:"Prendre la sortie {exit} sur la droite",exit_destination:"Prendre la sortie {exit} sur la droite en direction {destination:preposition}"},"slight left":{default:"Prendre la sortie à gauche",name:"Prendre la sortie à gauche sur {way_name:article}",destination:"Prendre la sortie à gauche en direction {destination:preposition}",exit:"Prendre la sortie {exit} sur la gauche",exit_destination:"Prendre la sortie {exit} sur la gauche en direction {destination:preposition}"},"slight right":{default:"Prendre la sortie à droite",name:"Prendre la sortie à droite sur {way_name:article}",destination:"Prendre la sortie à droite en direction {destination:preposition}",exit:"Prendre la sortie {exit} sur la droite",exit_destination:"Prendre la sortie {exit} sur la droite en direction {destination:preposition}"}},"on ramp":{default:{default:"Prendre la sortie",name:"Prendre la sortie sur {way_name:article}",destination:"Prendre la sortie en direction {destination:preposition}"},left:{default:"Prendre la sortie à gauche",name:"Prendre la sortie à gauche sur {way_name:article}",destination:"Prendre la sortie à gauche en direction {destination:preposition}"},right:{default:"Prendre la sortie à droite",name:"Prendre la sortie à droite sur {way_name:article}",destination:"Prendre la sortie à droite en direction {destination:preposition}"},"sharp left":{default:"Prendre la sortie à gauche",name:"Prendre la sortie à gauche sur {way_name:article}",destination:"Prendre la sortie à gauche en direction {destination:preposition}"},"sharp right":{default:"Prendre la sortie à droite",name:"Prendre la sortie à droite sur {way_name:article}",destination:"Prendre la sortie à droite en direction {destination:preposition}"},"slight left":{default:"Prendre la sortie à gauche",name:"Prendre la sortie à gauche sur {way_name:article}",destination:"Prendre la sortie à gauche en direction {destination:preposition}"},"slight right":{default:"Prendre la sortie à droite",name:"Prendre la sortie à droite sur {way_name:article}",destination:"Prendre la sortie à droite en direction {destination:preposition}"}},rotary:{default:{default:{default:"Prendre le rond-point",name:"Prendre le rond-point, puis sortir sur {way_name:article}",destination:"Prendre le rond-point, puis sortir en direction {destination:preposition}"},name:{default:"Prendre {rotary_name:rotary}",name:"Prendre {rotary_name:rotary}, puis sortir par {way_name:article}",destination:"Prendre {rotary_name:rotary}, puis sortir en direction {destination:preposition}"},exit:{default:"Prendre le rond-point, puis la {exit_number} sortie",name:"Prendre le rond-point, puis la {exit_number} sortie sur {way_name:article}",destination:"Prendre le rond-point, puis la {exit_number} sortie en direction {destination:preposition}"},name_exit:{default:"Prendre {rotary_name:rotary}, puis la {exit_number} sortie",name:"Prendre {rotary_name:rotary}, puis la {exit_number} sortie sur {way_name:article}",destination:"Prendre {rotary_name:rotary}, puis la {exit_number} sortie en direction {destination:preposition}"}}},roundabout:{default:{exit:{default:"Prendre le rond-point, puis la {exit_number} sortie",name:"Prendre le rond-point, puis la {exit_number} sortie sur {way_name:article}",destination:"Prendre le rond-point, puis la {exit_number} sortie en direction {destination:preposition}"},default:{default:"Prendre le rond-point",name:"Prendre le rond-point, puis sortir sur {way_name:article}",destination:"Prendre le rond-point, puis sortir en direction {destination:preposition}"}}},"roundabout turn":{default:{default:"Tourner {modifier}",name:"Tourner {modifier} sur {way_name:article}",destination:"Tourner {modifier} en direction {destination:preposition}"},left:{default:"Tourner à gauche",name:"Tourner à gauche sur {way_name:article}",destination:"Tourner à gauche en direction {destination:preposition}"},right:{default:"Tourner à droite",name:"Tourner à droite sur {way_name:article}",destination:"Tourner à droite en direction {destination:preposition}"},straight:{default:"Continuer tout droit",name:"Continuer tout droit sur {way_name:article}",destination:"Continuer tout droit en direction {destination:preposition}"}},"exit roundabout":{default:{default:"Sortir du rond-point",name:"Sortir du rond-point sur {way_name:article}",destination:"Sortir du rond-point en direction {destination:preposition}"}},"exit rotary":{default:{default:"Sortir du rond-point",name:"Sortir du rond-point sur {way_name:article}",destination:"Sortir du rond-point en direction {destination:preposition}"}},turn:{default:{default:"Tourner {modifier}",name:"Tourner {modifier} sur {way_name:article}",destination:"Tourner {modifier} en direction {destination:preposition}"},left:{default:"Tourner à gauche",name:"Tourner à gauche sur {way_name:article}",destination:"Tourner à gauche en direction {destination:preposition}"},right:{default:"Tourner à droite",name:"Tourner à droite sur {way_name:article}",destination:"Tourner à droite en direction {destination:preposition}"},straight:{default:"Aller tout droit",name:"Aller tout droit sur {way_name:article}",destination:"Aller tout droit en direction {destination:preposition}"}},"use lane":{no_lanes:{default:"Continuer tout droit"},default:{default:"{lane_instruction}"}}}}},{}],31:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"ראשונה",2:"שניה",3:"שלישית",4:"רביעית",5:"חמישית",6:"שישית",7:"שביעית",8:"שמינית",9:"תשיעית",10:"עשירית"},direction:{north:"צפון",northeast:"צפון מזרח",east:"מזרח",southeast:"דרום מזרח",south:"דרום",southwest:"דרום מערב",west:"מערב",northwest:"צפון מערב"},modifier:{left:"שמאלה",right:"ימינה","sharp left":"חדה שמאלה","sharp right":"חדה ימינה","slight left":"קלה שמאלה","slight right":"קלה ימינה",straight:"ישר",uturn:"פניית פרסה"},lanes:{xo:"היצמד לימין",ox:"היצמד לשמאל",xox:"המשך בנתיב האמצעי",oxo:"היצמד לימין או לשמאל"}},modes:{ferry:{default:"עלה על המעבורת",name:"עלה על המעבורת {way_name}",destination:"עלה על המעבורת לכיוון {destination}"}},phrase:{"two linked by distance":"{instruction_one}, ואז, בעוד{distance}, {instruction_two}","two linked":"{instruction_one}, ואז {instruction_two}","one in distance":"בעוד {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"יציאה {exit}"},arrive:{default:{default:"הגעת אל היעד ה{nth} שלך",upcoming:"אתה תגיע אל היעד ה{nth} שלך",short:"הגעת","short-upcoming":"תגיע",named:"הגעת אל {waypoint_name}"},left:{default:"הגעת אל היעד ה{nth} שלך משמאלך",upcoming:"אתה תגיע אל היעד ה{nth} שלך משמאלך",short:"הגעת","short-upcoming":"תגיע",named:"הגעת אל {waypoint_name} שלך משמאלך"},right:{default:"הגעת אל היעד ה{nth} שלך מימינך",upcoming:"אתה תגיע אל היעד ה{nth} שלך מימינך",short:"הגעת","short-upcoming":"תגיע",named:"הגעת אל {waypoint_name} שלך מימינך"},"sharp left":{default:"הגעת אל היעד ה{nth} שלך משמאלך",upcoming:"אתה תגיע אל היעד ה{nth} שלך משמאלך",short:"הגעת","short-upcoming":"תגיע",named:"הגעת אל {waypoint_name} שלך משמאלך"},"sharp right":{default:"הגעת אל היעד ה{nth} שלך מימינך",upcoming:"אתה תגיע אל היעד ה{nth} שלך מימינך",short:"הגעת","short-upcoming":"תגיע",named:"הגעת אל {waypoint_name} שלך מימינך"},"slight right":{default:"הגעת אל היעד ה{nth} שלך מימינך",upcoming:"אתה תגיע אל היעד ה{nth} שלך מימינך",short:"הגעת","short-upcoming":"תגיע",named:"הגעת אל {waypoint_name} שלך מימינך"},"slight left":{default:"הגעת אל היעד ה{nth} שלך משמאלך",upcoming:"אתה תגיע אל היעד ה{nth} שלך משמאלך",short:"הגעת","short-upcoming":"תגיע",named:"הגעת אל {waypoint_name} שלך משמאלך"},straight:{default:"הגעת אל היעד ה{nth} שלך, בהמשך",upcoming:"אתה תגיע אל היעד ה{nth} שלך, בהמשך",short:"הגעת","short-upcoming":"תגיע",named:"הגעת אל {waypoint_name}, בהמשך"}},continue:{default:{default:"פנה {modifier}",name:"פנה {modifier} כדי להישאר ב{way_name}",destination:"פנה {modifier} לכיוון {destination}",exit:"פנה {modifier} על {way_name}"},straight:{default:"המשך ישר",name:"המשך ישר כדי להישאר על {way_name}",destination:"המשך לכיוון {destination}",distance:"המשך ישר לאורך {distance}",namedistance:"המשך על {way_name} לאורך {distance}"},"sharp left":{default:"פנה בחדות שמאלה",name:"פנה בחדות שמאלה כדי להישאר על {way_name}",destination:"פנה בחדות שמאלה לכיוון {destination}"},"sharp right":{default:"פנה בחדות ימינה",name:"פנה בחדות ימינה כדי להישאר על {way_name}",destination:"פנה בחדות ימינה לכיוון {destination}"},"slight left":{default:"פנה קלות שמאלה",name:"פנה קלות שמאלה כדי להישאר על {way_name}",destination:"פנה קלות שמאלה לכיוון {destination}"},"slight right":{default:"פנה קלות ימינה",name:"פנה קלות ימינה כדי להישאר על {way_name}",destination:"פנה קלות ימינה לכיוון {destination}"},uturn:{default:"פנה פניית פרסה",name:"פנה פניית פרסה והמשך על {way_name}",destination:"פנה פניית פרסה לכיוון {destination}"}},depart:{default:{default:"התכוונן {direction}",name:"התכוונן {direction} על {way_name}",namedistance:"התכוונן {direction} על {way_name} לאורך {distance}"}},"end of road":{default:{default:"פנה {modifier}",name:"פנה {modifier} על {way_name}",destination:"פנה {modifier} לכיוון {destination}"},straight:{default:"המשך ישר",name:"המשך ישר על {way_name}",destination:"המשך ישר לכיוון {destination}"},uturn:{default:"פנה פניית פרסה בסוף הדרך",name:"פנה פניית פרסה על {way_name} בסוף הדרך",destination:"פנה פניית פרסה לכיוון {destination} בסוף הדרך"}},fork:{default:{default:"היצמד {modifier} בהתפצלות",name:"היצמד {modifier} על {way_name}",destination:"היצמד {modifier} לכיוון {destination}"},"slight left":{default:"היצמד לשמאל בהתפצלות",name:"היצמד לשמאל על {way_name}",destination:"היצמד לשמאל לכיוון {destination}"},"slight right":{default:"היצמד ימינה בהתפצלות",name:"היצמד לימין על {way_name}",destination:"היצמד לימין לכיוון {destination}"},"sharp left":{default:"פנה בחדות שמאלה בהתפצלות",name:"פנה בחדות שמאלה על {way_name}",destination:"פנה בחדות שמאלה לכיוון {destination}"},"sharp right":{default:"פנה בחדות ימינה בהתפצלות",name:"פנה בחדות ימינה על {way_name}",destination:"פנה בחדות ימינה לכיוון {destination}"},uturn:{default:"פנה פניית פרסה",name:"פנה פניית פרסה על {way_name}",destination:"פנה פניית פרסה לכיוון {destination}"}},merge:{default:{default:"השתלב {modifier}",name:"השתלב {modifier} על {way_name}",destination:"השתלב {modifier} לכיוון {destination}"},straight:{default:"השתלב",name:"השתלב על {way_name}",destination:"השתלב לכיוון {destination}"},"slight left":{default:"השתלב שמאלה",name:"השתלב שמאלה על {way_name}",destination:"השתלב שמאלה לכיוון {destination}"},"slight right":{default:"השתלב ימינה",name:"השתלב ימינה על {way_name}",destination:"השתלב ימינה לכיוון {destination}"},"sharp left":{default:"השתלב שמאלה",name:"השתלב שמאלה על {way_name}",destination:"השתלב שמאלה לכיוון {destination}"},"sharp right":{default:"השתלב ימינה",name:"השתלב ימינה על {way_name}",destination:"השתלב ימינה לכיוון {destination}"},uturn:{default:"פנה פניית פרסה",name:"פנה פניית פרסה על {way_name}",destination:"פנה פניית פרסה לכיוון {destination}"}},"new name":{default:{default:"המשך {modifier}",name:"המשך {modifier} על {way_name}",destination:"המשך {modifier} לכיוון {destination}"},straight:{default:"המשך ישר",name:"המשך על {way_name}",destination:"המשך לכיוון {destination}"},"sharp left":{default:"פנה בחדות שמאלה",name:"פנה בחדות שמאלה על {way_name}",destination:"פנה בחדות שמאלה לכיוון {destination}"},"sharp right":{default:"פנה בחדות ימינה",name:"פנה בחדות ימינה על {way_name}",destination:"פנה בחדות ימינה לכיוון {destination}"},"slight left":{default:"המשך בנטייה קלה שמאלה",name:"המשך בנטייה קלה שמאלה על {way_name}",destination:"המשך בנטייה קלה שמאלה לכיוון {destination}"},"slight right":{default:"המשך בנטייה קלה ימינה",name:"המשך בנטייה קלה ימינה על {way_name}",destination:"המשך בנטייה קלה ימינה לכיוון {destination}"},uturn:{default:"פנה פניית פרסה",name:"פנה פניית פרסה על {way_name}",destination:"פנה פניית פרסה לכיוון {destination}"}},notification:{default:{default:"המשך {modifier}",name:"המשך {modifier} על {way_name}",destination:"המשך {modifier} לכיוון {destination}"},uturn:{default:"פנה פניית פרסה",name:"פנה פניית פרסה על {way_name}",destination:"פנה פניית פרסה לכיוון {destination}"}},"off ramp":{default:{default:"צא ביציאה",name:"צא ביציאה על {way_name}",destination:"צא ביציאה לכיוון {destination}",exit:"צא ביציאה {exit}",exit_destination:"צא ביציאה {exit} לכיוון {destination}"},left:{default:"צא ביציאה שמשמאלך",name:"צא ביציאה שמשמאלך על {way_name}",destination:"צא ביציאה שמשמאלך לכיוון {destination}",exit:"צא ביציאה {exit} משמאלך",exit_destination:"צא ביציאה {exit} משמאלך לכיוון {destination}"},right:{default:"צא ביציאה שמימינך",name:"צא ביציאה שמימינך על {way_name}",destination:"צא ביציאה שמימינך לכיוון {destination}",exit:"צא ביציאה {exit} מימינך",exit_destination:"צא ביציאה {exit} מימינך לכיוון {destination}"},"sharp left":{default:"צא ביציאה שבשמאלך",name:"צא ביציאה שמשמאלך על {way_name}",destination:"צא ביציאה שמשמאלך לכיוון {destination}",exit:"צא ביציאה {exit} משמאלך",exit_destination:"צא ביציאה {exit} משמאלך לכיוון {destination}"},"sharp right":{default:"צא ביציאה שמימינך",name:"צא ביציאה שמימינך על {way_name}",destination:"צא ביציאה שמימינך לכיוון {destination}",exit:"צא ביציאה {exit} מימינך",exit_destination:"צא ביציאה {exit} מימינך לכיוון {destination}"},"slight left":{default:"צא ביציאה שבשמאלך",name:"צא ביציאה שמשמאלך על {way_name}",destination:"צא ביציאה שמשמאלך לכיוון {destination}",exit:"צא ביציאה {exit} משמאלך",exit_destination:"צא ביציאה {exit} משמאלך לכיוון {destination}"},"slight right":{default:"צא ביציאה שמימינך",name:"צא ביציאה שמימינך על {way_name}",destination:"צא ביציאה שמימינך לכיוון {destination}",exit:"צא ביציאה {exit} מימינך",exit_destination:"צא ביציאה {exit} מימינך לכיוון {destination}"}},"on ramp":{default:{default:"צא ביציאה",name:"צא ביציאה על {way_name}",destination:"צא ביציאה לכיוון {destination}"},left:{default:"צא ביציאה שבשמאלך",name:"צא ביציאה שמשמאלך על {way_name}",destination:"צא ביציאה שמשמאלך לכיוון {destination}"},right:{default:"צא ביציאה שמימינך",name:"צא ביציאה שמימינך על {way_name}",destination:"צא ביציאה שמימינך לכיוון {destination}"},"sharp left":{default:"צא ביציאה שבשמאלך",name:"צא ביציאה שמשמאלך על {way_name}",destination:"צא ביציאה שמשמאלך לכיוון {destination}"},"sharp right":{default:"צא ביציאה שמימינך",name:"צא ביציאה שמימינך על {way_name}",destination:"צא ביציאה שמימינך לכיוון {destination}"},"slight left":{default:"צא ביציאה שבשמאלך",name:"צא ביציאה שמשמאלך על {way_name}",destination:"צא ביציאה שמשמאלך לכיוון {destination}"},"slight right":{default:"צא ביציאה שמימינך",name:"צא ביציאה שמימינך על {way_name}",destination:"צא ביציאה שמימינך לכיוון {destination}"}},rotary:{default:{default:{default:"השתלב במעגל התנועה",name:"השתלב במעגל התנועה וצא על {way_name}",destination:"השתלב במעגל התנועה וצא לכיוון {destination}"},name:{default:"היכנס ל{rotary_name}",name:"היכנס ל{rotary_name} וצא על {way_name}",destination:"היכנס ל{rotary_name} וצא לכיוון {destination}"},exit:{default:"השתלב במעגל התנועה וצא ביציאה {exit_number}",name:"השתלב במעגל התנועה וצא ביציאה {exit_number} ל{way_name}",destination:"השתלב במעגל התנועה וצא ביציאה {exit_number} לכיוון {destination}"},name_exit:{default:"היכנס ל{rotary_name} וצא ביציאה ה{exit_number}",name:"היכנס ל{rotary_name} וצא ביציאה ה{exit_number} ל{way_name}",destination:"היכנס ל{rotary_name} וצא ביציאה ה{exit_number} לכיוון {destination}"}}},roundabout:{default:{exit:{default:"השתלב במעגל התנועה וצא ביציאה {exit_number}",name:"השתלב במעגל התנועה וצא ביציאה {exit_number} ל{way_name}",destination:"השתלב במעגל התנועה וצא ביציאה {exit_number} לכיוון {destination}"},default:{default:"השתלב במעגל התנועה",name:"השתלב במעגל התנועה וצא על {way_name}",destination:"השתלב במעגל התנועה וצא לכיוון {destination}"}}},"roundabout turn":{default:{default:"פנה {modifier}",name:"פנה {modifier} על {way_name}",destination:"פנה {modifier} לכיוון {destination}"},left:{default:"פנה שמאלה",name:"פנה שמאלה ל{way_name}",destination:"פנה שמאלה לכיוון {destination}"},right:{default:"פנה ימינה",name:"פנה ימינה ל{way_name}",destination:"פנה ימינה לכיוון {destination}"},straight:{default:"המשך ישר",name:"המשך ישר על {way_name}",destination:"המשך ישר לכיוון {destination}"}},"exit roundabout":{default:{default:"צא ממעגל התנועה",name:"צא ממעגל התנועה ל{way_name}",destination:"צא ממעגל התנועה לכיוון {destination}"}},"exit rotary":{default:{default:"צא ממעגל התנועה",name:"צא ממעגל התנועה ל{way_name}",destination:"צא ממעגל התנועה לכיוון {destination}"}},turn:{default:{default:"פנה {modifier}",name:"פנה {modifier} על {way_name}",destination:"פנה {modifier} לכיוון {destination}"},left:{default:"פנה שמאלה",name:"פנה שמאלה ל{way_name}",destination:"פנה שמאלה לכיוון {destination}"},right:{default:"פנה ימינה",name:"פנה ימינה ל{way_name}",destination:"פנה ימינה לכיוון {destination}"},straight:{default:"המשך ישר",name:"המשך ישר ל{way_name}",destination:"המשך ישר לכיוון {destination}"}},"use lane":{no_lanes:{default:"המשך ישר"},default:{default:"{lane_instruction}"}}}}},{}],32:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10"},direction:{north:"utara",northeast:"timur laut",east:"timur",southeast:"tenggara",south:"selatan",southwest:"barat daya",west:"barat",northwest:"barat laut"},modifier:{left:"kiri",right:"kanan","sharp left":"tajam kiri","sharp right":"tajam kanan","slight left":"agak ke kiri","slight right":"agak ke kanan",straight:"lurus",uturn:"putar balik"},lanes:{xo:"Tetap di kanan",ox:"Tetap di kiri",xox:"Tetap di tengah",oxo:"Tetap di kiri atau kanan"}},modes:{ferry:{default:"Naik ferry",name:"Naik ferry di {way_name}",destination:"Naik ferry menuju {destination}"}},phrase:{"two linked by distance":"{instruction_one}, then, in {distance}, {instruction_two}","two linked":"{instruction_one}, then {instruction_two}","one in distance":"In {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"exit {exit}"},arrive:{default:{default:"Anda telah tiba di tujuan ke-{nth}",upcoming:"Anda telah tiba di tujuan ke-{nth}",short:"Anda telah tiba di tujuan ke-{nth}","short-upcoming":"Anda telah tiba di tujuan ke-{nth}",named:"Anda telah tiba di {waypoint_name}"},left:{default:"Anda telah tiba di tujuan ke-{nth}, di sebelah kiri",upcoming:"Anda telah tiba di tujuan ke-{nth}, di sebelah kiri",short:"Anda telah tiba di tujuan ke-{nth}","short-upcoming":"Anda telah tiba di tujuan ke-{nth}",named:"Anda telah tiba di {waypoint_name}, di sebelah kiri"},right:{default:"Anda telah tiba di tujuan ke-{nth}, di sebelah kanan",upcoming:"Anda telah tiba di tujuan ke-{nth}, di sebelah kanan",short:"Anda telah tiba di tujuan ke-{nth}","short-upcoming":"Anda telah tiba di tujuan ke-{nth}",named:"Anda telah tiba di {waypoint_name}, di sebelah kanan"},"sharp left":{default:"Anda telah tiba di tujuan ke-{nth}, di sebelah kiri",upcoming:"Anda telah tiba di tujuan ke-{nth}, di sebelah kiri",short:"Anda telah tiba di tujuan ke-{nth}","short-upcoming":"Anda telah tiba di tujuan ke-{nth}",named:"Anda telah tiba di {waypoint_name}, di sebelah kiri"},"sharp right":{default:"Anda telah tiba di tujuan ke-{nth}, di sebelah kanan",upcoming:"Anda telah tiba di tujuan ke-{nth}, di sebelah kanan",short:"Anda telah tiba di tujuan ke-{nth}","short-upcoming":"Anda telah tiba di tujuan ke-{nth}",named:"Anda telah tiba di {waypoint_name}, di sebelah kanan"},"slight right":{default:"Anda telah tiba di tujuan ke-{nth}, di sebelah kanan",upcoming:"Anda telah tiba di tujuan ke-{nth}, di sebelah kanan",short:"Anda telah tiba di tujuan ke-{nth}","short-upcoming":"Anda telah tiba di tujuan ke-{nth}",named:"Anda telah tiba di {waypoint_name}, di sebelah kanan"},"slight left":{default:"Anda telah tiba di tujuan ke-{nth}, di sebelah kiri",upcoming:"Anda telah tiba di tujuan ke-{nth}, di sebelah kiri",short:"Anda telah tiba di tujuan ke-{nth}","short-upcoming":"Anda telah tiba di tujuan ke-{nth}",named:"Anda telah tiba di {waypoint_name}, di sebelah kiri"},straight:{default:"Anda telah tiba di tujuan ke-{nth}, lurus saja",upcoming:"Anda telah tiba di tujuan ke-{nth}, lurus saja",short:"Anda telah tiba di tujuan ke-{nth}","short-upcoming":"Anda telah tiba di tujuan ke-{nth}",named:"Anda telah tiba di {waypoint_name}, lurus saja"}},continue:{default:{default:"Belok {modifier}",name:"Terus {modifier} ke {way_name}",destination:"Belok {modifier} menuju {destination}",exit:"Belok {modifier} ke {way_name}"},straight:{default:"Lurus terus",name:"Terus ke {way_name}",destination:"Terus menuju {destination}",distance:"Continue straight for {distance}",namedistance:"Continue on {way_name} for {distance}"},"sharp left":{default:"Belok kiri tajam",name:"Make a sharp left to stay on {way_name}",destination:"Belok kiri tajam menuju {destination}"},"sharp right":{default:"Belok kanan tajam",name:"Make a sharp right to stay on {way_name}",destination:"Belok kanan tajam menuju {destination}"},"slight left":{default:"Tetap agak di kiri",name:"Tetap agak di kiri ke {way_name}",destination:"Tetap agak di kiri menuju {destination}"},"slight right":{default:"Tetap agak di kanan",name:"Tetap agak di kanan ke {way_name}",destination:"Tetap agak di kanan menuju {destination}"},uturn:{default:"Putar balik",name:"Putar balik ke arah {way_name}",destination:"Putar balik menuju {destination}"}},depart:{default:{default:"Arah {direction}",name:"Arah {direction} di {way_name}",namedistance:"Head {direction} on {way_name} for {distance}"}},"end of road":{default:{default:"Belok {modifier}",name:"Belok {modifier} ke {way_name}",destination:"Belok {modifier} menuju {destination}"},straight:{default:"Lurus terus",name:"Tetap lurus ke {way_name} ",destination:"Tetap lurus menuju {destination}"},uturn:{default:"Putar balik di akhir jalan",name:"Putar balik di {way_name} di akhir jalan",destination:"Putar balik menuju {destination} di akhir jalan"}},fork:{default:{default:"Tetap {modifier} di pertigaan",name:"Tetap {modifier} di pertigaan ke {way_name}",destination:"Tetap {modifier} di pertigaan menuju {destination}"},"slight left":{default:"Tetap di kiri pada pertigaan",name:"Tetap di kiri pada pertigaan ke arah {way_name}",destination:"Tetap di kiri pada pertigaan menuju {destination}"},"slight right":{default:"Tetap di kanan pada pertigaan",
2172name:"Tetap di kanan pada pertigaan ke arah {way_name}",destination:"Tetap di kanan pada pertigaan menuju {destination}"},"sharp left":{default:"Belok kiri pada pertigaan",name:"Belok kiri tajam ke arah {way_name}",destination:"Belok kiri tajam menuju {destination}"},"sharp right":{default:"Belok kanan pada pertigaan",name:"Belok kanan tajam ke arah {way_name}",destination:"Belok kanan tajam menuju {destination}"},uturn:{default:"Putar balik",name:"Putar balik ke arah {way_name}",destination:"Putar balik menuju {destination}"}},merge:{default:{default:"Bergabung {modifier}",name:"Bergabung {modifier} ke arah {way_name}",destination:"Bergabung {modifier} menuju {destination}"},straight:{default:"Bergabung lurus",name:"Bergabung lurus ke arah {way_name}",destination:"Bergabung lurus menuju {destination}"},"slight left":{default:"Bergabung di kiri",name:"Bergabung di kiri ke arah {way_name}",destination:"Bergabung di kiri menuju {destination}"},"slight right":{default:"Bergabung di kanan",name:"Bergabung di kanan ke arah {way_name}",destination:"Bergabung di kanan menuju {destination}"},"sharp left":{default:"Bergabung di kiri",name:"Bergabung di kiri ke arah {way_name}",destination:"Bergabung di kiri menuju {destination}"},"sharp right":{default:"Bergabung di kanan",name:"Bergabung di kanan ke arah {way_name}",destination:"Bergabung di kanan menuju {destination}"},uturn:{default:"Putar balik",name:"Putar balik ke arah {way_name}",destination:"Putar balik menuju {destination}"}},"new name":{default:{default:"Lanjutkan {modifier}",name:"Lanjutkan {modifier} menuju {way_name}",destination:"Lanjutkan {modifier} menuju {destination}"},straight:{default:"Lurus terus",name:"Terus ke {way_name}",destination:"Terus menuju {destination}"},"sharp left":{default:"Belok kiri tajam",name:"Belok kiri tajam ke arah {way_name}",destination:"Belok kiri tajam menuju {destination}"},"sharp right":{default:"Belok kanan tajam",name:"Belok kanan tajam ke arah {way_name}",destination:"Belok kanan tajam menuju {destination}"},"slight left":{default:"Lanjut dengan agak ke kiri",name:"Lanjut dengan agak di kiri ke {way_name}",destination:"Tetap agak di kiri menuju {destination}"},"slight right":{default:"Tetap agak di kanan",name:"Tetap agak di kanan ke {way_name}",destination:"Tetap agak di kanan menuju {destination}"},uturn:{default:"Putar balik",name:"Putar balik ke arah {way_name}",destination:"Putar balik menuju {destination}"}},notification:{default:{default:"Lanjutkan {modifier}",name:"Lanjutkan {modifier} menuju {way_name}",destination:"Lanjutkan {modifier} menuju {destination}"},uturn:{default:"Putar balik",name:"Putar balik ke arah {way_name}",destination:"Putar balik menuju {destination}"}},"off ramp":{default:{default:"Ambil jalan melandai",name:"Ambil jalan melandai ke {way_name}",destination:"Ambil jalan melandai menuju {destination}",exit:"Take exit {exit}",exit_destination:"Take exit {exit} towards {destination}"},left:{default:"Ambil jalan yang melandai di sebelah kiri",name:"Ambil jalan melandai di sebelah kiri ke arah {way_name}",destination:"Ambil jalan melandai di sebelah kiri menuju {destination}",exit:"Take exit {exit} on the left",exit_destination:"Take exit {exit} on the left towards {destination}"},right:{default:"Ambil jalan melandai di sebelah kanan",name:"Ambil jalan melandai di sebelah kanan ke {way_name}",destination:"Ambil jalan melandai di sebelah kanan menuju {destination}",exit:"Take exit {exit} on the right",exit_destination:"Take exit {exit} on the right towards {destination}"},"sharp left":{default:"Ambil jalan yang melandai di sebelah kiri",name:"Ambil jalan melandai di sebelah kiri ke arah {way_name}",destination:"Ambil jalan melandai di sebelah kiri menuju {destination}",exit:"Take exit {exit} on the left",exit_destination:"Take exit {exit} on the left towards {destination}"},"sharp right":{default:"Ambil jalan melandai di sebelah kanan",name:"Ambil jalan melandai di sebelah kanan ke {way_name}",destination:"Ambil jalan melandai di sebelah kanan menuju {destination}",exit:"Take exit {exit} on the right",exit_destination:"Take exit {exit} on the right towards {destination}"},"slight left":{default:"Ambil jalan yang melandai di sebelah kiri",name:"Ambil jalan melandai di sebelah kiri ke arah {way_name}",destination:"Ambil jalan melandai di sebelah kiri menuju {destination}",exit:"Take exit {exit} on the left",exit_destination:"Take exit {exit} on the left towards {destination}"},"slight right":{default:"Ambil jalan melandai di sebelah kanan",name:"Ambil jalan melandai di sebelah kanan ke {way_name}",destination:"Ambil jalan melandai di sebelah kanan  menuju {destination}",exit:"Take exit {exit} on the right",exit_destination:"Take exit {exit} on the right towards {destination}"}},"on ramp":{default:{default:"Ambil jalan melandai",name:"Ambil jalan melandai ke {way_name}",destination:"Ambil jalan melandai menuju {destination}"},left:{default:"Ambil jalan yang melandai di sebelah kiri",name:"Ambil jalan melandai di sebelah kiri ke arah {way_name}",destination:"Ambil jalan melandai di sebelah kiri menuju {destination}"},right:{default:"Ambil jalan melandai di sebelah kanan",name:"Ambil jalan melandai di sebelah kanan ke {way_name}",destination:"Ambil jalan melandai di sebelah kanan  menuju {destination}"},"sharp left":{default:"Ambil jalan yang melandai di sebelah kiri",name:"Ambil jalan melandai di sebelah kiri ke arah {way_name}",destination:"Ambil jalan melandai di sebelah kiri menuju {destination}"},"sharp right":{default:"Ambil jalan melandai di sebelah kanan",name:"Ambil jalan melandai di sebelah kanan ke {way_name}",destination:"Ambil jalan melandai di sebelah kanan  menuju {destination}"},"slight left":{default:"Ambil jalan yang melandai di sebelah kiri",name:"Ambil jalan melandai di sebelah kiri ke arah {way_name}",destination:"Ambil jalan melandai di sebelah kiri menuju {destination}"},"slight right":{default:"Ambil jalan melandai di sebelah kanan",name:"Ambil jalan melandai di sebelah kanan ke {way_name}",destination:"Ambil jalan melandai di sebelah kanan  menuju {destination}"}},rotary:{default:{default:{default:"Masuk bundaran",name:"Masuk bundaran dan keluar arah {way_name}",destination:"Masuk bundaran dan keluar menuju {destination}"},name:{default:"Masuk {rotary_name}",name:"Masuk {rotary_name} dan keluar arah {way_name}",destination:"Masuk {rotary_name} dan keluar menuju {destination}"},exit:{default:"Masuk bundaran dan ambil jalan keluar {exit_number}",name:"Masuk bundaran dan ambil jalan keluar {exit_number} arah {way_name}",destination:"Masuk bundaran dan ambil jalan keluar {exit_number} menuju {destination}"},name_exit:{default:"Masuk {rotary_name} dan ambil jalan keluar {exit_number}",name:"Masuk {rotary_name} dan ambil jalan keluar {exit_number} arah {way_name}",destination:"Masuk {rotary_name} dan ambil jalan keluar {exit_number} menuju {destination}"}}},roundabout:{default:{exit:{default:"Masuk bundaran dan ambil jalan keluar {exit_number}",name:"Masuk bundaran dan ambil jalan keluar {exit_number} arah {way_name}",destination:"Masuk bundaran dan ambil jalan keluar {exit_number} menuju {destination}"},default:{default:"Masuk bundaran",name:"Masuk bundaran dan keluar arah {way_name}",destination:"Masuk bundaran dan keluar menuju {destination}"}}},"roundabout turn":{default:{default:"Lakukan {modifier}",name:"Lakukan {modifier} ke arah {way_name}",destination:"Lakukan {modifier} menuju {destination}"},left:{default:"Belok kiri",name:"Belok kiri ke {way_name}",destination:"Belok kiri menuju {destination}"},right:{default:"Belok kanan",name:"Belok kanan ke {way_name}",destination:"Belok kanan menuju {destination}"},straight:{default:"Lurus terus",name:"Tetap lurus ke {way_name} ",destination:"Tetap lurus menuju {destination}"}},"exit roundabout":{default:{default:"Lakukan {modifier}",name:"Lakukan {modifier} ke arah {way_name}",destination:"Lakukan {modifier} menuju {destination}"},left:{default:"Belok kiri",name:"Belok kiri ke {way_name}",destination:"Belok kiri menuju {destination}"},right:{default:"Belok kanan",name:"Belok kanan ke {way_name}",destination:"Belok kanan menuju {destination}"},straight:{default:"Lurus terus",name:"Tetap lurus ke {way_name} ",destination:"Tetap lurus menuju {destination}"}},"exit rotary":{default:{default:"Lakukan {modifier}",name:"Lakukan {modifier} ke arah {way_name}",destination:"Lakukan {modifier} menuju {destination}"},left:{default:"Belok kiri",name:"Belok kiri ke {way_name}",destination:"Belok kiri menuju {destination}"},right:{default:"Belok kanan",name:"Belok kanan ke {way_name}",destination:"Belok kanan menuju {destination}"},straight:{default:"Lurus",name:"Lurus arah {way_name}",destination:"Lurus menuju {destination}"}},turn:{default:{default:"Lakukan {modifier}",name:"Lakukan {modifier} ke arah {way_name}",destination:"Lakukan {modifier} menuju {destination}"},left:{default:"Belok kiri",name:"Belok kiri ke {way_name}",destination:"Belok kiri menuju {destination}"},right:{default:"Belok kanan",name:"Belok kanan ke {way_name}",destination:"Belok kanan menuju {destination}"},straight:{default:"Lurus",name:"Lurus arah {way_name}",destination:"Lurus menuju {destination}"}},"use lane":{no_lanes:{default:"Lurus terus"},default:{default:"{lane_instruction}"}}}}},{}],33:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1ª",2:"2ª",3:"3ª",4:"4ª",5:"5ª",6:"6ª",7:"7ª",8:"8ª",9:"9ª",10:"10ª"},direction:{north:"nord",northeast:"nord-est",east:"est",southeast:"sud-est",south:"sud",southwest:"sud-ovest",west:"ovest",northwest:"nord-ovest"},modifier:{left:"sinistra",right:"destra","sharp left":"sinistra","sharp right":"destra","slight left":"sinistra leggermente","slight right":"destra leggermente",straight:"dritto",uturn:"inversione a U"},lanes:{xo:"Mantieni la destra",ox:"Mantieni la sinistra",xox:"Rimani in mezzo",oxo:"Mantieni la destra o la sinistra"}},modes:{ferry:{default:"Prendi il traghetto",name:"Prendi il traghetto {way_name}",destination:"Prendi il traghetto verso {destination}"}},phrase:{"two linked by distance":"{instruction_one}, poi tra {distance},{instruction_two}","two linked":"{instruction_one}, poi {instruction_two}","one in distance":"tra {distance} {instruction_one}","name and ref":"{name} ({ref})","exit with number":"exit {exit}"},arrive:{default:{default:"Sei arrivato alla tua {nth} destinazione",upcoming:"Sei arrivato alla tua {nth} destinazione",short:"Sei arrivato alla tua {nth} destinazione","short-upcoming":"Sei arrivato alla tua {nth} destinazione",named:"Sei arrivato a {waypoint_name}"},left:{default:"sei arrivato alla tua {nth} destinazione, sulla sinistra",upcoming:"sei arrivato alla tua {nth} destinazione, sulla sinistra",short:"Sei arrivato alla tua {nth} destinazione","short-upcoming":"Sei arrivato alla tua {nth} destinazione",named:"sei arrivato a {waypoint_name}, sulla sinistra"},right:{default:"sei arrivato alla tua {nth} destinazione, sulla destra",upcoming:"sei arrivato alla tua {nth} destinazione, sulla destra",short:"Sei arrivato alla tua {nth} destinazione","short-upcoming":"Sei arrivato alla tua {nth} destinazione",named:"sei arrivato a {waypoint_name}, sulla destra"},"sharp left":{default:"sei arrivato alla tua {nth} destinazione, sulla sinistra",upcoming:"sei arrivato alla tua {nth} destinazione, sulla sinistra",short:"Sei arrivato alla tua {nth} destinazione","short-upcoming":"Sei arrivato alla tua {nth} destinazione",named:"sei arrivato a {waypoint_name}, sulla sinistra"},"sharp right":{default:"sei arrivato alla tua {nth} destinazione, sulla destra",upcoming:"sei arrivato alla tua {nth} destinazione, sulla destra",short:"Sei arrivato alla tua {nth} destinazione","short-upcoming":"Sei arrivato alla tua {nth} destinazione",named:"sei arrivato a {waypoint_name}, sulla destra"},"slight right":{default:"sei arrivato alla tua {nth} destinazione, sulla destra",upcoming:"sei arrivato alla tua {nth} destinazione, sulla destra",short:"Sei arrivato alla tua {nth} destinazione","short-upcoming":"Sei arrivato alla tua {nth} destinazione",named:"sei arrivato a {waypoint_name}, sulla destra"},"slight left":{default:"sei arrivato alla tua {nth} destinazione, sulla sinistra",upcoming:"sei arrivato alla tua {nth} destinazione, sulla sinistra",short:"Sei arrivato alla tua {nth} destinazione","short-upcoming":"Sei arrivato alla tua {nth} destinazione",named:"sei arrivato a {waypoint_name}, sulla sinistra"},straight:{default:"sei arrivato alla tua {nth} destinazione, si trova davanti a te",upcoming:"sei arrivato alla tua {nth} destinazione, si trova davanti a te",short:"Sei arrivato alla tua {nth} destinazione","short-upcoming":"Sei arrivato alla tua {nth} destinazione",named:"sei arrivato a {waypoint_name}, si trova davanti a te"}},continue:{default:{default:"Gira a {modifier}",name:"Gira a {modifier} per stare su {way_name}",destination:"Gira a {modifier} verso {destination}",exit:"Gira a {modifier} in {way_name}"},straight:{default:"Continua dritto",name:"Continua dritto per stare su {way_name}",destination:"Continua verso {destination}",distance:"Continua dritto per {distance}",namedistance:"Continua su {way_name} per {distance}"},"sharp left":{default:"Svolta a sinistra",name:"Fai una stretta curva a sinistra per stare su {way_name}",destination:"Svolta a sinistra verso {destination}"},"sharp right":{default:"Svolta a destra",name:"Fau una stretta curva a destra per stare su {way_name}",destination:"Svolta a destra verso {destination}"},"slight left":{default:"Fai una leggera curva a sinistra",name:"Fai una leggera curva a sinistra per stare su {way_name}",destination:"Fai una leggera curva a sinistra verso {destination}"},"slight right":{default:"Fai una leggera curva a destra",name:"Fai una leggera curva a destra per stare su {way_name}",destination:"Fai una leggera curva a destra verso {destination}"},uturn:{default:"Fai un'inversione a U",name:"Fai un'inversione ad U poi continua su {way_name}",destination:"Fai un'inversione a U verso {destination}"}},depart:{default:{default:"Continua verso {direction}",name:"Continua verso {direction} in {way_name}",namedistance:"Head {direction} on {way_name} for {distance}"}},"end of road":{default:{default:"Gira a {modifier}",name:"Gira a {modifier} in {way_name}",destination:"Gira a {modifier} verso {destination}"},straight:{default:"Continua dritto",name:"Continua dritto in {way_name}",destination:"Continua dritto verso {destination}"},uturn:{default:"Fai un'inversione a U alla fine della strada",name:"Fai un'inversione a U in {way_name} alla fine della strada",destination:"Fai un'inversione a U verso {destination} alla fine della strada"}},fork:{default:{default:"Mantieni la {modifier} al bivio",name:"Mantieni la {modifier} al bivio in {way_name}",destination:"Mantieni la {modifier} al bivio verso {destination}"},"slight left":{default:"Mantieni la sinistra al bivio",name:"Mantieni la sinistra al bivio in {way_name}",destination:"Mantieni la sinistra al bivio verso {destination}"},"slight right":{default:"Mantieni la destra al bivio",name:"Mantieni la destra al bivio in {way_name}",destination:"Mantieni la destra al bivio verso {destination}"},"sharp left":{default:"Svolta a sinistra al bivio",name:"Svolta a sinistra in {way_name}",destination:"Svolta a sinistra verso {destination}"},"sharp right":{default:"Svolta a destra al bivio",name:"Svolta a destra in {way_name}",destination:"Svolta a destra verso {destination}"},uturn:{default:"Fai un'inversione a U",name:"Fai un'inversione a U in {way_name}",destination:"Fai un'inversione a U verso {destination}"}},merge:{default:{default:"Immettiti a {modifier}",name:"Immettiti {modifier} in {way_name}",destination:"Immettiti {modifier} verso {destination}"},straight:{default:"Immettiti a dritto",name:"Immettiti dritto in {way_name}",destination:"Immettiti dritto verso {destination}"},"slight left":{default:"Immettiti a sinistra",name:"Immettiti a sinistra in {way_name}",destination:"Immettiti a sinistra verso {destination}"},"slight right":{default:"Immettiti a destra",name:"Immettiti a destra in {way_name}",destination:"Immettiti a destra verso {destination}"},"sharp left":{default:"Immettiti a sinistra",name:"Immettiti a sinistra in {way_name}",destination:"Immettiti a sinistra verso {destination}"},"sharp right":{default:"Immettiti a destra",name:"Immettiti a destra in {way_name}",destination:"Immettiti a destra verso {destination}"},uturn:{default:"Fai un'inversione a U",name:"Fai un'inversione a U in {way_name}",destination:"Fai un'inversione a U verso {destination}"}},"new name":{default:{default:"Continua a {modifier}",name:"Continua a {modifier} in {way_name}",destination:"Continua a {modifier} verso {destination}"},straight:{default:"Continua dritto",name:"Continua in {way_name}",destination:"Continua verso {destination}"},"sharp left":{default:"Svolta a sinistra",name:"Svolta a sinistra in {way_name}",destination:"Svolta a sinistra verso {destination}"},"sharp right":{default:"Svolta a destra",name:"Svolta a destra in {way_name}",destination:"Svolta a destra verso {destination}"},"slight left":{default:"Continua leggermente a sinistra",name:"Continua leggermente a sinistra in {way_name}",destination:"Continua leggermente a sinistra verso {destination}"},"slight right":{default:"Continua leggermente a destra",name:"Continua leggermente a destra in {way_name} ",destination:"Continua leggermente a destra verso {destination}"},uturn:{default:"Fai un'inversione a U",name:"Fai un'inversione a U in {way_name}",destination:"Fai un'inversione a U verso {destination}"}},notification:{default:{default:"Continua a {modifier}",name:"Continua a {modifier} in {way_name}",destination:"Continua a {modifier} verso {destination}"},uturn:{default:"Fai un'inversione a U",name:"Fai un'inversione a U in {way_name}",destination:"Fai un'inversione a U verso {destination}"}},"off ramp":{default:{default:"Prendi la rampa",name:"Prendi la rampa in {way_name}",destination:"Prendi la rampa verso {destination}",exit:"Prendi l'uscita {exit}",exit_destination:"Prendi l'uscita  {exit} verso {destination}"},left:{default:"Prendi la rampa a sinistra",name:"Prendi la rampa a sinistra in {way_name}",destination:"Prendi la rampa a sinistra verso {destination}",exit:"Prendi l'uscita {exit} a sinistra",exit_destination:"Prendi la {exit}  uscita a sinistra verso {destination}"},right:{default:"Prendi la rampa a destra",name:"Prendi la rampa a destra in {way_name}",destination:"Prendi la rampa a destra verso {destination}",exit:"Prendi la {exit} uscita a destra",exit_destination:"Prendi la {exit} uscita a destra verso {destination}"},"sharp left":{default:"Prendi la rampa a sinistra",name:"Prendi la rampa a sinistra in {way_name}",destination:"Prendi la rampa a sinistra verso {destination}",exit:"Prendi l'uscita {exit} a sinistra",exit_destination:"Prendi la {exit}  uscita a sinistra verso {destination}"},"sharp right":{default:"Prendi la rampa a destra",name:"Prendi la rampa a destra in {way_name}",destination:"Prendi la rampa a destra verso {destination}",exit:"Prendi la {exit} uscita a destra",exit_destination:"Prendi la {exit} uscita a destra verso {destination}"},"slight left":{default:"Prendi la rampa a sinistra",name:"Prendi la rampa a sinistra in {way_name}",destination:"Prendi la rampa a sinistra verso {destination}",exit:"Prendi l'uscita {exit} a sinistra",exit_destination:"Prendi la {exit}  uscita a sinistra verso {destination}"},"slight right":{default:"Prendi la rampa a destra",name:"Prendi la rampa a destra in {way_name}",destination:"Prendi la rampa a destra verso {destination}",exit:"Prendi la {exit} uscita a destra",exit_destination:"Prendi la {exit} uscita a destra verso {destination}"}},"on ramp":{default:{default:"Prendi la rampa",name:"Prendi la rampa in {way_name}",destination:"Prendi la rampa verso {destination}"},left:{default:"Prendi la rampa a sinistra",name:"Prendi la rampa a sinistra in {way_name}",destination:"Prendi la rampa a sinistra verso {destination}"},right:{default:"Prendi la rampa a destra",name:"Prendi la rampa a destra in {way_name}",destination:"Prendi la rampa a destra verso {destination}"},"sharp left":{default:"Prendi la rampa a sinistra",name:"Prendi la rampa a sinistra in {way_name}",destination:"Prendi la rampa a sinistra verso {destination}"},"sharp right":{default:"Prendi la rampa a destra",name:"Prendi la rampa a destra in {way_name}",destination:"Prendi la rampa a destra verso {destination}"},"slight left":{default:"Prendi la rampa a sinistra",name:"Prendi la rampa a sinistra in {way_name}",destination:"Prendi la rampa a sinistra verso {destination}"},"slight right":{default:"Prendi la rampa a destra",name:"Prendi la rampa a destra in {way_name}",destination:"Prendi la rampa a destra verso {destination}"}},rotary:{default:{default:{default:"Immettiti nella rotonda",name:"Immettiti nella ritonda ed esci in {way_name}",destination:"Immettiti nella ritonda ed esci verso {destination}"},name:{default:"Immettiti in {rotary_name}",name:"Immettiti in {rotary_name} ed esci su {way_name}",destination:"Immettiti in {rotary_name} ed esci verso {destination}"},exit:{default:"Immettiti nella rotonda e prendi la {exit_number} uscita",name:"Immettiti nella rotonda e prendi la {exit_number} uscita in {way_name}",destination:"Immettiti nella rotonda e prendi la {exit_number} uscita verso   {destination}"},name_exit:{default:"Immettiti in {rotary_name} e prendi la {exit_number} uscita",name:"Immettiti in {rotary_name} e prendi la {exit_number} uscita in {way_name}",destination:"Immettiti in {rotary_name} e prendi la {exit_number}  uscita verso {destination}"}}},roundabout:{default:{exit:{default:"Immettiti nella rotonda e prendi la {exit_number} uscita",name:"Immettiti nella rotonda e prendi la {exit_number} uscita in {way_name}",destination:"Immettiti nella rotonda e prendi la {exit_number} uscita verso {destination}"},default:{default:"Entra nella rotonda",name:"Entra nella rotonda e prendi l'uscita in {way_name}",destination:"Entra nella rotonda e prendi l'uscita verso {destination}"}}},"roundabout turn":{default:{default:"Fai una {modifier}",name:"Fai una {modifier} in {way_name}",destination:"Fai una {modifier} verso {destination}"},left:{default:"Svolta a sinistra",name:"Svolta a sinistra in {way_name}",destination:"Svolta a sinistra verso {destination}"},right:{default:"Gira a destra",name:"Svolta a destra in {way_name}",destination:"Svolta a destra verso {destination}"},straight:{default:"Continua dritto",name:"Continua dritto in {way_name}",destination:"Continua dritto verso {destination}"}},"exit roundabout":{default:{default:"Fai una {modifier}",name:"Fai una {modifier} in {way_name}",destination:"Fai una {modifier} verso {destination}"},left:{default:"Svolta a sinistra",name:"Svolta a sinistra in {way_name}",destination:"Svolta a sinistra verso {destination}"},right:{default:"Gira a destra",name:"Svolta a destra in {way_name}",destination:"Svolta a destra verso {destination}"},straight:{default:"Continua dritto",name:"Continua dritto in {way_name}",destination:"Continua dritto verso {destination}"}},"exit rotary":{default:{default:"Fai una {modifier}",name:"Fai una {modifier} in {way_name}",destination:"Fai una {modifier} verso {destination}"},left:{default:"Svolta a sinistra",name:"Svolta a sinistra in {way_name}",destination:"Svolta a sinistra verso {destination}"},right:{default:"Gira a destra",name:"Svolta a destra in {way_name}",destination:"Svolta a destra verso {destination}"},straight:{default:"Prosegui dritto",name:"Continua su {way_name}",destination:"Continua verso {destination}"}},turn:{default:{default:"Fai una {modifier}",name:"Fai una {modifier} in {way_name}",destination:"Fai una {modifier} verso {destination}"},left:{default:"Svolta a sinistra",name:"Svolta a sinistra in {way_name}",destination:"Svolta a sinistra verso {destination}"},right:{default:"Gira a destra",name:"Svolta a destra in {way_name}",destination:"Svolta a destra verso {destination}"},straight:{default:"Prosegui dritto",name:"Continua su {way_name}",destination:"Continua verso {destination}"}},"use lane":{no_lanes:{default:"Continua dritto"},default:{default:"{lane_instruction}"}}}}},{}],34:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:false},v5:{constants:{ordinalize:{1:"첫번쩨",2:"두번째",3:"세번째",4:"네번쩨",5:"다섯번째",6:"여섯번째",7:"일곱번째",8:"여덟번째",9:"아홉번째",10:"열번째"},direction:{north:"북쪽",northeast:"북동쪽",east:"동쪽",southeast:"남동쪽",south:"남쪽",southwest:"남서쪽",west:"서쪽",northwest:"북서쪽"},modifier:{left:"좌회전",right:"우회전","sharp left":"바로좌회전","sharp right":"바로우회전","slight left":"조금왼쪽","slight right":"조금오른쪽",straight:"직진",uturn:"유턴"},lanes:{xo:"우측차선 유지",ox:"좌측차선 유지",xox:"중앙유지",oxo:"계속 좌측 또는 우측 차선"}},modes:{ferry:{default:"페리를 타시오",name:"페리를 타시오 {way_name}",destination:"페리를 타고 {destination}까지 가세요."}},phrase:{"two linked by distance":"{instruction_one}, 그리고, {distance} 안에, {instruction_two}","two linked":"{instruction_one}, 그리고 {instruction_two}","one in distance":"{distance} 내에, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"{exit}번으로 나가세요."},arrive:{default:{default:" {nth}목적지에 도착하였습니다.",upcoming:"{nth}목적지에 곧 도착할 예정입니다.",short:"도착하였습니다","short-upcoming":"도착할 예정입니다.",named:"경유지 {waypoint_name}에 도착하였습니다."},left:{default:"좌측에 {nth} 목적지가 있습니다.",upcoming:"좌측에 {nth} 목적지에 도착할 예정입니다.",short:"도착하였습니다","short-upcoming":"목적지에 곧 도착할 예정입니다.",named:"좌측에 경유지 {waypoint_name}에 도착하였습니다."},right:{default:"우측에 {nth} 목적지가 있습니다.",upcoming:"우측에 {nth} 목적지에 도착할 예정입니다.",short:"도착하였습니다","short-upcoming":"목적지에 곧 도착할 예정입니다.",named:"우측에 경유지 {waypoint_name}에 도착하였습니다."},"sharp left":{default:"좌측에 {nth} 목적지가 있습니다.",upcoming:"좌측에 {nth} 목적지에 도착할 예정입니다.",short:"도착하였습니다","short-upcoming":"목적지에 곧 도착할 예정입니다.",named:"좌측에 경유지 {waypoint_name}에 도착하였습니다."},"sharp right":{default:"우측에 {nth} 목적지가 있습니다.",upcoming:"우측에 {nth} 목적지에 도착할 예정입니다.",short:"도착하였습니다","short-upcoming":"목적지에 곧 도착할 예정입니다.",named:"우측에 경유지 {waypoint_name}에 도착하였습니다."},"slight right":{default:"우측에 {nth} 목적지가 있습니다.",upcoming:"우측에 {nth} 목적지에 도착할 예정입니다.",short:"도착하였습니다","short-upcoming":"목적지에 곧 도착할 예정입니다.",named:"우측에 경유지 {waypoint_name}에 도착하였습니다."},"slight left":{default:"좌측에 {nth} 목적지가 있습니다.",upcoming:"좌측에 {nth} 목적지에 도착할 예정입니다.",short:"도착하였습니다","short-upcoming":"목적지에 곧 도착할 예정입니다.",named:"좌측에 경유지 {waypoint_name}에 도착하였습니다."},straight:{default:"바로 앞에 {nth} 목적지가 있습니다.",upcoming:"직진하시면 {nth} 목적지에 도착할 예정입니다.",short:"도착하였습니다","short-upcoming":"목적지에 곧 도착할 예정입니다.",named:"정면에 경유지 {waypoint_name}에 도착하였습니다."}},continue:{default:{default:"{modifier} 회전",name:"{modifier} 회전하고 {way_name}로 직진해 주세요.",destination:"{modifier} 회전하고 {destination}까지 가세요.",exit:"{way_name} 쪽으로 {modifier} 회전 하세요."},straight:{default:"계속 직진해 주세요.",name:"{way_name} 로 계속 직진해 주세요.",destination:"{destination}까지 직진해 주세요.",distance:"{distance}까지 직진해 주세요.",namedistance:"{distance}까지 {way_name}로 가주세요."},"sharp left":{default:"급좌회전 하세요.",name:"급좌회전 하신 후 {way_name}로 가세요.",destination:"급좌회전 하신 후 {destination}로 가세요."},"sharp right":{default:"급우회전 하세요.",name:"급우회전 하고 {way_name}로 가세요.",destination:"급우회전 하신 후 {destination}로 가세요."},"slight left":{default:"약간 좌회전하세요.",name:"약간 좌회전 하고 {way_name}로 가세요.",destination:"약간 좌회전 하신 후 {destination}로 가세요."},"slight right":{default:"약간 우회전하세요.",name:"약간 우회전 하고 {way_name}로 가세요.",destination:"약간 우회전 하신 후 {destination}로 가세요."},uturn:{default:"유턴 하세요",name:"유턴해서 {way_name}로 가세요.",destination:"유턴하신 후 {destination}로 가세요."}},depart:{default:{default:"{direction}로 가세요",name:"{direction} 로 가서 {way_name} 를 이용하세요. ",namedistance:"{direction}로 가서{way_name} 를 {distance}까지 가세요."}},"end of road":{default:{default:"{modifier} 회전하세요.",name:"{modifier}회전하고 {way_name}로 가세요.",destination:"{modifier}회전 하신 후 {destination}로 가세요."},straight:{default:"계속 직진해 주세요.",name:"{way_name}로 계속 직진해 주세요.",destination:"{destination}까지 직진해 주세요."},uturn:{default:"도로 끝까지 가서 유턴해 주세요.",name:"도로 끝까지 가서 유턴해서 {way_name}로 가세요.",destination:"도로 끝까지 가서 유턴해서 {destination} 까지 가세요."}},fork:{default:{default:"갈림길에서 {modifier} 으로 가세요.",name:"{modifier}하고 {way_name}로 가세요.",destination:"{modifier}하고 {destination}까지 가세요."},"slight left":{default:"갈림길에서 좌회전 하세요.",name:"좌회전 해서 {way_name}로 가세요.",destination:"좌회전 해서 {destination}까지 가세요."},"slight right":{default:"갈림길에서 우회전 하세요.",name:"우회전 해서 {way_name}로 가세요.",destination:"우회전 해서 {destination}까지 가세요."},"sharp left":{default:"갈림길에서 급좌회전 하세요.",name:"급좌회전 해서 {way_name}로 가세요.",destination:"급좌회전 해서 {destination}까지 가세요."},"sharp right":{default:"갈림길에서 급우회전 하세요.",name:"급우회전 해서 {way_name}로 가세요.",destination:"급우회전 해서 {destination}까지 가세요."},uturn:{default:"유턴하세요.",name:"유턴해서 {way_name}로 가세요.",destination:"유턴해서 {destination}까지 가세요."}},merge:{default:{default:"{modifier} 합류",name:"{modifier} 합류하여 {way_name}로 가세요.",destination:"{modifier} 합류하여 {destination}로 가세요."},straight:{default:"합류",name:"{way_name}로 합류하세요.",destination:"{destination}로 합류하세요."},"slight left":{default:"좌측으로 합류하세요.",name:"좌측{way_name}로 합류하세요.",destination:"좌측으로 합류하여 {destination}까지 가세요."},"slight right":{default:"우측으로 합류하세요.",name:"우측{way_name}로 합류하세요.",destination:"우측으로 합류하여 {destination}까지 가세요."},"sharp left":{default:"좌측으로 합류하세요.",name:"좌측{way_name}로 합류하세요.",destination:"좌측으로 합류하여 {destination}까지 가세요."},"sharp right":{default:"우측으로 합류하세요.",name:"우측{way_name}로 합류하세요.",destination:"우측으로 합류하여 {destination}까지 가세요."},uturn:{default:"유턴하세요.",name:"유턴해서 {way_name}로 가세요.",destination:"유턴해서 {destination}까지 가세요."}},"new name":{default:{default:"{modifier} 유지하세요.",name:"{modifier} 유지해서 {way_name}로 가세요.",destination:"{modifier} 유지해서 {destination}까지 가세요."},straight:{default:"직진해주세요.",name:"{way_name}로 계속 가세요.",destination:"{destination}까지 계속 가세요."},"sharp left":{default:"급좌회전 하세요.",name:"급좌회전 해서 {way_name}로 가세요.",destination:"급좌회전 해서 {destination}까지 가세요."},"sharp right":{default:"급우회전 하세요.",name:"급우회전 해서 {way_name}로 가세요.",destination:"급우회전 해서 {destination}까지 가세요."},"slight left":{default:"약간 좌회전 해세요.",name:"약간 좌회전해서 {way_name}로 가세요.",destination:"약간 좌회전 해서 {destination}까지 가세요."},"slight right":{default:"약간 우회전 해세요.",name:"약간 우회전해서 {way_name}로 가세요.",destination:"약간 우회전 해서 {destination}까지 가세요."},uturn:{default:"유턴해주세요.",name:"유턴해서 {way_name}로 가세요.",destination:"유턴해서 {destination}까지 가세요."}},notification:{default:{default:"{modifier} 하세요.",name:"{modifier}해서 {way_name}로 가세요.",destination:"{modifier}해서 {destination}까지 가세요."},uturn:{default:"유턴하세요.",name:"유턴해서 {way_name}로 가세요.",destination:"유턴해서 {destination}까지 가세요."}},"off ramp":{default:{default:"램프로 진출해 주세요..",name:"램프로 진출해서 {way_name}로 가세요.",destination:"램프로 진출해서 {destination}까지 가세요.",exit:"{exit} 출구로 나가세요.",exit_destination:"{exit} 출구로 나가서 {destination}까지 가세요."},left:{default:"왼쪽의 램프로 진출해 주세요.",name:"왼쪽의 램프로 진출해서 {way_name}로 가세요.",destination:"왼쪽의 램프로 진출해서 {destination}까지 가세요.",exit:"{exit} 왼쪽의 출구로 나가세요.",exit_destination:"{exit} 왼쪽의 출구로 가나서 {destination}까지 가세요."},right:{default:"오른쪽의 램프로 진출해 주세요.",name:"오른쪽의 램프로 진출해서 {way_name}로 가세요.",destination:"오른쪽의 램프로 진출해서 {destination}까지 가세요.",exit:"{exit} 오른쪽의 출구로 나가세요.",exit_destination:"{exit} 오른쪽의 출구로 가나서 {destination}까지 가세요."},"sharp left":{default:"왼쪽의 램프로 진출해 주세요.",name:"왼쪽의 램프로 진출해서 {way_name}로 가세요.",destination:"왼쪽의 램프로 진출해서 {destination}까지 가세요.",exit:"{exit} 왼쪽의 출구로 나가세요.",exit_destination:"{exit} 왼쪽의 출구로 가나서 {destination}까지 가세요."},"sharp right":{default:"오른쪽의 램프로 진출해 주세요.",name:"오른쪽의 램프로 진출해서 {way_name}로 가세요.",destination:"오른쪽의 램프로 진출해서 {destination}까지 가세요.",exit:"{exit} 오른쪽의 출구로 나가세요.",exit_destination:"{exit} 오른쪽의 출구로 가나서 {destination}까지 가세요."},"slight left":{default:"왼쪽의 램프로 진출해 주세요.",name:"왼쪽의 램프로 진출해서 {way_name}로 가세요.",destination:"왼쪽의 램프로 진출해서 {destination}까지 가세요.",exit:"{exit} 왼쪽의 출구로 나가세요.",exit_destination:"{exit} 왼쪽의 출구로 가나서 {destination}까지 가세요."},"slight right":{default:"오른쪽의 램프로 진출해 주세요.",name:"오른쪽의 램프로 진출해서 {way_name}로 가세요.",destination:"오른쪽의 램프로 진출해서 {destination}까지 가세요.",exit:"{exit} 오른쪽의 출구로 나가세요.",exit_destination:"{exit} 오른쪽의 출구로 가나서 {destination}까지 가세요."}
2173},"on ramp":{default:{default:"램프로 진입해 주세요..",name:"램프로 진입해서 {way_name}로 가세요.",destination:"램프로 진입해서 {destination}까지 가세요."},left:{default:"왼쪽의 램프로 진입해 주세요.",name:"왼쪽의 램프로 진입해서 {way_name}로 가세요.",destination:"왼쪽의 램프로 진입해서 {destination}까지 가세요."},right:{default:"오른쪽의 램프로 진입해 주세요.",name:"오른쪽의 램프로 진입해서 {way_name}로 가세요.",destination:"오른쪽의 램프로 진입해서 {destination}까지 가세요."},"sharp left":{default:"왼쪽의 램프로 진입해 주세요.",name:"왼쪽의 램프로 진입해서 {way_name}로 가세요.",destination:"왼쪽의 램프로 진입해서 {destination}까지 가세요."},"sharp right":{default:"오른쪽의 램프로 진입해 주세요.",name:"오른쪽의 램프로 진입해서 {way_name}로 가세요.",destination:"오른쪽의 램프로 진입해서 {destination}까지 가세요."},"slight left":{default:"왼쪽의 램프로 진입해 주세요.",name:"왼쪽의 램프로 진입해서 {way_name}로 가세요.",destination:"왼쪽의 램프로 진입해서 {destination}까지 가세요."},"slight right":{default:"오른쪽의 램프로 진입해 주세요.",name:"오른쪽의 램프로 진입해서 {way_name}로 가세요.",destination:"오른쪽의 램프로 진입해서 {destination}까지 가세요."}},rotary:{default:{default:{default:"로터리로 진입하세요.",name:"로터리로 진입해서 {way_name} 나가세요.",destination:"로터리로 진입해서 {destination}로 나가세요."},name:{default:"{rotary_name}로 진입하세요.",name:"{rotary_name}로 진입해서 {way_name}로 나가세요.",destination:"{rotary_name}로 진입해서 {destination}로 나가세요."},exit:{default:"로터리로 진입해서 {exit_number} 출구로 나가세요.",name:"로터리로 진입해서 {exit_number} 출구로 나가 {way_name}로 가세요.",destination:"로터리로 진입해서 {exit_number} 출구로 나가 {destination}로 가세요."},name_exit:{default:"{rotary_name}로 진입해서 {exit_number}번 출구로 나가세요.",name:"{rotary_name}로 진입해서 {exit_number}번 출구로 나가 {way_name}로 가세요.",destination:"{rotary_name}로 진입해서 {exit_number}번 출구로 나가 {destination}로 가세요."}}},roundabout:{default:{exit:{default:"로터리로 진입해서 {exit_number}로 나가세요.",name:"로터리로 진입해서 {exit_number}로 나가서 {way_name}로 가세요.",destination:"로터리로 진입해서 {exit_number}로 나가서 {destination}로 가세요."},default:{default:"로터리로 진입하세요.",name:"로터리로 진입해서 {way_name} 나가세요.",destination:"로터리로 진입해서 {destination}로 나가세요."}}},"roundabout turn":{default:{default:"{modifier} 하세요.",name:"{modifier} 하시고 {way_name}로 가세요.",destination:"{modifier} 하시고 {destination}까지 가세요."},left:{default:"좌회전 하세요.",name:"좌회전 하시고 {way_name}로 가세요.",destination:"좌회전 하시고 {destination}까지 가세요."},right:{default:"우회전 하세요.",name:"우회전 하시고 {way_name}로 가세요.",destination:"우회전 하시고 {destination}까지 가세요."},straight:{default:"직진 하세요.",name:"직진하시고 {way_name}로 가세요.",destination:"직진하시고 {destination}까지 가세요."}},"exit roundabout":{default:{default:"로타리에서 진출하세요.",name:"로타리에서 진출해서 {way_name}로 가세요.",destination:"로타리에서 진출해서 {destination}까지 가세요."}},"exit rotary":{default:{default:"로타리에서 진출하세요.",name:"로타리에서 진출해서 {way_name}로 가세요.",destination:"로타리에서 진출해서 {destination}까지 가세요."}},turn:{default:{default:"{modifier} 하세요.",name:"{modifier} 하시고 {way_name}로 가세요.",destination:"{modifier} 하시고 {destination}까지 가세요."},left:{default:"좌회전 하세요.",name:"좌회전 하시고 {way_name}로 가세요.",destination:"좌회전 하시고 {destination}까지 가세요."},right:{default:"우회전 하세요.",name:"우회전 하시고 {way_name}로 가세요.",destination:"우회전 하시고 {destination}까지 가세요."},straight:{default:"직진 하세요.",name:"직진하시고 {way_name}로 가세요.",destination:"직진하시고 {destination}까지 가세요."}},"use lane":{no_lanes:{default:"직진하세요."},default:{default:"{lane_instruction}"}}}}},{}],35:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:false},v5:{constants:{ordinalize:{1:"ပထမ",2:"ဒုတိယ",3:"တတိယ",4:"စတုတၳ",5:"ပဥၥမ",6:"ဆဌမ",7:"သတၱမ",8:"အဌမ",9:"နဝမ",10:"ဒသမ"},direction:{north:"ေျမာက္အရပ္",northeast:"အေရွ႕ေျမာက္အရပ္",east:"အေရွ႕အရပ္",southeast:"အေရွ႕ေတာင္အရပ္",south:"ေတာင္အရပ္",southwest:"အေနာက္ေတာင္အရပ္",west:"အေနာက္အရပ္",northwest:"အေနာက္ေျမာက္အရပ္"},modifier:{left:"ဘယ္ဘက္",right:"ညာဘက္","sharp left":"ဘယ္ဘက္ ေထာင့္ခ်ိဳး","sharp right":"ညာဘက္ ေထာင္႔ခ်ိဳး","slight left":"ဘယ္ဘက္ အနည္းငယ္","slight right":"ညာဘက္ အနည္းငယ္",straight:"ေျဖာင္႔ေျဖာင္႔တန္းတန္း",uturn:"ဂ-ေကြ႔"},lanes:{xo:"ညာဘက္သို႕ဆက္သြားပါ",ox:"ဘယ္ဘက္သို႕ဆက္သြားပါ",xox:"အလယ္တြင္ဆက္ေနပါ",oxo:"ဘယ္ သို႕မဟုတ္ ညာဘက္သို႕ ဆက္သြားပါ"}},modes:{ferry:{default:"ဖယ္ရီ စီးသြားပါ",name:"{way_name}ကို ဖယ္ရီစီးသြားပါ",destination:"{destination}ဆီသို႕ ဖယ္ရီစီးသြားပါ"}},phrase:{"two linked by distance":"{instruction_one}ျပီးေနာက္ {distance}အတြင္း {instruction_two}","two linked":"{instruction_one}ျပီးေနာက္ {instruction_two}","one in distance":"{distance}အတြင္း {instruction_one}","name and ref":"{name}( {ref})","exit with number":"{exit}မွထြက္ပါ"},arrive:{default:{default:"{nth}သင္ သြားလိုေသာ ခရီးပန္းတိုင္သို႕ေရာက္ရွိျပီ",upcoming:"သင္ သြားလိုေသာ {nth}ခရီးပန္းတိုင္သို႕ေရာက္လိမ့္မည္",short:"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္ရိွၿပီ","short-upcoming":"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္လိမ့္မည္",named:"သင္ သည္ {waypoint_name} မွာ ေရာက္ရွိျပီ"},left:{default:"သင္ သြားလိုေသာ {nth}ခရီးပန္းတိုင္သို႕ဘယ္ဘက္တြင္ေရာက္ရွိျပီ",upcoming:"သင္ သြားလိုေသာ {nth}ခရီးပန္းတိုင္သို႕ဘယ္ဘက္တြင္ေရာက္လိမ့္မည္",short:"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္ရိွၿပီ","short-upcoming":"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္လိမ့္မည္",named:"သင္ သည္ {waypoint_name}မွာဘယ္ဘက္ေကြ႕ကာ ေရာက္ရွိျပီ"},right:{default:"သင္ သြားလိုေသာ {nth}ခရီးပန္းတိုင္သို႕ ညာဘက္ေကြ႕ကာ ေရာက္ရွိျပီ",upcoming:"သင္ သြားလိုေသာ{nth} ခရီးပန္းတိုင္သို႕ ညာဘက္ေကြ႕ကာ ေရာက္လိမ့္မည္",short:"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္ရိွၿပီ","short-upcoming":"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္လိမ့္မည္",named:"သင္ သည္ {waypoint_name} မွာညာဘက္ေကြ႕ကာ ေရာက္ရွိျပီ"},"sharp left":{default:"သင္ သြားလိုေသာ {nth}ခရီးပန္းတိုင္သို႕ဘယ္ဘက္တြင္ေရာက္ရွိျပီ",upcoming:"သင္ သြားလိုေသာ {nth}ခရီးပန္းတိုင္သို႕ဘယ္ဘက္တြင္ေရာက္ရွိျပီ",short:"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္ရိွၿပီ","short-upcoming":"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္လိမ့္မည္",named:"သင္ သည္ {waypoint_name}မွာဘယ္ဘက္ေကြ႕ကာ ေရာက္ရွိျပီ"},"sharp right":{default:"သင္ သြားလိုေသာ {nth}ခရီးပန္းတိုင္သို႕ ညာဘက္ေကြ႕ကာ ေရာက္ရွိျပီ",upcoming:"သင္ သြားလိုေသာ{nth} ခရီးပန္းတိုင္သို႕ ညာဘက္ေကြ႕ကာ ေရာက္လိမ့္မည္",short:"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္ရိွၿပီ","short-upcoming":"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္လိမ့္မည္",named:"သင္ သည္ {waypoint_name} မွာညာဘက္ေကြ႕ကာ ေရာက္ရွိျပီ"},"slight right":{default:"သင္ သြားလိုေသာ {nth}ခရီးပန္းတိုင္သို႕ ညာဘက္ေကြ႕ကာ ေရာက္ရွိျပီ",upcoming:"သင္ သြားလိုေသာ{nth} ခရီးပန္းတိုင္သို႕ ညာဘက္ေကြ႕ကာ ေရာက္လိမ့္မည္",short:"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္ရိွၿပီ","short-upcoming":"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္လိမ့္မည္",named:"သင္ သည္ {waypoint_name} မွာညာဘက္ေကြ႕ကာ ေရာက္ရွိျပီ"},"slight left":{default:"သင္ သြားလိုေသာ {nth}ခရီးပန္းတိုင္သို႕ဘယ္ဘက္တြင္ေရာက္ရွိျပီ",upcoming:"သင္ သြားလိုေသာ {nth}ခရီးပန္းတိုင္သို႕ဘယ္ဘက္တြင္ေရာက္ရွိျပီ",short:"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္ရွိျပီ","short-upcoming":"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္လိမ့္မည္",named:"သင္ သည္ {waypoint_name}မွာဘယ္ဘက္ေကြ႕ကာ ေရာက္ရွိျပီ"},straight:{default:"သင္ သြားလိုေသာ {nth}ခရီးပန္းတိုင္သို႕တည့္တည့္သြားကာရာက္ရွိျပီ",upcoming:"သင္ သြားလိုေသာ {nth}ခရီးပန္းတိုင္သို႕တည့္တည့္သြားကာရာက္ရွိမည္",short:"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္ရွိျပီ","short-upcoming":"သင္သြားလိုေသာ ေနရာသို႔ ေရာက္လိမ့္မည္",named:"သင္ သည္ {waypoint_name}မွာတည့္တည့္သြားကာ ေရာက္ရွိျပီ"}},continue:{default:{default:"{modifier}ကိုလွည့္ပါ",name:"{way_name}​​ေပၚတြင္ေနရန္ {modifier}ကိုလွည့္ပါ",destination:"{destination}ဆီသို႕ {modifier}ကို လွည္႕ပါ",exit:"{way_name}​​ေပၚသို႕ {modifier}ကိုလွည့္ပါ"},straight:{default:"ေျဖာင္႔ေျဖာင္႔တန္းတန္း ဆက္သြားပါ",name:"{way_name}​​ေပၚတြင္ေနရန္တည္တည့္ဆက္သြာပါ",destination:"{destination}ဆီသို႕ဆက္သြားပါ",distance:"{distance}ေလာက္ တည့္တည့္ ဆက္သြားပါ",namedistance:"{way_name}​​ေပၚတြင္{distance}ေလာက္ဆက္သြားပါ"},"sharp left":{default:"ဘယ္ဘက္ေထာင့္ခ်ိဳးေကြ႕ပါ",name:"{way_name}​ေပၚတြင္ေနရန္ ဘယ္ဘက္ေထာင့္ခ်ိဳးေကြ႕ပါ",destination:"{destination}ဆီသို႕ ဘယ္ဘက္ေထာင့္ခ်ိဳးေကြ႕ပါ"},"sharp right":{default:"ညာဘက္ ေထာင္႔ခ်ိဳးေကြ႕ပါ",name:"{way_name}​ေပၚတြင္ေနရန္ ညာဘက္ေထာင့္ခ်ိဳးေကြ႕ပါ",destination:"{destination}ဆီသို႕ ညာဘက္ေထာင့္ခ်ိဳးေကြ႕ပါ"},"slight left":{default:"ဘယ္ဘက္ အနည္းငယ္ေကြ႕ပါ",name:"{way_name}​ေပၚတြင္ေနရန္ ဘယ္ဘက္အနည္းငယ္ေကြ႕ပါ",destination:"{destination}ဆီသို႕ ဘယ္ဘက္အနည္းငယ္ခ်ိဳးေကြ႕ပါ"},"slight right":{default:"ညာဘက္ အနည္းငယ္ခ်ိဳးေကြ႕ပါ",name:"{way_name}​ေပၚတြင္ေနရန္ ညာဘက္အနည္းငယ္ေကြ႕ပါ",destination:"{destination}ဆီသို႕ ညာဘက္အနည္းငယ္ခ်ိဳးေကြ႕ပါ"},uturn:{default:"ဂ-ေကြ႔ ေကြ႔ပါ",name:"{way_name}လမ္းဘက္သို႕ ဂ-ေကြ႕ေကြ႕ျပီးဆက္သြားပါ",destination:"{destination}ဆီသို႕ ဂေကြ႕ခ်ိဳးေကြ႕ပါ"}},depart:{default:{default:"{direction}သို႕ ဦးတည္ပါ",name:"{direction}ကို {way_name}အေပၚတြင္ ဦးတည္ပါ",namedistance:"{direction}ကို {way_name}အေပၚတြင္{distance}ေလာက္ ဦးတည္ဆက္သြားပါ"}},"end of road":{default:{default:"{modifier}သို႕လွည့္ပါ",name:"{way_name}​​ေပၚသို႕ {modifier}ကိုလွည့္ပါ",destination:"{destination}ဆီသို႕ {modifier}ကို လွည္႕ပါ"},straight:{default:"ေျဖာင္႔ေျဖာင္႔တန္းတန္း ဆက္သြားပါ",name:"{way_name}​​ေပၚသို႕တည့္တည့္ဆက္သြားပါ",destination:"{destination}ဆီသို႕တည့္တည့္ဆက္သြားပါ"},uturn:{default:"လမ္းအဆံုးတြင္ ဂ-ေကြ႕ေကြ႕ပါ",name:"လမ္းအဆံုးတြင္ {way_name}​​ေပၚသို႕ဂ-ေကြ႕ေကြ႕ပါ",destination:"လမ္းအဆံုးတြင္{destination}ဆီသို႕ ဂေကြ႕ခ်ိဳးေကြ႕ပါ"}},fork:{default:{default:"လမ္းဆံုလမ္းခြတြင္ {modifier}ကိုဆက္သြားပါ",name:"{way_name}​​ေပၚသို႕ {modifier}ကိုဆက္သြားပါ",destination:"{destination}ဆီသို႕ {modifier}ကို ဆက္သြားပါ"},"slight left":{default:"လမ္းဆံုလမ္းခြတြင္ဘယ္ဘက္ကိုဆက္သြားပါ",name:"{way_name}​​ေပၚသို႕ဘယ္ဘက္ကိုဆက္သြားပါ",destination:"{destination}ဆီသို႕ဘယ္ဘက္ကို ဆက္သြားပါ"},"slight right":{default:"လမ္းဆံုလမ္းခြတြင္ညာဘက္ကိုဆက္သြားပါ",name:"{way_name}​​ေပၚသို႕ညာဘက္ကိုဆက္သြားပါ",destination:"{destination}ဆီသို႕ညာဘက္ကို ဆက္သြားပါ"},"sharp left":{default:"လမ္းဆံုလမ္းခြတြင္ဘယ္ဘက္ေထာင့္ခ်ိဳးကိုသြားပါ",name:"{way_name}​ေပၚတြင္ေနရန္ ဘယ္ဘက္ေထာင့္ခ်ိဳးယူပါ",destination:"{destination}ဆီသို႕ဘယ္ဘက္ေထာင့္ခ်ိဳး သြားပါ"},"sharp right":{default:"လမ္းဆံုလမ္းခြတြင္ညာဘက္ေထာင့္ခ်ိဳးကိုသြားပါ",name:"{way_name}​ေပၚသို႕ ညာဘက္ေထာင့္ခ်ိဳးယူပါ",destination:"{destination}ဆီသို႕ညာဘက္ေထာင့္ခ်ိဳး သြားပါ"},uturn:{default:"ဂ-ေကြ႔ ေကြ႔ပါ",name:"{way_name}သို႕ဂ-ေကြ႕ေကြ႕ပါ",destination:"{destination}ဆီသို႕ ဂေကြ႕ခ်ိဳးေကြ႕ပါ"}},merge:{default:{default:"{modifier}ကိုလာေရာက္ေပါင္းဆံုပါ",name:"{way_name}​​ေပၚသို႕ {modifier}ကိုလာေရာက္ေပါင္းဆံုပါ",destination:"{destination}ဆီသို႕ {modifier}ကို လာေရာက္ေပါင္းဆံုပါ"},straight:{default:"လာေရာက္ေပါင္းဆံုပါ",name:"{way_name}​​ေပၚသို႕လာေရာက္ေပါင္းဆံုပါ",destination:"{destination}ဆီသို႕ လာေရာက္ေပါင္းဆံုပါ"},"slight left":{default:"ဘယ္ဘက္သို႕လာေရာက္ေပါင္းဆံုပါ",name:"{way_name}​​ေပၚသို႕ဘယ္ဘက္ကိုလာေရာက္ေပါင္းဆံုပါ",destination:"{destination}ဆီသို႕ဘယ္ဘက္ကို လာေရာက္ေပါင္းဆံုပါ"},"slight right":{default:"ညာဘက္သို႕လာေရာက္ေပါင္းဆံုပါ",name:"{way_name}​​ေပၚသို႕ညာဘက္ကိုလာေရာက္ေပါင္းဆံုပါ",destination:"{destination}ဆီသို႕ညာဘက္ကို လာေရာက္ေပါင္းဆံုပါ"},"sharp left":{default:"ဘယ္ဘက္သို႕လာေရာက္ေပါင္းဆံုပါ",name:"{way_name}​​ေပၚသို႕ဘယ္ဘက္ကိုလာေရာက္ေပါင္းဆံုပါ",destination:"{destination}ဆီသို႕ဘယ္ဘက္ကို လာေရာက္ေပါင္းဆံုပါ"},"sharp right":{default:"ညာဘက္သို႕လာေရာက္ေပါင္းဆံုပါ",name:"{way_name}​​ေပၚသို႕ညာဘက္ကိုလာေရာက္ေပါင္းဆံုပါ",destination:"{destination}ဆီသို႕ညာဘက္ကို လာေရာက္ေပါင္းဆံုပါ"},uturn:{default:"ဂ-ေကြ႔ ေကြ႕ပါ",name:"{way_name}လမ္းဘက္သို႔ ဂ-ေကြ႔ ေကြ႔ပါ ",destination:"{destination}ဆီသို႕ ဂေကြ႕ခ်ိဳးေကြ႕ပါ"}},"new name":{default:{default:"{modifier}ကိုဆက္သြားပါ",name:"{way_name}​​ေပၚသို႕ {modifier}ကိုဆက္သြားပါ",destination:"{destination}ဆီသို႕ {modifier}ကို ဆက္သြားပါ"},straight:{default:"ေျဖာင္႔ေျဖာင္႔တန္းတန္း ဆက္သြားပါ",name:"{way_name}​​ေပၚသို႕ဆက္သြားပါ",destination:"{destination}ဆီသို႕ဆက္သြားပါ"},"sharp left":{default:"ဘယ္ဘက္ေထာင့္ခ်ိဳးယူပါ",name:"{way_name}​ေပၚတြင္ေနရန္ ဘယ္ဘက္ေထာင့္ခ်ိဳးယူပါ",destination:"{destination}ဆီသို႕ဘယ္ဘက္ေထာင့္ခ်ိဳး သြားပါ"},"sharp right":{default:"ညာဘက္ ေထာင္႔ခ်ိဳးယူပါ",name:"{way_name}​ေပၚသို႕ ညာဘက္ေထာင့္ခ်ိဳးယူပါ",destination:"{destination}ဆီသို႕ညာဘက္ေထာင့္ခ်ိဳး သြားပါ"},"slight left":{default:"ဘယ္ဘက္ အနည္းငယ္ဆက္သြားပါ",name:"{way_name}​​ေပၚသို႕ဘယ္ဘက္ အနည္းငယ္ဆက္သြားပါ",destination:"{destination}ဆီသို႕ဘယ္ဘက္အနည္းငယ္ဆက္သြားပါ"},"slight right":{default:"ညာဘက္ အနည္းငယ္ဆက္သြားပါ",name:"{way_name}​​ေပၚသို႕ညာဘက္ အနည္းငယ္ဆက္သြားပါ",destination:"{destination}ဆီသို႕ညာဘက္အနည္းငယ္ဆက္သြားပါ"},uturn:{default:"ဂ-ေကြ႔ ေကြ႔ပါ",name:"{way_name}လမ္းဘက္သို႔ ဂ-ေကြ႔ ေကြ႔ပါ",destination:"{destination}ဆီသို႕ ဂေကြ႕ခ်ိဳးေကြ႕ပါ"}},notification:{default:{default:"{modifier}ကိုဆက္သြားပါ",name:"{way_name}​​ေပၚသို႕ {modifier}ကိုဆက္သြားပါ",destination:"{destination}ဆီသို႕ {modifier}ကို ဆက္သြားပါ"},uturn:{default:"ဂ-ေကြ႔ ေကြ႔ပါ",name:"{way_name}လမ္းဘက္သို႔ ဂ-ေကြ႔ ေကြ႔ပါ",destination:"{destination}ဆီသို႕ ဂေကြ႕ခ်ိဳးေကြ႕ပါ"}},"off ramp":{default:{default:"ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ခ်ဥ္းကပ္လမ္းကိုယူပါ",exit:"{exit}ကို ယူပါ",exit_destination:"{destination}ဆီသို႕ {exit} ကိုယူပါ"},left:{default:"ဘယ္ဘက္သို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ဘယ္ဘက္ ​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ဘယ္ဘက္​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",exit:"ဘယ္ဘက္တြင္{exit}ကို ယူပါ",exit_destination:"{destination}ဆီသို႕ဘယ္ဘက္မွ {exit} ကိုယူပါ"},right:{default:"ညာဘက္သို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ညာဘက္ ​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ညာဘက္​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",exit:"ညာဘက္တြင္{exit}ကို ယူပါ",exit_destination:"{destination}ဆီသို႕ညာဘက္မွ {exit} ကိုယူပါ"},"sharp left":{default:"ဘယ္ဘက္သို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ဘယ္ဘက္ ​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ဘယ္ဘက္​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",exit:"ဘယ္ဘက္တြင္{exit}ကို ယူပါ",exit_destination:"{destination}ဆီသို႕ဘယ္ဘက္မွ {exit} ကိုယူပါ"},"sharp right":{default:"ညာဘက္သို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ညာဘက္ ​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ညာဘက္​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",exit:"ညာဘက္တြင္{exit}ကို ယူပါ",exit_destination:"{destination}ဆီသို႕ညာဘက္မွ {exit} ကိုယူပါ"},"slight left":{default:"ဘယ္ဘက္သို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ဘယ္ဘက္ ​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ဘယ္ဘက္​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",exit:"ဘယ္ဘက္တြင္{exit}ကို ယူပါ",exit_destination:"{destination}ဆီသို႕ဘယ္ဘက္မွ {exit} ကိုယူပါ"},"slight right":{default:"ညာဘက္သို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ညာဘက္ ​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ညာဘက္​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",exit:"ညာဘက္တြင္{exit}ကို ယူပါ",exit_destination:"{destination}ဆီသို႕ညာဘက္မွ {exit} ကိုယူပါ"}},"on ramp":{default:{default:"ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ခ်ဥ္းကပ္လမ္းကိုယူပါ"},left:{default:"ဘယ္ဘက္သို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ဘယ္ဘက္ ​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ဘယ္ဘက္​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ"},right:{default:"ညာဘက္သို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ညာဘက္ ​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ညာဘက္​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ"},"sharp left":{default:"ဘယ္ဘက္သို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ဘယ္ဘက္ ​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ဘယ္ဘက္​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ"},"sharp right":{default:"ညာဘက္သို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ညာဘက္ ​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ညာဘက္​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ"},"slight left":{default:"ဘယ္ဘက္သို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ဘယ္ဘက္ ​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ဘယ္ဘက္​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ"},"slight right":{default:"ညာဘက္သို႕ခ်ဥ္းကပ္လမ္းကိုယူပါ",name:"{way_name}​ေပၚသို႕ညာဘက္ ​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ",destination:"{destination}ဆီသို႕ ညာဘက္​ေပၚတြင္ခ်ဥ္းကပ္လမ္းကိုယူပါ"}},rotary:{default:{default:{default:"အဝိုင္းပတ္သို႕ဝင္ပါ",name:"{way_name}ေပၚသို႔အဝိုင္းပတ္လမ္းမွထြက္ပါ ",destination:"{destination}ေပၚသို႔အဝိုင္းပတ္လမ္းမွထြက္ပါ"},name:{default:"{rotary_name}သို႕ဝင္ပါ",name:"{rotary_name}အဝိုင္းပတ္ဝင္ျပီး{way_name}ေပၚသို႕ထြက္ပါ",destination:"{rotary_name}အဝိုင္းပတ္ဝင္ျပီး{destination}ဆီသို႕ထြက္ပါ"},exit:{default:"အဝိုင္းပတ္ဝင္ျပီး{exit_number}ကိုယူကာျပန္ထြက္ပါ",name:"အဝိုင္းပတ္သို႕ဝင္ျပီး{exit_number}ကိုယူကာ{way_name}ေပၚသို႕ထြက္ပါ",destination:"အဝိုင္းပတ္ဝင္ျပီး{exit_number}ကိုယူကာ{destination}ဆီသို႕ထြက္ပါ"},name_exit:{default:"{rotary_name}ကိုဝင္ျပီး {exit_number}ကိုယူကာထြက္ပါ",name:"{rotary_name}ကိုဝင္ျပီး{exit_number}ကိုယူကာ{way_name}ေပၚသို႕ထြက္ပါ",destination:"{rotary_name}ဝင္ျပီး{exit_number}ကိုယူကာ{destination}ဆီသို႕ထြက္ပါ"}}},roundabout:{default:{exit:{default:"{exit_number}ေပၚသို႔အဝိုင္းပတ္လမ္းမွထြက္ပါ",name:"အဝိုင္းပတ္ဝင္ျပီး{exit_number}ကိုယူကာ{way_name}ေပၚသို႕ထြက္ပါ",destination:"အဝိုင္းပတ္ဝင္ျပီး{exit_number}ကိုယူကာ{destination}ဆီသို႕ထြက္ပါ"},default:{default:"အဝိုင္းပတ္ဝင္ပါ",name:"{way_name}ေပၚသို႔အဝိုင္းပတ္လမ္းမွထြက္ပါ",destination:"{destination}ေပၚသို႔အဝိုင္းပတ္လမ္းမွထြက္ပါ"}}},"roundabout turn":{default:{default:"{modifier}ကိုလွည့္ပါ ",name:"{modifier}​ေပၚသို{way_name}ကိုဆက္သြားပါ ",destination:"{modifier}ဆီသို႕{destination}ကို ဆက္သြားပါ "},left:{default:"ဘယ္ဘက္သို႕ျပန္လွည္႔ပါ",name:"{way_name}​ေပၚသို႕ဘယ္ဘက္ကိုဆက္သြားပါ ",destination:"{destination}ဆီသို႕ဘယ္ဘက္မွ ေကြ႔ပါ"},right:{default:"ညာဘက္သို႔ျပန္လွည္႔ပါ",name:"{way_name}​ေပၚသို႕ညာဘက္ကိုလာေရာက္ေပါင္းဆံုပါ ",destination:"{destination}ညာဘက္သို႔ ေကြ႔ပါ"},straight:{default:"ေျဖာင္႔ေျဖာင္႔တန္းတန္း ဆက္သြားပါ",name:"{way_name}​​ေပၚသို႕တည့္တည့္ဆက္သြားပါ",destination:"{destination}ဆီသို႕တည့္တည့္ဆက္သြားပါ"}},"exit roundabout":{default:{default:"အဝိုင္းပတ္လမ္းမွထြက္ပါ",name:"{way_name}ေပၚသို႔အဝိုင္းပတ္လမ္းမွထြက္ပါ",destination:"ဦးတည္အဝိုင္းပတ္လမ္းမွထြက္ပါ{destination}"}},"exit rotary":{default:{default:"အဝိုင္းပတ္လမ္းမွထြက္ပါဦးတည္အဝိုင္းပတ္လမ္းမွထြက္ပါ",name:"{way_name}ေပၚသို႔အဝိုင္းပတ္လမ္းမွထြက္ပါ",destination:"ဦးတည္အဝိုင္းပတ္လမ္းမွထြက္ပါ{destination}"}},turn:{default:{default:"{modifier}ကိုလွည့္ပါ ",name:"{modifier}​ေပၚသို{way_name}ကိုဆက္သြားပါ ",destination:"{modifier}ဆီသို႕{destination}ကို ဆက္သြားပါ "},left:{default:"ဘယ္ဘက္သို႕ျပန္လွည္႔ပါ",name:"{way_name}​ေပၚသို႕ဘယ္ဘက္ကိုဆက္သြားပါ ",destination:"{destination}ဘယ္ဘက္သို႔ ေကြ႔ပါ"},right:{default:"ညာဘက္သို႔ျပန္လွည္႔ပါ",name:"{way_name}​ေပၚသို႕ညာဘက္ကိုလာေရာက္ေပါင္းဆံုပါ ",destination:"{destination}ညာဘက္သို႔ ေကြ႔ပါ"},straight:{default:"တည္႔တည္႔သြားပါ",name:"{way_name}",destination:"{destination}ဆီသို႕တည့္တည့္သြားပါ"}},"use lane":{no_lanes:{default:"ေျဖာင္႔ေျဖာင္႔တန္းတန္း ဆက္သြားပါ"},default:{default:"{lane_instruction}"}}}}},{}],36:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1e",2:"2e",3:"3e",4:"4e",5:"5e",6:"6e",7:"7e",8:"8e",9:"9e",10:"10e"},direction:{north:"noord",northeast:"noordoost",east:"oost",southeast:"zuidoost",south:"zuid",southwest:"zuidwest",west:"west",northwest:"noordwest"},modifier:{left:"links",right:"rechts","sharp left":"scherpe bocht naar links","sharp right":"scherpe bocht naar rechts","slight left":"iets naar links","slight right":"iets naar rechts",straight:"rechtdoor",uturn:"omkeren"},lanes:{xo:"Rechts aanhouden",ox:"Links aanhouden",xox:"In het midden blijven",oxo:"Links of rechts blijven"}},modes:{ferry:{default:"Neem de veerpont",name:"Neem de veerpont {way_name}",destination:"Neem de veerpont richting {destination}"}},phrase:{"two linked by distance":"{instruction_one}, dan na {distance}, {instruction_two}","two linked":"{instruction_one}, daarna {instruction_two}","one in distance":"Over {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"afslag {exit}"},arrive:{default:{default:"Je bent gearriveerd op de {nth} bestemming.",upcoming:"U arriveert op de {nth} bestemming",short:"U bent gearriveerd","short-upcoming":"U zult aankomen",named:"U bent gearriveerd bij {waypoint_name}"},left:{default:"Je bent gearriveerd. De {nth} bestemming bevindt zich links.",upcoming:"Uw {nth} bestemming bevindt zich aan de linkerkant",short:"U bent gearriveerd","short-upcoming":"U zult aankomen",named:"U bent gearriveerd bij {waypoint_name}, de bestemming is aan de linkerkant"},right:{default:"Je bent gearriveerd. De {nth} bestemming bevindt zich rechts.",upcoming:"Uw {nth} bestemming bevindt zich aan de rechterkant",short:"U bent gearriveerd","short-upcoming":"U zult aankomen",named:"U bent gearriveerd bij {waypoint_name}, de bestemming is aan de  rechterkant"},"sharp left":{default:"Je bent gearriveerd. De {nth} bestemming bevindt zich links.",upcoming:"Uw {nth} bestemming bevindt zich aan de linkerkant",short:"U bent gearriveerd","short-upcoming":"U zult aankomen",named:"U bent gearriveerd bij {waypoint_name}, de bestemming is aan de linkerkant"},"sharp right":{default:"Je bent gearriveerd. De {nth} bestemming bevindt zich rechts.",upcoming:"Uw {nth} bestemming bevindt zich aan de rechterkant",short:"U bent gearriveerd","short-upcoming":"U zult aankomen",named:"U bent gearriveerd bij {waypoint_name},  de bestemming is aan de rechterkant"},"slight right":{default:"Je bent gearriveerd. De {nth} bestemming bevindt zich rechts.",upcoming:"Uw {nth} bestemming bevindt zich aan de rechterkant",short:"U bent gearriveerd","short-upcoming":"U zult aankomen",named:"U bent gearriveerd bij {waypoint_name},  de bestemming is aan de rechterkant"},"slight left":{default:"Je bent gearriveerd. De {nth} bestemming bevindt zich links.",upcoming:"Uw {nth} bestemming bevindt zich aan de linkerkant",short:"U bent gearriveerd","short-upcoming":"U zult aankomen",named:"U bent gearriveerd bij {waypoint_name},  de bestemming is aan de linkerkant"},straight:{default:"Je bent gearriveerd. De {nth} bestemming bevindt zich voor je.",upcoming:"Uw {nth} bestemming is recht voor u",short:"U bent gearriveerd","short-upcoming":"U zult aankomen",named:"U bent gearriveerd bij {waypoint_name}, de bestemming is recht voor u"}},continue:{default:{default:"Ga {modifier}",name:"Sla {modifier} om op {way_name} te blijven",destination:"Ga {modifier} richting {destination}",exit:"Ga {modifier} naar {way_name}"},straight:{default:"Ga rechtdoor",name:"Blijf rechtdoor gaan op {way_name}",destination:"Ga rechtdoor richting {destination}",distance:"Ga rechtdoor voor {distance}",namedistance:"Ga verder op {way_name} voor {distance}"},"sharp left":{default:"Linksaf",name:"Sla scherp links af om op {way_name} te blijven",destination:"Linksaf richting {destination}"},"sharp right":{default:"Rechtsaf",name:"Sla scherp rechts af om op {way_name} te blijven",destination:"Rechtsaf richting {destination}"},"slight left":{default:"Ga links",name:"Links afbuigen om op {way_name} te blijven",destination:"Rechts afbuigen om op {destination} te blijven"},"slight right":{default:"Rechts afbuigen",name:"Rechts afbuigen om op {way_name} te blijven",destination:"Rechts afbuigen richting {destination}"},uturn:{default:"Keer om",name:"Draai om en ga verder op {way_name}",destination:"Keer om richting {destination}"}},depart:{default:{default:"Vertrek in {direction}elijke richting",name:"Neem {way_name} in {direction}elijke richting",namedistance:"Ga richting {direction} op {way_name} voor {distance}"}},"end of road":{default:{default:"Ga {modifier}",name:"Ga {modifier} naar {way_name}",destination:"Ga {modifier} richting {destination}"},straight:{default:"Ga in de aangegeven richting",name:"Ga naar {way_name}",destination:"Ga richting {destination}"},uturn:{default:"Keer om",name:"Keer om naar {way_name}",destination:"Keer om richting {destination}"}},fork:{default:{default:"Ga {modifier} op de splitsing",name:"Houd {modifier} aan, tot {way_name}",destination:"Houd {modifier}, in de richting van {destination}"},"slight left":{default:"Links aanhouden op de splitsing",name:"Houd links aan, tot {way_name}",destination:"Houd links aan, richting {destination}"},"slight right":{default:"Rechts aanhouden op de splitsing",name:"Houd rechts aan, tot {way_name}",destination:"Houd rechts aan, richting {destination}"},"sharp left":{default:"Neem bij de splitsing, een scherpe bocht, naar links ",name:"Neem een scherpe bocht naar links, tot aan {way_name}",destination:"Neem een scherpe bocht naar links, richting {destination}"},"sharp right":{default:"Neem  op de splitsing, een scherpe bocht, naar rechts",name:"Neem een scherpe bocht naar rechts, tot aan {way_name}",destination:"Neem een scherpe bocht naar rechts, richting {destination}"},uturn:{default:"Keer om",name:"Keer om naar {way_name}",destination:"Keer om richting {destination}"}},merge:{default:{default:"Bij de splitsing {modifier}",name:"Bij de splitsing {modifier} naar {way_name}",destination:"Bij de splitsing {modifier} richting {destination}"},straight:{default:"Samenvoegen",name:"Ga verder op {way_name}",destination:"Ga verder richting {destination}"},"slight left":{default:"Bij de splitsing links aanhouden",name:"Bij de splitsing links aanhouden naar {way_name}",destination:"Bij de splitsing links aanhouden richting {destination}"},"slight right":{default:"Bij de splitsing rechts aanhouden",name:"Bij de splitsing rechts aanhouden naar {way_name}",destination:"Bij de splitsing rechts aanhouden richting {destination}"},"sharp left":{default:"Bij de splitsing linksaf",name:"Bij de splitsing linksaf naar {way_name}",destination:"Bij de splitsing linksaf richting {destination}"},"sharp right":{default:"Bij de splitsing rechtsaf",name:"Bij de splitsing rechtsaf naar {way_name}",destination:"Bij de splitsing rechtsaf richting {destination}"},uturn:{default:"Keer om",name:"Keer om naar {way_name}",destination:"Keer om richting {destination}"}},"new name":{default:{default:"Ga {modifier}",name:"Ga {modifier} naar {way_name}",destination:"Ga {modifier} richting {destination}"},straight:{default:"Ga in de aangegeven richting",name:"Ga rechtdoor naar {way_name}",destination:"Ga rechtdoor richting {destination}"},"sharp left":{default:"Neem een scherpe bocht, naar links",name:"Linksaf naar {way_name}",destination:"Linksaf richting {destination}"},"sharp right":{default:"Neem een scherpe bocht, naar rechts",name:"Rechtsaf naar {way_name}",destination:"Rechtsaf richting {destination}"},"slight left":{default:"Links aanhouden",name:"Links aanhouden naar {way_name}",destination:"Links aanhouden richting {destination}"},"slight right":{default:"Rechts aanhouden",name:"Rechts aanhouden naar {way_name}",destination:"Rechts aanhouden richting {destination}"},uturn:{default:"Keer om",name:"Keer om naar {way_name}",destination:"Keer om richting {destination}"}},notification:{default:{default:"Ga {modifier}",name:"Ga {modifier} naar {way_name}",destination:"Ga {modifier} richting {destination}"},uturn:{default:"Keer om",name:"Keer om naar {way_name}",destination:"Keer om richting {destination}"}},"off ramp":{default:{default:"Neem de afrit",name:"Neem de afrit naar {way_name}",destination:"Neem de afrit richting {destination}",exit:"Neem afslag {exit}",exit_destination:"Neem afslag {exit} richting {destination}"},left:{default:"Neem de afrit links",name:"Neem de afrit links naar {way_name}",destination:"Neem de afrit links richting {destination}",exit:"Neem afslag {exit} aan de linkerkant",exit_destination:"Neem afslag {exit} aan de linkerkant richting {destination}"},right:{default:"Neem de afrit rechts",name:"Neem de afrit rechts naar {way_name}",destination:"Neem de afrit rechts richting {destination}",exit:"Neem afslag {exit} aan de rechterkant",exit_destination:"Neem afslag {exit} aan de rechterkant richting {destination}"},"sharp left":{default:"Neem de afrit links",name:"Neem de afrit links naar {way_name}",destination:"Neem de afrit links richting {destination}",exit:"Neem afslag {exit} aan de linkerkant",exit_destination:"Neem afslag {exit} aan de linkerkant richting {destination}"},"sharp right":{default:"Neem de afrit rechts",name:"Neem de afrit rechts naar {way_name}",destination:"Neem de afrit rechts richting {destination}",exit:"Neem afslag {exit} aan de rechterkant",exit_destination:"Neem afslag {exit} aan de rechterkant richting {destination}"},"slight left":{default:"Neem de afrit links",name:"Neem de afrit links naar {way_name}",destination:"Neem de afrit links richting {destination}",exit:"Neem afslag {exit} aan de linkerkant",exit_destination:"Neem afslag {exit} aan de linkerkant richting {destination}"},"slight right":{default:"Neem de afrit rechts",name:"Neem de afrit rechts naar {way_name}",destination:"Neem de afrit rechts richting {destination}",exit:"Neem afslag {exit} aan de rechterkant",exit_destination:"Neem afslag {exit} aan de rechterkant richting {destination}"}},"on ramp":{default:{default:"Neem de oprit",name:"Neem de oprit naar {way_name}",destination:"Neem de oprit richting {destination}"},left:{default:"Neem de oprit links",name:"Neem de oprit links naar {way_name}",destination:"Neem de oprit links richting {destination}"},right:{default:"Neem de oprit rechts",name:"Neem de oprit rechts naar {way_name}",destination:"Neem de oprit rechts richting {destination}"},"sharp left":{default:"Neem de oprit links",name:"Neem de oprit links naar {way_name}",destination:"Neem de oprit links richting {destination}"},"sharp right":{default:"Neem de oprit rechts",name:"Neem de oprit rechts naar {way_name}",destination:"Neem de oprit rechts richting {destination}"},"slight left":{default:"Neem de oprit links",name:"Neem de oprit links naar {way_name}",destination:"Neem de oprit links richting {destination}"},"slight right":{default:"Neem de oprit rechts",name:"Neem de oprit rechts naar {way_name}",destination:"Neem de oprit rechts richting {destination}"}},rotary:{default:{default:{default:"Betreedt de rotonde",name:"Betreedt rotonde en sla af op {way_name}",destination:"Betreedt rotonde en sla af richting {destination}"},name:{default:"Ga het knooppunt {rotary_name} op",name:"Verlaat het knooppunt {rotary_name} naar {way_name}",destination:"Verlaat het knooppunt {rotary_name} richting {destination}"},exit:{default:"Betreedt rotonde en neem afslag {exit_number}",name:"Betreedt rotonde en neem afslag {exit_number} naar {way_name}",destination:"Betreedt rotonde en neem afslag {exit_number} richting {destination}"},name_exit:{default:"Ga het knooppunt {rotary_name} op en neem afslag {exit_number}",name:"Ga het knooppunt {rotary_name} op en neem afslag {exit_number} naar {way_name}",destination:"Ga het knooppunt {rotary_name} op en neem afslag {exit_number} richting {destination}"}}},roundabout:{default:{exit:{default:"Betreedt rotonde en neem afslag {exit_number}",name:"Betreedt rotonde en neem afslag {exit_number} naar {way_name}",destination:"Betreedt rotonde en neem afslag {exit_number} richting {destination}"},default:{default:"Betreedt de rotonde",name:"Betreedt rotonde en sla af op {way_name}",destination:"Betreedt rotonde en sla af richting {destination}"}}},"roundabout turn":{default:{default:"Ga {modifier}",name:"Ga {modifier} naar {way_name}",destination:"Ga {modifier} richting {destination}"},left:{default:"Ga linksaf",name:"Ga linksaf naar {way_name}",destination:"Ga linksaf richting {destination}"},right:{default:"Ga rechtsaf",name:"Ga rechtsaf naar {way_name}",destination:"Ga rechtsaf richting {destination}"},straight:{default:"Ga in de aangegeven richting",name:"Ga naar {way_name}",destination:"Ga richting {destination}"}},"exit roundabout":{default:{default:"Verlaat de rotonde",name:"Verlaat de rotonde en ga verder op {way_name}",destination:"Verlaat de rotonde richting {destination}"}},"exit rotary":{default:{default:"Verlaat de rotonde",name:"Verlaat de rotonde en ga verder op {way_name}",destination:"Verlaat de rotonde richting {destination}"}},turn:{default:{default:"Ga {modifier}",name:"Ga {modifier} naar {way_name}",destination:"Ga {modifier} richting {destination}"},left:{default:"Ga linksaf",name:"Ga linksaf naar {way_name}",destination:"Ga linksaf richting {destination}"},right:{default:"Ga rechtsaf",name:"Ga rechtsaf naar {way_name}",destination:"Ga rechtsaf richting {destination}"},straight:{default:"Ga rechtdoor",name:"Ga rechtdoor naar {way_name}",destination:"Ga rechtdoor richting {destination}"}},"use lane":{no_lanes:{default:"Rechtdoor"},default:{default:"{lane_instruction}"}}}}},{}],37:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1.",2:"2.",3:"3.",4:"4.",5:"5.",6:"6.",7:"7.",8:"8.",9:"9.",10:"10."},direction:{north:"nord",northeast:"nordøst",east:"øst",southeast:"sørøst",south:"sør",southwest:"sørvest",west:"vest",northwest:"nordvest"},modifier:{left:"venstre",right:"høyre","sharp left":"skarp venstre","sharp right":"skarp høyre","slight left":"litt til venstre","slight right":"litt til høyre",straight:"rett frem",
2174uturn:"U-sving"},lanes:{xo:"Hold til høyre",ox:"Hold til venstre",xox:"Hold deg i midten",oxo:"Hold til venstre eller høyre"}},modes:{ferry:{default:"Ta ferja",name:"Ta ferja {way_name}",destination:"Ta ferja til {destination}"}},phrase:{"two linked by distance":"{instruction_one}, deretter {instruction_two} om {distance}","two linked":"{instruction_one}, deretter {instruction_two}","one in distance":"Om {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"avkjørsel {exit}"},arrive:{default:{default:"Du har ankommet din {nth} destinasjon",upcoming:"Du vil ankomme din {nth} destinasjon",short:"Du har ankommet","short-upcoming":"Du vil ankomme",named:"Du har ankommet {waypoint_name}"},left:{default:"Du har ankommet din {nth} destinasjon, på din venstre side",upcoming:"Du vil ankomme din {nth} destinasjon, på din venstre side",short:"Du har ankommet","short-upcoming":"Du vil ankomme",named:"Du har ankommet {waypoint_name}, på din venstre side"},right:{default:"Du har ankommet din {nth} destinasjon, på din høyre side",upcoming:"Du vil ankomme din {nth} destinasjon, på din høyre side",short:"Du har ankommet","short-upcoming":"Du vil ankomme",named:"Du har ankommet {waypoint_name}, på din høyre side"},"sharp left":{default:"Du har ankommet din {nth} destinasjon, på din venstre side",upcoming:"Du vil ankomme din {nth} destinasjon, på din venstre side",short:"Du har ankommet","short-upcoming":"Du vil ankomme",named:"Du har ankommet {waypoint_name}, på din venstre side"},"sharp right":{default:"Du har ankommet din {nth} destinasjon, på din høyre side",upcoming:"Du vil ankomme din {nth} destinasjon, på din høyre side",short:"Du har ankommet","short-upcoming":"Du vil ankomme",named:"Du har ankommet {waypoint_name}, på din høyre side"},"slight right":{default:"Du har ankommet din {nth} destinasjon, på din høyre side",upcoming:"Du vil ankomme din {nth} destinasjon, på din høyre side",short:"Du har ankommet","short-upcoming":"Du vil ankomme",named:"Du har ankommet {waypoint_name}, på din høyre side"},"slight left":{default:"Du har ankommet din {nth} destinasjon, på din venstre side",upcoming:"Du vil ankomme din {nth} destinasjon, på din venstre side",short:"Du har ankommet","short-upcoming":"Du vil ankomme",named:"Du har ankommet {waypoint_name}, på din venstre side"},straight:{default:"Du har ankommet din {nth} destinasjon, rett forut",upcoming:"Du vil ankomme din {nth} destinasjon, rett forut",short:"Du har ankommet","short-upcoming":"Du vil ankomme",named:"Du har ankommet {waypoint_name}, rett forut"}},continue:{default:{default:"Ta til {modifier}",name:"Ta til {modifier} for å bli værende på {way_name}",destination:"Ta til {modifier} mot {destination}",exit:"Ta til {modifier} inn på {way_name}"},straight:{default:"Fortsett rett frem",name:"Fortsett rett frem for å bli værende på {way_name}",destination:"Fortsett mot {destination}",distance:"Fortsett rett frem, {distance} ",namedistance:"Fortsett på {way_name}, {distance}"},"sharp left":{default:"Sving skarpt til venstre",name:"Sving skarpt til venstre for å bli værende på {way_name}",destination:"Sving skarpt til venstre mot {destination}"},"sharp right":{default:"Sving skarpt til høyre",name:"Sving skarpt til høyre for å bli værende på {way_name}",destination:"Sving skarpt mot {destination}"},"slight left":{default:"Sving svakt til venstre",name:"Sving svakt til venstre for å bli værende på {way_name}",destination:"Sving svakt til venstre mot {destination}"},"slight right":{default:"Sving svakt til høyre",name:"Sving svakt til høyre for å bli værende på {way_name}",destination:"Sving svakt til høyre mot {destination}"},uturn:{default:"Ta en U-sving",name:"Ta en U-sving og fortsett på {way_name}",destination:"Ta en U-sving mot {destination}"}},depart:{default:{default:"Kjør i retning {direction}",name:"Kjør i retning {direction} på {way_name}",namedistance:"Kjør i retning {direction} på {way_name}, {distance}"}},"end of road":{default:{default:"Sving {modifier}",name:"Ta til {modifier} inn på {way_name}",destination:"Sving {modifier} mot {destination}"},straight:{default:"Fortsett rett frem",name:"Fortsett rett frem til  {way_name}",destination:"Fortsett rett frem mot {destination}"},uturn:{default:"Ta en U-sving i enden av veien",name:"Ta en U-sving til {way_name} i enden av veien",destination:"Ta en U-sving mot {destination} i enden av veien"}},fork:{default:{default:"Hold til {modifier} i veikrysset",name:"Hold til {modifier} inn på {way_name}",destination:"Hold til {modifier} mot {destination}"},"slight left":{default:"Hold til venstre i veikrysset",name:"Hold til venstre inn på {way_name}",destination:"Hold til venstre mot {destination}"},"slight right":{default:"Hold til høyre i veikrysset",name:"Hold til høyre inn på {way_name}",destination:"Hold til høyre mot {destination}"},"sharp left":{default:"Sving skarpt til venstre i veikrysset",name:"Sving skarpt til venstre inn på {way_name}",destination:"Sving skarpt til venstre mot {destination}"},"sharp right":{default:"Sving skarpt til høyre i veikrysset",name:"Sving skarpt til høyre inn på {way_name}",destination:"Svings skarpt til høyre mot {destination}"},uturn:{default:"Ta en U-sving",name:"Ta en U-sving til {way_name}",destination:"Ta en U-sving mot {destination}"}},merge:{default:{default:"Hold {modifier} kjørefelt",name:"Hold {modifier} kjørefelt inn på {way_name}",destination:"Hold {modifier} kjørefelt mot {destination}"},straight:{default:"Hold kjørefelt",name:"Hold kjørefelt inn på {way_name}",destination:"Hold kjørefelt mot {destination}"},"slight left":{default:"Hold venstre kjørefelt",name:"Hold venstre kjørefelt inn på {way_name}",destination:"Hold venstre kjørefelt mot {destination}"},"slight right":{default:"Hold høyre kjørefelt",name:"Hold høyre kjørefelt inn på {way_name}",destination:"Hold høyre kjørefelt mot {destination}"},"sharp left":{default:"Hold venstre kjørefelt",name:"Hold venstre kjørefelt inn på {way_name}",destination:"Hold venstre kjørefelt mot {destination}"},"sharp right":{default:"Hold høyre kjørefelt",name:"Hold høyre kjørefelt inn på {way_name}",destination:"Hold høyre kjørefelt mot {destination}"},uturn:{default:"Ta en U-sving",name:"Ta en U-sving til {way_name}",destination:"Ta en U-sving mot {destination}"}},"new name":{default:{default:"Fortsett {modifier}",name:"Fortsett {modifier} til {way_name}",destination:"Fortsett {modifier} mot  {destination}"},straight:{default:"Fortsett rett frem",name:"Fortsett inn på {way_name}",destination:"Fortsett mot {destination}"},"sharp left":{default:"Sving skarpt til venstre",name:"Sving skarpt til venstre inn på {way_name}",destination:"Sving skarpt til venstre mot {destination}"},"sharp right":{default:"Sving skarpt til høyre",name:"Sving skarpt til høyre inn på {way_name}",destination:"Svings skarpt til høyre mot {destination}"},"slight left":{default:"Fortsett litt mot venstre",name:"Fortsett litt mot venstre til {way_name}",destination:"Fortsett litt mot venstre mot {destination}"},"slight right":{default:"Fortsett litt mot høyre",name:"Fortsett litt mot høyre til {way_name}",destination:"Fortsett litt mot høyre mot {destination}"},uturn:{default:"Ta en U-sving",name:"Ta en U-sving til {way_name}",destination:"Ta en U-sving mot {destination}"}},notification:{default:{default:"Fortsett {modifier}",name:"Fortsett {modifier} til {way_name}",destination:"Fortsett {modifier} mot  {destination}"},uturn:{default:"Ta en U-sving",name:"Ta en U-sving til {way_name}",destination:"Ta en U-sving mot {destination}"}},"off ramp":{default:{default:"Ta avkjørselen",name:"Ta avkjørselen inn på {way_name}",destination:"Ta avkjørselen mot {destination}",exit:"Ta avkjørsel {exit}",exit_destination:"Ta avkjørsel {exit} mot {destination}"},left:{default:"Ta avkjørselen på venstre side",name:"Ta avkjørselen på venstre side inn på {way_name}",destination:"Ta avkjørselen på venstre side mot {destination}",exit:"Ta avkjørsel {exit} på venstre side",exit_destination:"Ta avkjørsel {exit} på venstre side mot {destination}"},right:{default:"Ta avkjørselen på høyre side",name:"Ta avkjørselen på høyre side inn på {way_name}",destination:"Ta avkjørselen på høyre side mot {destination}",exit:"Ta avkjørsel {exit} på høyre side",exit_destination:"Ta avkjørsel {exit} på høyre side mot {destination}"},"sharp left":{default:"Ta avkjørselen på venstre side",name:"Ta avkjørselen på venstre side inn på {way_name}",destination:"Ta avkjørselen på venstre side mot {destination}",exit:"Ta avkjørsel {exit} på venstre side",exit_destination:"Ta avkjørsel {exit} på venstre side mot {destination}"},"sharp right":{default:"Ta avkjørselen på høyre side",name:"Ta avkjørselen på høyre side inn på {way_name}",destination:"Ta avkjørselen på høyre side mot {destination}",exit:"Ta avkjørsel {exit} på høyre side",exit_destination:"Ta avkjørsel {exit} på høyre side mot {destination}"},"slight left":{default:"Ta avkjørselen på venstre side",name:"Ta avkjørselen på venstre side inn på {way_name}",destination:"Ta avkjørselen på venstre side mot {destination}",exit:"Ta avkjørsel {exit} på venstre side",exit_destination:"Ta avkjørsel {exit} på venstre side mot {destination}"},"slight right":{default:"Ta avkjørselen på høyre side",name:"Ta avkjørselen på høyre side inn på {way_name}",destination:"Ta avkjørselen på høyre side mot {destination}",exit:"Ta avkjørsel {exit} på høyre side",exit_destination:"Ta avkjørsel {exit} på høyre side mot {destination}"}},"on ramp":{default:{default:"Ta avkjørselen",name:"Ta avkjørselen inn på {way_name}",destination:"Ta avkjørselen mot {destination}"},left:{default:"Ta avkjørselen på venstre side",name:"Ta avkjørselen på venstre side inn på {way_name}",destination:"Ta avkjørselen på venstre side mot {destination}"},right:{default:"Ta avkjørselen på høyre side",name:"Ta avkjørselen på høyre side inn på {way_name}",destination:"Ta avkjørselen på høyre side mot {destination}"},"sharp left":{default:"Ta avkjørselen på venstre side",name:"Ta avkjørselen på venstre side inn på {way_name}",destination:"Ta avkjørselen på venstre side mot {destination}"},"sharp right":{default:"Ta avkjørselen på høyre side",name:"Ta avkjørselen på høyre side inn på {way_name}",destination:"Ta avkjørselen på høyre side mot {destination}"},"slight left":{default:"Ta avkjørselen på venstre side",name:"Ta avkjørselen på venstre side inn på {way_name}",destination:"Ta avkjørselen på venstre side mot {destination}"},"slight right":{default:"Ta avkjørselen på høyre side",name:"Ta avkjørselen på høyre side inn på {way_name}",destination:"Ta avkjørselen på høyre side mot {destination}"}},rotary:{default:{default:{default:"Kjør inn i rundkjøringen",name:"Kjør inn i rundkjøringen og deretter ut på {way_name}",destination:"Kjør inn i rundkjøringen og deretter ut mot {destination}"},name:{default:"Kjør inn i {rotary_name}",name:"Kjør inn i {rotary_name} og deretter ut på {way_name}",destination:"Kjør inn i {rotary_name} og deretter ut mot {destination}"},exit:{default:"Kjør inn i rundkjøringen og ta {exit_number} avkjørsel",name:"Kjør inn i rundkjøringen og ta {exit_number} avkjørsel ut på {way_name}",destination:"Kjør inn i rundkjøringen og ta {exit_number} avkjørsel ut mot {destination} "},name_exit:{default:"Kjør inn i {rotary_name} og ta {exit_number} avkjørsel",name:"Kjør inn i {rotary_name} og ta {exit_number} avkjørsel inn på {way_name}",destination:"Kjør inn i {rotary_name} og ta {exit_number} avkjørsel mot {destination}"}}},roundabout:{default:{exit:{default:"Kjør inn i rundkjøringen og ta {exit_number} avkjørsel",name:"Kjør inn i rundkjøringen og ta {exit_number} avkjørsel inn på {way_name}",destination:"Kjør inn i rundkjøringen og ta {exit_number} avkjørsel ut mot {destination} "},default:{default:"Kjør inn i rundkjøringen",name:"Kjør inn i rundkjøringen og deretter ut på {way_name}",destination:"Kjør inn i rundkjøringen og deretter ut mot {destination}"}}},"roundabout turn":{default:{default:"Ta en {modifier}",name:"Ta en {modifier} inn på {way_name}",destination:"Ta en {modifier} mot {destination}"},left:{default:"Sving til venstre",name:"Sving til venstre inn på {way_name}",destination:"Sving til venstre mot {destination}"},right:{default:"Sving til høyre",name:"Sving til høyre inn på {way_name}",destination:"Sving til høyre mot {destination}"},straight:{default:"Fortsett rett frem",name:"Fortsett rett frem til  {way_name}",destination:"Fortsett rett frem mot {destination}"}},"exit roundabout":{default:{default:"Kjør ut av rundkjøringen",name:"Kjør ut av rundkjøringen og inn på {way_name}",destination:"Kjør ut av rundkjøringen mot {destination}"}},"exit rotary":{default:{default:"Kjør ut av rundkjøringen",name:"Kjør ut av rundkjøringen og inn på {way_name}",destination:"Kjør ut av rundkjøringen mot {destination}"}},turn:{default:{default:"Ta en {modifier}",name:"Ta en {modifier} inn på {way_name}",destination:"Ta en {modifier} mot {destination}"},left:{default:"Sving til venstre",name:"Sving til venstre inn på {way_name}",destination:"Sving til venstre mot {destination}"},right:{default:"Sving til høyre",name:"Sving til høyre inn på {way_name}",destination:"Sving til høyre mot {destination}"},straight:{default:"Kjør rett frem",name:"Kjør rett frem og inn på {way_name}",destination:"Kjør rett frem mot {destination}"}},"use lane":{no_lanes:{default:"Fortsett rett frem"},default:{default:"{lane_instruction}"}}}}},{}],38:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1.",2:"2.",3:"3.",4:"4.",5:"5.",6:"6.",7:"7.",8:"8.",9:"9.",10:"10."},direction:{north:"północ",northeast:"północny wschód",east:"wschód",southeast:"południowy wschód",south:"południe",southwest:"południowy zachód",west:"zachód",northwest:"północny zachód"},modifier:{left:"lewo",right:"prawo","sharp left":"ostro w lewo","sharp right":"ostro w prawo","slight left":"łagodnie w lewo","slight right":"łagodnie w prawo",straight:"prosto",uturn:"zawróć"},lanes:{xo:"Trzymaj się prawej strony",ox:"Trzymaj się lewej strony",xox:"Trzymaj się środka",oxo:"Trzymaj się lewej lub prawej strony"}},modes:{ferry:{default:"Weź prom",name:"Weź prom {way_name}",destination:"Weź prom w kierunku {destination}"}},phrase:{"two linked by distance":"{instruction_one}, następnie za {distance} {instruction_two}","two linked":"{instruction_one}, następnie {instruction_two}","one in distance":"Za {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"exit {exit}"},arrive:{default:{default:"Dojechano do miejsca docelowego {nth}",upcoming:"Dojechano do miejsca docelowego {nth}",short:"Dojechano do miejsca docelowego {nth}","short-upcoming":"Dojechano do miejsca docelowego {nth}",named:"Dojechano do {waypoint_name}"},left:{default:"Dojechano do miejsca docelowego {nth}, po lewej stronie",upcoming:"Dojechano do miejsca docelowego {nth}, po lewej stronie",short:"Dojechano do miejsca docelowego {nth}","short-upcoming":"Dojechano do miejsca docelowego {nth}",named:"Dojechano do {waypoint_name}, po lewej stronie"},right:{default:"Dojechano do miejsca docelowego {nth}, po prawej stronie",upcoming:"Dojechano do miejsca docelowego {nth}, po prawej stronie",short:"Dojechano do miejsca docelowego {nth}","short-upcoming":"Dojechano do miejsca docelowego {nth}",named:"Dojechano do {waypoint_name}, po prawej stronie"},"sharp left":{default:"Dojechano do miejsca docelowego {nth}, po lewej stronie",upcoming:"Dojechano do miejsca docelowego {nth}, po lewej stronie",short:"Dojechano do miejsca docelowego {nth}","short-upcoming":"Dojechano do miejsca docelowego {nth}",named:"Dojechano do {waypoint_name}, po lewej stronie"},"sharp right":{default:"Dojechano do miejsca docelowego {nth}, po prawej stronie",upcoming:"Dojechano do miejsca docelowego {nth}, po prawej stronie",short:"Dojechano do miejsca docelowego {nth}","short-upcoming":"Dojechano do miejsca docelowego {nth}",named:"Dojechano do {waypoint_name}, po prawej stronie"},"slight right":{default:"Dojechano do miejsca docelowego {nth}, po prawej stronie",upcoming:"Dojechano do miejsca docelowego {nth}, po prawej stronie",short:"Dojechano do miejsca docelowego {nth}","short-upcoming":"Dojechano do miejsca docelowego {nth}",named:"Dojechano do {waypoint_name}, po prawej stronie"},"slight left":{default:"Dojechano do miejsca docelowego {nth}, po lewej stronie",upcoming:"Dojechano do miejsca docelowego {nth}, po lewej stronie",short:"Dojechano do miejsca docelowego {nth}","short-upcoming":"Dojechano do miejsca docelowego {nth}",named:"Dojechano do {waypoint_name}, po lewej stronie"},straight:{default:"Dojechano do miejsca docelowego {nth} , prosto",upcoming:"Dojechano do miejsca docelowego {nth} , prosto",short:"Dojechano do miejsca docelowego {nth}","short-upcoming":"Dojechano do miejsca docelowego {nth}",named:"Dojechano do {waypoint_name}, prosto"}},continue:{default:{default:"Skręć {modifier}",name:"Skręć w {modifier}, aby pozostać na {way_name}",destination:"Skręć {modifier} w kierunku {destination}",exit:"Skręć {modifier} na {way_name}"},straight:{default:"Kontynuuj prosto",name:"Jedź dalej prosto, aby pozostać na {way_name}",destination:"Kontynuuj w kierunku {destination}",distance:"Jedź dalej prosto przez {distance}",namedistance:"Jedź dalej {way_name} przez {distance}"},"sharp left":{default:"Skręć ostro w lewo",name:"Skręć w lewo w ostry zakręt, aby pozostać na {way_name}",destination:"Skręć ostro w lewo w kierunku {destination}"},"sharp right":{default:"Skręć ostro w prawo",name:"Skręć w prawo w ostry zakręt, aby pozostać na {way_name}",destination:"Skręć ostro w prawo w kierunku {destination}"},"slight left":{default:"Skręć w lewo w łagodny zakręt",name:"Skręć w lewo w łagodny zakręt, aby pozostać na {way_name}",destination:"Skręć w lewo w łagodny zakręt na {destination}"},"slight right":{default:"Skręć w prawo w łagodny zakręt",name:"Skręć w prawo w łagodny zakręt, aby pozostać na {way_name}",destination:"Skręć w prawo w łagodny zakręt na {destination}"},uturn:{default:"Zawróć",name:"Zawróć i jedź dalej {way_name}",destination:"Zawróć w kierunku {destination}"}},depart:{default:{default:"Kieruj się {direction}",name:"Kieruj się {direction} na {way_name}",namedistance:"Head {direction} on {way_name} for {distance}"}},"end of road":{default:{default:"Skręć {modifier}",name:"Skręć {modifier} na {way_name}",destination:"Skręć {modifier} w kierunku {destination}"},straight:{default:"Kontynuuj prosto",name:"Kontynuuj prosto na {way_name}",destination:"Kontynuuj prosto w kierunku {destination}"},uturn:{default:"Zawróć na końcu ulicy",name:"Zawróć na końcu ulicy na {way_name}",destination:"Zawróć na końcu ulicy w kierunku {destination}"}},fork:{default:{default:"Na rozwidleniu trzymaj się {modifier}",name:"Na rozwidleniu trzymaj się {modifier} na {way_name}",destination:"Na rozwidleniu trzymaj się {modifier} w kierunku {destination}"},"slight left":{default:"Na rozwidleniu trzymaj się lewej strony",name:"Na rozwidleniu trzymaj się lewej strony w {way_name}",destination:"Na rozwidleniu trzymaj się lewej strony w kierunku {destination}"},"slight right":{default:"Na rozwidleniu trzymaj się prawej strony",name:"Na rozwidleniu trzymaj się prawej strony na {way_name}",destination:"Na rozwidleniu trzymaj się prawej strony w kierunku {destination}"},"sharp left":{default:"Na rozwidleniu skręć ostro w lewo",name:"Skręć ostro w lewo w {way_name}",destination:"Skręć ostro w lewo w kierunku {destination}"},"sharp right":{default:"Na rozwidleniu skręć ostro w prawo",name:"Skręć ostro w prawo na {way_name}",destination:"Skręć ostro w prawo w kierunku {destination}"},uturn:{default:"Zawróć",name:"Zawróć na {way_name}",destination:"Zawróć w kierunku {destination}"}},merge:{default:{default:"Włącz się {modifier}",name:"Włącz się {modifier} na {way_name}",destination:"Włącz się {modifier} w kierunku {destination}"},straight:{default:"Włącz się prosto",name:"Włącz się prosto na {way_name}",destination:"Włącz się prosto w kierunku {destination}"},"slight left":{default:"Włącz się z lewej strony",name:"Włącz się z lewej strony na {way_name}",destination:"Włącz się z lewej strony w kierunku {destination}"},"slight right":{default:"Włącz się z prawej strony",name:"Włącz się z prawej strony na {way_name}",destination:"Włącz się z prawej strony w kierunku {destination}"},"sharp left":{default:"Włącz się z lewej strony",name:"Włącz się z lewej strony na {way_name}",destination:"Włącz się z lewej strony w kierunku {destination}"},"sharp right":{default:"Włącz się z prawej strony",name:"Włącz się z prawej strony na {way_name}",destination:"Włącz się z prawej strony w kierunku {destination}"},uturn:{default:"Zawróć",name:"Zawróć na {way_name}",destination:"Zawróć w kierunku {destination}"}},"new name":{default:{default:"Kontynuuj {modifier}",name:"Kontynuuj {modifier} na {way_name}",destination:"Kontynuuj {modifier} w kierunku {destination}"},straight:{default:"Kontynuuj prosto",name:"Kontynuuj na {way_name}",destination:"Kontynuuj w kierunku {destination}"},"sharp left":{default:"Skręć ostro w lewo",name:"Skręć ostro w lewo w {way_name}",destination:"Skręć ostro w lewo w kierunku {destination}"},"sharp right":{default:"Skręć ostro w prawo",name:"Skręć ostro w prawo na {way_name}",destination:"Skręć ostro w prawo w kierunku {destination}"},"slight left":{default:"Kontynuuj łagodnie w lewo",name:"Kontynuuj łagodnie w lewo na {way_name}",destination:"Kontynuuj łagodnie w lewo w kierunku {destination}"},"slight right":{default:"Kontynuuj łagodnie w prawo",name:"Kontynuuj łagodnie w prawo na {way_name}",destination:"Kontynuuj łagodnie w prawo w kierunku {destination}"},uturn:{default:"Zawróć",name:"Zawróć na {way_name}",destination:"Zawróć w kierunku {destination}"}},notification:{default:{default:"Kontynuuj {modifier}",name:"Kontynuuj {modifier} na {way_name}",destination:"Kontynuuj {modifier} w kierunku {destination}"},uturn:{default:"Zawróć",name:"Zawróć na {way_name}",destination:"Zawróć w kierunku {destination}"}},"off ramp":{default:{default:"Zjedź",name:"Weź zjazd na {way_name}",destination:"Weź zjazd w kierunku {destination}",exit:"Zjedź zjazdem {exit}",exit_destination:"Zjedź zjazdem {exit} na {destination}"},left:{default:"Weź zjazd po lewej",name:"Weź zjazd po lewej na {way_name}",destination:"Weź zjazd po lewej w kierunku {destination}",exit:"Zjedź zjazdem {exit} po lewej stronie",exit_destination:"Zjedź zjazdem {exit} po lewej stronie na {destination}"},right:{default:"Weź zjazd po prawej",name:"Weź zjazd po prawej na {way_name}",destination:"Weź zjazd po prawej w kierunku {destination}",exit:"Zjedź zjazdem {exit} po prawej stronie",exit_destination:"Zjedź zjazdem {exit} po prawej stronie na {destination}"},"sharp left":{default:"Weź zjazd po lewej",name:"Weź zjazd po lewej na {way_name}",destination:"Weź zjazd po lewej w kierunku {destination}",exit:"Zjedź zjazdem {exit} po lewej stronie",exit_destination:"Zjedź zjazdem {exit} po lewej stronie na {destination}"},"sharp right":{default:"Weź zjazd po prawej",name:"Weź zjazd po prawej na {way_name}",destination:"Weź zjazd po prawej w kierunku {destination}",exit:"Zjedź zjazdem {exit} po prawej stronie",exit_destination:"Zjedź zjazdem {exit} po prawej stronie na {destination}"},"slight left":{default:"Weź zjazd po lewej",name:"Weź zjazd po lewej na {way_name}",destination:"Weź zjazd po lewej w kierunku {destination}",exit:"Zjedź zjazdem {exit} po lewej stronie",exit_destination:"Zjedź zjazdem {exit} po lewej stronie na {destination}"},"slight right":{default:"Weź zjazd po prawej",name:"Weź zjazd po prawej na {way_name}",destination:"Weź zjazd po prawej w kierunku {destination}",exit:"Zjedź zjazdem {exit} po prawej stronie",exit_destination:"Zjedź zjazdem {exit} po prawej stronie na {destination}"}},"on ramp":{default:{default:"Weź zjazd",name:"Weź zjazd na {way_name}",destination:"Weź zjazd w kierunku {destination}"},left:{default:"Weź zjazd po lewej",name:"Weź zjazd po lewej na {way_name}",destination:"Weź zjazd po lewej w kierunku {destination}"},right:{default:"Weź zjazd po prawej",name:"Weź zjazd po prawej na {way_name}",destination:"Weź zjazd po prawej w kierunku {destination}"},"sharp left":{default:"Weź zjazd po lewej",name:"Weź zjazd po lewej na {way_name}",destination:"Weź zjazd po lewej w kierunku {destination}"},"sharp right":{default:"Weź zjazd po prawej",name:"Weź zjazd po prawej na {way_name}",destination:"Weź zjazd po prawej w kierunku {destination}"},"slight left":{default:"Weź zjazd po lewej",name:"Weź zjazd po lewej na {way_name}",destination:"Weź zjazd po lewej w kierunku {destination}"},"slight right":{default:"Weź zjazd po prawej",name:"Weź zjazd po prawej na {way_name}",destination:"Weź zjazd po prawej w kierunku {destination}"}},rotary:{default:{default:{default:"Wjedź na rondo",name:"Wjedź na rondo i skręć na {way_name}",destination:"Wjedź na rondo i skręć w kierunku {destination}"},name:{default:"Wjedź na {rotary_name}",name:"Wjedź na {rotary_name} i skręć na {way_name}",destination:"Wjedź na {rotary_name} i skręć w kierunku {destination}"},exit:{default:"Wjedź na rondo i wyjedź {exit_number} zjazdem",name:"Wjedź na rondo i wyjedź {exit_number} zjazdem na {way_name}",destination:"Wjedź na rondo i wyjedź {exit_number} zjazdem w kierunku {destination}"},name_exit:{default:"Wjedź na {rotary_name} i wyjedź {exit_number} zjazdem",name:"Wjedź na {rotary_name} i wyjedź {exit_number} zjazdem na {way_name}",destination:"Wjedź na {rotary_name} i wyjedź {exit_number} zjazdem w kierunku {destination}"}}},roundabout:{default:{exit:{default:"Wjedź na rondo i wyjedź {exit_number} zjazdem",name:"Wjedź na rondo i wyjedź {exit_number} zjazdem na {way_name}",destination:"Wjedź na rondo i wyjedź {exit_number} zjazdem w kierunku {destination}"},default:{default:"Wjedź na rondo",name:"Wjedź na rondo i wyjedź na {way_name}",destination:"Wjedź na rondo i wyjedź w kierunku {destination}"}}},"roundabout turn":{default:{default:"{modifier}",name:"{modifier} na {way_name}",destination:"{modifier} w kierunku {destination}"},left:{default:"Skręć w lewo",name:"Skręć w lewo na {way_name}",destination:"Skręć w lewo w kierunku {destination}"},right:{default:"Skręć w prawo",name:"Skręć w prawo na {way_name}",destination:"Skręć w prawo w kierunku {destination}"},straight:{default:"Kontynuuj prosto",name:"Kontynuuj prosto na {way_name}",destination:"Kontynuuj prosto w kierunku {destination}"}},"exit roundabout":{default:{default:"{modifier}",name:"{modifier} na {way_name}",destination:"{modifier} w kierunku {destination}"},left:{default:"Skręć w lewo",name:"Skręć w lewo na {way_name}",destination:"Skręć w lewo w kierunku {destination}"},right:{default:"Skręć w prawo",name:"Skręć w prawo na {way_name}",destination:"Skręć w prawo w kierunku {destination}"},straight:{default:"Kontynuuj prosto",name:"Kontynuuj prosto na {way_name}",destination:"Kontynuuj prosto w kierunku {destination}"}},"exit rotary":{default:{default:"{modifier}",name:"{modifier} na {way_name}",destination:"{modifier} w kierunku {destination}"},left:{default:"Skręć w lewo",name:"Skręć w lewo na {way_name}",destination:"Skręć w lewo w kierunku {destination}"},right:{default:"Skręć w prawo",name:"Skręć w prawo na {way_name}",destination:"Skręć w prawo w kierunku {destination}"},straight:{default:"Jedź prosto",name:"Jedź prosto na {way_name}",destination:"Jedź prosto w kierunku {destination}"}},turn:{default:{default:"{modifier}",name:"{modifier} na {way_name}",destination:"{modifier} w kierunku {destination}"},left:{default:"Skręć w lewo",name:"Skręć w lewo na {way_name}",destination:"Skręć w lewo w kierunku {destination}"},right:{default:"Skręć w prawo",name:"Skręć w prawo na {way_name}",destination:"Skręć w prawo w kierunku {destination}"},straight:{default:"Jedź prosto",name:"Jedź prosto na {way_name}",destination:"Jedź prosto w kierunku {destination}"}},"use lane":{no_lanes:{default:"Kontynuuj prosto"},default:{default:"{lane_instruction}"}}}}},{}],39:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1º",2:"2º",3:"3º",4:"4º",5:"5º",6:"6º",7:"7º",8:"8º",9:"9º",10:"10º"},direction:{north:"norte",northeast:"nordeste",east:"leste",southeast:"sudeste",south:"sul",southwest:"sudoeste",west:"oeste",northwest:"noroeste"},modifier:{left:"à esquerda",right:"à direita","sharp left":"fechada à esquerda","sharp right":"fechada à direita","slight left":"suave à esquerda","slight right":"suave à direita",straight:"em frente",uturn:"retorno"},lanes:{xo:"Mantenha-se à direita",ox:"Mantenha-se à esquerda",xox:"Mantenha-se ao centro",oxo:"Mantenha-se à esquerda ou direita"}},modes:{ferry:{default:"Pegue a balsa",name:"Pegue a balsa {way_name}",destination:"Pegue a balsa sentido {destination}"}},phrase:{"two linked by distance":"{instruction_one}, então, em {distance}, {instruction_two}","two linked":"{instruction_one}, então {instruction_two}","one in distance":"Em {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"saída {exit}"},arrive:{default:{default:"Você chegou ao seu {nth} destino",upcoming:"Você chegará ao seu {nth} destino",short:"Você chegou","short-upcoming":"Você vai chegar",named:"Você chegou a {waypoint_name}"},left:{default:"Você chegou ao seu {nth} destino, à esquerda",upcoming:"Você chegará ao seu {nth} destino, à esquerda",short:"Você chegou","short-upcoming":"Você vai chegar",named:"Você chegou {waypoint_name}, à esquerda"},right:{default:"Você chegou ao seu {nth} destino, à direita",upcoming:"Você chegará ao seu {nth} destino, à direita",short:"Você chegou","short-upcoming":"Você vai chegar",named:"Você chegou {waypoint_name}, à direita"},"sharp left":{default:"Você chegou ao seu {nth} destino, à esquerda",upcoming:"Você chegará ao seu {nth} destino, à esquerda",short:"Você chegou","short-upcoming":"Você vai chegar",named:"Você chegou {waypoint_name}, à esquerda"},"sharp right":{default:"Você chegou ao seu {nth} destino, à direita",upcoming:"Você chegará ao seu {nth} destino, à direita",short:"Você chegou","short-upcoming":"Você vai chegar",named:"Você chegou {waypoint_name}, à direita"},"slight right":{default:"Você chegou ao seu {nth} destino, à direita",upcoming:"Você chegará ao seu {nth} destino, à direita",short:"Você chegou","short-upcoming":"Você vai chegar",named:"Você chegou {waypoint_name}, à direita"},"slight left":{default:"Você chegou ao seu {nth} destino, à esquerda",upcoming:"Você chegará ao seu {nth} destino, à esquerda",short:"Você chegou","short-upcoming":"Você vai chegar",named:"Você chegou {waypoint_name}, à esquerda"},straight:{default:"Você chegou ao seu {nth} destino, em frente",upcoming:"Você vai chegar ao seu {nth} destino, em frente",short:"Você chegou","short-upcoming":"Você vai chegar",named:"You have arrived at {waypoint_name}, straight ahead"}},continue:{default:{default:"Vire {modifier}",name:"Vire {modifier} para manter-se na {way_name}",destination:"Vire {modifier} sentido {destination}",exit:"Vire {modifier} em {way_name}"},straight:{default:"Continue em frente",name:"Continue em frente para manter-se na {way_name}",destination:"Continue em direção à {destination}",distance:"Continue em frente por {distance}",namedistance:"Continue na {way_name} por {distance}"},"sharp left":{default:"Faça uma curva fechada a esquerda",name:"Faça uma curva fechada a esquerda para manter-se na {way_name}",destination:"Faça uma curva fechada a esquerda sentido {destination}"},"sharp right":{default:"Faça uma curva fechada a direita",name:"Faça uma curva fechada a direita para manter-se na {way_name}",destination:"Faça uma curva fechada a direita sentido {destination}"},"slight left":{default:"Faça uma curva suave a esquerda",name:"Faça uma curva suave a esquerda para manter-se na {way_name}",destination:"Faça uma curva suave a esquerda em direção a {destination}"},"slight right":{default:"Faça uma curva suave a direita",
2175name:"Faça uma curva suave a direita para manter-se na {way_name}",destination:"Faça uma curva suave a direita em direção a {destination}"},uturn:{default:"Faça o retorno",name:"Faça o retorno e continue em {way_name}",destination:"Faça o retorno sentido {destination}"}},depart:{default:{default:"Siga {direction}",name:"Siga {direction} em {way_name}",namedistance:"Siga {direction} na {way_name} por {distance}"}},"end of road":{default:{default:"Vire {modifier}",name:"Vire {modifier} em {way_name}",destination:"Vire {modifier} sentido {destination}"},straight:{default:"Continue em frente",name:"Continue em frente em {way_name}",destination:"Continue em frente sentido {destination}"},uturn:{default:"Faça o retorno no fim da rua",name:"Faça o retorno em {way_name} no fim da rua",destination:"Faça o retorno sentido {destination} no fim da rua"}},fork:{default:{default:"Mantenha-se {modifier} na bifurcação",name:"Mantenha-se {modifier} na bifurcação em {way_name}",destination:"Mantenha-se {modifier} na bifurcação sentido {destination}"},"slight left":{default:"Mantenha-se à esquerda na bifurcação",name:"Mantenha-se à esquerda na bifurcação em {way_name}",destination:"Mantenha-se à esquerda na bifurcação sentido {destination}"},"slight right":{default:"Mantenha-se à direita na bifurcação",name:"Mantenha-se à direita na bifurcação em {way_name}",destination:"Mantenha-se à direita na bifurcação sentido {destination}"},"sharp left":{default:"Faça uma curva fechada à esquerda na bifurcação",name:"Faça uma curva fechada à esquerda em {way_name}",destination:"Faça uma curva fechada à esquerda sentido {destination}"},"sharp right":{default:"Faça uma curva fechada à direita na bifurcação",name:"Faça uma curva fechada à direita em {way_name}",destination:"Faça uma curva fechada à direita sentido {destination}"},uturn:{default:"Faça o retorno",name:"Faça o retorno em {way_name}",destination:"Faça o retorno sentido {destination}"}},merge:{default:{default:"Entre {modifier}",name:"Entre {modifier} na {way_name}",destination:"Entre {modifier} em direção à {destination}"},straight:{default:"Mesclar",name:"Entre reto na {way_name}",destination:"Entre reto em direção à {destination}"},"slight left":{default:"Entre à esquerda",name:"Entre à esquerda na {way_name}",destination:"Entre à esquerda em direção à {destination}"},"slight right":{default:"Entre à direita",name:"Entre à direita na {way_name}",destination:"Entre à direita em direção à {destination}"},"sharp left":{default:"Entre à esquerda",name:"Entre à esquerda na {way_name}",destination:"Entre à esquerda em direção à {destination}"},"sharp right":{default:"Entre à direita",name:"Entre à direita na {way_name}",destination:"Entre à direita em direção à {destination}"},uturn:{default:"Faça o retorno",name:"Faça o retorno em {way_name}",destination:"Faça o retorno sentido {destination}"}},"new name":{default:{default:"Continue {modifier}",name:"Continue {modifier} em {way_name}",destination:"Continue {modifier} sentido {destination}"},straight:{default:"Continue em frente",name:"Continue em {way_name}",destination:"Continue em direção à {destination}"},"sharp left":{default:"Faça uma curva fechada à esquerda",name:"Faça uma curva fechada à esquerda em {way_name}",destination:"Faça uma curva fechada à esquerda sentido {destination}"},"sharp right":{default:"Faça uma curva fechada à direita",name:"Faça uma curva fechada à direita em {way_name}",destination:"Faça uma curva fechada à direita sentido {destination}"},"slight left":{default:"Continue ligeiramente à esquerda",name:"Continue ligeiramente à esquerda em {way_name}",destination:"Continue ligeiramente à esquerda sentido {destination}"},"slight right":{default:"Continue ligeiramente à direita",name:"Continue ligeiramente à direita em {way_name}",destination:"Continue ligeiramente à direita sentido {destination}"},uturn:{default:"Faça o retorno",name:"Faça o retorno em {way_name}",destination:"Faça o retorno sentido {destination}"}},notification:{default:{default:"Continue {modifier}",name:"Continue {modifier} em {way_name}",destination:"Continue {modifier} sentido {destination}"},uturn:{default:"Faça o retorno",name:"Faça o retorno em {way_name}",destination:"Faça o retorno sentido {destination}"}},"off ramp":{default:{default:"Pegue a rampa",name:"Pegue a rampa em {way_name}",destination:"Pegue a rampa sentido {destination}",exit:"Pegue a saída {exit}",exit_destination:"Pegue a saída {exit} em direção à {destination}"},left:{default:"Pegue a rampa à esquerda",name:"Pegue a rampa à esquerda em {way_name}",destination:"Pegue a rampa à esquerda sentido {destination}",exit:"Pegue a saída {exit} à esquerda",exit_destination:"Pegue a saída {exit}  à esquerda em direção à {destination}"},right:{default:"Pegue a rampa à direita",name:"Pegue a rampa à direita em {way_name}",destination:"Pegue a rampa à direita sentido {destination}",exit:"Pegue a saída {exit} à direita",exit_destination:"Pegue a saída {exit} à direita em direção à {destination}"},"sharp left":{default:"Pegue a rampa à esquerda",name:"Pegue a rampa à esquerda em {way_name}",destination:"Pegue a rampa à esquerda sentido {destination}",exit:"Pegue a saída {exit} à esquerda",exit_destination:"Pegue a saída {exit}  à esquerda em direção à {destination}"},"sharp right":{default:"Pegue a rampa à direita",name:"Pegue a rampa à direita em {way_name}",destination:"Pegue a rampa à direita sentido {destination}",exit:"Pegue a saída {exit} à direita",exit_destination:"Pegue a saída {exit} à direita em direção à {destination}"},"slight left":{default:"Pegue a rampa à esquerda",name:"Pegue a rampa à esquerda em {way_name}",destination:"Pegue a rampa à esquerda sentido {destination}",exit:"Pegue a saída {exit} à esquerda",exit_destination:"Pegue a saída {exit}  à esquerda em direção à {destination}"},"slight right":{default:"Pegue a rampa à direita",name:"Pegue a rampa à direita em {way_name}",destination:"Pegue a rampa à direita sentido {destination}",exit:"Pegue a saída {exit} à direita",exit_destination:"Pegue a saída {exit} à direita em direção à {destination}"}},"on ramp":{default:{default:"Pegue a rampa",name:"Pegue a rampa em {way_name}",destination:"Pegue a rampa sentido {destination}"},left:{default:"Pegue a rampa à esquerda",name:"Pegue a rampa à esquerda em {way_name}",destination:"Pegue a rampa à esquerda sentido {destination}"},right:{default:"Pegue a rampa à direita",name:"Pegue a rampa à direita em {way_name}",destination:"Pegue a rampa à direita sentid {destination}"},"sharp left":{default:"Pegue a rampa à esquerda",name:"Pegue a rampa à esquerda em {way_name}",destination:"Pegue a rampa à esquerda sentido {destination}"},"sharp right":{default:"Pegue a rampa à direita",name:"Pegue a rampa à direita em {way_name}",destination:"Pegue a rampa à direita sentido {destination}"},"slight left":{default:"Pegue a rampa à esquerda",name:"Pegue a rampa à esquerda em {way_name}",destination:"Pegue a rampa à esquerda sentido {destination}"},"slight right":{default:"Pegue a rampa à direita",name:"Pegue a rampa à direita em {way_name}",destination:"Pegue a rampa à direita sentido {destination}"}},rotary:{default:{default:{default:"Entre na rotatória",name:"Entre na rotatória e saia na {way_name}",destination:"Entre na rotatória e saia sentido {destination}"},name:{default:"Entre em {rotary_name}",name:"Entre em {rotary_name} e saia em {way_name}",destination:"Entre em {rotary_name} e saia sentido {destination}"},exit:{default:"Entre na rotatória e pegue a {exit_number} saída",name:"Entre na rotatória e pegue a {exit_number} saída na {way_name}",destination:"Entre na rotatória e pegue a {exit_number} saída sentido {destination}"},name_exit:{default:"Entre em {rotary_name} e saia na {exit_number} saída",name:"Entre em {rotary_name} e saia na {exit_number} saída em {way_name}",destination:"Entre em {rotary_name} e saia na {exit_number} saída sentido {destination}"}}},roundabout:{default:{exit:{default:"Entre na rotatória e pegue a {exit_number} saída",name:"Entre na rotatória e pegue a {exit_number} saída na {way_name}",destination:"Entre na rotatória e pegue a {exit_number} saída sentido {destination}"},default:{default:"Entre na rotatória",name:"Entre na rotatória e saia na {way_name}",destination:"Entre na rotatória e saia sentido {destination}"}}},"roundabout turn":{default:{default:"Siga {modifier}",name:"Siga {modifier} em {way_name}",destination:"Siga {modifier} sentido {destination}"},left:{default:"Vire à esquerda",name:"Vire à esquerda em {way_name}",destination:"Vire à esquerda sentido {destination}"},right:{default:"Vire à direita",name:"Vire à direita em {way_name}",destination:"Vire à direita sentido {destination}"},straight:{default:"Continue em frente",name:"Continue em frente em {way_name}",destination:"Continue em frente sentido {destination}"}},"exit roundabout":{default:{default:"Saia da rotatória",name:"Exit the traffic circle onto {way_name}",destination:"Exit the traffic circle towards {destination}"}},"exit rotary":{default:{default:"Saia da rotatória",name:"Exit the traffic circle onto {way_name}",destination:"Exit the traffic circle towards {destination}"}},turn:{default:{default:"Siga {modifier}",name:"Siga {modifier} em {way_name}",destination:"Siga {modifier} sentido {destination}"},left:{default:"Vire à esquerda",name:"Vire à esquerda em {way_name}",destination:"Vire à esquerda sentido {destination}"},right:{default:"Vire à direita",name:"Vire à direita em {way_name}",destination:"Vire à direita sentido {destination}"},straight:{default:"Siga em frente",name:"Siga em frente em {way_name}",destination:"Siga em frente sentido {destination}"}},"use lane":{no_lanes:{default:"Continue em frente"},default:{default:"{lane_instruction}"}}}}},{}],40:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1º",2:"2º",3:"3º",4:"4º",5:"5º",6:"6º",7:"7º",8:"8º",9:"9º",10:"10º"},direction:{north:"norte",northeast:"nordeste",east:"este",southeast:"sudeste",south:"sul",southwest:"sudoeste",west:"oeste",northwest:"noroeste"},modifier:{left:"à esquerda",right:"à direita","sharp left":"acentuadamente à esquerda","sharp right":"acentuadamente à direita","slight left":"ligeiramente à esquerda","slight right":"ligeiramente à direita",straight:"em frente",uturn:"inversão de marcha"},lanes:{xo:"Mantenha-se à direita",ox:"Mantenha-se à esquerda",xox:"Mantenha-se ao meio",oxo:"Mantenha-se à esquerda ou à direita"}},modes:{ferry:{default:"Apanhe o ferry",name:"Apanhe o ferry {way_name}",destination:"Apanhe o ferry para {destination}"}},phrase:{"two linked by distance":"{instruction_one}, depois, a {distance}, {instruction_two}","two linked":"{instruction_one}, depois {instruction_two}","one in distance":"A {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"saída {exit}"},arrive:{default:{default:"Chegou ao seu {nth} destino",upcoming:"Está a chegar ao seu {nth} destino",short:"Chegou","short-upcoming":"Está a chegar",named:"Chegou a {waypoint_name}"},left:{default:"Chegou ao seu {nth} destino, à esquerda",upcoming:"Está a chegar ao seu {nth} destino, à esquerda",short:"Chegou","short-upcoming":"Está a chegar",named:"Chegou a {waypoint_name}, à esquerda"},right:{default:"Chegou ao seu {nth} destino, à direita",upcoming:"Está a chegar ao seu {nth} destino, à direita",short:"Chegou","short-upcoming":"Está a chegar",named:"Chegou a {waypoint_name}, à direita"},"sharp left":{default:"Chegou ao seu {nth} destino, à esquerda",upcoming:"Está a chegar ao seu {nth} destino, à esquerda",short:"Chegou","short-upcoming":"Está a chegar",named:"Chegou a {waypoint_name}, à esquerda"},"sharp right":{default:"Chegou ao seu {nth} destino, à direita",upcoming:"Está a chegar ao seu {nth} destino, à direita",short:"Chegou","short-upcoming":"Está a chegar",named:"Chegou a {waypoint_name}, à direita"},"slight right":{default:"Chegou ao seu {nth} destino, à direita",upcoming:"Está a chegar ao seu {nth} destino, à direita",short:"Chegou","short-upcoming":"Está a chegar",named:"Chegou a {waypoint_name}, à direita"},"slight left":{default:"Chegou ao seu {nth} destino, à esquerda",upcoming:"Está a chegar ao seu {nth} destino, à esquerda",short:"Chegou","short-upcoming":"Está a chegar",named:"Chegou a {waypoint_name}, à esquerda"},straight:{default:"Chegou ao seu {nth} destino, em frente",upcoming:"Está a chegar ao seu {nth} destino, em frente",short:"Chegou","short-upcoming":"Está a chegar",named:"Chegou a {waypoint_name}, em frente"}},continue:{default:{default:"Vire {modifier}",name:"Vire {modifier} para se manter em {way_name}",destination:"Vire {modifier} em direção a {destination}",exit:"Vire {modifier} para {way_name}"},straight:{default:"Continue em frente",name:"Continue em frente para se manter em {way_name}",destination:"Continue em direção a {destination}",distance:"Continue em frente por {distance}",namedistance:"Continue em {way_name} por {distance}"},"sharp left":{default:"Vire acentuadamente à esquerda",name:"Vire acentuadamente à esquerda para se manter em {way_name}",destination:"Vire acentuadamente à esquerda em direção a {destination}"},"sharp right":{default:"Vire acentuadamente à direita",name:"Vire acentuadamente à direita para se manter em {way_name}",destination:"Vire acentuadamente à direita em direção a {destination}"},"slight left":{default:"Vire ligeiramente à esquerda",name:"Vire ligeiramente à esquerda para se manter em {way_name}",destination:"Vire ligeiramente à esquerda em direção a {destination}"},"slight right":{default:"Vire ligeiramente à direita",name:"Vire ligeiramente à direita para se manter em {way_name}",destination:"Vire ligeiramente à direita em direção a {destination}"},uturn:{default:"Faça inversão de marcha",name:"Faça inversão de marcha e continue em {way_name}",destination:"Faça inversão de marcha em direção a {destination}"}},depart:{default:{default:"Dirija-se para {direction}",name:"Dirija-se para {direction} em {way_name}",namedistance:"Dirija-se para {direction} em {way_name} por {distance}"}},"end of road":{default:{default:"Vire {modifier}",name:"Vire {modifier} para {way_name}",destination:"Vire {modifier} em direção a {destination}"},straight:{default:"Continue em frente",name:"Continue em frente para {way_name}",destination:"Continue em frente em direção a {destination}"},uturn:{default:"No final da estrada faça uma inversão de marcha",name:"No final da estrada faça uma inversão de marcha para {way_name} ",destination:"No final da estrada faça uma inversão de marcha em direção a {destination}"}},fork:{default:{default:"Na bifurcação mantenha-se {modifier}",name:"Mantenha-se {modifier} para {way_name}",destination:"Mantenha-se {modifier} em direção a {destination}"},"slight left":{default:"Na bifurcação mantenha-se à esquerda",name:"Mantenha-se à esquerda para {way_name}",destination:"Mantenha-se à esquerda em direção a {destination}"},"slight right":{default:"Na bifurcação mantenha-se à direita",name:"Mantenha-se à direita para {way_name}",destination:"Mantenha-se à direita em direção a {destination}"},"sharp left":{default:"Na bifurcação vire acentuadamente à esquerda",name:"Vire acentuadamente à esquerda para {way_name}",destination:"Vire acentuadamente à esquerda em direção a {destination}"},"sharp right":{default:"Na bifurcação vire acentuadamente à direita",name:"Vire acentuadamente à direita para {way_name}",destination:"Vire acentuadamente à direita em direção a {destination}"},uturn:{default:"Faça inversão de marcha",name:"Faça inversão de marcha para {way_name}",destination:"Faça inversão de marcha em direção a {destination}"}},merge:{default:{default:"Una-se ao tráfego {modifier}",name:"Una-se ao tráfego {modifier} para {way_name}",destination:"Una-se ao tráfego {modifier} em direção a {destination}"},straight:{default:"Una-se ao tráfego",name:" Una-se ao tráfego para {way_name}",destination:"Una-se ao tráfego em direção a {destination}"},"slight left":{default:"Una-se ao tráfego à esquerda",name:"Una-se ao tráfego à esquerda para {way_name}",destination:"Una-se ao tráfego à esquerda em direção a {destination}"},"slight right":{default:"Una-se ao tráfego à direita",name:"Una-se ao tráfego à direita para {way_name}",destination:"Una-se ao tráfego à direita em direção a {destination}"},"sharp left":{default:"Una-se ao tráfego à esquerda",name:"Una-se ao tráfego à esquerda para {way_name}",destination:"Una-se ao tráfego à esquerda em direção a {destination}"},"sharp right":{default:"Una-se ao tráfego à direita",name:"Una-se ao tráfego à direita para {way_name}",destination:"Una-se ao tráfego à direita em direção a {destination}"},uturn:{default:"Faça inversão de marcha",name:"Faça inversão de marcha para {way_name}",destination:"Faça inversão de marcha em direção a {destination}"}},"new name":{default:{default:"Continue {modifier}",name:"Continue {modifier} para {way_name}",destination:"Continue {modifier} em direção a {destination}"},straight:{default:"Continue em frente",name:"Continue para {way_name}",destination:"Continue em direção a {destination}"},"sharp left":{default:"Vire acentuadamente à esquerda",name:"Vire acentuadamente à esquerda para {way_name}",destination:"Vire acentuadamente à esquerda em direção a{destination}"},"sharp right":{default:"Vire acentuadamente à direita",name:"Vire acentuadamente à direita para {way_name}",destination:"Vire acentuadamente à direita em direção a {destination}"},"slight left":{default:"Continue ligeiramente à esquerda",name:"Continue ligeiramente à esquerda para {way_name}",destination:"Continue ligeiramente à esquerda em direção a {destination}"},"slight right":{default:"Continue ligeiramente à direita",name:"Continue ligeiramente à direita para {way_name}",destination:"Continue ligeiramente à direita em direção a {destination}"},uturn:{default:"Faça inversão de marcha",name:"Faça inversão de marcha para {way_name}",destination:"Faça inversão de marcha em direção a {destination}"}},notification:{default:{default:"Continue {modifier}",name:"Continue {modifier} para {way_name}",destination:"Continue {modifier} em direção a {destination}"},uturn:{default:"Faça inversão de marcha",name:"Faça inversão de marcha para {way_name}",destination:"Faça inversão de marcha em direção a {destination}"}},"off ramp":{default:{default:"Saia na saída",name:"Saia na saída para {way_name}",destination:"Saia na saída em direção a {destination}",exit:"Saia na saída {exit}",exit_destination:"Saia na saída {exit} em direção a {destination}"},left:{default:"Saia na saída à esquerda",name:"Saia na saída à esquerda para {way_name}",destination:"Saia na saída à esquerda em direção a {destination}",exit:"Saia na saída {exit} à esquerda",exit_destination:"Saia na saída {exit} à esquerda em direção a {destination}"},right:{default:"Saia na saída à direita",name:"Saia na saída à direita para {way_name}",destination:"Saia na saída à direita em direção a {destination}",exit:"Saia na saída {exit} à direita",exit_destination:"Saia na saída {exit} à direita em direção a {destination}"},"sharp left":{default:"Saia na saída à esquerda",name:"Saia na saída à esquerda para {way_name}",destination:"Saia na saída à esquerda em direção a {destination}",exit:"Saia na saída {exit} à esquerda",exit_destination:"Saia na saída {exit} à esquerda em direção a {destination}"},"sharp right":{default:"Saia na saída à direita",name:"Saia na saída à direita para {way_name}",destination:"Saia na saída à direita em direção a {destination}",exit:"Saia na saída {exit} à direita",exit_destination:"Saia na saída {exit} à direita em direção a {destination}"},"slight left":{default:"Saia na saída à esquerda",name:"Saia na saída à esquerda para {way_name}",destination:"Saia na saída à esquerda em direção a {destination}",exit:"Saia na saída {exit} à esquerda",exit_destination:"Saia na saída {exit} à esquerda em direção a {destination}"},"slight right":{default:"Saia na saída à direita",name:"Saia na saída à direita para {way_name}",destination:"Saia na saída à direita em direção a {destination}",exit:"Saia na saída {exit} à direita",exit_destination:"Saia na saída {exit} à direita em direção a {destination}"}},"on ramp":{default:{default:"Saia na saída",name:"Saia na saída para {way_name}",destination:"Saia na saída em direção a {destination}"},left:{default:"Saia na saída à esquerda",name:"Saia na saída à esquerda para {way_name}",destination:"Saia na saída à esquerda em direção a {destination}"},right:{default:"Saia na saída à direita",name:"Saia na saída à direita para {way_name}",destination:"Saia na saída à direita em direção a {destination}"},"sharp left":{default:"Saia na saída à esquerda",name:"Saia na saída à esquerda para {way_name}",destination:"Saia na saída à esquerda em direção a {destination}"},"sharp right":{default:"Saia na saída à direita",name:"Saia na saída à direita para {way_name}",destination:"Saia na saída à direita em direção a {destination}"},"slight left":{default:"Saia na saída à esquerda",name:"Saia na saída à esquerda para {way_name}",destination:"Saia na saída à esquerda em direção a {destination}"},"slight right":{default:"Saia na saída à direita",name:"Saia na saída à direita para {way_name}",destination:"Saia na saída à direita em direção a {destination}"}},rotary:{default:{default:{default:"Entre na rotunda",name:"Entre na rotunda e saia para {way_name}",destination:"Entre na rotunda e saia em direção a {destination}"},name:{default:"Entre em {rotary_name}",name:"Entre em {rotary_name} e saia para {way_name}",destination:"Entre em {rotary_name} e saia em direção a {destination}"},exit:{default:"Entre na rotunda e saia na saída {exit_number}",name:"Entre na rotunda e saia na saída {exit_number} para {way_name}",destination:"Entre na rotunda e saia na saída {exit_number} em direção a {destination}"},name_exit:{default:"Entre em {rotary_name} e saia na saída {exit_number}",name:"Entre em {rotary_name} e saia na saída {exit_number} para {way_name}",destination:"Entre em{rotary_name} e saia na saída {exit_number} em direção a {destination}"}}},roundabout:{default:{exit:{default:"Entre na rotunda e saia na saída {exit_number}",name:"Entre na rotunda e saia na saída {exit_number} para {way_name}",destination:"Entre na rotunda e saia na saída {exit_number} em direção a {destination}"},default:{default:"Entre na rotunda",name:"Entre na rotunda e saia para {way_name}",destination:"Entre na rotunda e saia em direção a {destination}"}}},"roundabout turn":{default:{default:"Siga {modifier}",name:"Siga {modifier} para {way_name}",destination:"Siga {modifier} em direção a {destination}"},left:{default:"Vire à esquerda",name:"Vire à esquerda para {way_name}",destination:"Vire à esquerda em direção a {destination}"},right:{default:"Vire à direita",name:"Vire à direita para {way_name}",destination:"Vire à direita em direção a {destination}"},straight:{default:"Continue em frente",name:"Continue em frente para {way_name}",destination:"Continue em frente em direção a {destination}"}},"exit roundabout":{default:{default:"Saia da rotunda",name:"Saia da rotunda para {way_name}",destination:"Saia da rotunda em direção a {destination}"}},"exit rotary":{default:{default:"Saia da rotunda",name:"Saia da rotunda para {way_name}",destination:"Saia da rotunda em direção a {destination}"}},turn:{default:{default:"Siga {modifier}",name:"Siga {modifier} para{way_name}",destination:"Siga {modifier} em direção a {destination}"},left:{default:"Vire à esquerda",name:"Vire à esquerda para {way_name}",destination:"Vire à esquerda em direção a {destination}"},right:{default:"Vire à direita",name:"Vire à direita para {way_name}",destination:"Vire à direita em direção a {destination}"},straight:{default:"Vá em frente",name:"Vá em frente para {way_name}",destination:"Vá em frente em direção a {destination}"}},"use lane":{no_lanes:{default:"Continue em frente"},default:{default:"{lane_instruction}"}}}}},{}],41:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"prima",2:"a doua",3:"a treia",4:"a patra",5:"a cincea",6:"a șasea",7:"a șaptea",8:"a opta",9:"a noua",10:"a zecea"},direction:{north:"nord",northeast:"nord-est",east:"est",southeast:"sud-est",south:"sud",southwest:"sud-vest",west:"vest",northwest:"nord-vest"},modifier:{left:"stânga",right:"dreapta","sharp left":"puternic stânga","sharp right":"puternic dreapta","slight left":"ușor stânga","slight right":"ușor dreapta",straight:"înainte",uturn:"întoarcere"},lanes:{xo:"Țineți stânga",ox:"Țineți dreapta",xox:"Țineți pe mijloc",oxo:"Țineți pe laterale"}},modes:{ferry:{default:"Luați feribotul",name:"Luați feribotul {way_name}",destination:"Luați feribotul spre {destination}"}},phrase:{"two linked by distance":"{instruction_one}, apoi în {distance}, {instruction_two}","two linked":"{instruction_one} apoi {instruction_two}","one in distance":"În {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"ieșirea {exit}"},arrive:{default:{default:"Ați ajuns la {nth} destinație",upcoming:"Ați ajuns la {nth} destinație",short:"Ați ajuns","short-upcoming":"Veți ajunge",named:"Ați ajuns {waypoint_name}"},left:{default:"Ați ajuns la {nth} destinație, pe stânga",upcoming:"Ați ajuns la {nth} destinație, pe stânga",short:"Ați ajuns","short-upcoming":"Veți ajunge",named:"Ați ajuns {waypoint_name}, pe stânga"},right:{default:"Ați ajuns la {nth} destinație, pe dreapta",upcoming:"Ați ajuns la {nth} destinație, pe dreapta",short:"Ați ajuns","short-upcoming":"Veți ajunge",named:"Ați ajuns {waypoint_name}, pe dreapta"},"sharp left":{default:"Ați ajuns la {nth} destinație, pe stânga",upcoming:"Ați ajuns la {nth} destinație, pe stânga",short:"Ați ajuns","short-upcoming":"Veți ajunge",named:"Ați ajuns {waypoint_name}, pe stânga"},"sharp right":{default:"Ați ajuns la {nth} destinație, pe dreapta",upcoming:"Ați ajuns la {nth} destinație, pe dreapta",short:"Ați ajuns","short-upcoming":"Veți ajunge",named:"Ați ajuns {waypoint_name}, pe dreapta"},"slight right":{default:"Ați ajuns la {nth} destinație, pe dreapta",upcoming:"Ați ajuns la {nth} destinație, pe dreapta",short:"Ați ajuns","short-upcoming":"Veți ajunge",named:"Ați ajuns {waypoint_name}, pe dreapta"},"slight left":{default:"Ați ajuns la {nth} destinație, pe stânga",upcoming:"Ați ajuns la {nth} destinație, pe stânga",short:"Ați ajuns","short-upcoming":"Veți ajunge",named:"Ați ajuns {waypoint_name}, pe stânga"},straight:{default:"Ați ajuns la {nth} destinație, în față",upcoming:"Ați ajuns la {nth} destinație, în față",short:"Ați ajuns","short-upcoming":"Veți ajunge",named:"Ați ajuns {waypoint_name}, în față"}},continue:{default:{default:"Virați {modifier}",name:"Virați {modifier} pe {way_name}",destination:"Virați {modifier} spre {destination}",exit:"Virați {modifier} pe {way_name}"},straight:{default:"Mergeți înainte",name:"Mergeți înainte pe {way_name}",destination:"Continuați spre {destination}",distance:"Mergeți înainte pentru {distance}",namedistance:"Continuați pe {way_name} pentru {distance}"},"sharp left":{default:"Virați puternic la stânga",name:"Virați puternic la stânga pe {way_name}",destination:"Virați puternic la stânga spre {destination}"},"sharp right":{default:"Virați puternic la dreapta",name:"Virați puternic la dreapta pe {way_name}",destination:"Virați puternic la dreapta spre {destination}"},"slight left":{default:"Virați ușor la stânga",name:"Virați ușor la stânga pe {way_name}",destination:"Virați ușor la stânga spre {destination}"},"slight right":{default:"Virați ușor la dreapta",name:"Virați ușor la dreapta pe {way_name}",destination:"Virați ușor la dreapta spre {destination}"},uturn:{default:"Întoarceți-vă",name:"Întoarceți-vă și continuați pe {way_name}",destination:"Întoarceți-vă spre {destination}"}},depart:{default:{default:"Mergeți spre {direction}",name:"Mergeți spre {direction} pe {way_name}",namedistance:"Mergeți spre {direction} pe {way_name} pentru {distance}"}},"end of road":{default:{default:"Virați {modifier}",name:"Virați {modifier} pe {way_name}",destination:"Virați {modifier} spre {destination}"},straight:{default:"Continuați înainte",name:"Continuați înainte pe {way_name}",destination:"Continuați înainte spre {destination}"},uturn:{default:"Întoarceți-vă la sfârșitul drumului",name:"Întoarceți-vă pe {way_name} la sfârșitul drumului",destination:"Întoarceți-vă spre {destination} la sfârșitul drumului"}},fork:{default:{default:"Țineți {modifier} la bifurcație",name:"Țineți {modifier} la bifurcație pe {way_name}",destination:"Țineți {modifier} la bifurcație spre {destination}"},"slight left":{default:"Țineți pe stânga la bifurcație",name:"Țineți pe stânga la bifurcație pe {way_name}",destination:"Țineți pe stânga la bifurcație spre {destination}"},"slight right":{default:"Țineți pe dreapta la bifurcație",name:"Țineți pe dreapta la bifurcație pe {way_name}",destination:"Țineți pe dreapta la bifurcație spre {destination}"},"sharp left":{default:"Virați puternic stânga la bifurcație",name:"Virați puternic stânga la bifurcație pe {way_name}",destination:"Virați puternic stânga la bifurcație spre {destination}"},"sharp right":{default:"Virați puternic dreapta la bifurcație",name:"Virați puternic dreapta la bifurcație pe {way_name}",destination:"Virați puternic dreapta la bifurcație spre {destination}"},uturn:{default:"Întoarceți-vă",name:"Întoarceți-vă pe {way_name}",destination:"Întoarceți-vă spre {destination}"}},merge:{default:{default:"Intrați în {modifier}",name:"Intrați în {modifier} pe {way_name}",destination:"Intrați în {modifier} spre {destination}"},straight:{default:"Intrați",name:"Intrați pe {way_name}",destination:"Intrați spre {destination}"},"slight left":{default:"Intrați în stânga",name:"Intrați în stânga pe {way_name}",destination:"Intrați în stânga spre {destination}"},"slight right":{default:"Intrați în dreapta",name:"Intrați în dreapta pe {way_name}",destination:"Intrați în dreapta spre {destination}"},"sharp left":{default:"Intrați în stânga",name:"Intrați în stânga pe {way_name}",destination:"Intrați în stânga spre {destination}"},"sharp right":{default:"Intrați în dreapta",name:"Intrați în dreapta pe {way_name}",destination:"Intrați în dreapta spre {destination}"},uturn:{default:"Întoarceți-vă",name:"Întoarceți-vă pe {way_name}",destination:"Întoarceți-vă spre {destination}"}},"new name":{default:{default:"Continuați {modifier}",name:"Continuați {modifier} pe {way_name}",destination:"Continuați {modifier} spre {destination}"},straight:{default:"Continuați înainte",name:"Continuați pe {way_name}",destination:"Continuați spre {destination}"},"sharp left":{default:"Virați puternic la stânga",name:"Virați puternic la stânga pe {way_name}",destination:"Virați puternic la stânga spre {destination}"},"sharp right":{default:"Virați puternic la dreapta",name:"Virați puternic la dreapta pe {way_name}",destination:"Virați puternic la dreapta spre {destination}"},"slight left":{default:"Continuați ușor la stânga",name:"Continuați ușor la stânga pe {way_name}",destination:"Continuați ușor la stânga spre {destination}"},"slight right":{default:"Continuați ușor la dreapta",name:"Continuați ușor la dreapta pe {way_name}",destination:"Continuați ușor la dreapta spre {destination}"},uturn:{default:"Întoarceți-vă",name:"Întoarceți-vă pe {way_name}",destination:"Întoarceți-vă spre {destination}"}},notification:{default:{default:"Continuați {modifier}",name:"Continuați {modifier} pe {way_name}",destination:"Continuați {modifier} spre {destination}"},uturn:{default:"Întoarceți-vă",name:"Întoarceți-vă pe {way_name}",destination:"Întoarceți-vă spre {destination}"}},"off ramp":{default:{default:"Urmați breteaua",name:"Urmați breteaua pe {way_name}",destination:"Urmați breteaua spre {destination}",exit:"Urmați ieșirea {exit}",exit_destination:"Urmați ieșirea {exit} spre {destination}"},left:{default:"Urmați breteaua din stânga",
2176name:"Urmați breteaua din stânga pe {way_name}",destination:"Urmați breteaua din stânga spre {destination}",exit:"Urmați ieșirea {exit} pe stânga",exit_destination:"Urmați ieșirea {exit} pe stânga spre {destination}"},right:{default:"Urmați breteaua din dreapta",name:"Urmați breteaua din dreapta pe {way_name}",destination:"Urmați breteaua din dreapta spre {destination}",exit:"Urmați ieșirea {exit} pe dreapta",exit_destination:"Urmați ieșirea {exit} pe dreapta spre {destination}"},"sharp left":{default:"Urmați breteaua din stânga",name:"Urmați breteaua din stânga pe {way_name}",destination:"Urmați breteaua din stânga spre {destination}",exit:"Urmați ieșirea {exit} pe stânga",exit_destination:"Urmați ieșirea {exit} pe stânga spre {destination}"},"sharp right":{default:"Urmați breteaua din dreapta",name:"Urmați breteaua din dreapta pe {way_name}",destination:"Urmați breteaua din dreapta spre {destination}",exit:"Urmați ieșirea {exit} pe dreapta",exit_destination:"Urmați ieșirea {exit} pe dreapta spre {destination}"},"slight left":{default:"Urmați breteaua din stânga",name:"Urmați breteaua din stânga pe {way_name}",destination:"Urmați breteaua din stânga spre {destination}",exit:"Urmați ieșirea {exit} pe stânga",exit_destination:"Urmați ieșirea {exit} pe stânga spre {destination}"},"slight right":{default:"Urmați breteaua din dreapta",name:"Urmați breteaua din dreapta pe {way_name}",destination:"Urmați breteaua din dreapta spre {destination}",exit:"Urmați ieșirea {exit} pe dreapta",exit_destination:"Urmați ieșirea {exit} pe dreapta spre {destination}"}},"on ramp":{default:{default:"Urmați breteaua de intrare",name:"Urmați breteaua pe {way_name}",destination:"Urmați breteaua spre {destination}"},left:{default:"Urmați breteaua din stânga",name:"Urmați breteaua din stânga pe {way_name}",destination:"Urmați breteaua din stânga spre {destination}"},right:{default:"Urmați breteaua din dreapta",name:"Urmați breteaua din dreapta pe {way_name}",destination:"Urmați breteaua din dreapta spre {destination}"},"sharp left":{default:"Urmați breteaua din stânga",name:"Urmați breteaua din stânga pe {way_name}",destination:"Urmați breteaua din stânga spre {destination}"},"sharp right":{default:"Urmați breteaua din dreapta",name:"Urmați breteaua din dreapta pe {way_name}",destination:"Urmați breteaua din dreapta spre {destination}"},"slight left":{default:"Urmați breteaua din stânga",name:"Urmați breteaua din stânga pe {way_name}",destination:"Urmați breteaua din stânga spre {destination}"},"slight right":{default:"Urmați breteaua din dreapta",name:"Urmați breteaua din dreapta pe {way_name}",destination:"Urmați breteaua din dreapta spre {destination}"}},rotary:{default:{default:{default:"Intrați în sensul giratoriu",name:"Intrați în sensul giratoriu și ieșiți pe {way_name}",destination:"Intrați în sensul giratoriu și ieșiți spre {destination}"},name:{default:"Intrați în {rotary_name}",name:"Intrați în {rotary_name} și ieșiți pe {way_name}",destination:"Intrați în {rotary_name} și ieșiți spre {destination}"},exit:{default:"Intrați în sensul giratoriu și urmați {exit_number} ieșire",name:"Intrați în sensul giratoriu și urmați {exit_number} ieșire pe {way_name}",destination:"Intrați în sensul giratoriu și urmați {exit_number} ieșire spre {destination}"},name_exit:{default:"Intrați în {rotary_name} și urmați {exit_number} ieșire",name:"Intrați în {rotary_name} și urmați {exit_number} ieșire pe {way_name}",destination:"Intrați în  {rotary_name} și urmați {exit_number} ieșire spre {destination}"}}},roundabout:{default:{exit:{default:"Intrați în sensul giratoriu și urmați {exit_number} ieșire",name:"Intrați în sensul giratoriu și urmați {exit_number} ieșire pe {way_name}",destination:"Intrați în sensul giratoriu și urmați {exit_number} ieșire spre {destination}"},default:{default:"Intrați în sensul giratoriu",name:"Intrați în sensul giratoriu și ieșiți pe {way_name}",destination:"Intrați în sensul giratoriu și ieșiți spre {destination}"}}},"roundabout turn":{default:{default:"La sensul giratoriu virați {modifier}",name:"La sensul giratoriu virați {modifier} pe {way_name}",destination:"La sensul giratoriu virați {modifier} spre {destination}"},left:{default:"La sensul giratoriu virați la stânga",name:"La sensul giratoriu virați la stânga pe {way_name}",destination:"La sensul giratoriu virați la stânga spre {destination}"},right:{default:"La sensul giratoriu virați la dreapta",name:"La sensul giratoriu virați la dreapta pe {way_name}",destination:"La sensul giratoriu virați la dreapta spre {destination}"},straight:{default:"La sensul giratoriu continuați înainte",name:"La sensul giratoriu continuați înainte pe {way_name}",destination:"La sensul giratoriu continuați înainte spre {destination}"}},"exit roundabout":{default:{default:"Ieșiți din sensul giratoriu",name:"Ieșiți din sensul giratoriu pe {way_name}",destination:"Ieșiți din sensul giratoriu spre {destination}"}},"exit rotary":{default:{default:"Ieșiți din sensul giratoriu",name:"Ieșiți din sensul giratoriu pe {way_name}",destination:"Ieșiți din sensul giratoriu spre {destination}"}},turn:{default:{default:"Virați {modifier}",name:"Virați {modifier} pe {way_name}",destination:"Virați {modifier} spre {destination}"},left:{default:"Virați la stânga",name:"Virați la stânga pe {way_name}",destination:"Virați la stânga spre {destination}"},right:{default:"Virați la dreapta",name:"Virați la dreapta pe {way_name}",destination:"Virați la dreapta spre {destination}"},straight:{default:"Mergeți înainte",name:"Mergeți înainte pe {way_name}",destination:"Mergeți înainte spre {destination}"}},"use lane":{no_lanes:{default:"Mergeți înainte"},default:{default:"{lane_instruction}"}}}}},{}],42:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"первый",2:"второй",3:"третий",4:"четвёртый",5:"пятый",6:"шестой",7:"седьмой",8:"восьмой",9:"девятый",10:"десятый"},direction:{north:"северном",northeast:"северо-восточном",east:"восточном",southeast:"юго-восточном",south:"южном",southwest:"юго-западном",west:"западном",northwest:"северо-западном"},modifier:{left:"налево",right:"направо","sharp left":"налево","sharp right":"направо","slight left":"левее","slight right":"правее",straight:"прямо",uturn:"на разворот"},lanes:{xo:"Держитесь правее",ox:"Держитесь левее",xox:"Держитесь посередине",oxo:"Держитесь слева или справа"}},modes:{ferry:{default:"Погрузитесь на паром",name:"Погрузитесь на паром {way_name}",destination:"Погрузитесь на паром в направлении {destination}"}},phrase:{"two linked by distance":"{instruction_one}, затем через {distance} {instruction_two}","two linked":"{instruction_one}, затем {instruction_two}","one in distance":"Через {distance} {instruction_one}","name and ref":"{name} ({ref})","exit with number":"съезд {exit}"},arrive:{default:{default:"Вы прибыли в {nth} пункт назначения",upcoming:"Вы прибудете в {nth} пункт назначения",short:"Вы прибыли","short-upcoming":"Вы скоро прибудете",named:"Вы прибыли в пункт назначения, {waypoint_name}"},left:{default:"Вы прибыли в {nth} пункт назначения, он находится слева",upcoming:"Вы прибудете в {nth} пункт назначения, он будет слева",short:"Вы прибыли","short-upcoming":"Вы скоро прибудете",named:"Вы прибыли в пункт назначения, {waypoint_name}, он находится слева"},right:{default:"Вы прибыли в {nth} пункт назначения, он находится справа",upcoming:"Вы прибудете в {nth} пункт назначения, он будет справа",short:"Вы прибыли","short-upcoming":"Вы скоро прибудете",named:"Вы прибыли в пункт назначения, {waypoint_name}, он находится справа"},"sharp left":{default:"Вы прибыли в {nth} пункт назначения, он находится слева сзади",upcoming:"Вы прибудете в {nth} пункт назначения, он будет слева сзади",short:"Вы прибыли","short-upcoming":"Вы скоро прибудете",named:"Вы прибыли в пункт назначения, {waypoint_name}, он находится слева сзади"},"sharp right":{default:"Вы прибыли в {nth} пункт назначения, он находится справа сзади",upcoming:"Вы прибудете в {nth} пункт назначения, он будет справа сзади",short:"Вы прибыли","short-upcoming":"Вы скоро прибудете",named:"Вы прибыли в пункт назначения, {waypoint_name}, он находится справа сзади"},"slight right":{default:"Вы прибыли в {nth} пункт назначения, он находится справа впереди",upcoming:"Вы прибудете в {nth} пункт назначения, он будет справа впереди",short:"Вы прибыли","short-upcoming":"Вы скоро прибудете",named:"Вы прибыли в пункт назначения, {waypoint_name}, он находится справа впереди"},"slight left":{default:"Вы прибыли в {nth} пункт назначения, он находится слева впереди",upcoming:"Вы прибудете в {nth} пункт назначения, он будет слева впереди",short:"Вы прибыли","short-upcoming":"Вы скоро прибудете",named:"Вы прибыли в пункт назначения, {waypoint_name}, он находится слева впереди"},straight:{default:"Вы прибыли в {nth} пункт назначения, он находится перед Вами",upcoming:"Вы прибудете в {nth} пункт назначения, он будет перед Вами",short:"Вы прибыли","short-upcoming":"Вы скоро прибудете",named:"Вы прибыли в пункт назначения, {waypoint_name}, он находится перед Вами"}},continue:{default:{default:"Двигайтесь {modifier}",name:"Двигайтесь {modifier} по {way_name:dative}",destination:"Двигайтесь {modifier} в направлении {destination}",exit:"Двигайтесь {modifier} на {way_name:accusative}"},straight:{default:"Двигайтесь прямо",name:"Продолжите движение по {way_name:dative}",destination:"Продолжите движение в направлении {destination}",distance:"Двигайтесь прямо {distance}",namedistance:"Двигайтесь прямо {distance} по {way_name:dative}"},"sharp left":{default:"Резко поверните налево",name:"Резко поверните налево на {way_name:accusative}",destination:"Резко поверните налево в направлении {destination}"},"sharp right":{default:"Резко поверните направо",name:"Резко поверните направо на {way_name:accusative}",destination:"Резко поверните направо в направлении {destination}"},"slight left":{default:"Плавно поверните налево",name:"Плавно поверните налево на {way_name:accusative}",destination:"Плавно поверните налево в направлении {destination}"},"slight right":{default:"Плавно поверните направо",name:"Плавно поверните направо на {way_name:accusative}",destination:"Плавно поверните направо в направлении {destination}"},uturn:{default:"Развернитесь",name:"Развернитесь и продолжите движение по {way_name:dative}",destination:"Развернитесь в направлении {destination}"}},depart:{default:{default:"Двигайтесь в {direction} направлении",name:"Двигайтесь в {direction} направлении по {way_name:dative}",namedistance:"Двигайтесь {distance} в {direction} направлении по {way_name:dative}"}},"end of road":{default:{default:"Поверните {modifier}",name:"Поверните {modifier} на {way_name:accusative}",destination:"Поверните {modifier} в направлении {destination}"},straight:{default:"Двигайтесь прямо",name:"Двигайтесь прямо по {way_name:dative}",destination:"Двигайтесь прямо в направлении {destination}"},uturn:{default:"В конце дороги развернитесь",name:"Развернитесь в конце {way_name:genitive}",destination:"В конце дороги развернитесь в направлении {destination}"}},fork:{default:{default:"На развилке двигайтесь {modifier}",name:"На развилке двигайтесь {modifier} на {way_name:accusative}",destination:"На развилке двигайтесь {modifier} в направлении {destination}"},"slight left":{default:"На развилке держитесь левее",name:"На развилке держитесь левее на {way_name:accusative}",destination:"На развилке держитесь левее и продолжите движение в направлении {destination}"},"slight right":{default:"На развилке держитесь правее",name:"На развилке держитесь правее на {way_name:accusative}",destination:"На развилке держитесь правее и продолжите движение в направлении {destination}"},"sharp left":{default:"На развилке резко поверните налево",name:"Резко поверните налево на {way_name:accusative}",destination:"Резко поверните налево и продолжите движение в направлении {destination}"},"sharp right":{default:"На развилке резко поверните направо",name:"Резко поверните направо на {way_name:accusative}",destination:"Резко поверните направо и продолжите движение в направлении {destination}"},uturn:{default:"На развилке развернитесь",name:"На развилке развернитесь на {way_name:prepositional}",destination:"На развилке развернитесь и продолжите движение в направлении {destination}"}},merge:{default:{default:"Перестройтесь {modifier}",name:"Перестройтесь {modifier} на {way_name:accusative}",destination:"Перестройтесь {modifier} в направлении {destination}"},straight:{default:"Двигайтесь прямо",name:"Продолжите движение по {way_name:dative}",destination:"Продолжите движение в направлении {destination}"},"slight left":{default:"Перестройтесь левее",name:"Перестройтесь левее на {way_name:accusative}",destination:"Перестройтесь левее в направлении {destination}"},"slight right":{default:"Перестройтесь правее",name:"Перестройтесь правее на {way_name:accusative}",destination:"Перестройтесь правее в направлении {destination}"},"sharp left":{default:"Перестраивайтесь левее",name:"Перестраивайтесь левее на {way_name:accusative}",destination:"Перестраивайтесь левее в направлении {destination}"},"sharp right":{default:"Перестраивайтесь правее",name:"Перестраивайтесь правее на {way_name:accusative}",destination:"Перестраивайтесь правее в направлении {destination}"},uturn:{default:"Развернитесь",name:"Развернитесь на {way_name:prepositional}",destination:"Развернитесь в направлении {destination}"}},"new name":{default:{default:"Двигайтесь {modifier}",name:"Двигайтесь {modifier} на {way_name:accusative}",destination:"Двигайтесь {modifier} в направлении {destination}"},straight:{default:"Двигайтесь прямо",name:"Продолжите движение по {way_name:dative}",destination:"Продолжите движение в направлении {destination}"},"sharp left":{default:"Резко поверните налево",name:"Резко поверните налево на {way_name:accusative}",destination:"Резко поверните налево и продолжите движение в направлении {destination}"},"sharp right":{default:"Резко поверните направо",name:"Резко поверните направо на {way_name:accusative}",destination:"Резко поверните направо и продолжите движение в направлении {destination}"},"slight left":{default:"Плавно поверните налево",name:"Плавно поверните налево на {way_name:accusative}",destination:"Плавно поверните налево в направлении {destination}"},"slight right":{default:"Плавно поверните направо",name:"Плавно поверните направо на {way_name:accusative}",destination:"Плавно поверните направо в направлении {destination}"},uturn:{default:"Развернитесь",name:"Развернитесь на {way_name:prepositional}",destination:"Развернитесь и продолжите движение в направлении {destination}"}},notification:{default:{default:"Двигайтесь {modifier}",name:"Двигайтесь {modifier} по {way_name:dative}",destination:"Двигайтесь {modifier} в направлении {destination}"},uturn:{default:"Развернитесь",name:"Развернитесь на {way_name:prepositional}",destination:"Развернитесь и продолжите движение в направлении {destination}"}},"off ramp":{default:{default:"Сверните на съезд",name:"Сверните на съезд на {way_name:accusative}",destination:"Сверните на съезд в направлении {destination}",exit:"Сверните на съезд {exit}",exit_destination:"Сверните на съезд {exit} в направлении {destination}"},left:{default:"Сверните на левый съезд",name:"Сверните на левый съезд на {way_name:accusative}",destination:"Сверните на левый съезд в направлении {destination}",exit:"Сверните на съезд {exit} слева",exit_destination:"Сверните на съезд {exit} слева в направлении {destination}"},right:{default:"Сверните на правый съезд",name:"Сверните на правый съезд на {way_name:accusative}",destination:"Сверните на правый съезд в направлении {destination}",exit:"Сверните на съезд {exit} справа",exit_destination:"Сверните на съезд {exit} справа в направлении {destination}"},"sharp left":{default:"Поверните налево на съезд",name:"Поверните налево на съезд на {way_name:accusative}",destination:"Поверните налево на съезд в направлении {destination}",exit:"Поверните налево на съезд {exit}",exit_destination:"Поверните налево на съезд {exit} в направлении {destination}"},"sharp right":{default:"Поверните направо на съезд",name:"Поверните направо на съезд на {way_name:accusative}",destination:"Поверните направо на съезд в направлении {destination}",exit:"Поверните направо на съезд {exit}",exit_destination:"Поверните направо на съезд {exit} в направлении {destination}"},"slight left":{default:"Перестройтесь левее на съезд",name:"Перестройтесь левее на съезд на {way_name:accusative}",destination:"Перестройтесь левее на съезд в направлении {destination}",exit:"Перестройтесь левее на {exit}",exit_destination:"Перестройтесь левее на съезд {exit} в направлении {destination}"},"slight right":{default:"Перестройтесь правее на съезд",name:"Перестройтесь правее на съезд на {way_name:accusative}",destination:"Перестройтесь правее на съезд в направлении {destination}",exit:"Перестройтесь правее на съезд {exit}",exit_destination:"Перестройтесь правее на съезд {exit} в направлении {destination}"}},"on ramp":{default:{default:"Сверните на автомагистраль",name:"Сверните на въезд на {way_name:accusative}",destination:"Сверните на въезд на автомагистраль в направлении {destination}"},left:{default:"Сверните на левый въезд на автомагистраль",name:"Сверните на левый въезд на {way_name:accusative}",destination:"Сверните на левый въезд на автомагистраль в направлении {destination}"},right:{default:"Сверните на правый въезд на автомагистраль",name:"Сверните на правый въезд на {way_name:accusative}",destination:"Сверните на правый въезд на автомагистраль в направлении {destination}"},"sharp left":{default:"Поверните на левый въезд на автомагистраль",name:"Поверните на левый въезд на {way_name:accusative}",destination:"Поверните на левый въезд на автомагистраль в направлении {destination}"},"sharp right":{default:"Поверните на правый въезд на автомагистраль",name:"Поверните на правый въезд на {way_name:accusative}",destination:"Поверните на правый въезд на автомагистраль в направлении {destination}"},"slight left":{default:"Перестройтесь левее на въезд на автомагистраль",name:"Перестройтесь левее на {way_name:accusative}",destination:"Перестройтесь левее на автомагистраль в направлении {destination}"},"slight right":{default:"Перестройтесь правее на въезд на автомагистраль",name:"Перестройтесь правее на {way_name:accusative}",destination:"Перестройтесь правее на автомагистраль в направлении {destination}"}},rotary:{default:{default:{default:"Продолжите движение по круговой развязке",name:"На круговой развязке сверните на {way_name:accusative}",destination:"На круговой развязке сверните в направлении {destination}"},name:{default:"Продолжите движение по {rotary_name:dative}",name:"На {rotary_name:prepositional} сверните на {way_name:accusative}",destination:"На {rotary_name:prepositional} сверните в направлении {destination}"},exit:{default:"На круговой развязке сверните на {exit_number} съезд",name:"На круговой развязке сверните на {exit_number} съезд на {way_name:accusative}",destination:"На круговой развязке сверните на {exit_number} съезд в направлении {destination}"},name_exit:{default:"На {rotary_name:prepositional} сверните на {exit_number} съезд",name:"На {rotary_name:prepositional} сверните на {exit_number} съезд на {way_name:accusative}",destination:"На {rotary_name:prepositional} сверните на {exit_number} съезд в направлении {destination}"}}},roundabout:{default:{exit:{default:"На круговой развязке сверните на {exit_number} съезд",name:"На круговой развязке сверните на {exit_number} съезд на {way_name:accusative}",destination:"На круговой развязке сверните на {exit_number} съезд в направлении {destination}"},default:{default:"Продолжите движение по круговой развязке",name:"На круговой развязке сверните на {way_name:accusative}",destination:"На круговой развязке сверните в направлении {destination}"}}},"roundabout turn":{default:{default:"Двигайтесь {modifier}",name:"Двигайтесь {modifier} на {way_name:accusative}",destination:"Двигайтесь {modifier} в направлении {destination}"},left:{default:"Сверните налево",name:"Сверните налево на {way_name:accusative}",destination:"Сверните налево в направлении {destination}"},right:{default:"Сверните направо",name:"Сверните направо на {way_name:accusative}",destination:"Сверните направо в направлении {destination}"},straight:{default:"Двигайтесь прямо",name:"Двигайтесь прямо по {way_name:dative}",destination:"Двигайтесь прямо в направлении {destination}"}},"exit roundabout":{default:{default:"Сверните с круговой развязки",name:"Сверните с круговой развязки на {way_name:accusative}",destination:"Сверните с круговой развязки в направлении {destination}"}},"exit rotary":{default:{default:"Сверните с круговой развязки",name:"Сверните с круговой развязки на {way_name:accusative}",destination:"Сверните с круговой развязки в направлении {destination}"}},turn:{default:{default:"Двигайтесь {modifier}",name:"Двигайтесь {modifier} на {way_name:accusative}",destination:"Двигайтесь {modifier}  в направлении {destination}"},left:{default:"Поверните налево",name:"Поверните налево на {way_name:accusative}",destination:"Поверните налево в направлении {destination}"},right:{default:"Поверните направо",name:"Поверните направо на {way_name:accusative}",destination:"Поверните направо  в направлении {destination}"},straight:{default:"Двигайтесь прямо",name:"Двигайтесь по {way_name:dative}",destination:"Двигайтесь в направлении {destination}"}},"use lane":{no_lanes:{default:"Продолжайте движение прямо"},default:{default:"{lane_instruction}"}}}}},{}],43:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1:a",2:"2:a",3:"3:e",4:"4:e",5:"5:e",6:"6:e",7:"7:e",8:"8:e",9:"9:e",10:"10:e"},direction:{north:"norr",northeast:"nordost",east:"öster",southeast:"sydost",south:"söder",southwest:"sydväst",west:"väster",northwest:"nordväst"},modifier:{left:"vänster",right:"höger","sharp left":"vänster","sharp right":"höger","slight left":"vänster","slight right":"höger",straight:"rakt fram",uturn:"U-sväng"},lanes:{xo:"Håll till höger",ox:"Håll till vänster",xox:"Håll till mitten",oxo:"Håll till vänster eller höger"}},modes:{ferry:{default:"Ta färjan",name:"Ta färjan på {way_name}",destination:"Ta färjan mot {destination}"}},phrase:{"two linked by distance":"{instruction_one}, sedan efter {distance}, {instruction_two}","two linked":"{instruction_one}, sedan {instruction_two}","one in distance":"Om {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"exit {exit}"},arrive:{default:{default:"Du är framme vid din {nth} destination",upcoming:"Du är snart framme vid din {nth} destination",short:"Du är framme","short-upcoming":"Du är snart framme",named:"Du är framme vid {waypoint_name}"},left:{default:"Du är framme vid din {nth} destination, till vänster",upcoming:"Du är snart framme vid din {nth} destination, till vänster",short:"Du är framme","short-upcoming":"Du är snart framme",named:"Du är framme vid {waypoint_name}, till vänster"},right:{default:"Du är framme vid din {nth} destination, till höger",upcoming:"Du är snart framme vid din {nth} destination, till höger",short:"Du är framme","short-upcoming":"Du är snart framme",named:"Du är framme vid {waypoint_name}, till höger"},"sharp left":{default:"Du är framme vid din {nth} destination, till vänster",upcoming:"Du är snart framme vid din {nth} destination, till vänster",short:"Du är framme","short-upcoming":"Du är snart framme",named:"Du är framme vid {waypoint_name}, till vänster"},"sharp right":{default:"Du är framme vid din {nth} destination, till höger",upcoming:"Du är snart framme vid din {nth} destination, till höger",short:"Du är framme","short-upcoming":"Du är snart framme",named:"Du är framme vid {waypoint_name}, till höger"},"slight right":{default:"Du är framme vid din {nth} destination, till höger",upcoming:"Du är snart framme vid din {nth} destination, till höger",short:"Du är framme","short-upcoming":"Du är snart framme",named:"Du är framme vid {waypoint_name}, till höger"},"slight left":{default:"Du är framme vid din {nth} destination, till vänster",upcoming:"Du är snart framme vid din {nth} destination, till vänster",short:"Du är framme","short-upcoming":"Du är snart framme",named:"Du är framme vid {waypoint_name}, till vänster"},straight:{default:"Du är framme vid din {nth} destination, rakt fram",upcoming:"Du är snart framme vid din {nth} destination, rakt fram",short:"Du är framme","short-upcoming":"Du är snart framme",named:"Du är framme vid {waypoint_name}, rakt fram"}},continue:{default:{default:"Sväng {modifier}",name:"Sväng {modifier} och fortsätt på {way_name}",destination:"Sväng {modifier} mot {destination}",exit:"Sväng {modifier} in på {way_name}"},straight:{default:"Fortsätt rakt fram",name:"Kör rakt fram och fortsätt på {way_name}",destination:"Fortsätt mot {destination}",distance:"Fortsätt rakt fram i {distance}",namedistance:"Fortsätt på {way_name} i {distance}"},"sharp left":{default:"Sväng vänster",name:"Sväng vänster och fortsätt på {way_name}",destination:"Sväng vänster mot {destination}"},"sharp right":{default:"Sväng höger",name:"Sväng höger och fortsätt på {way_name}",destination:"Sväng höger mot {destination}"},"slight left":{default:"Sväng vänster",name:"Sväng vänster och fortsätt på {way_name}",destination:"Sväng vänster mot {destination}"},"slight right":{default:"Sväng höger",name:"Sväng höger och fortsätt på {way_name}",destination:"Sväng höger mot {destination}"},uturn:{default:"Gör en U-sväng",name:"Gör en U-sväng och fortsätt på {way_name}",destination:"Gör en U-sväng mot {destination}"}},depart:{default:{default:"Kör åt {direction}",name:"Kör åt {direction} på {way_name}",namedistance:"Kör {distance} åt {direction} på {way_name}"}},"end of road":{default:{default:"Sväng {modifier}",name:"Sväng {modifier} in på {way_name}",destination:"Sväng {modifier} mot {destination}"},straight:{default:"Fortsätt rakt fram",name:"Fortsätt rakt fram in på {way_name}",destination:"Fortsätt rakt fram mot {destination}"},uturn:{default:"Gör en U-sväng i slutet av vägen",name:"Gör en U-sväng in på {way_name} i slutet av vägen",destination:"Gör en U-sväng mot {destination} i slutet av vägen"}},fork:{default:{default:"Håll till {modifier} där vägen delar sig",name:"Håll till {modifier} in på {way_name}",destination:"Håll till {modifier} mot {destination}"},"slight left":{default:"Håll till vänster där vägen delar sig",name:"Håll till vänster in på {way_name}",destination:"Håll till vänster mot {destination}"},"slight right":{default:"Håll till höger där vägen delar sig",name:"Håll till höger in på {way_name}",destination:"Håll till höger mot {destination}"},"sharp left":{default:"Sväng vänster där vägen delar sig",name:"Sväng vänster in på {way_name}",destination:"Sväng vänster mot {destination}"},"sharp right":{default:"Sväng höger där vägen delar sig",name:"Sväng höger in på {way_name}",destination:"Sväng höger mot {destination}"},uturn:{default:"Gör en U-sväng",name:"Gör en U-sväng in på {way_name}",destination:"Gör en U-sväng mot {destination}"}},merge:{default:{default:"Byt till {modifier} körfält",name:"Byt till {modifier} körfält, in på {way_name}",destination:"Byt till {modifier} körfält, mot {destination}"},straight:{default:"Fortsätt",name:"Kör in på {way_name}",destination:"Kör mot {destination}"},"slight left":{default:"Byt till vänstra körfältet",name:"Byt till vänstra körfältet, in på {way_name}",destination:"Byt till vänstra körfältet, mot {destination}"},"slight right":{default:"Byt till högra körfältet",name:"Byt till högra körfältet, in på {way_name}",destination:"Byt till högra körfältet, mot {destination}"},"sharp left":{default:"Byt till vänstra körfältet",name:"Byt till vänstra körfältet, in på {way_name}",destination:"Byt till vänstra körfältet, mot {destination}"},"sharp right":{default:"Byt till högra körfältet",name:"Byt till högra körfältet, in på {way_name}",destination:"Byt till högra körfältet, mot {destination}"},uturn:{default:"Gör en U-sväng",name:"Gör en U-sväng in på {way_name}",destination:"Gör en U-sväng mot {destination}"}},"new name":{default:{default:"Fortsätt {modifier}",name:"Fortsätt {modifier} på {way_name}",destination:"Fortsätt {modifier} mot {destination}"},straight:{default:"Fortsätt rakt fram",name:"Fortsätt in på {way_name}",destination:"Fortsätt mot {destination}"},"sharp left":{default:"Gör en skarp vänstersväng",name:"Gör en skarp vänstersväng in på {way_name}",destination:"Gör en skarp vänstersväng mot {destination}"},"sharp right":{default:"Gör en skarp högersväng",name:"Gör en skarp högersväng in på {way_name}",destination:"Gör en skarp högersväng mot {destination}"},"slight left":{default:"Fortsätt med lätt vänstersväng",name:"Fortsätt med lätt vänstersväng in på {way_name}",destination:"Fortsätt med lätt vänstersväng mot {destination}"},"slight right":{default:"Fortsätt med lätt högersväng",name:"Fortsätt med lätt högersväng in på {way_name}",destination:"Fortsätt med lätt högersväng mot {destination}"},uturn:{default:"Gör en U-sväng",name:"Gör en U-sväng in på {way_name}",destination:"Gör en U-sväng mot {destination}"}},notification:{default:{default:"Fortsätt {modifier}",name:"Fortsätt {modifier} på {way_name}",destination:"Fortsätt {modifier} mot {destination}"},uturn:{default:"Gör en U-sväng",name:"Gör en U-sväng in på {way_name}",destination:"Gör en U-sväng mot {destination}"}},"off ramp":{default:{default:"Ta avfarten",name:"Ta avfarten in på {way_name}",destination:"Ta avfarten mot {destination}",exit:"Ta avfart {exit} ",exit_destination:"Ta avfart {exit} mot {destination}"},left:{default:"Ta avfarten till vänster",name:"Ta avfarten till vänster in på {way_name}",destination:"Ta avfarten till vänster mot {destination}",exit:"Ta avfart {exit} till vänster",exit_destination:"Ta avfart {exit} till vänster mot {destination}"},right:{default:"Ta avfarten till höger",name:"Ta avfarten till höger in på {way_name}",destination:"Ta avfarten till höger mot {destination}",exit:"Ta avfart {exit} till höger",exit_destination:"Ta avfart {exit} till höger mot {destination}"},"sharp left":{default:"Ta avfarten till vänster",name:"Ta avfarten till vänster in på {way_name}",destination:"Ta avfarten till vänster mot {destination}",exit:"Ta avfart {exit} till vänster",exit_destination:"Ta avfart {exit} till vänster mot {destination}"},"sharp right":{default:"Ta avfarten till höger",name:"Ta avfarten till höger in på {way_name}",destination:"Ta avfarten till höger mot {destination}",exit:"Ta avfart {exit} till höger",exit_destination:"Ta avfart {exit} till höger mot {destination}"},"slight left":{default:"Ta avfarten till vänster",name:"Ta avfarten till vänster in på {way_name}",destination:"Ta avfarten till vänster mot {destination}",exit:"Ta avfart {exit} till vänster",exit_destination:"Ta avfart{exit} till vänster mot {destination}"},"slight right":{default:"Ta avfarten till höger",name:"Ta avfarten till höger in på {way_name}",destination:"Ta avfarten till höger mot {destination}",exit:"Ta avfart {exit} till höger",exit_destination:"Ta avfart {exit} till höger mot {destination}"}},"on ramp":{default:{default:"Ta påfarten",name:"Ta påfarten in på {way_name}",destination:"Ta påfarten mot {destination}"},left:{default:"Ta påfarten till vänster",name:"Ta påfarten till vänster in på {way_name}",destination:"Ta påfarten till vänster mot {destination}"},right:{default:"Ta påfarten till höger",name:"Ta påfarten till höger in på {way_name}",destination:"Ta påfarten till höger mot {destination}"},"sharp left":{default:"Ta påfarten till vänster",name:"Ta påfarten till vänster in på {way_name}",destination:"Ta påfarten till vänster mot {destination}"},"sharp right":{default:"Ta påfarten till höger",name:"Ta påfarten till höger in på {way_name}",destination:"Ta påfarten till höger mot {destination}"},"slight left":{default:"Ta påfarten till vänster",
2177name:"Ta påfarten till vänster in på {way_name}",destination:"Ta påfarten till vänster mot {destination}"},"slight right":{default:"Ta påfarten till höger",name:"Ta påfarten till höger in på {way_name}",destination:"Ta påfarten till höger mot {destination}"}},rotary:{default:{default:{default:"Kör in i rondellen",name:"I rondellen, ta avfarten in på {way_name}",destination:"I rondellen, ta av mot {destination}"},name:{default:"Kör in i {rotary_name}",name:"I {rotary_name}, ta av in på {way_name}",destination:"I {rotary_name}, ta av mot {destination}"},exit:{default:"I rondellen, ta {exit_number} avfarten",name:"I rondellen, ta {exit_number} avfarten in på {way_name}",destination:"I rondellen, ta {exit_number} avfarten mot {destination}"},name_exit:{default:"I {rotary_name}, ta {exit_number} avfarten",name:"I {rotary_name}, ta {exit_number}  avfarten in på {way_name}",destination:"I {rotary_name}, ta {exit_number} avfarten mot {destination}"}}},roundabout:{default:{exit:{default:"I rondellen, ta {exit_number} avfarten",name:"I rondellen, ta {exit_number} avfarten in på {way_name}",destination:"I rondellen, ta {exit_number} avfarten mot {destination}"},default:{default:"Kör in i rondellen",name:"I rondellen, ta avfarten in på {way_name}",destination:"I rondellen, ta av mot {destination}"}}},"roundabout turn":{default:{default:"Sväng {modifier}",name:"Sväng {modifier} in på {way_name}",destination:"Sväng {modifier} mot {destination}"},left:{default:"Sväng vänster",name:"Sväng vänster in på {way_name}",destination:"Sväng vänster mot {destination}"},right:{default:"Sväng höger",name:"Sväng höger in på {way_name}",destination:"Sväng höger mot {destination}"},straight:{default:"Fortsätt rakt fram",name:"Fortsätt rakt fram in på {way_name}",destination:"Fortsätt rakt fram mot {destination}"}},"exit roundabout":{default:{default:"Kör ut ur rondellen",name:"Kör ut ur rondellen in på {way_name}",destination:"Kör ut ur rondellen mot {destination}"}},"exit rotary":{default:{default:"Kör ut ur rondellen",name:"Kör ut ur rondellen in på {way_name}",destination:"Kör ut ur rondellen mot {destination}"}},turn:{default:{default:"Sväng {modifier}",name:"Sväng {modifier} in på {way_name}",destination:"Sväng {modifier} mot {destination}"},left:{default:"Sväng vänster",name:"Sväng vänster in på {way_name}",destination:"Sväng vänster mot {destination}"},right:{default:"Sväng höger",name:"Sväng höger in på {way_name}",destination:"Sväng höger mot {destination}"},straight:{default:"Kör rakt fram",name:"Kör rakt fram in på {way_name}",destination:"Kör rakt fram mot {destination}"}},"use lane":{no_lanes:{default:"Fortsätt rakt fram"},default:{default:"{lane_instruction}"}}}}},{}],44:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"birinci",2:"ikinci",3:"üçüncü",4:"dördüncü",5:"beşinci",6:"altıncı",7:"yedinci",8:"sekizinci",9:"dokuzuncu",10:"onuncu"},direction:{north:"kuzey",northeast:"kuzeydoğu",east:"doğu",southeast:"güneydoğu",south:"güney",southwest:"güneybatı",west:"batı",northwest:"kuzeybatı"},modifier:{left:"sol",right:"sağ","sharp left":"keskin sol","sharp right":"keskin sağ","slight left":"hafif sol","slight right":"hafif sağ",straight:"düz",uturn:"U dönüşü"},lanes:{xo:"Sağda kalın",ox:"Solda kalın",xox:"Ortada kalın",oxo:"Solda veya sağda kalın"}},modes:{ferry:{default:"Vapur kullan",name:"{way_name} vapurunu kullan",destination:"{destination} istikametine giden vapuru kullan"}},phrase:{"two linked by distance":"{instruction_one} ve {distance} sonra {instruction_two}","two linked":"{instruction_one} ve sonra {instruction_two}","one in distance":"{distance} sonra, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"exit {exit}"},arrive:{default:{default:"{nth} hedefinize ulaştınız",upcoming:"{nth} hedefinize ulaştınız",short:"{nth} hedefinize ulaştınız","short-upcoming":"{nth} hedefinize ulaştınız",named:"{waypoint_name} ulaştınız"},left:{default:"{nth} hedefinize ulaştınız, hedefiniz solunuzdadır",upcoming:"{nth} hedefinize ulaştınız, hedefiniz solunuzdadır",short:"{nth} hedefinize ulaştınız","short-upcoming":"{nth} hedefinize ulaştınız",named:"{waypoint_name} ulaştınız, hedefiniz solunuzdadır"},right:{default:"{nth} hedefinize ulaştınız, hedefiniz sağınızdadır",upcoming:"{nth} hedefinize ulaştınız, hedefiniz sağınızdadır",short:"{nth} hedefinize ulaştınız","short-upcoming":"{nth} hedefinize ulaştınız",named:"{waypoint_name} ulaştınız, hedefiniz sağınızdadır"},"sharp left":{default:"{nth} hedefinize ulaştınız, hedefiniz solunuzdadır",upcoming:"{nth} hedefinize ulaştınız, hedefiniz solunuzdadır",short:"{nth} hedefinize ulaştınız","short-upcoming":"{nth} hedefinize ulaştınız",named:"{waypoint_name} ulaştınız, hedefiniz solunuzdadır"},"sharp right":{default:"{nth} hedefinize ulaştınız, hedefiniz sağınızdadır",upcoming:"{nth} hedefinize ulaştınız, hedefiniz sağınızdadır",short:"{nth} hedefinize ulaştınız","short-upcoming":"{nth} hedefinize ulaştınız",named:"{waypoint_name} ulaştınız, hedefiniz sağınızdadır"},"slight right":{default:"{nth} hedefinize ulaştınız, hedefiniz sağınızdadır",upcoming:"{nth} hedefinize ulaştınız, hedefiniz sağınızdadır",short:"{nth} hedefinize ulaştınız","short-upcoming":"{nth} hedefinize ulaştınız",named:"{waypoint_name} ulaştınız, hedefiniz sağınızdadır"},"slight left":{default:"{nth} hedefinize ulaştınız, hedefiniz solunuzdadır",upcoming:"{nth} hedefinize ulaştınız, hedefiniz solunuzdadır",short:"{nth} hedefinize ulaştınız","short-upcoming":"{nth} hedefinize ulaştınız",named:"{waypoint_name} ulaştınız, hedefiniz solunuzdadır"},straight:{default:"{nth} hedefinize ulaştınız, hedefiniz karşınızdadır",upcoming:"{nth} hedefinize ulaştınız, hedefiniz karşınızdadır",short:"{nth} hedefinize ulaştınız","short-upcoming":"{nth} hedefinize ulaştınız",named:"{waypoint_name} ulaştınız, hedefiniz karşınızdadır"}},continue:{default:{default:"{modifier} yöne dön",name:"{way_name} üzerinde kalmak için {modifier} yöne dön",destination:"{destination} istikametinde {modifier} yöne dön",exit:"{way_name} üzerinde {modifier} yöne dön"},straight:{default:"Düz devam edin",name:"{way_name} üzerinde kalmak için düz devam et",destination:"{destination} istikametinde devam et",distance:"{distance} boyunca düz devam et",namedistance:"{distance} boyunca {way_name} üzerinde devam et"},"sharp left":{default:"Sola keskin dönüş yap",name:"{way_name} üzerinde kalmak için sola keskin dönüş yap",destination:"{destination} istikametinde sola keskin dönüş yap"},"sharp right":{default:"Sağa keskin dönüş yap",name:"{way_name} üzerinde kalmak için sağa keskin dönüş yap",destination:"{destination} istikametinde sağa keskin dönüş yap"},"slight left":{default:"Sola hafif dönüş yap",name:"{way_name} üzerinde kalmak için sola hafif dönüş yap",destination:"{destination} istikametinde sola hafif dönüş yap"},"slight right":{default:"Sağa hafif dönüş yap",name:"{way_name} üzerinde kalmak için sağa hafif dönüş yap",destination:"{destination} istikametinde sağa hafif dönüş yap"},uturn:{default:"U dönüşü yapın",name:"Bir U-dönüşü yap ve {way_name} devam et",destination:"{destination} istikametinde bir U-dönüşü yap"}},depart:{default:{default:"{direction} tarafına yönelin",name:"{way_name} üzerinde {direction} yöne git",namedistance:"Head {direction} on {way_name} for {distance}"}},"end of road":{default:{default:"{modifier} tarafa dönün",name:"{way_name} üzerinde {modifier} yöne dön",destination:"{destination} istikametinde {modifier} yöne dön"},straight:{default:"Düz devam edin",name:"{way_name} üzerinde düz devam et",destination:"{destination} istikametinde düz devam et"},uturn:{default:"Yolun sonunda U dönüşü yapın",name:"Yolun sonunda {way_name} üzerinde bir U-dönüşü yap",destination:"Yolun sonunda {destination} istikametinde bir U-dönüşü yap"}},fork:{default:{default:"Yol ayrımında {modifier} yönde kal",name:"{way_name} üzerindeki yol ayrımında {modifier} yönde kal",destination:"{destination} istikametindeki yol ayrımında {modifier} yönde kal"},"slight left":{default:"Çatalın solundan devam edin",name:"Çatalın solundan {way_name} yoluna doğru ",destination:"{destination} istikametindeki yol ayrımında solda kal"},"slight right":{default:"Çatalın sağından devam edin",name:"{way_name} üzerindeki yol ayrımında sağda kal",destination:"{destination} istikametindeki yol ayrımında sağda kal"},"sharp left":{default:"Çatalda keskin sola dönün",name:"{way_name} yoluna doğru sola keskin dönüş yapın",destination:"{destination} istikametinde sola keskin dönüş yap"},"sharp right":{default:"Çatalda keskin sağa dönün",name:"{way_name} yoluna doğru sağa keskin dönüş yapın",destination:"{destination} istikametinde sağa keskin dönüş yap"},uturn:{default:"U dönüşü yapın",name:"{way_name} yoluna U dönüşü yapın",destination:"{destination} istikametinde bir U-dönüşü yap"}},merge:{default:{default:"{modifier} yöne gir",name:"{way_name} üzerinde {modifier} yöne gir",destination:"{destination} istikametinde {modifier} yöne gir"},straight:{default:"düz yöne gir",name:"{way_name} üzerinde düz yöne gir",destination:"{destination} istikametinde düz yöne gir"},"slight left":{default:"Sola gir",name:"{way_name} üzerinde sola gir",destination:"{destination} istikametinde sola gir"},"slight right":{default:"Sağa gir",name:"{way_name} üzerinde sağa gir",destination:"{destination} istikametinde sağa gir"},"sharp left":{default:"Sola gir",name:"{way_name} üzerinde sola gir",destination:"{destination} istikametinde sola gir"},"sharp right":{default:"Sağa gir",name:"{way_name} üzerinde sağa gir",destination:"{destination} istikametinde sağa gir"},uturn:{default:"U dönüşü yapın",name:"{way_name} yoluna U dönüşü yapın",destination:"{destination} istikametinde bir U-dönüşü yap"}},"new name":{default:{default:"{modifier} yönde devam et",name:"{way_name} üzerinde {modifier} yönde devam et",destination:"{destination} istikametinde {modifier} yönde devam et"},straight:{default:"Düz devam et",name:"{way_name} üzerinde devam et",destination:"{destination} istikametinde devam et"},"sharp left":{default:"Sola keskin dönüş yapın",name:"{way_name} yoluna doğru sola keskin dönüş yapın",destination:"{destination} istikametinde sola keskin dönüş yap"},"sharp right":{default:"Sağa keskin dönüş yapın",name:"{way_name} yoluna doğru sağa keskin dönüş yapın",destination:"{destination} istikametinde sağa keskin dönüş yap"},"slight left":{default:"Hafif soldan devam edin",name:"{way_name} üzerinde hafif solda devam et",destination:"{destination} istikametinde hafif solda devam et"},"slight right":{default:"Hafif sağdan devam edin",name:"{way_name} üzerinde hafif sağda devam et",destination:"{destination} istikametinde hafif sağda devam et"},uturn:{default:"U dönüşü yapın",name:"{way_name} yoluna U dönüşü yapın",destination:"{destination} istikametinde bir U-dönüşü yap"}},notification:{default:{default:"{modifier} yönde devam et",name:"{way_name} üzerinde {modifier} yönde devam et",destination:"{destination} istikametinde {modifier} yönde devam et"},uturn:{default:"U dönüşü yapın",name:"{way_name} yoluna U dönüşü yapın",destination:"{destination} istikametinde bir U-dönüşü yap"}},"off ramp":{default:{default:"Bağlantı yoluna geç",name:"{way_name} üzerindeki bağlantı yoluna geç",destination:"{destination} istikametine giden bağlantı yoluna geç",exit:"{exit} çıkış yoluna geç",exit_destination:"{destination} istikametindeki {exit} çıkış yoluna geç"},left:{default:"Soldaki bağlantı yoluna geç",name:"{way_name} üzerindeki sol bağlantı yoluna geç",destination:"{destination} istikametine giden sol bağlantı yoluna geç",exit:"Soldaki {exit} çıkış yoluna geç",exit_destination:"{destination} istikametindeki {exit} sol çıkış yoluna geç"},right:{default:"Sağdaki bağlantı yoluna geç",name:"{way_name} üzerindeki sağ bağlantı yoluna geç",destination:"{destination} istikametine giden sağ bağlantı yoluna geç",exit:"Sağdaki {exit} çıkış yoluna geç",exit_destination:"{destination} istikametindeki {exit} sağ çıkış yoluna geç"},"sharp left":{default:"Soldaki bağlantı yoluna geç",name:"{way_name} üzerindeki sol bağlantı yoluna geç",destination:"{destination} istikametine giden sol bağlantı yoluna geç",exit:"Soldaki {exit} çıkış yoluna geç",exit_destination:"{destination} istikametindeki {exit} sol çıkış yoluna geç"},"sharp right":{default:"Sağdaki bağlantı yoluna geç",name:"{way_name} üzerindeki sağ bağlantı yoluna geç",destination:"{destination} istikametine giden sağ bağlantı yoluna geç",exit:"Sağdaki {exit} çıkış yoluna geç",exit_destination:"{destination} istikametindeki {exit} sağ çıkış yoluna geç"},"slight left":{default:"Soldaki bağlantı yoluna geç",name:"{way_name} üzerindeki sol bağlantı yoluna geç",destination:"{destination} istikametine giden sol bağlantı yoluna geç",exit:"Soldaki {exit} çıkış yoluna geç",exit_destination:"{destination} istikametindeki {exit} sol çıkış yoluna geç"},"slight right":{default:"Sağdaki bağlantı yoluna geç",name:"{way_name} üzerindeki sağ bağlantı yoluna geç",destination:"{destination} istikametine giden sağ bağlantı yoluna geç",exit:"Sağdaki {exit} çıkış yoluna geç",exit_destination:"{destination} istikametindeki {exit} sağ çıkış yoluna geç"}},"on ramp":{default:{default:"Bağlantı yoluna geç",name:"{way_name} üzerindeki bağlantı yoluna geç",destination:"{destination} istikametine giden bağlantı yoluna geç"},left:{default:"Soldaki bağlantı yoluna geç",name:"{way_name} üzerindeki sol bağlantı yoluna geç",destination:"{destination} istikametine giden sol bağlantı yoluna geç"},right:{default:"Sağdaki bağlantı yoluna geç",name:"{way_name} üzerindeki sağ bağlantı yoluna geç",destination:"{destination} istikametine giden sağ bağlantı yoluna geç"},"sharp left":{default:"Soldaki bağlantı yoluna geç",name:"{way_name} üzerindeki sol bağlantı yoluna geç",destination:"{destination} istikametine giden sol bağlantı yoluna geç"},"sharp right":{default:"Sağdaki bağlantı yoluna geç",name:"{way_name} üzerindeki sağ bağlantı yoluna geç",destination:"{destination} istikametine giden sağ bağlantı yoluna geç"},"slight left":{default:"Soldaki bağlantı yoluna geç",name:"{way_name} üzerindeki sol bağlantı yoluna geç",destination:"{destination} istikametine giden sol bağlantı yoluna geç"},"slight right":{default:"Sağdaki bağlantı yoluna geç",name:"{way_name} üzerindeki sağ bağlantı yoluna geç",destination:"{destination} istikametine giden sağ bağlantı yoluna geç"}},rotary:{default:{default:{default:"Dönel kavşağa gir",name:"Dönel kavşağa gir ve {way_name} üzerinde çık",destination:"Dönel kavşağa gir ve {destination} istikametinde çık"},name:{default:"{rotary_name} dönel kavşağa gir",name:"{rotary_name} dönel kavşağa gir ve {way_name} üzerinde çık",destination:"{rotary_name} dönel kavşağa gir ve {destination} istikametinde çık"},exit:{default:"Dönel kavşağa gir ve {exit_number} numaralı çıkışa gir",name:"Dönel kavşağa gir ve {way_name} üzerindeki {exit_number} numaralı çıkışa gir",destination:"Dönel kavşağa gir ve {destination} istikametindeki {exit_number} numaralı çıkışa gir"},name_exit:{default:"{rotary_name} dönel kavşağa gir ve {exit_number} numaralı çıkışa gir",name:"{rotary_name} dönel kavşağa gir ve {way_name} üzerindeki {exit_number} numaralı çıkışa gir",destination:"{rotary_name} dönel kavşağa gir ve {destination} istikametindeki {exit_number} numaralı çıkışa gir"}}},roundabout:{default:{exit:{default:"Göbekli kavşağa gir ve {exit_number} numaralı çıkışa gir",name:"Göbekli kavşağa gir ve {way_name} üzerindeki {exit_number} numaralı çıkışa gir",destination:"Göbekli kavşağa gir ve {destination} istikametindeki {exit_number} numaralı çıkışa gir"},default:{default:"Göbekli kavşağa gir",name:"Göbekli kavşağa gir ve {way_name} üzerinde çık",destination:"Göbekli kavşağa gir ve {destination} istikametinde çık"}}},"roundabout turn":{default:{default:"{modifier} yöne dön",name:"{way_name} üzerinde {modifier} yöne dön",destination:"{destination} istikametinde {modifier} yöne dön"},left:{default:"Sola dön",name:"{way_name} üzerinde sola dön",destination:"{destination} istikametinde sola dön"},right:{default:"Sağa dön",name:"{way_name} üzerinde sağa dön",destination:"{destination} istikametinde sağa dön"},straight:{default:"Düz devam et",name:"{way_name} üzerinde düz devam et",destination:"{destination} istikametinde düz devam et"}},"exit roundabout":{default:{default:"{modifier} yöne dön",name:"{way_name} üzerinde {modifier} yöne dön",destination:"{destination} istikametinde {modifier} yöne dön"},left:{default:"Sola dön",name:"{way_name} üzerinde sola dön",destination:"{destination} istikametinde sola dön"},right:{default:"Sağa dön",name:"{way_name} üzerinde sağa dön",destination:"{destination} istikametinde sağa dön"},straight:{default:"Düz devam et",name:"{way_name} üzerinde düz devam et",destination:"{destination} istikametinde düz devam et"}},"exit rotary":{default:{default:"{modifier} yöne dön",name:"{way_name} üzerinde {modifier} yöne dön",destination:"{destination} istikametinde {modifier} yöne dön"},left:{default:"Sola dön",name:"{way_name} üzerinde sola dön",destination:"{destination} istikametinde sola dön"},right:{default:"Sağa dön",name:"{way_name} üzerinde sağa dön",destination:"{destination} istikametinde sağa dön"},straight:{default:"Düz devam et",name:"{way_name} üzerinde düz devam et",destination:"{destination} istikametinde düz devam et"}},turn:{default:{default:"{modifier} yöne dön",name:"{way_name} üzerinde {modifier} yöne dön",destination:"{destination} istikametinde {modifier} yöne dön"},left:{default:"Sola dönün",name:"{way_name} üzerinde sola dön",destination:"{destination} istikametinde sola dön"},right:{default:"Sağa dönün",name:"{way_name} üzerinde sağa dön",destination:"{destination} istikametinde sağa dön"},straight:{default:"Düz git",name:"{way_name} üzerinde düz git",destination:"{destination} istikametinde düz git"}},"use lane":{no_lanes:{default:"Düz devam edin"},default:{default:"{lane_instruction}"}}}}},{}],45:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"1й",2:"2й",3:"3й",4:"4й",5:"5й",6:"6й",7:"7й",8:"8й",9:"9й",10:"10й"},direction:{north:"північ",northeast:"північний схід",east:"схід",southeast:"південний схід",south:"південь",southwest:"південний захід",west:"захід",northwest:"північний захід"},modifier:{left:"ліворуч",right:"праворуч","sharp left":"різко ліворуч","sharp right":"різко праворуч","slight left":"плавно ліворуч","slight right":"плавно праворуч",straight:"прямо",uturn:"розворот"},lanes:{xo:"Тримайтесь праворуч",ox:"Тримайтесь ліворуч",xox:"Тримайтесь в середині",oxo:"Тримайтесь праворуч або ліворуч"}},modes:{ferry:{default:"Скористайтесь поромом",name:"Скористайтесь поромом {way_name}",destination:"Скористайтесь поромом у напрямку {destination}"}},phrase:{"two linked by distance":"{instruction_one}, потім, через {distance}, {instruction_two}","two linked":"{instruction_one}, потім {instruction_two}","one in distance":"Через {distance}, {instruction_one}","name and ref":"{name} ({ref})","exit with number":"з'їзд {exit}"},arrive:{default:{default:"Ви прибули у ваш {nth} пункт призначення",upcoming:"Ви наближаєтесь до вашого {nth} місця призначення",short:"Ви прибули","short-upcoming":"Ви прибудете",named:"Ви прибули у {waypoint_name}"},left:{default:"Ви прибули у ваш {nth} пункт призначення, він – ліворуч",upcoming:"Ви наближаєтесь до вашого {nth} місця призначення, ліворуч",short:"Ви прибули","short-upcoming":"Ви прибудете",named:"Ви прибули у {waypoint_name} ліворуч"},right:{default:"Ви прибули у ваш {nth} пункт призначення, він – праворуч",upcoming:"Ви наближаєтесь до вашого {nth} місця призначення, праворуч",short:"Ви прибули","short-upcoming":"Ви прибудете",named:"Ви прибули у {waypoint_name} праворуч"},"sharp left":{default:"Ви прибули у ваш {nth} пункт призначення, він – ліворуч",upcoming:"Ви наближаєтесь до вашого {nth} місця призначення, ліворуч",short:"Ви прибули","short-upcoming":"Ви прибудете",named:"Ви прибули у {waypoint_name} ліворуч"},"sharp right":{default:"Ви прибули у ваш {nth} пункт призначення, він – праворуч",upcoming:"Ви наближаєтесь до вашого {nth} місця призначення, праворуч",short:"Ви прибули","short-upcoming":"Ви прибудете",named:"Ви прибули у {waypoint_name} праворуч"},"slight right":{default:"Ви прибули у ваш {nth} пункт призначення, він – праворуч",upcoming:"Ви наближаєтесь до вашого {nth} місця призначення, праворуч",short:"Ви прибули","short-upcoming":"Ви прибудете",named:"Ви прибули у {waypoint_name} праворуч"},"slight left":{default:"Ви прибули у ваш {nth} пункт призначення, він – ліворуч",upcoming:"Ви наближаєтесь до вашого {nth} місця призначення, ліворуч",short:"Ви прибули","short-upcoming":"Ви прибудете",named:"Ви прибули у {waypoint_name} ліворуч"},straight:{default:"Ви прибули у ваш {nth} пункт призначення, він – прямо перед вами",upcoming:"Ви наближаєтесь до вашого {nth} місця призначення, прямо перед вами",short:"Ви прибули","short-upcoming":"Ви прибудете",named:"Ви прибули у {waypoint_name} прямо перед вами"}},continue:{default:{default:"Поверніть {modifier}",name:"Поверніть{modifier} залишаючись на {way_name}",destination:"Поверніть {modifier} у напрямку {destination}",exit:"Поверніть {modifier} на {way_name}"},straight:{default:"Продовжуйте рух прямо",name:"Продовжуйте рух прямо залишаючись на {way_name}",destination:"Рухайтесь у напрямку {destination}",distance:"Продовжуйте рух прямо {distance}",namedistance:"Продовжуйте рух по {way_name} {distance}"},"sharp left":{default:"Поверніть різко ліворуч",name:"Поверніть різко ліворуч щоб залишитись на {way_name}",destination:"Поверніть різко ліворуч у напрямку {destination}"},"sharp right":{default:"Поверніть різко праворуч",name:"Поверніть різко праворуч щоб залишитись на {way_name}",destination:"Поверніть різко праворуч у напрямку {destination}"},"slight left":{default:"Поверніть різко ліворуч",name:"Поверніть плавно ліворуч щоб залишитись на {way_name}",destination:"Поверніть плавно ліворуч у напрямку {destination}"},"slight right":{default:"Поверніть плавно праворуч",name:"Поверніть плавно праворуч щоб залишитись на {way_name}",destination:"Поверніть плавно праворуч у напрямку {destination}"},uturn:{default:"Здійсніть розворот",name:"Здійсніть розворот та рухайтесь по {way_name}",destination:"Здійсніть розворот у напрямку {destination}"}},depart:{default:{default:"Прямуйте на {direction}",name:"Прямуйте на {direction} по {way_name}",namedistance:"Прямуйте на {direction} по {way_name} {distance}"}},"end of road":{default:{default:"Поверніть {modifier}",name:"Поверніть {modifier} на {way_name}",destination:"Поверніть {modifier} у напрямку {destination}"},straight:{default:"Продовжуйте рух прямо",name:"Продовжуйте рух прямо до {way_name}",destination:"Продовжуйте рух прямо у напрямку {destination}"},uturn:{default:"Здійсніть розворот в кінці дороги",name:"Здійсніть розворот на {way_name} в кінці дороги",destination:"Здійсніть розворот у напрямку {destination} в кінці дороги"}},fork:{default:{default:"На роздоріжжі тримайтеся {modifier}",name:"Тримайтеся {modifier} і рухайтесь на {way_name}",destination:"Тримайтеся {modifier} в напрямку {destination}"},"slight left":{default:"На роздоріжжі тримайтеся ліворуч",name:"Тримайтеся ліворуч і рухайтесь на {way_name}",destination:"Тримайтеся ліворуч в напрямку {destination}"},"slight right":{default:"На роздоріжжі тримайтеся праворуч",name:"Тримайтеся праворуч і рухайтесь на {way_name}",destination:"Тримайтеся праворуч в напрямку {destination}"},"sharp left":{default:"На роздоріжжі різко поверніть ліворуч",name:"Прийміть різко ліворуч на {way_name}",destination:"Прийміть різко ліворуч у напрямку {destination}"},"sharp right":{default:"На роздоріжжі різко поверніть праворуч",name:"Прийміть різко праворуч на {way_name}",destination:"Прийміть різко праворуч у напрямку {destination}"},uturn:{default:"Здійсніть розворот",name:"Здійсніть розворот на {way_name}",destination:"Здійсніть розворот у напрямку {destination}"}},merge:{default:{default:"Приєднайтеся до потоку {modifier}",name:"Приєднайтеся до потоку {modifier} на {way_name}",destination:"Приєднайтеся до потоку {modifier} у напрямку {destination}"},straight:{default:"Приєднайтеся до потоку",name:"Приєднайтеся до потоку на {way_name}",destination:"Приєднайтеся до потоку у напрямку {destination}"},"slight left":{default:"Приєднайтеся до потоку ліворуч",name:"Приєднайтеся до потоку ліворуч на {way_name}",destination:"Приєднайтеся до потоку ліворуч у напрямку {destination}"},"slight right":{default:"Приєднайтеся до потоку праворуч",name:"Приєднайтеся до потоку праворуч на {way_name}",destination:"Приєднайтеся до потоку праворуч у напрямку {destination}"},"sharp left":{default:"Приєднайтеся до потоку ліворуч",name:"Приєднайтеся до потоку ліворуч на {way_name}",destination:"Приєднайтеся до потоку ліворуч у напрямку {destination}"},"sharp right":{default:"Приєднайтеся до потоку праворуч",name:"Приєднайтеся до потоку праворуч на {way_name}",destination:"Приєднайтеся до потоку праворуч у напрямку {destination}"},uturn:{default:"Здійсніть розворот",name:"Здійсніть розворот на {way_name}",destination:"Здійсніть розворот у напрямку {destination}"}},"new name":{default:{default:"Рухайтесь {modifier}",name:"Рухайтесь {modifier} на {way_name}",destination:"Рухайтесь {modifier} у напрямку {destination}"},straight:{default:"Рухайтесь прямо",name:"Рухайтесь по {way_name}",destination:"Рухайтесь у напрямку {destination}"},"sharp left":{default:"Прийміть різко ліворуч",name:"Прийміть різко ліворуч на {way_name}",destination:"Прийміть різко ліворуч у напрямку {destination}"},"sharp right":{default:"Прийміть різко праворуч",name:"Прийміть різко праворуч на {way_name}",destination:"Прийміть різко праворуч у напрямку {destination}"},"slight left":{default:"Рухайтесь плавно ліворуч",name:"Рухайтесь плавно ліворуч на {way_name}",destination:"Рухайтесь плавно ліворуч у напрямку {destination}"},"slight right":{default:"Рухайтесь плавно праворуч",name:"Рухайтесь плавно праворуч на {way_name}",destination:"Рухайтесь плавно праворуч у напрямку {destination}"},uturn:{default:"Здійсніть розворот",name:"Здійсніть розворот на {way_name}",destination:"Здійсніть розворот у напрямку {destination}"}},notification:{default:{default:"Рухайтесь {modifier}",name:"Рухайтесь {modifier} на {way_name}",destination:"Рухайтесь {modifier} у напрямку {destination}"},uturn:{default:"Здійсніть розворот",name:"Здійсніть розворот на {way_name}",destination:"Здійсніть розворот у напрямку {destination}"}},"off ramp":{default:{default:"Рухайтесь на зʼїзд",name:"Рухайтесь на зʼїзд на {way_name}",destination:"Рухайтесь на зʼїзд у напрямку {destination}",exit:"Оберіть з'їзд {exit}",exit_destination:"Оберіть з'їзд {exit} у напрямку {destination}"},left:{default:"Рухайтесь на зʼїзд ліворуч",name:"Рухайтесь на зʼїзд ліворуч на {way_name}",destination:"Рухайтесь на зʼїзд ліворуч у напрямку {destination}",exit:"Оберіть з'їзд {exit} ліворуч",exit_destination:"Оберіть з'їзд {exit} ліворуч у напрямку {destination}"},right:{default:"Рухайтесь на зʼїзд праворуч",name:"Рухайтесь на зʼїзд праворуч на {way_name}",destination:"Рухайтесь на зʼїзд праворуч у напрямку {destination}",exit:"Оберіть з'їзд {exit} праворуч",exit_destination:"Оберіть з'їзд {exit} праворуч у напрямку {destination}"},"sharp left":{default:"Рухайтесь на зʼїзд ліворуч",name:"Рухайтесь на зʼїзд ліворуч на {way_name}",destination:"Рухайтесь на зʼїзд ліворуч у напрямку {destination}",exit:"Оберіть з'їзд {exit} ліворуч",exit_destination:"Оберіть з'їзд {exit} ліворуч у напрямку {destination}"},"sharp right":{default:"Рухайтесь на зʼїзд праворуч",name:"Рухайтесь на зʼїзд праворуч на {way_name}",destination:"Рухайтесь на зʼїзд праворуч у напрямку {destination}",exit:"Оберіть з'їзд {exit} праворуч",exit_destination:"Оберіть з'їзд {exit} праворуч у напрямку {destination}"},"slight left":{default:"Рухайтесь на зʼїзд ліворуч",name:"Рухайтесь на зʼїзд ліворуч на {way_name}",destination:"Рухайтесь на зʼїзд ліворуч у напрямку {destination}",exit:"Оберіть з'їзд {exit} ліворуч",exit_destination:"Оберіть з'їзд {exit} ліворуч у напрямку {destination}"},"slight right":{default:"Рухайтесь на зʼїзд праворуч",name:"Рухайтесь на зʼїзд праворуч на {way_name}",destination:"Рухайтесь на зʼїзд праворуч у напрямку {destination}",exit:"Оберіть з'їзд {exit} праворуч",exit_destination:"Оберіть з'їзд {exit} праворуч у напрямку {destination}"}},"on ramp":{default:{default:"Рухайтесь на вʼїзд",name:"Рухайтесь на вʼїзд на {way_name}",destination:"Рухайтесь на вʼїзд у напрямку {destination}"},left:{default:"Рухайтесь на вʼїзд ліворуч",name:"Рухайтесь на вʼїзд ліворуч на {way_name}",destination:"Рухайтесь на вʼїзд ліворуч у напрямку {destination}"},right:{default:"Рухайтесь на вʼїзд праворуч",name:"Рухайтесь на вʼїзд праворуч на {way_name}",destination:"Рухайтесь на вʼїзд праворуч у напрямку {destination}"},"sharp left":{default:"Рухайтесь на вʼїзд ліворуч",name:"Рухайтесь на вʼїзд ліворуч на {way_name}",destination:"Рухайтесь на вʼїзд ліворуч у напрямку {destination}"},"sharp right":{default:"Рухайтесь на вʼїзд праворуч",name:"Рухайтесь на вʼїзд праворуч на {way_name}",destination:"Рухайтесь на вʼїзд праворуч у напрямку {destination}"},"slight left":{default:"Рухайтесь на вʼїзд ліворуч",name:"Рухайтесь на вʼїзд ліворуч на {way_name}",destination:"Рухайтесь на вʼїзд ліворуч у напрямку {destination}"},"slight right":{default:"Рухайтесь на вʼїзд праворуч",name:"Рухайтесь на вʼїзд праворуч на {way_name}",destination:"Рухайтесь на вʼїзд праворуч у напрямку {destination}"}},rotary:{default:{default:{default:"Рухайтесь по колу",name:"Рухайтесь по колу до {way_name}",destination:"Рухайтесь по колу в напрямку {destination}"},name:{default:"Рухайтесь по {rotary_name}",name:"Рухайтесь по {rotary_name} та поверніть на {way_name}",destination:"Рухайтесь по {rotary_name} та поверніть в напрямку {destination}"},exit:{default:"Рухайтесь по колу та повереніть у {exit_number} з'їзд",name:"Рухайтесь по колу та поверніть у {exit_number} з'їзд на {way_name}",destination:"Рухайтесь по колу та поверніть у {exit_number} з'їзд у напрямку {destination}"},name_exit:{default:"Рухайтесь по {rotary_name} та поверніть у {exit_number} з'їзд",name:"Рухайтесь по {rotary_name} та поверніть у {exit_number} з'їзд на {way_name}",destination:"Рухайтесь по {rotary_name} та поверніть у {exit_number} з'їзд в напрямку {destination}"}}},roundabout:{default:{exit:{default:"Рухайтесь по колу та повереніть у {exit_number} з'їзд",name:"Рухайтесь по колу та поверніть у {exit_number} з'їзд на {way_name}",destination:"Рухайтесь по колу та поверніть у {exit_number} з'їзд у напрямку {destination}"},default:{default:"Рухайтесь по колу",name:"Рухайтесь по колу до {way_name}",destination:"Рухайтесь по колу в напрямку {destination}"}}},"roundabout turn":{default:{default:"Рухайтесь {modifier}",name:"Рухайтесь {modifier} на {way_name}",destination:"Рухайтесь {modifier} в напрямку {destination}"},left:{default:"Поверніть ліворуч",name:"Поверніть ліворуч на {way_name}",destination:"Поверніть ліворуч у напрямку {destination}"},right:{default:"Поверніть праворуч",name:"Поверніть праворуч на {way_name}",destination:"Поверніть праворуч у напрямку {destination}"},straight:{default:"Рухайтесь прямо",name:"Продовжуйте рух прямо до {way_name}",destination:"Продовжуйте рух прямо у напрямку {destination}"}},"exit roundabout":{default:{default:"Залишить коло",name:"Залишить коло на {way_name} зʼїзді",destination:"Залишить коло в напрямку {destination}"}},"exit rotary":{default:{default:"Залишить коло",name:"Залишить коло на {way_name} зʼїзді",destination:"Залишить коло в напрямку {destination}"}},turn:{default:{default:"Рухайтесь {modifier}",name:"Рухайтесь {modifier} на {way_name}",destination:"Рухайтесь {modifier} в напрямку {destination}"},left:{default:"Поверніть ліворуч",name:"Поверніть ліворуч на {way_name}",destination:"Поверніть ліворуч у напрямку {destination}"},right:{default:"Поверніть праворуч",
2178name:"Поверніть праворуч на {way_name}",destination:"Поверніть праворуч у напрямку {destination}"},straight:{default:"Рухайтесь прямо",name:"Рухайтесь прямо по {way_name}",destination:"Рухайтесь прямо у напрямку {destination}"}},"use lane":{no_lanes:{default:"Продовжуйте рух прямо"},default:{default:"{lane_instruction}"}}}}},{}],46:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:true},v5:{constants:{ordinalize:{1:"đầu tiên",2:"thứ 2",3:"thứ 3",4:"thứ 4",5:"thứ 5",6:"thú 6",7:"thứ 7",8:"thứ 8",9:"thứ 9",10:"thứ 10"},direction:{north:"bắc",northeast:"đông bắc",east:"đông",southeast:"đông nam",south:"nam",southwest:"tây nam",west:"tây",northwest:"tây bắc"},modifier:{left:"trái",right:"phải","sharp left":"trái gắt","sharp right":"phải gắt","slight left":"trái nghiêng","slight right":"phải nghiêng",straight:"thẳng",uturn:"ngược"},lanes:{xo:"Đi bên phải",ox:"Đi bên trái",xox:"Đi vào giữa",oxo:"Đi bên trái hay bên phải"}},modes:{ferry:{default:"Lên phà",name:"Lên phà {way_name}",destination:"Lên phà đi {destination}"}},phrase:{"two linked by distance":"{instruction_one}, rồi {distance} nữa thì {instruction_two}","two linked":"{instruction_one}, rồi {instruction_two}","one in distance":"{distance} nữa thì {instruction_one}","name and ref":"{name} ({ref})","exit with number":"lối ra {exit}"},arrive:{default:{default:"Đến nơi {nth}",upcoming:"Đến nơi {nth}",short:"Đến nơi","short-upcoming":"Đến nơi",named:"Đến {waypoint_name}"},left:{default:"Đến nơi {nth} ở bên trái",upcoming:"Đến nơi {nth} ở bên trái",short:"Đến nơi","short-upcoming":"Đến nơi",named:"Đến {waypoint_name} ở bên trái"},right:{default:"Đến nơi {nth} ở bên phải",upcoming:"Đến nơi {nth} ở bên phải",short:"Đến nơi","short-upcoming":"Đến nơi",named:"Đến {waypoint_name} ở bên phải"},"sharp left":{default:"Đến nơi {nth} ở bên trái",upcoming:"Đến nơi {nth} ở bên trái",short:"Đến nơi","short-upcoming":"Đến nơi",named:"Đến {waypoint_name} ở bên trái"},"sharp right":{default:"Đến nơi {nth} ở bên phải",upcoming:"Đến nơi {nth} ở bên phải",short:"Đến nơi","short-upcoming":"Đến nơi",named:"Đến {waypoint_name} ở bên phải"},"slight right":{default:"Đến nơi {nth} ở bên phải",upcoming:"Đến nơi {nth} ở bên phải",short:"Đến nơi","short-upcoming":"Đến nơi",named:"Đến {waypoint_name} ở bên phải"},"slight left":{default:"Đến nơi {nth} ở bên trái",upcoming:"Đến nơi {nth} ở bên trái",short:"Đến nơi","short-upcoming":"Đến nơi",named:"Đến {waypoint_name} ở bên trái"},straight:{default:"Đến nơi {nth} ở trước mặt",upcoming:"Đến nơi {nth} ở trước mặt",short:"Đến nơi","short-upcoming":"Đến nơi",named:"Đến {waypoint_name} ở trước mặt"}},continue:{default:{default:"Quẹo {modifier}",name:"Quẹo {modifier} để chạy tiếp trên {way_name}",destination:"Quẹo {modifier} về {destination}",exit:"Quẹo {modifier} vào {way_name}"},straight:{default:"Chạy thẳng",name:"Chạy tiếp trên {way_name}",destination:"Chạy tiếp về {destination}",distance:"Chạy thẳng cho {distance}",namedistance:"Chạy tiếp trên {way_name} cho {distance}"},"sharp left":{default:"Quẹo gắt bên trái",name:"Quẹo gắt bên trái để chạy tiếp trên {way_name}",destination:"Quẹo gắt bên trái về {destination}"},"sharp right":{default:"Quẹo gắt bên phải",name:"Quẹo gắt bên phải để chạy tiếp trên {way_name}",destination:"Quẹo gắt bên phải về {destination}"},"slight left":{default:"Nghiêng về bên trái",name:"Nghiêng về bên trái để chạy tiếp trên {way_name}",destination:"Nghiêng về bên trái về {destination}"},"slight right":{default:"Nghiêng về bên phải",name:"Nghiêng về bên phải để chạy tiếp trên {way_name}",destination:"Nghiêng về bên phải về {destination}"},uturn:{default:"Quẹo ngược lại",name:"Quẹo ngược lại trên {way_name}",destination:"Quẹo ngược về {destination}"}},depart:{default:{default:"Đi về hướng {direction}",name:"Đi về hướng {direction} trên {way_name}",namedistance:"Đi về hướng {direction} trên {way_name} cho {distance}"}},"end of road":{default:{default:"Quẹo {modifier}",name:"Quẹo {modifier} vào {way_name}",destination:"Quẹo {modifier} về {destination}"},straight:{default:"Chạy thẳng",name:"Chạy tiếp trên {way_name}",destination:"Chạy tiếp về {destination}"},uturn:{default:"Quẹo ngược lại tại cuối đường",name:"Quẹo ngược vào {way_name} tại cuối đường",destination:"Quẹo ngược về {destination} tại cuối đường"}},fork:{default:{default:"Đi bên {modifier} ở ngã ba",name:"Giữ bên {modifier} vào {way_name}",destination:"Giữ bên {modifier} về {destination}"},"slight left":{default:"Nghiêng về bên trái ở ngã ba",name:"Giữ bên trái vào {way_name}",destination:"Giữ bên trái về {destination}"},"slight right":{default:"Nghiêng về bên phải ở ngã ba",name:"Giữ bên phải vào {way_name}",destination:"Giữ bên phải về {destination}"},"sharp left":{default:"Quẹo gắt bên trái ở ngã ba",name:"Quẹo gắt bên trái vào {way_name}",destination:"Quẹo gắt bên trái về {destination}"},"sharp right":{default:"Quẹo gắt bên phải ở ngã ba",name:"Quẹo gắt bên phải vào {way_name}",destination:"Quẹo gắt bên phải về {destination}"},uturn:{default:"Quẹo ngược lại",name:"Quẹo ngược lại {way_name}",destination:"Quẹo ngược lại về {destination}"}},merge:{default:{default:"Nhập sang {modifier}",name:"Nhập sang {modifier} vào {way_name}",destination:"Nhập sang {modifier} về {destination}"},straight:{default:"Nhập đường",name:"Nhập vào {way_name}",destination:"Nhập đường về {destination}"},"slight left":{default:"Nhập sang trái",name:"Nhập sang trái vào {way_name}",destination:"Nhập sang trái về {destination}"},"slight right":{default:"Nhập sang phải",name:"Nhập sang phải vào {way_name}",destination:"Nhập sang phải về {destination}"},"sharp left":{default:"Nhập sang trái",name:"Nhập sang trái vào {way_name}",destination:"Nhập sang trái về {destination}"},"sharp right":{default:"Nhập sang phải",name:"Nhập sang phải vào {way_name}",destination:"Nhập sang phải về {destination}"},uturn:{default:"Quẹo ngược lại",name:"Quẹo ngược lại {way_name}",destination:"Quẹo ngược lại về {destination}"}},"new name":{default:{default:"Chạy tiếp bên {modifier}",name:"Chạy tiếp bên {modifier} trên {way_name}",destination:"Chạy tiếp bên {modifier} về {destination}"},straight:{default:"Chạy thẳng",name:"Chạy tiếp trên {way_name}",destination:"Chạy tiếp về {destination}"},"sharp left":{default:"Quẹo gắt bên trái",name:"Quẹo gắt bên trái vào {way_name}",destination:"Quẹo gắt bên trái về {destination}"},"sharp right":{default:"Quẹo gắt bên phải",name:"Quẹo gắt bên phải vào {way_name}",destination:"Quẹo gắt bên phải về {destination}"},"slight left":{default:"Nghiêng về bên trái",name:"Nghiêng về bên trái vào {way_name}",destination:"Nghiêng về bên trái về {destination}"},"slight right":{default:"Nghiêng về bên phải",name:"Nghiêng về bên phải vào {way_name}",destination:"Nghiêng về bên phải về {destination}"},uturn:{default:"Quẹo ngược lại",name:"Quẹo ngược lại {way_name}",destination:"Quẹo ngược lại về {destination}"}},notification:{default:{default:"Chạy tiếp bên {modifier}",name:"Chạy tiếp bên {modifier} trên {way_name}",destination:"Chạy tiếp bên {modifier} về {destination}"},uturn:{default:"Quẹo ngược lại",name:"Quẹo ngược lại {way_name}",destination:"Quẹo ngược lại về {destination}"}},"off ramp":{default:{default:"Đi đường nhánh",name:"Đi đường nhánh {way_name}",destination:"Đi đường nhánh về {destination}",exit:"Đi theo lối ra {exit}",exit_destination:"Đi theo lối ra {exit} về {destination}"},left:{default:"Đi đường nhánh bên trái",name:"Đi đường nhánh {way_name} bên trái",destination:"Đi đường nhánh bên trái về {destination}",exit:"Đi theo lối ra {exit} bên trái",exit_destination:"Đi theo lối ra {exit} bên trái về {destination}"},right:{default:"Đi đường nhánh bên phải",name:"Đi đường nhánh {way_name} bên phải",destination:"Đi đường nhánh bên phải về {destination}",exit:"Đi theo lối ra {exit} bên phải",exit_destination:"Đi theo lối ra {exit} bên phải về {destination}"},"sharp left":{default:"Đi đường nhánh bên trái",name:"Đi đường nhánh {way_name} bên trái",destination:"Đi đường nhánh bên trái về {destination}",exit:"Đi theo lối ra {exit} bên trái",exit_destination:"Đi theo lối ra {exit} bên trái về {destination}"},"sharp right":{default:"Đi đường nhánh bên phải",name:"Đi đường nhánh {way_name} bên phải",destination:"Đi đường nhánh bên phải về {destination}",exit:"Đi theo lối ra {exit} bên phải",exit_destination:"Đi theo lối ra {exit} bên phải về {destination}"},"slight left":{default:"Đi đường nhánh bên trái",name:"Đi đường nhánh {way_name} bên trái",destination:"Đi đường nhánh bên trái về {destination}",exit:"Đi theo lối ra {exit} bên trái",exit_destination:"Đi theo lối ra {exit} bên trái về {destination}"},"slight right":{default:"Đi đường nhánh bên phải",name:"Đi đường nhánh {way_name} bên phải",destination:"Đi đường nhánh bên phải về {destination}",exit:"Đi theo lối ra {exit} bên phải",exit_destination:"Đi theo lối ra {exit} bên phải về {destination}"}},"on ramp":{default:{default:"Đi đường nhánh",name:"Đi đường nhánh {way_name}",destination:"Đi đường nhánh về {destination}"},left:{default:"Đi đường nhánh bên trái",name:"Đi đường nhánh {way_name} bên trái",destination:"Đi đường nhánh bên trái về {destination}"},right:{default:"Đi đường nhánh bên phải",name:"Đi đường nhánh {way_name} bên phải",destination:"Đi đường nhánh bên phải về {destination}"},"sharp left":{default:"Đi đường nhánh bên trái",name:"Đi đường nhánh {way_name} bên trái",destination:"Đi đường nhánh bên trái về {destination}"},"sharp right":{default:"Đi đường nhánh bên phải",name:"Đi đường nhánh {way_name} bên phải",destination:"Đi đường nhánh bên phải về {destination}"},"slight left":{default:"Đi đường nhánh bên trái",name:"Đi đường nhánh {way_name} bên trái",destination:"Đi đường nhánh bên trái về {destination}"},"slight right":{default:"Đi đường nhánh bên phải",name:"Đi đường nhánh {way_name} bên phải",destination:"Đi đường nhánh bên phải về {destination}"}},rotary:{default:{default:{default:"Đi vào bùng binh",name:"Đi vào bùng binh và ra tại {way_name}",destination:"Đi vào bùng binh và ra về {destination}"},name:{default:"Đi vào {rotary_name}",name:"Đi vào {rotary_name} và ra tại {way_name}",destination:"Đi và {rotary_name} và ra về {destination}"},exit:{default:"Đi vào bùng binh và ra tại đường {exit_number}",name:"Đi vào bùng binh và ra tại đường {exit_number} tức {way_name}",destination:"Đi vào bùng binh và ra tại đường {exit_number} về {destination}"},name_exit:{default:"Đi vào {rotary_name} và ra tại đường {exit_number}",name:"Đi vào {rotary_name} và ra tại đường {exit_number} tức {way_name}",destination:"Đi vào {rotary_name} và ra tại đường {exit_number} về {destination}"}}},roundabout:{default:{exit:{default:"Đi vào bùng binh và ra tại đường {exit_number}",name:"Đi vào bùng binh và ra tại đường {exit_number} tức {way_name}",destination:"Đi vào bùng binh và ra tại đường {exit_number} về {destination}"},default:{default:"Đi vào bùng binh",name:"Đi vào bùng binh và ra tại {way_name}",destination:"Đi vào bùng binh và ra về {destination}"}}},"roundabout turn":{default:{default:"Quẹo {modifier}",name:"Quẹo {modifier} vào {way_name}",destination:"Quẹo {modifier} về {destination}"},left:{default:"Quẹo trái",name:"Quẹo trái vào {way_name}",destination:"Quẹo trái về {destination}"},right:{default:"Quẹo phải",name:"Quẹo phải vào {way_name}",destination:"Quẹo phải về {destination}"},straight:{default:"Chạy thẳng",name:"Chạy tiếp trên {way_name}",destination:"Chạy tiếp về {destination}"}},"exit roundabout":{default:{default:"Ra bùng binh",name:"Ra bùng binh vào {way_name}",destination:"Ra bùng binh về {destination}"}},"exit rotary":{default:{default:"Ra bùng binh",name:"Ra bùng binh vào {way_name}",destination:"Ra bùng binh về {destination}"}},turn:{default:{default:"Quẹo {modifier}",name:"Quẹo {modifier} vào {way_name}",destination:"Quẹo {modifier} về {destination}"},left:{default:"Quẹo trái",name:"Quẹo trái vào {way_name}",destination:"Quẹo trái về {destination}"},right:{default:"Quẹo phải",name:"Quẹo phải vào {way_name}",destination:"Quẹo phải về {destination}"},straight:{default:"Chạy thẳng",name:"Chạy thẳng vào {way_name}",destination:"Chạy thẳng về {destination}"}},"use lane":{no_lanes:{default:"Chạy thẳng"},default:{default:"{lane_instruction}"}}}}},{}],47:[function(_dereq_,module,exports){module.exports={meta:{capitalizeFirstLetter:false},v5:{constants:{ordinalize:{1:"第一",2:"第二",3:"第三",4:"第四",5:"第五",6:"第六",7:"第七",8:"第八",9:"第九",10:"第十"},direction:{north:"北",northeast:"东北",east:"东",southeast:"东南",south:"南",southwest:"西南",west:"西",northwest:"西北"},modifier:{left:"向左",right:"向右","sharp left":"急向左","sharp right":"急向右","slight left":"稍向左","slight right":"稍向右",straight:"直行",uturn:"调头"},lanes:{xo:"靠右行驶",ox:"靠左行驶",xox:"保持在道路中间行驶",oxo:"保持在道路左侧或右侧行驶"}},modes:{ferry:{default:"乘坐轮渡",name:"乘坐{way_name}轮渡",destination:"乘坐开往{destination}的轮渡"}},phrase:{"two linked by distance":"{instruction_one},{distance}后{instruction_two}","two linked":"{instruction_one},随后{instruction_two}","one in distance":"{distance}后{instruction_one}","name and ref":"{name}({ref})","exit with number":"出口{exit}"},arrive:{default:{default:"您已经到达您的{nth}个目的地",upcoming:"您即将到达您的{nth}个目的地",short:"已到达目的地","short-upcoming":"即将到达目的地",named:"您已到达{waypoint_name}"},left:{default:"您已经到达您的{nth}个目的地,目的地在道路左侧",upcoming:"您即将到达您的{nth}个目的地,目的地在道路左侧",short:"已到达目的地","short-upcoming":"即将到达目的地",named:"您已到达{waypoint_name},目的地在您左边。"},right:{default:"您已经到达您的{nth}个目的地,目的地在道路右侧",upcoming:"您即将到达您的{nth}个目的地,目的地在道路右侧",short:"已到达目的地","short-upcoming":"即将到达目的地",named:"您已到达{waypoint_name},目的地在您右边。"},"sharp left":{default:"您已经到达您的{nth}个目的地,目的地在道路左侧",upcoming:"您即将到达您的{nth}个目的地,目的地在道路左侧",short:"已到达目的地","short-upcoming":"即将到达目的地",named:"您已到达{waypoint_name},目的地在您左边。"},"sharp right":{default:"您已经到达您的{nth}个目的地,目的地在道路右侧",upcoming:"您即将到达您的{nth}个目的地,目的地在道路右侧",short:"已到达目的地","short-upcoming":"即将到达目的地",named:"您已到达{waypoint_name},目的地在您右边。"},"slight right":{default:"您已经到达您的{nth}个目的地,目的地在道路左侧",upcoming:"您即将到达您的{nth}个目的地,目的地在道路左侧",short:"已到达目的地","short-upcoming":"即将到达目的地",named:"您已到达{waypoint_name},目的地在您右边。"},"slight left":{default:"您已经到达您的{nth}个目的地,目的地在道路右侧",upcoming:"您即将到达您的{nth}个目的地,目的地在道路右侧",short:"已到达目的地","short-upcoming":"即将到达目的地",named:"您已到达{waypoint_name},目的地在您左边。"},straight:{default:"您已经到达您的{nth}个目的地,目的地在您正前方",upcoming:"您即将到达您的{nth}个目的地,目的地在您正前方",short:"已到达目的地","short-upcoming":"即将到达目的地",named:"您已到达{waypoint_name},目的地在您前方。"}},continue:{default:{default:"{modifier}行驶",name:"在{way_name}上继续{modifier}行驶",destination:"{modifier}行驶,{destination}方向",exit:"{modifier}行驶,驶入{way_name}"},straight:{default:"继续直行",name:"在{way_name}上继续直行",destination:"继续直行,前往{destination}",distance:"继续直行{distance}",namedistance:"继续在{way_name}上直行{distance}"},"sharp left":{default:"前方左急转弯",name:"前方左急转弯,继续在{way_name}上行驶",destination:"左急转弯,前往{destination}"},"sharp right":{default:"前方右急转弯",name:"前方右急转弯,继续在{way_name}上行驶",destination:"右急转弯,前往{destination}"},"slight left":{default:"前方稍向左转",name:"前方稍向左转,继续在{way_name}上行驶",destination:"稍向左转,前往{destination}"},"slight right":{default:"前方稍向右转",name:"前方稍向右转,继续在{way_name}上行驶",destination:"前方稍向右转,前往{destination}"},uturn:{default:"前方调头",name:"前方调头,继续在{way_name}上行驶",destination:"前方调头,前往{destination}"}},depart:{default:{default:"出发向{direction}",name:"出发向{direction},驶入{way_name}",namedistance:"出发向{direction},在{way_name}上继续行驶{distance}"}},"end of road":{default:{default:"{modifier}行驶",name:"{modifier}行驶,驶入{way_name}",destination:"{modifier}行驶,前往{destination}"},straight:{default:"继续直行",name:"继续直行,驶入{way_name}",destination:"继续直行,前往{destination}"},uturn:{default:"在道路尽头调头",name:"在道路尽头调头驶入{way_name}",destination:"在道路尽头调头,前往{destination}"}},fork:{default:{default:"在岔道保持{modifier}",name:"在岔道口保持{modifier},驶入{way_name}",destination:"在岔道口保持{modifier},前往{destination}"},"slight left":{default:"在岔道口保持左侧行驶",name:"在岔道口保持左侧行驶,驶入{way_name}",destination:"在岔道口保持左侧行驶,前往{destination}"},"slight right":{default:"在岔道口保持右侧行驶",name:"在岔道口保持右侧行驶,驶入{way_name}",destination:"在岔道口保持右侧行驶,前往{destination}"},"sharp left":{default:"在岔道口左急转弯",name:"在岔道口左急转弯,驶入{way_name}",destination:"在岔道口左急转弯,前往{destination}"},"sharp right":{default:"在岔道口右急转弯",name:"在岔道口右急转弯,驶入{way_name}",destination:"在岔道口右急转弯,前往{destination}"},uturn:{default:"前方调头",name:"前方调头,驶入{way_name}",destination:"前方调头,前往{destination}"}},merge:{default:{default:"{modifier}并道",name:"{modifier}并道,驶入{way_name}",destination:"{modifier}并道,前往{destination}"},straight:{default:"直行并道",name:"直行并道,驶入{way_name}",destination:"直行并道,前往{destination}"},"slight left":{default:"稍向左并道",name:"稍向左并道,驶入{way_name}",destination:"稍向左并道,前往{destination}"},"slight right":{default:"稍向右并道",name:"稍向右并道,驶入{way_name}",destination:"稍向右并道,前往{destination}"},"sharp left":{default:"急向左并道",name:"急向左并道,驶入{way_name}",destination:"急向左并道,前往{destination}"},"sharp right":{default:"急向右并道",name:"急向右并道,驶入{way_name}",destination:"急向右并道,前往{destination}"},uturn:{default:"前方调头",name:"前方调头,驶入{way_name}",destination:"前方调头,前往{destination}"}},"new name":{default:{default:"继续{modifier}",name:"继续{modifier},驶入{way_name}",destination:"继续{modifier},前往{destination}"},straight:{default:"继续直行",name:"继续在{way_name}上直行",destination:"继续直行,前往{destination}"},"sharp left":{default:"前方左急转弯",name:"前方左急转弯,驶入{way_name}",destination:"左急转弯,前往{destination}"},"sharp right":{default:"前方右急转弯",name:"前方右急转弯,驶入{way_name}",destination:"右急转弯,前往{destination}"},"slight left":{default:"继续稍向左",name:"继续稍向左,驶入{way_name}",destination:"继续稍向左,前往{destination}"},"slight right":{default:"继续稍向右",name:"继续稍向右,驶入{way_name}",destination:"继续稍向右,前往{destination}"},uturn:{default:"前方调头",name:"前方调头,上{way_name}",destination:"前方调头,前往{destination}"}},notification:{default:{default:"继续{modifier}",name:"继续{modifier},驶入{way_name}",destination:"继续{modifier},前往{destination}"},uturn:{default:"前方调头",name:"前方调头,驶入{way_name}",destination:"前方调头,前往{destination}"}},"off ramp":{default:{default:"下匝道",name:"下匝道,驶入{way_name}",destination:"下匝道,前往{destination}",exit:"从{exit}出口驶出",exit_destination:"从{exit}出口驶出,前往{destination}"},left:{default:"下左侧匝道",name:"下左侧匝道,上{way_name}",destination:"下左侧匝道,前往{destination}",exit:"从左侧{exit}出口驶出",exit_destination:"从左侧{exit}出口驶出,前往{destination}"},right:{default:"下右侧匝道",name:"下右侧匝道,驶入{way_name}",destination:"下右侧匝道,前往{destination}",exit:"从右侧{exit}出口驶出",exit_destination:"从右侧{exit}出口驶出,前往{destination}"},"sharp left":{default:"急向左下匝道",name:"急向左下匝道,驶入{way_name}",destination:"急向左下匝道,前往{destination}",exit:"从左侧{exit}出口驶出",exit_destination:"从左侧{exit}出口驶出,前往{destination}"},"sharp right":{default:"急向右下匝道",name:"急向右下匝道,驶入{way_name}",destination:"急向右下匝道,前往{destination}",exit:"从右侧{exit}出口驶出",exit_destination:"从右侧{exit}出口驶出,前往{destination}"},"slight left":{default:"稍向左下匝道",name:"稍向左下匝道,驶入{way_name}",destination:"稍向左下匝道,前往{destination}",exit:"从左侧{exit}出口驶出",exit_destination:"从左侧{exit}出口驶出,前往{destination}"},"slight right":{default:"稍向右下匝道",name:"稍向右下匝道,驶入{way_name}",destination:"稍向右下匝道,前往{destination}",exit:"从右侧{exit}出口驶出",exit_destination:"从右侧{exit}出口驶出,前往{destination}"}},"on ramp":{default:{default:"上匝道",name:"上匝道,驶入{way_name}",destination:"上匝道,前往{destination}"},left:{default:"上左侧匝道",name:"上左侧匝道,驶入{way_name}",destination:"上左侧匝道,前往{destination}"},right:{default:"上右侧匝道",name:"上右侧匝道,驶入{way_name}",destination:"上右侧匝道,前往{destination}"},"sharp left":{default:"急向左上匝道",name:"急向左上匝道,驶入{way_name}",destination:"急向左上匝道,前往{destination}"},"sharp right":{default:"急向右上匝道",name:"急向右上匝道,驶入{way_name}",destination:"急向右上匝道,前往{destination}"},"slight left":{default:"稍向左上匝道",name:"稍向左上匝道,驶入{way_name}",destination:"稍向左上匝道,前往{destination}"},"slight right":{default:"稍向右上匝道",name:"稍向右上匝道,驶入{way_name}",destination:"稍向右上匝道,前往{destination}"}},rotary:{default:{default:{default:"进入环岛",name:"通过环岛后驶入{way_name}",destination:"通过环岛后前往{destination}"},name:{default:"进入{rotary_name}环岛",name:"通过{rotary_name}环岛后驶入{way_name}",destination:"通过{rotary_name}环岛后前往{destination}"},exit:{default:"进入环岛后从{exit_number}出口驶出",name:"进入环岛后从{exit_number}出口驶出,上{way_name}",destination:"进入环岛后从{exit_number}出口驶出,前往{destination}"},name_exit:{default:"进入{rotary_name}环岛后从{exit_number}出口驶出",name:"进入{rotary_name}环岛后从{exit_number}出口驶出,上{way_name}",destination:"进入{rotary_name}环岛后从{exit_number}出口驶出,前往{destination}"}}},roundabout:{default:{exit:{default:"进入环岛后从{exit_number}出口驶出",name:"进入环岛后从{exit_number}出口驶出,上{way_name}",destination:"进入环岛后从{exit_number}出口驶出,前往{destination}"},default:{default:"进入环岛",name:"通过环岛后驶入{way_name}",destination:"通过环岛后前往{destination}"}}},"roundabout turn":{default:{default:"{modifier}转弯",name:"{modifier}转弯,驶入{way_name}",destination:"{modifier}转弯,前往{destination}"},left:{default:"左转",name:"左转,驶入{way_name}",destination:"左转,前往{destination}"},right:{default:"右转",name:"右转,驶入{way_name}",destination:"右转,前往{destination}"},straight:{default:"继续直行",name:"继续直行,驶入{way_name}",destination:"继续直行,前往{destination}"}},"exit roundabout":{default:{default:"驶离环岛",name:"驶离环岛,驶入{way_name}",destination:"驶离环岛,前往{destination}"}},"exit rotary":{default:{default:"驶离环岛",name:"驶离环岛,驶入{way_name}",destination:"驶离环岛,前往{destination}"}},turn:{default:{default:"{modifier}转弯",name:"{modifier}转弯,驶入{way_name}",destination:"{modifier}转弯,前往{destination}"},left:{default:"左转",name:"左转,驶入{way_name}",destination:"左转,前往{destination}"},right:{default:"右转",name:"右转,驶入{way_name}",destination:"右转,前往{destination}"},straight:{default:"直行",name:"直行,驶入{way_name}",destination:"直行,前往{destination}"}},"use lane":{no_lanes:{default:"继续直行"},default:{default:"{lane_instruction}"}}}}},{}],48:[function(_dereq_,module,exports){(function(global){(function(){"use strict";var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null;module.exports=L.Class.extend({options:{timeout:500,blurTimeout:100,noResultsMessage:"No results found."},initialize:function(elem,callback,context,options){L.setOptions(this,options);this._elem=elem;this._resultFn=options.resultFn?L.Util.bind(options.resultFn,options.resultContext):null;this._autocomplete=options.autocompleteFn?L.Util.bind(options.autocompleteFn,options.autocompleteContext):null;this._selectFn=L.Util.bind(callback,context);this._container=L.DomUtil.create("div","leaflet-routing-geocoder-result");this._resultTable=L.DomUtil.create("table","",this._container);L.DomEvent.addListener(this._elem,"input",this._keyPressed,this);L.DomEvent.addListener(this._elem,"keypress",this._keyPressed,this);L.DomEvent.addListener(this._elem,"keydown",this._keyDown,this);L.DomEvent.addListener(this._elem,"blur",function(){if(this._isOpen){this.close()}},this)},close:function(){L.DomUtil.removeClass(this._container,"leaflet-routing-geocoder-result-open");this._isOpen=false},_open:function(){var rect=this._elem.getBoundingClientRect();if(!this._container.parentElement){var scrollX=window.pageXOffset!==undefined?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft;var scrollY=window.pageYOffset!==undefined?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop;this._container.style.left=rect.left+scrollX+"px";this._container.style.top=rect.bottom+scrollY+"px";this._container.style.width=rect.right-rect.left+"px";document.body.appendChild(this._container)}L.DomUtil.addClass(this._container,"leaflet-routing-geocoder-result-open");this._isOpen=true},_setResults:function(results){var i,tr,td,text;delete this._selection;this._results=results;while(this._resultTable.firstChild){this._resultTable.removeChild(this._resultTable.firstChild)}for(i=0;i<results.length;i++){tr=L.DomUtil.create("tr","",this._resultTable);tr.setAttribute("data-result-index",i);td=L.DomUtil.create("td","",tr);text=document.createTextNode(results[i].name);td.appendChild(text);L.DomEvent.addListener(td,"mousedown",L.DomEvent.preventDefault);L.DomEvent.addListener(td,"click",this._createClickListener(results[i]))}if(!i){tr=L.DomUtil.create("tr","",this._resultTable);td=L.DomUtil.create("td","leaflet-routing-geocoder-no-results",tr);td.innerHTML=this.options.noResultsMessage}this._open();if(results.length>0){this._select(1)}},_createClickListener:function(r){var resultSelected=this._resultSelected(r);return L.bind(function(){this._elem.blur();resultSelected()},this)},_resultSelected:function(r){return L.bind(function(){this.close();this._elem.value=r.name;this._lastCompletedText=r.name;this._selectFn(r)},this)},_keyPressed:function(e){var index;if(this._isOpen&&e.keyCode===13&&this._selection){index=parseInt(this._selection.getAttribute("data-result-index"),10);this._resultSelected(this._results[index])();L.DomEvent.preventDefault(e);return}if(e.keyCode===13){L.DomEvent.preventDefault(e);this._complete(this._resultFn,true);return}if(this._autocomplete&&document.activeElement===this._elem){if(this._timer){clearTimeout(this._timer)}this._timer=setTimeout(L.Util.bind(function(){this._complete(this._autocomplete)},this),this.options.timeout);return}this._unselect()},_select:function(dir){var sel=this._selection;if(sel){L.DomUtil.removeClass(sel.firstChild,"leaflet-routing-geocoder-selected");sel=sel[dir>0?"nextSibling":"previousSibling"]}if(!sel){sel=this._resultTable[dir>0?"firstChild":"lastChild"]}if(sel){L.DomUtil.addClass(sel.firstChild,"leaflet-routing-geocoder-selected");this._selection=sel}},_unselect:function(){if(this._selection){L.DomUtil.removeClass(this._selection.firstChild,"leaflet-routing-geocoder-selected")}delete this._selection},_keyDown:function(e){if(this._isOpen){switch(e.keyCode){case 27:this.close();L.DomEvent.preventDefault(e);return;case 38:this._select(-1);L.DomEvent.preventDefault(e);return;case 40:this._select(1);L.DomEvent.preventDefault(e);return}}},_complete:function(completeFn,trySelect){var v=this._elem.value;function completeResults(results){this._lastCompletedText=v;if(trySelect&&results.length===1){this._resultSelected(results[0])()}else{this._setResults(results)}}if(!v){return}if(v!==this._lastCompletedText){completeFn(v,completeResults,this)}else if(trySelect){completeResults.call(this,this._results)}}})})()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],49:[function(_dereq_,module,exports){(function(global){(function(){"use strict";var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null;var Itinerary=_dereq_("./itinerary");var Line=_dereq_("./line");var Plan=_dereq_("./plan");var OSRMv1=_dereq_("./osrm-v1");module.exports=Itinerary.extend({options:{fitSelectedRoutes:"smart",routeLine:function(route,options){return new Line(route,options)},autoRoute:true,routeWhileDragging:false,routeDragInterval:500,waypointMode:"connect",showAlternatives:false,defaultErrorHandler:function(e){console.error("Routing error:",e.error)}},initialize:function(options){L.Util.setOptions(this,options);this._router=this.options.router||new OSRMv1(options);this._plan=this.options.plan||new Plan(this.options.waypoints,options);this._requestCount=0;Itinerary.prototype.initialize.call(this,options);this.on("routeselected",this._routeSelected,this);if(this.options.defaultErrorHandler){this.on("routingerror",this.options.defaultErrorHandler)}this._plan.on("waypointschanged",this._onWaypointsChanged,this);if(options.routeWhileDragging){this._setupRouteDragging()}},_onZoomEnd:function(){if(!this._selectedRoute||!this._router.requiresMoreDetail){return}var map=this._map;if(this._router.requiresMoreDetail(this._selectedRoute,map.getZoom(),map.getBounds())){this.route({callback:L.bind(function(err,routes){var i;if(!err){for(i=0;i<routes.length;i++){this._routes[i].properties=routes[i].properties}this._updateLineCallback(err,routes)}},this),simplifyGeometry:false,geometryOnly:true})}},onAdd:function(map){if(this.options.autoRoute){this.route()}var container=Itinerary.prototype.onAdd.call(this,map);this._map=map;this._map.addLayer(this._plan);this._map.on("zoomend",this._onZoomEnd,this);if(this._plan.options.geocoder){container.insertBefore(this._plan.createGeocoders(),container.firstChild)}return container},onRemove:function(map){map.off("zoomend",this._onZoomEnd,this);if(this._line){map.removeLayer(this._line)}map.removeLayer(this._plan);if(this._alternatives&&this._alternatives.length>0){for(var i=0,len=this._alternatives.length;i<len;i++){map.removeLayer(this._alternatives[i])}}return Itinerary.prototype.onRemove.call(this,map)},getWaypoints:function(){return this._plan.getWaypoints()},setWaypoints:function(waypoints){this._plan.setWaypoints(waypoints);return this},spliceWaypoints:function(){var removed=this._plan.spliceWaypoints.apply(this._plan,arguments);return removed},getPlan:function(){return this._plan},getRouter:function(){return this._router},_routeSelected:function(e){var route=this._selectedRoute=e.route,alternatives=this.options.showAlternatives&&e.alternatives,fitMode=this.options.fitSelectedRoutes,fitBounds=fitMode==="smart"&&!this._waypointsVisible()||fitMode!=="smart"&&fitMode;this._updateLines({route:route,alternatives:alternatives});if(fitBounds){this._map.fitBounds(this._line.getBounds())}if(this.options.waypointMode==="snap"){this._plan.off("waypointschanged",this._onWaypointsChanged,this);this.setWaypoints(route.waypoints);this._plan.on("waypointschanged",this._onWaypointsChanged,this)}},_waypointsVisible:function(){var wps=this.getWaypoints(),mapSize,bounds,boundsSize,i,p;try{mapSize=this._map.getSize();for(i=0;i<wps.length;i++){p=this._map.latLngToLayerPoint(wps[i].latLng);if(bounds){bounds.extend(p)}else{bounds=L.bounds([p])}}boundsSize=bounds.getSize();return(boundsSize.x>mapSize.x/5||boundsSize.y>mapSize.y/5)&&this._waypointsInViewport()}catch(e){return false}},_waypointsInViewport:function(){var wps=this.getWaypoints(),mapBounds,i;try{mapBounds=this._map.getBounds()}catch(e){return false}for(i=0;i<wps.length;i++){if(mapBounds.contains(wps[i].latLng)){return true}}return false},_updateLines:function(routes){var addWaypoints=this.options.addWaypoints!==undefined?this.options.addWaypoints:true;this._clearLines();this._alternatives=[];if(routes.alternatives)routes.alternatives.forEach(function(alt,i){this._alternatives[i]=this.options.routeLine(alt,L.extend({isAlternative:true},this.options.altLineOptions||this.options.lineOptions));this._alternatives[i].addTo(this._map);this._hookAltEvents(this._alternatives[i])},this);this._line=this.options.routeLine(routes.route,L.extend({addWaypoints:addWaypoints,extendToWaypoints:this.options.waypointMode==="connect"},this.options.lineOptions));this._line.addTo(this._map);this._hookEvents(this._line)},_hookEvents:function(l){l.on("linetouched",function(e){this._plan.dragNewWaypoint(e)},this)},_hookAltEvents:function(l){l.on("linetouched",function(e){var alts=this._routes.slice();var selected=alts.splice(e.target._route.routesIndex,1)[0];this.fire("routeselected",{route:selected,alternatives:alts})},this)},_onWaypointsChanged:function(e){if(this.options.autoRoute){this.route({})}if(!this._plan.isReady()){this._clearLines();this._clearAlts()}this.fire("waypointschanged",{waypoints:e.waypoints})},_setupRouteDragging:function(){var timer=0,waypoints;this._plan.on("waypointdrag",L.bind(function(e){waypoints=e.waypoints;if(!timer){timer=setTimeout(L.bind(function(){this.route({waypoints:waypoints,geometryOnly:true,callback:L.bind(this._updateLineCallback,this)});timer=undefined},this),this.options.routeDragInterval)}},this));this._plan.on("waypointdragend",function(){if(timer){clearTimeout(timer);timer=undefined}this.route()},this)},_updateLineCallback:function(err,routes){if(!err){routes=routes.slice();var selected=routes.splice(this._selectedRoute.routesIndex,1)[0];this._updateLines({route:selected,alternatives:this.options.showAlternatives?routes:[]})}else if(err.type!=="abort"){this._clearLines()}},route:function(options){var ts=++this._requestCount,wps;if(this._pendingRequest&&this._pendingRequest.abort){this._pendingRequest.abort();this._pendingRequest=null}options=options||{};if(this._plan.isReady()){if(this.options.useZoomParameter){options.z=this._map&&this._map.getZoom()}wps=options&&options.waypoints||this._plan.getWaypoints();this.fire("routingstart",{waypoints:wps})
2179;this._pendingRequest=this._router.route(wps,function(err,routes){this._pendingRequest=null;if(options.callback){return options.callback.call(this,err,routes)}if(ts===this._requestCount){this._clearLines();this._clearAlts();if(err&&err.type!=="abort"){this.fire("routingerror",{error:err});return}routes.forEach(function(route,i){route.routesIndex=i});if(!options.geometryOnly){this.fire("routesfound",{waypoints:wps,routes:routes});this.setAlternatives(routes)}else{var selectedRoute=routes.splice(0,1)[0];this._routeSelected({route:selectedRoute,alternatives:routes})}}},this,options)}},_clearLines:function(){if(this._line){this._map.removeLayer(this._line);delete this._line}if(this._alternatives&&this._alternatives.length){for(var i in this._alternatives){this._map.removeLayer(this._alternatives[i])}this._alternatives=[]}}})})()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./itinerary":55,"./line":56,"./osrm-v1":59,"./plan":60}],50:[function(_dereq_,module,exports){(function(global){(function(){"use strict";var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null;module.exports=L.Control.extend({options:{header:"Routing error",formatMessage:function(error){if(error.status<0){return"Calculating the route caused an error. Technical description follows: <code><pre>"+error.message+"</pre></code"}else{return"The route could not be calculated. "+error.message}}},initialize:function(routingControl,options){L.Control.prototype.initialize.call(this,options);routingControl.on("routingerror",L.bind(function(e){if(this._element){this._element.children[1].innerHTML=this.options.formatMessage(e.error);this._element.style.visibility="visible"}},this)).on("routingstart",L.bind(function(){if(this._element){this._element.style.visibility="hidden"}},this))},onAdd:function(){var header,message;this._element=L.DomUtil.create("div","leaflet-bar leaflet-routing-error");this._element.style.visibility="hidden";header=L.DomUtil.create("h3",null,this._element);message=L.DomUtil.create("span",null,this._element);header.innerHTML=this.options.header;return this._element},onRemove:function(){delete this._element}})})()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],51:[function(_dereq_,module,exports){(function(global){(function(){"use strict";var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null;var Localization=_dereq_("./localization");module.exports=L.Class.extend({options:{units:"metric",unitNames:null,language:"en",roundingSensitivity:1,distanceTemplate:"{value} {unit}"},initialize:function(options){L.setOptions(this,options);var langs=L.Util.isArray(this.options.language)?this.options.language:[this.options.language,"en"];this._localization=new Localization(langs)},formatDistance:function(d,sensitivity){var un=this.options.unitNames||this._localization.localize("units"),simpleRounding=sensitivity<=0,round=simpleRounding?function(v){return v}:L.bind(this._round,this),v,yards,data,pow10;if(this.options.units==="imperial"){yards=d/.9144;if(yards>=1e3){data={value:round(d/1609.344,sensitivity),unit:un.miles}}else{data={value:round(yards,sensitivity),unit:un.yards}}}else{v=round(d,sensitivity);data={value:v>=1e3?v/1e3:v,unit:v>=1e3?un.kilometers:un.meters}}if(simpleRounding){data.value=data.value.toFixed(-sensitivity)}return L.Util.template(this.options.distanceTemplate,data)},_round:function(d,sensitivity){var s=sensitivity||this.options.roundingSensitivity,pow10=Math.pow(10,(Math.floor(d/s)+"").length-1),r=Math.floor(d/pow10),p=r>5?pow10:pow10/2;return Math.round(d/p)*p},formatTime:function(t){var un=this.options.unitNames||this._localization.localize("units");t=Math.round(t/30)*30;if(t>86400){return Math.round(t/3600)+" "+un.hours}else if(t>3600){return Math.floor(t/3600)+" "+un.hours+" "+Math.round(t%3600/60)+" "+un.minutes}else if(t>300){return Math.round(t/60)+" "+un.minutes}else if(t>60){return Math.floor(t/60)+" "+un.minutes+(t%60!==0?" "+t%60+" "+un.seconds:"")}else{return t+" "+un.seconds}},formatInstruction:function(instr,i){if(instr.text===undefined){return this.capitalize(L.Util.template(this._getInstructionTemplate(instr,i),L.extend({},instr,{exitStr:instr.exit?this._localization.localize("formatOrder")(instr.exit):"",dir:this._localization.localize(["directions",instr.direction]),modifier:this._localization.localize(["directions",instr.modifier])})))}else{return instr.text}},getIconName:function(instr,i){switch(instr.type){case"Head":if(i===0){return"depart"}break;case"WaypointReached":return"via";case"Roundabout":return"enter-roundabout";case"DestinationReached":return"arrive"}switch(instr.modifier){case"Straight":return"continue";case"SlightRight":return"bear-right";case"Right":return"turn-right";case"SharpRight":return"sharp-right";case"TurnAround":case"Uturn":return"u-turn";case"SharpLeft":return"sharp-left";case"Left":return"turn-left";case"SlightLeft":return"bear-left"}},capitalize:function(s){return s.charAt(0).toUpperCase()+s.substring(1)},_getInstructionTemplate:function(instr,i){var type=instr.type==="Straight"?i===0?"Head":"Continue":instr.type,strings=this._localization.localize(["instructions",type]);if(!strings){strings=[this._localization.localize(["directions",type])," "+this._localization.localize(["instructions","Onto"])]}return strings[0]+(strings.length>1&&instr.road?strings[1]:"")}})})()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./localization":57}],52:[function(_dereq_,module,exports){(function(global){(function(){"use strict";var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null;var Autocomplete=_dereq_("./autocomplete");var Localization=_dereq_("./localization");function selectInputText(input){if(input.setSelectionRange){input.setSelectionRange(0,9999)}else{input.select()}}module.exports=L.Class.extend({includes:typeof L.Evented!=="undefined"&&L.Evented.prototype||L.Mixin.Events,options:{createGeocoder:function(i,nWps,options){var container=L.DomUtil.create("div","leaflet-routing-geocoder"),input=L.DomUtil.create("input","",container),remove=options.addWaypoints?L.DomUtil.create("span","leaflet-routing-remove-waypoint",container):undefined;input.disabled=!options.addWaypoints;return{container:container,input:input,closeButton:remove}},geocoderPlaceholder:function(i,numberWaypoints,geocoderElement){var l=new Localization(geocoderElement.options.language).localize("ui");return i===0?l.startPlaceholder:i<numberWaypoints-1?L.Util.template(l.viaPlaceholder,{viaNumber:i}):l.endPlaceholder},geocoderClass:function(){return""},waypointNameFallback:function(latLng){var ns=latLng.lat<0?"S":"N",ew=latLng.lng<0?"W":"E",lat=(Math.round(Math.abs(latLng.lat)*1e4)/1e4).toString(),lng=(Math.round(Math.abs(latLng.lng)*1e4)/1e4).toString();return ns+lat+", "+ew+lng},maxGeocoderTolerance:200,autocompleteOptions:{},language:"en"},initialize:function(wp,i,nWps,options){L.setOptions(this,options);var g=this.options.createGeocoder(i,nWps,this.options),closeButton=g.closeButton,geocoderInput=g.input;geocoderInput.setAttribute("placeholder",this.options.geocoderPlaceholder(i,nWps,this));geocoderInput.className=this.options.geocoderClass(i,nWps);this._element=g;this._waypoint=wp;this.update();geocoderInput.value=wp.name;L.DomEvent.addListener(geocoderInput,"click",function(){selectInputText(this)},geocoderInput);if(closeButton){L.DomEvent.addListener(closeButton,"click",function(){this.fire("delete",{waypoint:this._waypoint})},this)}new Autocomplete(geocoderInput,function(r){geocoderInput.value=r.name;wp.name=r.name;wp.latLng=r.center;this.fire("geocoded",{waypoint:wp,value:r})},this,L.extend({resultFn:this.options.geocoder.geocode,resultContext:this.options.geocoder,autocompleteFn:this.options.geocoder.suggest,autocompleteContext:this.options.geocoder},this.options.autocompleteOptions))},getContainer:function(){return this._element.container},setValue:function(v){this._element.input.value=v},update:function(force){var wp=this._waypoint,wpCoords;wp.name=wp.name||"";if(wp.latLng&&(force||!wp.name)){wpCoords=this.options.waypointNameFallback(wp.latLng);if(this.options.geocoder&&this.options.geocoder.reverse){this.options.geocoder.reverse(wp.latLng,67108864,function(rs){if(rs.length>0&&rs[0].center.distanceTo(wp.latLng)<this.options.maxGeocoderTolerance){wp.name=rs[0].name}else{wp.name=wpCoords}this._update()},this)}else{wp.name=wpCoords;this._update()}}},focus:function(){var input=this._element.input;input.focus();selectInputText(input)},_update:function(){var wp=this._waypoint,value=wp&&wp.name?wp.name:"";this.setValue(value);this.fire("reversegeocoded",{waypoint:wp,value:value})}})})()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./autocomplete":48,"./localization":57}],53:[function(_dereq_,module,exports){(function(global){var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null,Control=_dereq_("./control"),Itinerary=_dereq_("./itinerary"),Line=_dereq_("./line"),OSRMv1=_dereq_("./osrm-v1"),Plan=_dereq_("./plan"),Waypoint=_dereq_("./waypoint"),Autocomplete=_dereq_("./autocomplete"),Formatter=_dereq_("./formatter"),GeocoderElement=_dereq_("./geocoder-element"),Localization=_dereq_("./localization"),ItineraryBuilder=_dereq_("./itinerary-builder"),Mapbox=_dereq_("./mapbox"),ErrorControl=_dereq_("./error-control");L.routing={control:function(options){return new Control(options)},itinerary:function(options){return Itinerary(options)},line:function(route,options){return new Line(route,options)},plan:function(waypoints,options){return new Plan(waypoints,options)},waypoint:function(latLng,name,options){return new Waypoint(latLng,name,options)},osrmv1:function(options){return new OSRMv1(options)},localization:function(options){return new Localization(options)},formatter:function(options){return new Formatter(options)},geocoderElement:function(wp,i,nWps,plan){return new L.Routing.GeocoderElement(wp,i,nWps,plan)},itineraryBuilder:function(options){return new ItineraryBuilder(options)},mapbox:function(accessToken,options){return new Mapbox(accessToken,options)},errorControl:function(routingControl,options){return new ErrorControl(routingControl,options)},autocomplete:function(elem,callback,context,options){return new Autocomplete(elem,callback,context,options)}};module.exports=L.Routing={Control:Control,Itinerary:Itinerary,Line:Line,OSRMv1:OSRMv1,Plan:Plan,Waypoint:Waypoint,Autocomplete:Autocomplete,Formatter:Formatter,GeocoderElement:GeocoderElement,Localization:Localization,Formatter:Formatter,ItineraryBuilder:ItineraryBuilder,control:L.routing.control,itinerary:L.routing.itinerary,line:L.routing.line,plan:L.routing.plan,waypoint:L.routing.waypoint,osrmv1:L.routing.osrmv1,geocoderElement:L.routing.geocoderElement,mapbox:L.routing.mapbox,errorControl:L.routing.errorControl}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./autocomplete":48,"./control":49,"./error-control":50,"./formatter":51,"./geocoder-element":52,"./itinerary":55,"./itinerary-builder":54,"./line":56,"./localization":57,"./mapbox":58,"./osrm-v1":59,"./plan":60,"./waypoint":61}],54:[function(_dereq_,module,exports){(function(global){(function(){"use strict";var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null;module.exports=L.Class.extend({options:{containerClassName:""},initialize:function(options){L.setOptions(this,options)},createContainer:function(className){var table=L.DomUtil.create("table",(className||"")+" "+this.options.containerClassName),colgroup=L.DomUtil.create("colgroup","",table);L.DomUtil.create("col","leaflet-routing-instruction-icon",colgroup);L.DomUtil.create("col","leaflet-routing-instruction-text",colgroup);L.DomUtil.create("col","leaflet-routing-instruction-distance",colgroup);return table},createStepsContainer:function(){return L.DomUtil.create("tbody","")},createStep:function(text,distance,icon,steps){var row=L.DomUtil.create("tr","",steps),span,td;td=L.DomUtil.create("td","",row);span=L.DomUtil.create("span","leaflet-routing-icon leaflet-routing-icon-"+icon,td);td.appendChild(span);td=L.DomUtil.create("td","",row);td.appendChild(document.createTextNode(text));td=L.DomUtil.create("td","",row);td.appendChild(document.createTextNode(distance));return row}})})()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],55:[function(_dereq_,module,exports){(function(global){(function(){"use strict";var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null;var Formatter=_dereq_("./formatter");var ItineraryBuilder=_dereq_("./itinerary-builder");module.exports=L.Control.extend({includes:typeof L.Evented!=="undefined"&&L.Evented.prototype||L.Mixin.Events,options:{pointMarkerStyle:{radius:5,color:"#03f",fillColor:"white",opacity:1,fillOpacity:.7},summaryTemplate:"<h2>{name}</h2><h3>{distance}, {time}</h3>",timeTemplate:"{time}",containerClassName:"",alternativeClassName:"",minimizedClassName:"",itineraryClassName:"",totalDistanceRoundingSensitivity:-1,show:true,collapsible:undefined,collapseBtn:function(itinerary){var collapseBtn=L.DomUtil.create("span",itinerary.options.collapseBtnClass);L.DomEvent.on(collapseBtn,"click",itinerary._toggle,itinerary);itinerary._container.insertBefore(collapseBtn,itinerary._container.firstChild)},collapseBtnClass:"leaflet-routing-collapse-btn"},initialize:function(options){L.setOptions(this,options);this._formatter=this.options.formatter||new Formatter(this.options);this._itineraryBuilder=this.options.itineraryBuilder||new ItineraryBuilder({containerClassName:this.options.itineraryClassName})},onAdd:function(map){var collapsible=this.options.collapsible;collapsible=collapsible||collapsible===undefined&&map.getSize().x<=640;this._container=L.DomUtil.create("div","leaflet-routing-container leaflet-bar "+(!this.options.show?"leaflet-routing-container-hide ":"")+(collapsible?"leaflet-routing-collapsible ":"")+this.options.containerClassName);this._altContainer=this.createAlternativesContainer();this._container.appendChild(this._altContainer);L.DomEvent.disableClickPropagation(this._container);L.DomEvent.addListener(this._container,"mousewheel",function(e){L.DomEvent.stopPropagation(e)});if(collapsible){this.options.collapseBtn(this)}return this._container},onRemove:function(){},createAlternativesContainer:function(){return L.DomUtil.create("div","leaflet-routing-alternatives-container")},setAlternatives:function(routes){var i,alt,altDiv;this._clearAlts();this._routes=routes;for(i=0;i<this._routes.length;i++){alt=this._routes[i];altDiv=this._createAlternative(alt,i);this._altContainer.appendChild(altDiv);this._altElements.push(altDiv)}this._selectRoute({route:this._routes[0],alternatives:this._routes.slice(1)});return this},show:function(){L.DomUtil.removeClass(this._container,"leaflet-routing-container-hide")},hide:function(){L.DomUtil.addClass(this._container,"leaflet-routing-container-hide")},_toggle:function(){var collapsed=L.DomUtil.hasClass(this._container,"leaflet-routing-container-hide");this[collapsed?"show":"hide"]()},_createAlternative:function(alt,i){var altDiv=L.DomUtil.create("div","leaflet-routing-alt "+this.options.alternativeClassName+(i>0?" leaflet-routing-alt-minimized "+this.options.minimizedClassName:"")),template=this.options.summaryTemplate,data=L.extend({name:alt.name,distance:this._formatter.formatDistance(alt.summary.totalDistance,this.options.totalDistanceRoundingSensitivity),time:this._formatter.formatTime(alt.summary.totalTime)},alt);altDiv.innerHTML=typeof template==="function"?template(data):L.Util.template(template,data);L.DomEvent.addListener(altDiv,"click",this._onAltClicked,this);this.on("routeselected",this._selectAlt,this);altDiv.appendChild(this._createItineraryContainer(alt));return altDiv},_clearAlts:function(){var el=this._altContainer;while(el&&el.firstChild){el.removeChild(el.firstChild)}this._altElements=[]},_createItineraryContainer:function(r){var container=this._itineraryBuilder.createContainer(),steps=this._itineraryBuilder.createStepsContainer(),i,instr,step,distance,text,icon;container.appendChild(steps);for(i=0;i<r.instructions.length;i++){instr=r.instructions[i];text=this._formatter.formatInstruction(instr,i);distance=this._formatter.formatDistance(instr.distance);icon=this._formatter.getIconName(instr,i);step=this._itineraryBuilder.createStep(text,distance,icon,steps);if(instr.index){this._addRowListeners(step,r.coordinates[instr.index])}}return container},_addRowListeners:function(row,coordinate){L.DomEvent.addListener(row,"mouseover",function(){this._marker=L.circleMarker(coordinate,this.options.pointMarkerStyle).addTo(this._map)},this);L.DomEvent.addListener(row,"mouseout",function(){if(this._marker){this._map.removeLayer(this._marker);delete this._marker}},this);L.DomEvent.addListener(row,"click",function(e){this._map.panTo(coordinate);L.DomEvent.stopPropagation(e)},this)},_onAltClicked:function(e){var altElem=e.target||window.event.srcElement;while(!L.DomUtil.hasClass(altElem,"leaflet-routing-alt")){altElem=altElem.parentElement}var j=this._altElements.indexOf(altElem);var alts=this._routes.slice();var route=alts.splice(j,1)[0];this.fire("routeselected",{route:route,alternatives:alts})},_selectAlt:function(e){var altElem,j,n,classFn;altElem=this._altElements[e.route.routesIndex];if(L.DomUtil.hasClass(altElem,"leaflet-routing-alt-minimized")){for(j=0;j<this._altElements.length;j++){n=this._altElements[j];classFn=j===e.route.routesIndex?"removeClass":"addClass";L.DomUtil[classFn](n,"leaflet-routing-alt-minimized");if(this.options.minimizedClassName){L.DomUtil[classFn](n,this.options.minimizedClassName)}if(j!==e.route.routesIndex)n.scrollTop=0}}L.DomEvent.stop(e)},_selectRoute:function(routes){if(this._marker){this._map.removeLayer(this._marker);delete this._marker}this.fire("routeselected",routes)}})})()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./formatter":51,"./itinerary-builder":54}],56:[function(_dereq_,module,exports){(function(global){(function(){"use strict";var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null;module.exports=L.LayerGroup.extend({includes:typeof L.Evented!=="undefined"&&L.Evented.prototype||L.Mixin.Events,options:{styles:[{color:"black",opacity:.15,weight:9},{color:"white",opacity:.8,weight:6},{color:"red",opacity:1,weight:2}],missingRouteStyles:[{color:"black",opacity:.15,weight:7},{color:"white",opacity:.6,weight:4},{color:"gray",opacity:.8,weight:2,dashArray:"7,12"}],addWaypoints:true,extendToWaypoints:true,missingRouteTolerance:10},initialize:function(route,options){L.setOptions(this,options);L.LayerGroup.prototype.initialize.call(this,options);this._route=route;if(this.options.extendToWaypoints){this._extendToWaypoints()}this._addSegment(route.coordinates,this.options.styles,this.options.addWaypoints)},getBounds:function(){return L.latLngBounds(this._route.coordinates)},_findWaypointIndices:function(){var wps=this._route.inputWaypoints,indices=[],i;for(i=0;i<wps.length;i++){indices.push(this._findClosestRoutePoint(wps[i].latLng))}return indices},_findClosestRoutePoint:function(latlng){var minDist=Number.MAX_VALUE,minIndex,i,d;for(i=this._route.coordinates.length-1;i>=0;i--){d=latlng.distanceTo(this._route.coordinates[i]);if(d<minDist){minIndex=i;minDist=d}}return minIndex},_extendToWaypoints:function(){var wps=this._route.inputWaypoints,wpIndices=this._getWaypointIndices(),i,wpLatLng,routeCoord;for(i=0;i<wps.length;i++){wpLatLng=wps[i].latLng;routeCoord=L.latLng(this._route.coordinates[wpIndices[i]]);if(wpLatLng.distanceTo(routeCoord)>this.options.missingRouteTolerance){this._addSegment([wpLatLng,routeCoord],this.options.missingRouteStyles)}}},_addSegment:function(coords,styles,mouselistener){var i,pl;for(i=0;i<styles.length;i++){pl=L.polyline(coords,styles[i]);this.addLayer(pl);if(mouselistener){pl.on("mousedown",this._onLineTouched,this)}}},_findNearestWpBefore:function(i){var wpIndices=this._getWaypointIndices(),j=wpIndices.length-1;while(j>=0&&wpIndices[j]>i){j--}return j},_onLineTouched:function(e){var afterIndex=this._findNearestWpBefore(this._findClosestRoutePoint(e.latlng));this.fire("linetouched",{afterIndex:afterIndex,latlng:e.latlng});L.DomEvent.stop(e)},_getWaypointIndices:function(){if(!this._wpIndices){this._wpIndices=this._route.waypointIndices||this._findWaypointIndices()}return this._wpIndices}})})()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],57:[function(_dereq_,module,exports){(function(){"use strict";var spanish={directions:{N:"norte",NE:"noreste",E:"este",SE:"sureste",S:"sur",SW:"suroeste",W:"oeste",NW:"noroeste",SlightRight:"leve giro a la derecha",Right:"derecha",SharpRight:"giro pronunciado a la derecha",SlightLeft:"leve giro a la izquierda",Left:"izquierda",SharpLeft:"giro pronunciado a la izquierda",Uturn:"media vuelta"},instructions:{Head:["Derecho {dir}"," sobre {road}"],Continue:["Continuar {dir}"," en {road}"],TurnAround:["Dar vuelta"],WaypointReached:["Llegó a un punto del camino"],Roundabout:["Tomar {exitStr} salida en la rotonda"," en {road}"],DestinationReached:["Llegada a destino"],Fork:["En el cruce gira a {modifier}"," hacia {road}"],Merge:["Incorpórate {modifier}"," hacia {road}"],OnRamp:["Gira {modifier} en la salida"," hacia {road}"],OffRamp:["Toma la salida {modifier}"," hacia {road}"],EndOfRoad:["Gira {modifier} al final de la carretera"," hacia {road}"],Onto:"hacia {road}"},formatOrder:function(n){return n+"º"},ui:{startPlaceholder:"Inicio",viaPlaceholder:"Via {viaNumber}",endPlaceholder:"Destino"},units:{meters:"m",kilometers:"km",yards:"yd",miles:"mi",hours:"h",minutes:"min",seconds:"s"}};L.Routing=L.Routing||{};var Localization=L.Class.extend({initialize:function(langs){this._langs=L.Util.isArray(langs)?langs.slice():[langs,"en"];for(var i=0,l=this._langs.length;i<l;i++){var generalizedCode=/([A-Za-z]+)/.exec(this._langs[i])[1];if(!Localization[this._langs[i]]){if(Localization[generalizedCode]){this._langs[i]=generalizedCode}else{throw new Error('No localization for language "'+this._langs[i]+'".')}}}},localize:function(keys){var dict,key,value;keys=L.Util.isArray(keys)?keys:[keys];for(var i=0,l=this._langs.length;i<l;i++){dict=Localization[this._langs[i]];for(var j=0,nKeys=keys.length;dict&&j<nKeys;j++){key=keys[j];value=dict[key];dict=value}if(value){return value}}}});module.exports=L.extend(Localization,{en:{directions:{N:"north",NE:"northeast",E:"east",SE:"southeast",S:"south",SW:"southwest",W:"west",NW:"northwest",SlightRight:"slight right",Right:"right",SharpRight:"sharp right",SlightLeft:"slight left",Left:"left",SharpLeft:"sharp left",Uturn:"Turn around"},instructions:{Head:["Head {dir}"," on {road}"],Continue:["Continue {dir}"],TurnAround:["Turn around"],WaypointReached:["Waypoint reached"],Roundabout:["Take the {exitStr} exit in the roundabout"," onto {road}"],DestinationReached:["Destination reached"],Fork:["At the fork, turn {modifier}"," onto {road}"],Merge:["Merge {modifier}"," onto {road}"],OnRamp:["Turn {modifier} on the ramp"," onto {road}"],OffRamp:["Take the ramp on the {modifier}"," onto {road}"],EndOfRoad:["Turn {modifier} at the end of the road"," onto {road}"],Onto:"onto {road}"},formatOrder:function(n){var i=n%10-1,suffix=["st","nd","rd"];return suffix[i]?n+suffix[i]:n+"th"},ui:{startPlaceholder:"Start",viaPlaceholder:"Via {viaNumber}",endPlaceholder:"End"},units:{meters:"m",kilometers:"km",yards:"yd",miles:"mi",hours:"h",minutes:"min",seconds:"s"}},de:{directions:{N:"Norden",NE:"Nordosten",E:"Osten",SE:"Südosten",S:"Süden",SW:"Südwesten",W:"Westen",NW:"Nordwesten",SlightRight:"leicht rechts",Right:"rechts",SharpRight:"scharf rechts",SlightLeft:"leicht links",Left:"links",SharpLeft:"scharf links",Uturn:"Wenden"},instructions:{Head:["Richtung {dir}"," auf {road}"],Continue:["Geradeaus Richtung {dir}"," auf {road}"],SlightRight:["Leicht rechts abbiegen"," auf {road}"],Right:["Rechts abbiegen"," auf {road}"],SharpRight:["Scharf rechts abbiegen"," auf {road}"],TurnAround:["Wenden"],SharpLeft:["Scharf links abbiegen"," auf {road}"],Left:["Links abbiegen"," auf {road}"],SlightLeft:["Leicht links abbiegen"," auf {road}"],WaypointReached:["Zwischenhalt erreicht"],Roundabout:["Nehmen Sie die {exitStr} Ausfahrt im Kreisverkehr"," auf {road}"],DestinationReached:["Sie haben ihr Ziel erreicht"],Fork:["An der Kreuzung {modifier}"," auf {road}"],Merge:["Fahren Sie {modifier} weiter"," auf {road}"],OnRamp:["Fahren Sie {modifier} auf die Auffahrt"," auf {road}"],OffRamp:["Nehmen Sie die Ausfahrt {modifier}"," auf {road}"],EndOfRoad:["Fahren Sie {modifier} am Ende der Straße"," auf {road}"],Onto:"auf {road}"},formatOrder:function(n){return n+"."},ui:{startPlaceholder:"Start",viaPlaceholder:"Via {viaNumber}",endPlaceholder:"Ziel"}},sv:{directions:{N:"norr",NE:"nordost",E:"öst",SE:"sydost",S:"syd",SW:"sydväst",W:"väst",NW:"nordväst",SlightRight:"svagt höger",Right:"höger",SharpRight:"skarpt höger",SlightLeft:"svagt vänster",Left:"vänster",SharpLeft:"skarpt vänster",Uturn:"Vänd"},instructions:{Head:["Åk åt {dir}"," till {road}"],Continue:["Fortsätt {dir}"],SlightRight:["Svagt höger"," till {road}"],Right:["Sväng höger"," till {road}"],SharpRight:["Skarpt höger"," till {road}"],TurnAround:["Vänd"],SharpLeft:["Skarpt vänster"," till {road}"],Left:["Sväng vänster"," till {road}"],SlightLeft:["Svagt vänster"," till {road}"],WaypointReached:["Viapunkt nådd"],Roundabout:["Tag {exitStr} avfarten i rondellen"," till {road}"],DestinationReached:["Framme vid resans mål"],Fork:["Tag av {modifier}"," till {road}"],Merge:["Anslut {modifier} "," till {road}"],OnRamp:["Tag påfarten {modifier}"," till {road}"],OffRamp:["Tag avfarten {modifier}"," till {road}"],EndOfRoad:["Sväng {modifier} vid vägens slut"," till {road}"],Onto:"till {road}"},formatOrder:function(n){return["första","andra","tredje","fjärde","femte","sjätte","sjunde","åttonde","nionde","tionde"][n-1]},ui:{startPlaceholder:"Från",viaPlaceholder:"Via {viaNumber}",endPlaceholder:"Till"}},es:spanish,sp:spanish,nl:{directions:{N:"noordelijke",NE:"noordoostelijke",E:"oostelijke",SE:"zuidoostelijke",S:"zuidelijke",SW:"zuidewestelijke",W:"westelijke",NW:"noordwestelijke"},instructions:{Head:["Vertrek in {dir} richting"," de {road} op"],Continue:["Ga in {dir} richting"," de {road} op"],SlightRight:["Volg de weg naar rechts"," de {road} op"],Right:["Ga rechtsaf"," de {road} op"],SharpRight:["Ga scherpe bocht naar rechts"," de {road} op"],TurnAround:["Keer om"],SharpLeft:["Ga scherpe bocht naar links"," de {road} op"],Left:["Ga linksaf"," de {road} op"],SlightLeft:["Volg de weg naar links"," de {road} op"],WaypointReached:["Aangekomen bij tussenpunt"],Roundabout:["Neem de {exitStr} afslag op de rotonde"," de {road} op"],DestinationReached:["Aangekomen op eindpunt"]},formatOrder:function(n){if(n===1||n>=20){return n+"ste"}else{return n+"de"}},ui:{startPlaceholder:"Vertrekpunt",viaPlaceholder:"Via {viaNumber}",endPlaceholder:"Bestemming"}},fr:{directions:{N:"nord",NE:"nord-est",E:"est",SE:"sud-est",S:"sud",SW:"sud-ouest",W:"ouest",NW:"nord-ouest"},instructions:{Head:["Tout droit au {dir}"," sur {road}"],Continue:["Continuer au {dir}"," sur {road}"],SlightRight:["Légèrement à droite"," sur {road}"],Right:["A droite"," sur {road}"],SharpRight:["Complètement à droite"," sur {road}"],TurnAround:["Faire demi-tour"],SharpLeft:["Complètement à gauche"," sur {road}"],Left:["A gauche"," sur {road}"],SlightLeft:["Légèrement à gauche"," sur {road}"],WaypointReached:["Point d'étape atteint"],Roundabout:["Au rond-point, prenez la {exitStr} sortie"," sur {road}"],DestinationReached:["Destination atteinte"]},formatOrder:function(n){return n+"º"},ui:{startPlaceholder:"Départ",viaPlaceholder:"Intermédiaire {viaNumber}",endPlaceholder:"Arrivée"}},it:{directions:{N:"nord",NE:"nord-est",E:"est",SE:"sud-est",S:"sud",SW:"sud-ovest",W:"ovest",NW:"nord-ovest"},instructions:{Head:["Dritto verso {dir}"," su {road}"],Continue:["Continuare verso {dir}"," su {road}"],SlightRight:["Mantenere la destra"," su {road}"],Right:["A destra"," su {road}"],SharpRight:["Strettamente a destra"," su {road}"],TurnAround:["Fare inversione di marcia"],SharpLeft:["Strettamente a sinistra"," su {road}"],Left:["A sinistra"," sur {road}"],SlightLeft:["Mantenere la sinistra"," su {road}"],WaypointReached:["Punto di passaggio raggiunto"],Roundabout:["Alla rotonda, prendere la {exitStr} uscita"],DestinationReached:["Destinazione raggiunta"]},formatOrder:function(n){return n+"º"},ui:{startPlaceholder:"Partenza",viaPlaceholder:"Intermedia {viaNumber}",endPlaceholder:"Destinazione"}},pt:{directions:{N:"norte",NE:"nordeste",E:"leste",SE:"sudeste",S:"sul",SW:"sudoeste",W:"oeste",NW:"noroeste",SlightRight:"curva ligeira a direita",Right:"direita",SharpRight:"curva fechada a direita",SlightLeft:"ligeira a esquerda",Left:"esquerda",SharpLeft:"curva fechada a esquerda",Uturn:"Meia volta"},instructions:{Head:["Siga {dir}"," na {road}"],Continue:["Continue {dir}"," na {road}"],SlightRight:["Curva ligeira a direita"," na {road}"],Right:["Curva a direita"," na {road}"],SharpRight:["Curva fechada a direita"," na {road}"],TurnAround:["Retorne"],SharpLeft:["Curva fechada a esquerda"," na {road}"],Left:["Curva a esquerda"," na {road}"],SlightLeft:["Curva ligueira a esquerda"," na {road}"],WaypointReached:["Ponto de interesse atingido"],Roundabout:["Pegue a {exitStr} saída na rotatória"," na {road}"],DestinationReached:["Destino atingido"],Fork:["Na encruzilhada, vire a {modifier}"," na {road}"],Merge:["Entre à {modifier}"," na {road}"],OnRamp:["Vire {modifier} na rampa"," na {road}"],OffRamp:["Entre na rampa na {modifier}"," na {road}"],EndOfRoad:["Vire {modifier} no fim da rua"," na {road}"],Onto:"na {road}"},formatOrder:function(n){return n+"º"},ui:{startPlaceholder:"Origem",viaPlaceholder:"Intermédio {viaNumber}",endPlaceholder:"Destino"}},sk:{directions:{N:"sever",NE:"serverovýchod",E:"východ",SE:"juhovýchod",S:"juh",SW:"juhozápad",W:"západ",NW:"serverozápad"},instructions:{Head:["Mierte na {dir}"," na {road}"],Continue:["Pokračujte na {dir}"," na {road}"],SlightRight:["Mierne doprava"," na {road}"],Right:["Doprava"," na {road}"],SharpRight:["Prudko doprava"," na {road}"],TurnAround:["Otočte sa"],SharpLeft:["Prudko doľava"," na {road}"],Left:["Doľava"," na {road}"],SlightLeft:["Mierne doľava"," na {road}"],WaypointReached:["Ste v prejazdovom bode."],Roundabout:["Odbočte na {exitStr} výjazde"," na {road}"],DestinationReached:["Prišli ste do cieľa."]},formatOrder:function(n){var i=n%10-1,suffix=[".",".","."];return suffix[i]?n+suffix[i]:n+"."},ui:{startPlaceholder:"Začiatok",viaPlaceholder:"Cez {viaNumber}",endPlaceholder:"Koniec"}},el:{directions:{N:"βόρεια",NE:"βορειοανατολικά",E:"ανατολικά",SE:"νοτιοανατολικά",S:"νότια",SW:"νοτιοδυτικά",W:"δυτικά",NW:"βορειοδυτικά"},instructions:{Head:["Κατευθυνθείτε {dir}"," στην {road}"],Continue:["Συνεχίστε {dir}"," στην {road}"],SlightRight:["Ελαφρώς δεξιά"," στην {road}"],Right:["Δεξιά"," στην {road}"],SharpRight:["Απότομη δεξιά στροφή"," στην {road}"],TurnAround:["Κάντε αναστροφή"],SharpLeft:["Απότομη αριστερή στροφή"," στην {road}"],Left:["Αριστερά"," στην {road}"],SlightLeft:["Ελαφρώς αριστερά"," στην {road}"],WaypointReached:["Φτάσατε στο σημείο αναφοράς"],Roundabout:["Ακολουθήστε την {exitStr} έξοδο στο κυκλικό κόμβο"," στην {road}"],DestinationReached:["Φτάσατε στον προορισμό σας"]},formatOrder:function(n){return n+"º"},ui:{startPlaceholder:"Αφετηρία",viaPlaceholder:"μέσω {viaNumber}",endPlaceholder:"Προορισμός"}},ca:{
2180directions:{N:"nord",NE:"nord-est",E:"est",SE:"sud-est",S:"sud",SW:"sud-oest",W:"oest",NW:"nord-oest",SlightRight:"lleu gir a la dreta",Right:"dreta",SharpRight:"gir pronunciat a la dreta",SlightLeft:"gir pronunciat a l'esquerra",Left:"esquerra",SharpLeft:"lleu gir a l'esquerra",Uturn:"mitja volta"},instructions:{Head:["Recte {dir}"," sobre {road}"],Continue:["Continuar {dir}"],TurnAround:["Donar la volta"],WaypointReached:["Ha arribat a un punt del camí"],Roundabout:["Agafar {exitStr} sortida a la rotonda"," a {road}"],DestinationReached:["Arribada al destí"],Fork:["A la cruïlla gira a la {modifier}"," cap a {road}"],Merge:["Incorpora't {modifier}"," a {road}"],OnRamp:["Gira {modifier} a la sortida"," cap a {road}"],OffRamp:["Pren la sortida {modifier}"," cap a {road}"],EndOfRoad:["Gira {modifier} al final de la carretera"," cap a {road}"],Onto:"cap a {road}"},formatOrder:function(n){return n+"º"},ui:{startPlaceholder:"Origen",viaPlaceholder:"Via {viaNumber}",endPlaceholder:"Destí"},units:{meters:"m",kilometers:"km",yards:"yd",miles:"mi",hours:"h",minutes:"min",seconds:"s"}},ru:{directions:{N:"север",NE:"северовосток",E:"восток",SE:"юговосток",S:"юг",SW:"югозапад",W:"запад",NW:"северозапад",SlightRight:"плавно направо",Right:"направо",SharpRight:"резко направо",SlightLeft:"плавно налево",Left:"налево",SharpLeft:"резко налево",Uturn:"развернуться"},instructions:{Head:["Начать движение на {dir}"," по {road}"],Continue:["Продолжать движение на {dir}"," по {road}"],SlightRight:["Плавный поворот направо"," на {road}"],Right:["Направо"," на {road}"],SharpRight:["Резкий поворот направо"," на {road}"],TurnAround:["Развернуться"],SharpLeft:["Резкий поворот налево"," на {road}"],Left:["Поворот налево"," на {road}"],SlightLeft:["Плавный поворот налево"," на {road}"],WaypointReached:["Точка достигнута"],Roundabout:["{exitStr} съезд с кольца"," на {road}"],DestinationReached:["Окончание маршрута"],Fork:["На развилке поверните {modifier}"," на {road}"],Merge:["Перестройтесь {modifier}"," на {road}"],OnRamp:["Поверните {modifier} на съезд"," на {road}"],OffRamp:["Съезжайте на {modifier}"," на {road}"],EndOfRoad:["Поверните {modifier} в конце дороги"," на {road}"],Onto:"на {road}"},formatOrder:function(n){return n+"-й"},ui:{startPlaceholder:"Начало",viaPlaceholder:"Через {viaNumber}",endPlaceholder:"Конец"},units:{meters:"м",kilometers:"км",yards:"ярд",miles:"ми",hours:"ч",minutes:"м",seconds:"с"}},pl:{directions:{N:"północ",NE:"północny wschód",E:"wschód",SE:"południowy wschód",S:"południe",SW:"południowy zachód",W:"zachód",NW:"północny zachód",SlightRight:"lekko w prawo",Right:"w prawo",SharpRight:"ostro w prawo",SlightLeft:"lekko w lewo",Left:"w lewo",SharpLeft:"ostro w lewo",Uturn:"zawróć"},instructions:{Head:["Kieruj się na {dir}"," na {road}"],Continue:["Jedź dalej przez {dir}"],TurnAround:["Zawróć"],WaypointReached:["Punkt pośredni"],Roundabout:["Wyjedź {exitStr} zjazdem na rondzie"," na {road}"],DestinationReached:["Dojechano do miejsca docelowego"],Fork:["Na rozwidleniu {modifier}"," na {road}"],Merge:["Zjedź {modifier}"," na {road}"],OnRamp:["Wjazd {modifier}"," na {road}"],OffRamp:["Zjazd {modifier}"," na {road}"],EndOfRoad:["Skręć {modifier} na końcu drogi"," na {road}"],Onto:"na {road}"},formatOrder:function(n){return n+"."},ui:{startPlaceholder:"Początek",viaPlaceholder:"Przez {viaNumber}",endPlaceholder:"Koniec"},units:{meters:"m",kilometers:"km",yards:"yd",miles:"mi",hours:"godz",minutes:"min",seconds:"s"}}})})()},{}],58:[function(_dereq_,module,exports){(function(global){(function(){"use strict";var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null;var OSRMv1=_dereq_("./osrm-v1");module.exports=OSRMv1.extend({options:{serviceUrl:"https://api.mapbox.com/directions/v5",profile:"mapbox/driving",useHints:false},initialize:function(accessToken,options){L.Routing.OSRMv1.prototype.initialize.call(this,options);this.options.requestParameters=this.options.requestParameters||{};this.options.requestParameters.access_token=accessToken}})})()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./osrm-v1":59}],59:[function(_dereq_,module,exports){(function(global){(function(){"use strict";var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null,corslite=_dereq_("@mapbox/corslite"),polyline=_dereq_("@mapbox/polyline"),osrmTextInstructions=_dereq_("osrm-text-instructions")("v5");var Waypoint=_dereq_("./waypoint");module.exports=L.Class.extend({options:{serviceUrl:"https://router.project-osrm.org/route/v1",profile:"driving",timeout:30*1e3,routingOptions:{alternatives:true,steps:true},polylinePrecision:5,useHints:true,suppressDemoServerWarning:false,language:"en"},initialize:function(options){L.Util.setOptions(this,options);this._hints={locations:{}};if(!this.options.suppressDemoServerWarning&&this.options.serviceUrl.indexOf("//router.project-osrm.org")>=0){console.warn("You are using OSRM's demo server. "+"Please note that it is **NOT SUITABLE FOR PRODUCTION USE**.\n"+"Refer to the demo server's usage policy: "+"https://github.com/Project-OSRM/osrm-backend/wiki/Api-usage-policy\n\n"+"To change, set the serviceUrl option.\n\n"+"Please do not report issues with this server to neither "+"Leaflet Routing Machine or OSRM - it's for\n"+"demo only, and will sometimes not be available, or work in "+"unexpected ways.\n\n"+"Please set up your own OSRM server, or use a paid service "+"provider for production.")}},route:function(waypoints,callback,context,options){var timedOut=false,wps=[],url,timer,wp,i,xhr;options=L.extend({},this.options.routingOptions,options);url=this.buildRouteUrl(waypoints,options);if(this.options.requestParameters){url+=L.Util.getParamString(this.options.requestParameters,url)}timer=setTimeout(function(){timedOut=true;callback.call(context||callback,{status:-1,message:"OSRM request timed out."})},this.options.timeout);for(i=0;i<waypoints.length;i++){wp=waypoints[i];wps.push(new Waypoint(wp.latLng,wp.name,wp.options))}return xhr=corslite(url,L.bind(function(err,resp){var data,error={};clearTimeout(timer);if(!timedOut){if(!err){try{data=JSON.parse(resp.responseText);try{return this._routeDone(data,wps,options,callback,context)}catch(ex){error.status=-3;error.message=ex.toString()}}catch(ex){error.status=-2;error.message="Error parsing OSRM response: "+ex.toString()}}else{error.message="HTTP request failed: "+err.type+(err.target&&err.target.status?" HTTP "+err.target.status+": "+err.target.statusText:"");error.url=url;error.status=-1;error.target=err}callback.call(context||callback,error)}else{xhr.abort()}},this))},requiresMoreDetail:function(route,zoom,bounds){if(!route.properties.isSimplified){return false}var waypoints=route.inputWaypoints,i;for(i=0;i<waypoints.length;++i){if(!bounds.contains(waypoints[i].latLng)){return true}}return false},_routeDone:function(response,inputWaypoints,options,callback,context){var alts=[],actualWaypoints,i,route;context=context||callback;if(response.code!=="Ok"){callback.call(context,{status:response.code});return}actualWaypoints=this._toWaypoints(inputWaypoints,response.waypoints);for(i=0;i<response.routes.length;i++){route=this._convertRoute(response.routes[i]);route.inputWaypoints=inputWaypoints;route.waypoints=actualWaypoints;route.properties={isSimplified:!options||!options.geometryOnly||options.simplifyGeometry};alts.push(route)}this._saveHintData(response.waypoints,inputWaypoints);callback.call(context,null,alts)},_convertRoute:function(responseRoute){var result={name:"",coordinates:[],instructions:[],summary:{totalDistance:responseRoute.distance,totalTime:responseRoute.duration}},legNames=[],waypointIndices=[],index=0,legCount=responseRoute.legs.length,hasSteps=responseRoute.legs[0].steps.length>0,i,j,leg,step,geometry,type,modifier,text,stepToText;if(this.options.stepToText){stepToText=this.options.stepToText}else{stepToText=L.bind(osrmTextInstructions.compile,osrmTextInstructions,this.options.language)}for(i=0;i<legCount;i++){leg=responseRoute.legs[i];legNames.push(leg.summary&&leg.summary.charAt(0).toUpperCase()+leg.summary.substring(1));for(j=0;j<leg.steps.length;j++){step=leg.steps[j];geometry=this._decodePolyline(step.geometry);result.coordinates.push.apply(result.coordinates,geometry);type=this._maneuverToInstructionType(step.maneuver,i===legCount-1);modifier=this._maneuverToModifier(step.maneuver);text=stepToText(step,{legCount:legCount,legIndex:i});if(type){if(i==0&&step.maneuver.type=="depart"||step.maneuver.type=="arrive"){waypointIndices.push(index)}result.instructions.push({type:type,distance:step.distance,time:step.duration,road:step.name,direction:this._bearingToDirection(step.maneuver.bearing_after),exit:step.maneuver.exit,index:index,mode:step.mode,modifier:modifier,text:text})}index+=geometry.length}}result.name=legNames.join(", ");if(!hasSteps){result.coordinates=this._decodePolyline(responseRoute.geometry)}else{result.waypointIndices=waypointIndices}return result},_bearingToDirection:function(bearing){var oct=Math.round(bearing/45)%8;return["N","NE","E","SE","S","SW","W","NW"][oct]},_maneuverToInstructionType:function(maneuver,lastLeg){switch(maneuver.type){case"new name":return"Continue";case"depart":return"Head";case"arrive":return lastLeg?"DestinationReached":"WaypointReached";case"roundabout":case"rotary":return"Roundabout";case"merge":case"fork":case"on ramp":case"off ramp":case"end of road":return this._camelCase(maneuver.type);default:return this._camelCase(maneuver.modifier)}},_maneuverToModifier:function(maneuver){var modifier=maneuver.modifier;switch(maneuver.type){case"merge":case"fork":case"on ramp":case"off ramp":case"end of road":modifier=this._leftOrRight(modifier)}return modifier&&this._camelCase(modifier)},_camelCase:function(s){var words=s.split(" "),result="";for(var i=0,l=words.length;i<l;i++){result+=words[i].charAt(0).toUpperCase()+words[i].substring(1)}return result},_leftOrRight:function(d){return d.indexOf("left")>=0?"Left":"Right"},_decodePolyline:function(routeGeometry){var cs=polyline.decode(routeGeometry,this.options.polylinePrecision),result=new Array(cs.length),i;for(i=cs.length-1;i>=0;i--){result[i]=L.latLng(cs[i])}return result},_toWaypoints:function(inputWaypoints,vias){var wps=[],i,viaLoc;for(i=0;i<vias.length;i++){viaLoc=vias[i].location;wps.push(new Waypoint(L.latLng(viaLoc[1],viaLoc[0]),inputWaypoints[i].name,inputWaypoints[i].options))}return wps},buildRouteUrl:function(waypoints,options){var locs=[],hints=[],wp,latLng,computeInstructions,computeAlternative=true;for(var i=0;i<waypoints.length;i++){wp=waypoints[i];latLng=wp.latLng;locs.push(latLng.lng+","+latLng.lat);hints.push(this._hints.locations[this._locationKey(latLng)]||"")}computeInstructions=true;return this.options.serviceUrl+"/"+this.options.profile+"/"+locs.join(";")+"?"+(options.geometryOnly?options.simplifyGeometry?"":"overview=full":"overview=false")+"&alternatives="+computeAlternative.toString()+"&steps="+computeInstructions.toString()+(this.options.useHints?"&hints="+hints.join(";"):"")+(options.allowUTurns?"&continue_straight="+!options.allowUTurns:"")},_locationKey:function(location){return location.lat+","+location.lng},_saveHintData:function(actualWaypoints,waypoints){var loc;this._hints={locations:{}};for(var i=actualWaypoints.length-1;i>=0;i--){loc=waypoints[i].latLng;this._hints.locations[this._locationKey(loc)]=actualWaypoints[i].hint}}})})()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./waypoint":61,"@mapbox/corslite":1,"@mapbox/polyline":2,"osrm-text-instructions":3}],60:[function(_dereq_,module,exports){(function(global){(function(){"use strict";var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null;var GeocoderElement=_dereq_("./geocoder-element");var Waypoint=_dereq_("./waypoint");module.exports=(L.Layer||L.Class).extend({includes:typeof L.Evented!=="undefined"&&L.Evented.prototype||L.Mixin.Events,options:{dragStyles:[{color:"black",opacity:.15,weight:9},{color:"white",opacity:.8,weight:6},{color:"red",opacity:1,weight:2,dashArray:"7,12"}],draggableWaypoints:true,routeWhileDragging:false,addWaypoints:true,reverseWaypoints:false,addButtonClassName:"",language:"en",createGeocoderElement:function(wp,i,nWps,plan){return new GeocoderElement(wp,i,nWps,plan)},createMarker:function(i,wp){var options={draggable:this.draggableWaypoints},marker=L.marker(wp.latLng,options);return marker},geocodersClassName:""},initialize:function(waypoints,options){L.Util.setOptions(this,options);this._waypoints=[];this.setWaypoints(waypoints)},isReady:function(){var i;for(i=0;i<this._waypoints.length;i++){if(!this._waypoints[i].latLng){return false}}return true},getWaypoints:function(){var i,wps=[];for(i=0;i<this._waypoints.length;i++){wps.push(this._waypoints[i])}return wps},setWaypoints:function(waypoints){var args=[0,this._waypoints.length].concat(waypoints);this.spliceWaypoints.apply(this,args);return this},spliceWaypoints:function(){var args=[arguments[0],arguments[1]],i;for(i=2;i<arguments.length;i++){args.push(arguments[i]&&arguments[i].hasOwnProperty("latLng")?arguments[i]:new Waypoint(arguments[i]))}[].splice.apply(this._waypoints,args);while(this._waypoints.length<2){this.spliceWaypoints(this._waypoints.length,0,null)}this._updateMarkers();this._fireChanged.apply(this,args)},onAdd:function(map){this._map=map;this._updateMarkers()},onRemove:function(){var i;this._removeMarkers();if(this._newWp){for(i=0;i<this._newWp.lines.length;i++){this._map.removeLayer(this._newWp.lines[i])}}delete this._map},createGeocoders:function(){var container=L.DomUtil.create("div","leaflet-routing-geocoders "+this.options.geocodersClassName),waypoints=this._waypoints,addWpBtn,reverseBtn;this._geocoderContainer=container;this._geocoderElems=[];if(this.options.addWaypoints){addWpBtn=L.DomUtil.create("button","leaflet-routing-add-waypoint "+this.options.addButtonClassName,container);addWpBtn.setAttribute("type","button");L.DomEvent.addListener(addWpBtn,"click",function(){this.spliceWaypoints(waypoints.length,0,null)},this)}if(this.options.reverseWaypoints){reverseBtn=L.DomUtil.create("button","leaflet-routing-reverse-waypoints",container);reverseBtn.setAttribute("type","button");L.DomEvent.addListener(reverseBtn,"click",function(){this._waypoints.reverse();this.setWaypoints(this._waypoints)},this)}this._updateGeocoders();this.on("waypointsspliced",this._updateGeocoders);return container},_createGeocoder:function(i){var geocoder=this.options.createGeocoderElement(this._waypoints[i],i,this._waypoints.length,this.options);geocoder.on("delete",function(){if(i>0||this._waypoints.length>2){this.spliceWaypoints(i,1)}else{this.spliceWaypoints(i,1,new Waypoint)}},this).on("geocoded",function(e){this._updateMarkers();this._fireChanged();this._focusGeocoder(i+1);this.fire("waypointgeocoded",{waypointIndex:i,waypoint:e.waypoint})},this).on("reversegeocoded",function(e){this.fire("waypointgeocoded",{waypointIndex:i,waypoint:e.waypoint})},this);return geocoder},_updateGeocoders:function(){var elems=[],i,geocoderElem;for(i=0;i<this._geocoderElems.length;i++){this._geocoderContainer.removeChild(this._geocoderElems[i].getContainer())}for(i=this._waypoints.length-1;i>=0;i--){geocoderElem=this._createGeocoder(i);this._geocoderContainer.insertBefore(geocoderElem.getContainer(),this._geocoderContainer.firstChild);elems.push(geocoderElem)}this._geocoderElems=elems.reverse()},_removeMarkers:function(){var i;if(this._markers){for(i=0;i<this._markers.length;i++){if(this._markers[i]){this._map.removeLayer(this._markers[i])}}}this._markers=[]},_updateMarkers:function(){var i,m;if(!this._map){return}this._removeMarkers();for(i=0;i<this._waypoints.length;i++){if(this._waypoints[i].latLng){m=this.options.createMarker(i,this._waypoints[i],this._waypoints.length);if(m){m.addTo(this._map);if(this.options.draggableWaypoints){this._hookWaypointEvents(m,i)}}}else{m=null}this._markers.push(m)}},_fireChanged:function(){this.fire("waypointschanged",{waypoints:this.getWaypoints()});if(arguments.length>=2){this.fire("waypointsspliced",{index:Array.prototype.shift.call(arguments),nRemoved:Array.prototype.shift.call(arguments),added:arguments})}},_hookWaypointEvents:function(m,i,trackMouseMove){var eventLatLng=function(e){return trackMouseMove?e.latlng:e.target.getLatLng()},dragStart=L.bind(function(e){this.fire("waypointdragstart",{index:i,latlng:eventLatLng(e)})},this),drag=L.bind(function(e){this._waypoints[i].latLng=eventLatLng(e);this.fire("waypointdrag",{index:i,latlng:eventLatLng(e)})},this),dragEnd=L.bind(function(e){this._waypoints[i].latLng=eventLatLng(e);this._waypoints[i].name="";if(this._geocoderElems){this._geocoderElems[i].update(true)}this.fire("waypointdragend",{index:i,latlng:eventLatLng(e)});this._fireChanged()},this),mouseMove,mouseUp;if(trackMouseMove){mouseMove=L.bind(function(e){this._markers[i].setLatLng(e.latlng);drag(e)},this);mouseUp=L.bind(function(e){this._map.dragging.enable();this._map.off("mouseup",mouseUp);this._map.off("mousemove",mouseMove);dragEnd(e)},this);this._map.dragging.disable();this._map.on("mousemove",mouseMove);this._map.on("mouseup",mouseUp);dragStart({latlng:this._waypoints[i].latLng})}else{m.on("dragstart",dragStart);m.on("drag",drag);m.on("dragend",dragEnd)}},dragNewWaypoint:function(e){var newWpIndex=e.afterIndex+1;if(this.options.routeWhileDragging){this.spliceWaypoints(newWpIndex,0,e.latlng);this._hookWaypointEvents(this._markers[newWpIndex],newWpIndex,true)}else{this._dragNewWaypoint(newWpIndex,e.latlng)}},_dragNewWaypoint:function(newWpIndex,initialLatLng){var wp=new Waypoint(initialLatLng),prevWp=this._waypoints[newWpIndex-1],nextWp=this._waypoints[newWpIndex],marker=this.options.createMarker(newWpIndex,wp,this._waypoints.length+1),lines=[],draggingEnabled=this._map.dragging.enabled(),mouseMove=L.bind(function(e){var i,latLngs;if(marker){marker.setLatLng(e.latlng)}for(i=0;i<lines.length;i++){latLngs=lines[i].getLatLngs();latLngs.splice(1,1,e.latlng);lines[i].setLatLngs(latLngs)}L.DomEvent.stop(e)},this),mouseUp=L.bind(function(e){var i;if(marker){this._map.removeLayer(marker)}for(i=0;i<lines.length;i++){this._map.removeLayer(lines[i])}this._map.off("mousemove",mouseMove);this._map.off("mouseup",mouseUp);this.spliceWaypoints(newWpIndex,0,e.latlng);if(draggingEnabled){this._map.dragging.enable()}L.DomEvent.stop(e)},this),i;if(marker){marker.addTo(this._map)}for(i=0;i<this.options.dragStyles.length;i++){lines.push(L.polyline([prevWp.latLng,initialLatLng,nextWp.latLng],this.options.dragStyles[i]).addTo(this._map))}if(draggingEnabled){this._map.dragging.disable()}this._map.on("mousemove",mouseMove);this._map.on("mouseup",mouseUp)},_focusGeocoder:function(i){if(this._geocoderElems[i]){this._geocoderElems[i].focus()}else{document.activeElement.blur()}}})})()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./geocoder-element":52,"./waypoint":61}],61:[function(_dereq_,module,exports){(function(global){(function(){"use strict";var L=typeof window!=="undefined"?window["L"]:typeof global!=="undefined"?global["L"]:null;module.exports=L.Class.extend({options:{allowUTurn:false},initialize:function(latLng,name,options){L.Util.setOptions(this,options);this.latLng=L.latLng(latLng);this.name=name}})})()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}]},{},[53]);
2181
2182(function (L) {
2183  if (!L) return;
2184
2185  /**
2186   * ----------------------------------------
2187   * MARKER EXTENSIONS
2188   * ----------------------------------------
2189   */
2190
2191  // Save original setIcon method for safe override
2192  if (!L.Marker.prototype._setIconOriginal) {
2193    L.Marker.prototype._setIconOriginal = L.Marker.prototype.setIcon;
2194  }
2195
2196  // Extend L.Marker with Google Maps–like methods
2197  L.Marker.include({
2198
2199    /**
2200     * Mimics Google Maps setMap() to add or remove marker from map.
2201     */
2202    setMap: function (map) {
2203      if (map) {
2204        this._mapRef = map;
2205        this.addTo(map);
2206        this._visible = true;
2207      } else if (this._mapRef) {
2208        this._mapRef.removeLayer(this);
2209        this._visible = false;
2210      }
2211    },
2212
2213    /**
2214     * Show or hide marker on map.
2215     */
2216    setVisible: function (show) {
2217      if (!this._mapRef && this._map) {
2218        this._mapRef = this._map;
2219      }
2220
2221      if (show) {
2222        this._mapRef && this.addTo(this._mapRef);
2223        this._visible = true;
2224      } else if (this._mapRef) {
2225        this._mapRef.removeLayer(this);
2226        this._visible = false;
2227      }
2228    },
2229
2230    /**
2231     * Return true if marker is currently visible.
2232     */
2233    getVisible: function () {
2234      return !!this._visible;
2235    },
2236
2237    /**
2238     * Returns current position of the marker.
2239     */
2240    getPosition: function () {
2241      return this.getLatLng();
2242    },
2243
2244    /**
2245     * Sets marker position to the given latlng.
2246     */
2247    setPosition: function (latlng) {
2248      return this.setLatLng(latlng);
2249    },
2250
2251    /**
2252     * Binds a reference to the map, used internally for visibility.
2253     */
2254    bindMap: function (map) {
2255      this._mapRef = map;
2256      this._visible = true;
2257    },
2258
2259    /**
2260     * Apply animation classes (limited to CSS classes like bounce).
2261     */
2262    setAnimation: function (animationType) {
2263      const el = this._icon;
2264      if (!el) return;
2265
2266      el.classList.remove('leaflet-bounce-animation');
2267
2268      if (animationType === 'bounce') {
2269        el.classList.add('leaflet-bounce-animation');
2270      }
2271    },
2272
2273    /**
2274     * Safe override of setIcon to accept URL strings (like Google).
2275     */
2276    setIcon: function (icon) {
2277      // If icon is a string, convert to default L.icon
2278      if (typeof icon === 'string') {
2279        icon = L.icon({
2280          iconUrl: icon,
2281          iconSize: [32, 32],
2282          iconAnchor: [16, 32],
2283          popupAnchor: [0, -55]
2284        });
2285      }
2286  
2287      // If icon is an object with Google-style format
2288      if (icon && icon.url) {
2289        const size = icon.scaledSize || [32, 32];
2290        icon = L.icon({
2291          iconUrl: icon.url,
2292          iconSize: size,
2293          iconAnchor: [size[0] / 2, size[1]],
2294          popupAnchor: [0, -Math.max(40, size[1])]
2295        });
2296      }
2297  
2298      return this._setIconOriginal(icon);
2299    }
2300  });
2301
2302  /**
2303   * ----------------------------------------
2304   * POPUP EXTENSIONS
2305   * ----------------------------------------
2306   */
2307  L.Popup.include({
2308
2309    /**
2310     * Opens popup at marker position on given map (Google-style).
2311     */
2312    open: function (map, marker) {
2313      if (!map || !marker) return this;
2314
2315      const latlng = marker.getLatLng();
2316      this.setLatLng(latlng);
2317
2318      if (!this._map) {
2319        map.openPopup(this);
2320      }
2321
2322      return this;
2323    },
2324
2325    /**
2326     * Closes popup from its parent map.
2327     */
2328    close: function () {
2329      if (this._map) {
2330        this._map.closePopup(this);
2331      }
2332    }
2333  });
2334
2335  /**
2336   * ----------------------------------------
2337   * POLYLINE EXTENSIONS
2338   * ----------------------------------------
2339   */
2340  if (L.Polyline) {
2341    L.Polyline.include({
2342
2343      /**
2344       * Mimics Google Maps Polyline setMap() method.
2345       */
2346      setMap: function (map) {
2347        if (map) {
2348          if (!map.hasLayer(this)) {
2349            this.addTo(map);
2350          }
2351        } else if (this._map) {
2352          this._map.removeLayer(this);
2353        }
2354      }
2355    });
2356  }
2357
2358  /**
2359   * ----------------------------------------
2360   * MAP EXTENSIONS
2361   * ----------------------------------------
2362   */
2363  L.Map.include({
2364
2365    /**
2366     * Placeholder for setOptions() (noop for Leaflet).
2367     */
2368    setOptions: function (options) {
2369      console.warn('setOptions() called in Leaflet. This method does nothing.');
2370      return this;
2371    },
2372
2373    /**
2374     * Mimics Google Maps setCenter(), accepting [lat, lng] or LatLng object.
2375     */
2376    setCenter: function (position) {
2377      if (!position) return;
2378
2379      const latlng = Array.isArray(position)
2380        ? L.latLng(position[0], position[1])
2381        : position;
2382
2383      this.panTo(latlng);
2384    }
2385  });
2386
2387})(window.L);
2388
2389/**
2390 * WpgmpBaseMaps class - provides shared map functionality.
2391 */
2392(function ($, window, document) {
2393
2394class WpgmpBaseMaps {
2395  constructor(element, map_data = {},places = []) {
2396    var options;
2397    this.element = element;
2398    this.map_data = $.extend({}, {}, map_data);
2399    options = this.map_data.map_options;
2400    this.settings = $.extend({
2401        "min_zoom": "0",
2402        "max_zoom": "19",
2403        "zoom": "5",
2404        "map_type_id": "ROADMAP",
2405        "scroll_wheel": true,
2406        "map_visual_refresh": false,
2407        "full_screen_control": false,
2408        "full_screen_control_position": "BOTTOM_RIGHT",
2409        "zoom_control": true,
2410        "zoom_control_style": "SMALL",
2411        "zoom_control_position": "TOP_LEFT",
2412        "camera_control_position" : "BOTTOM_RIGHT",
2413        "map_type_control": true,
2414        "map_type_control_style": "HORIZONTAL_BAR",
2415        "map_type_control_position": "RIGHT_TOP",
2416        "scale_control": true,
2417        "street_view_control": true,
2418        "street_view_control_position": "TOP_LEFT",
2419        "overview_map_control": true,
2420        "camera_control": true,
2421        "center_lat": "40.6153983",
2422        "center_lng": "-74.2535216",
2423        "draggable": true,
2424        "gesture": "auto",
2425    }, {}, options);
2426    this.container = $("div[rel='" + $(this.element).attr("id") + "']");
2427    $(document).find(".wpgmp_map_container_placeholder").remove();
2428    $(document).find(".wpgmp_hide_map_container").removeClass("wpgmp_hide_map_container");
2429
2430    
2431    this.drawingmanager = {};
2432    this.places = [];
2433    this.show_places = [];
2434    this.places_for_category_tabs = [];
2435    this.categories = {};
2436    this.tabs = [];
2437    this.all_shapes = [];
2438    this.wpgmp_polylines = [];
2439    this.wpgmp_polygons = [];
2440    this.wpgmp_circles = [];
2441    this.wpgmp_shape_events = [];
2442    this.wpgmp_rectangles = [];
2443    this.per_page_value = 0;
2444    this.last_remove_cat_id = '';
2445    this.last_selected_cat_id = '';
2446    this.last_category_chkbox_action = '';
2447    this.current_amenities = [];
2448    this.route_directions = [];
2449    this.search_area = '';
2450    this.filter_position = '';
2451    this.filter_content = '';
2452    this.markerClusterer = null;
2453    this.url_filters = [];
2454    this.wpgmp_search_form = '';
2455    this.enable_search_term = false;
2456    this.search_term = '';
2457    this.filters = {};
2458    this.addonInfo = [];
2459  }
2460
2461  // -----------------------------
2462  // 🌀 Lifecycle
2463  // -----------------------------
2464  init() { 
2465
2466    var map_obj = this;
2467
2468  }
2469  map_loaded() { }
2470  /**
2471 * Resizes and re-centers the map
2472 * Preserves the zoom level and current center position
2473 */
2474resize_map() {
2475  const map_obj = this;
2476  const isGoogle = map_obj.isMapProvider("google");
2477  const map = map_obj.map;
2478
2479  if (!map) return;
2480
2481  const center = map.getCenter();
2482  const zoom = map.getZoom();
2483
2484  if (isGoogle) {
2485    google.maps.event.trigger(map, "resize");
2486    map.setCenter(center);
2487    map.setZoom(zoom);
2488  } else {
2489    setTimeout(() => {
2490      map.invalidateSize(true);
2491      map.setView(center, zoom);
2492    }, 200);
2493  }
2494}
2495
2496  responsive_map() {
2497    const map_obj = this;
2498    const isGoogle = map_obj.isMapProvider("google");
2499    const map = map_obj.map;
2500  
2501    window.addEventListener("resize", function () {
2502      const zoom = map.getZoom();
2503      const center = map.getCenter();
2504  
2505      if (isGoogle) {
2506        google.maps.event.trigger(map, "resize");
2507        map.setZoom(zoom);
2508        map.setCenter(center);
2509        map.getBounds();
2510        if (map_obj.map_data.marker_cluster) {
2511          map_obj.set_marker_cluster();
2512        }
2513      } else {
2514        setTimeout(() => {
2515          map.invalidateSize(true);
2516          map.setView(center, zoom);
2517        }, 200);
2518      }
2519    });
2520  } 
2521  
2522
2523  // -----------------------------
2524  // 📍 Marker Management
2525  // -----------------------------
2526  createMarker() { }
2527  marker_bind(marker, handler) {
2528    const map_obj = this;
2529  
2530    // If no handler is provided, use default logic
2531    const defaultHandler = function () {
2532      const position = map_obj.isMapProvider("google")
2533        ? marker.getPosition()
2534        : marker.getLatLng();
2535  
2536      const lat = map_obj.isMapProvider("google") ? position.lat() : position.lat;
2537      const lng = map_obj.isMapProvider("google") ? position.lng() : position.lng;
2538  
2539      map_obj.wpgmp_geocode(lat, lng).then((result) => {
2540        $("#googlemap_address").val(result.address);
2541        $(".google_latitude").val(result.latitude);
2542        $(".google_longitude").val(result.longitude);
2543        $(".google_city").val(result.city);
2544        $(".google_state").val(result.state);
2545        $(".google_country").val(result.country);
2546        $(".google_postal_code").val(result.postal_code);
2547      }).catch((err) => {
2548        console.error(err);
2549      });
2550    };
2551  
2552    const dragendHandler = handler || defaultHandler;
2553  
2554    if (map_obj.isMapProvider("google")) {
2555      google.maps.event.addListener(marker, "dragend", dragendHandler);
2556    } else {
2557      marker.on("dragend", dragendHandler);
2558    }
2559  }
2560    
2561  create_markers() {
2562    const map_obj = this;
2563    const isGoogle = map_obj.isMapProvider("google");
2564    const places = map_obj.map_data.places;
2565    const remove_keys = [];
2566    const spiderfier_enabled = map_obj.map_data.map_marker_spiderfier_setting?.marker_spiderfy === "true";
2567    let oms;
2568  
2569    if (isGoogle && spiderfier_enabled) {
2570      let oms_args = {
2571        markersWontMove: true,
2572        markersWontHide: true,
2573        basicFormatEvents: true,
2574        keepSpiderfied: true,
2575      };
2576  
2577      if (map_obj.map_data.map_marker_spiderfier_setting.marker_enable_spiral === "true") {
2578        oms_args.circleSpiralSwitchover = map_obj.map_data.map_marker_spiderfier_setting.minimum_markers;
2579      }
2580  
2581      oms = new OverlappingMarkerSpiderfier(map_obj.map, oms_args);
2582    }
2583       
2584    $.each(places, function (key, place) {
2585      if (!(place.location.lat && place.location.lng)) {
2586        remove_keys.push(key);
2587        return;
2588      }
2589  
2590      place.categories ??= {};
2591      place.location.icon ??= map_obj.settings.marker_default_icon;
2592  
2593      // Create marker
2594      if (isGoogle) {
2595        
2596        place.marker = map_obj.create_google_marker({
2597          map: map_obj.map,
2598          position: place.location,
2599          iconUrl: place.location.icon,
2600          draggable: place.location.draggable,
2601          clickable: place.location.infowindow_disable,
2602        });
2603
2604        place.marker.bindMap(map_obj.map);
2605        place.marker.setVisible(true);
2606  
2607        if (map_obj.settings.infowindow_drop_animation || place.location.animation === "DROP") {
2608          place.marker.setAnimation(google.maps.Animation.DROP);
2609        }
2610        if (place.location.animation === "BOUNCE1") {
2611          place.marker.setAnimation(google.maps.Animation.BOUNCE);
2612        }
2613
2614        if (map_obj.settings.infowindow_filter_only) {
2615          place.marker.setVisible(false);
2616        }
2617
2618      } else {
2619
2620        place.marker = map_obj.create_leaflet_marker({
2621          map: map_obj.map,
2622          position: [parseFloat(place.location.lat), parseFloat(place.location.lng)],
2623          iconUrl: place.location.icon,
2624          draggable: place.location.draggable,
2625        });
2626
2627        place.marker.addTo(map_obj.map);
2628        place.marker.setVisible(true);
2629  
2630        if (map_obj.settings.infowindow_filter_only) {
2631          place.marker.setVisible(false);
2632        }
2633  
2634        if (place.location.infowindow_disable || place.source !== "manual") {
2635          place.marker.bindPopup(place.content);
2636        }
2637        
2638      }
2639  
2640      // 🪢 Marker bind if editing
2641      if (map_obj.map_data.page === "edit_location") {
2642        map_obj.marker_bind(place.marker);
2643      }
2644  
2645      // Infowindow content replacement
2646      const location_categories = Object.values(place.categories).map(cat => "<div class='fc-badge'>"+cat.name+"</div>");
2647      const marker_image = place.source === "post"
2648        ? place.location.extra_fields.post_featured_image
2649        : place.location.marker_image;
2650  
2651      let template = place.source === "post"
2652        ? map_obj.settings.infowindow_geotags_setting
2653        : map_obj.settings.infowindow_setting;
2654  
2655      const post_info_class = place.source === "post"
2656      ? `wpgmp_infowindow_post fc-infobox-${map_obj.settings.infowindow_post_skin.name} fc-item-${map_obj.settings.infowindow_post_skin.name}`
2657      : `fc-infobox-${map_obj.settings.infowindow_skin?.name} fc-infowindow-${map_obj.settings.infowindow_skin?.name || "default"}`;
2658
2659  
2660      template ??= place.content;
2661  
2662      const replaceData = {
2663        "{marker_id}": place.id,
2664        "{marker_title}": place.title,
2665        "{marker_address}": place.address,
2666        "{marker_latitude}": place.location.lat,
2667        "{marker_longitude}": place.location.lng,
2668        "{marker_city}": place.location.city,
2669        "{marker_state}": place.location.state,
2670        "{marker_country}": place.location.country,
2671        "{marker_postal_code}": place.location.postal_code,
2672        "{marker_zoom}": place.location.zoom,
2673        "{marker_icon}": place.location.icon,
2674        "{marker_category}": location_categories.join(""),
2675        "{marker_message}": place.content,
2676        "{marker_image}": marker_image,
2677        "{get_directions_link}": `https://www.google.com/maps/place/${parseFloat(place.location.lat)},${parseFloat(place.location.lng)}`
2678      };
2679  
2680      // Inject extra fields
2681      if (place.location.extra_fields) {
2682        for (const [key, val] of Object.entries(place.location.extra_fields)) {
2683          replaceData[`{${key}}`] = val || "<div class='wpgmp_empty'>wpgmp_empty</div>";
2684        }
2685      }
2686  
2687      template = template.replace(/{#if (.*?)}([\s\S]*?){\/if}/g, (_, key, content) => {
2688        const val = replaceData[`{${key}}`];
2689        return val && val !== "<div class='wpgmp_empty'>wpgmp_empty</div>" ? content : "";
2690      });
2691  
2692      if (map_obj.map_data.map_options.link_extra_field) {
2693        const anchor_tag = map_obj.map_data.map_options.link_extra_field;
2694        for (const prop_an in anchor_tag) {
2695          if (replaceData[prop_an] && replaceData[prop_an] !== "<div class='wpgmp_empty'>wpgmp_empty</div>") {
2696            template = template.replace(prop_an, anchor_tag[prop_an]);
2697          }
2698        }
2699      }
2700  
2701      for (const prop in replaceData) {
2702        template = template.replaceAll(prop, replaceData[prop] ?? "");
2703      }
2704  
2705      const tempObject = $("<div/>").html(template);
2706      tempObject.find(".wpgmp_extra_field:contains('wpgmp_empty')").remove();
2707      tempObject.find(".wpgmp_empty").prev().remove();
2708      tempObject.find(".wpgmp_empty").remove();
2709  
2710      let content = tempObject.prop("outerHTML") || "";
2711  
2712      if (map_obj.settings.map_infowindow_customisations && map_obj.settings.show_infowindow_header) {
2713        content = `<div class="wpgmp_infowindow ${post_info_class}"><div class="wpgmp_iw_head"><div class="wpgmp_iw_head_content">${place.title}</div></div><div class="wpgmp_iw_content">${content}</div></div>`;
2714      } else {
2715        content = `<div class="wpgmp_infowindow ${post_info_class}"><div class="wpgmp_iw_content">${content}</div></div>`;
2716      }
2717  
2718      place.infowindow_data = content;
2719      place.infowindow = map_obj.infowindow_marker;
2720  
2721      
2722  
2723      let on_event = map_obj.settings.infowindow_open_event;
2724      if (map_obj.isMobile) on_event = "click";
2725      if (oms && on_event === "click") on_event = "spider_click";
2726  
2727
2728      if (map_obj.useAdvancedMarker && place.marker?.content && on_event == 'mouseover') {
2729        const content = place.marker.content;
2730      
2731        content.addEventListener(on_event, function () {
2732      
2733          map_obj.places.forEach(p => {
2734            p.infowindow?.close?.();
2735            p.marker?.setAnimation?.(null);
2736          });
2737      
2738          map_obj.openInfoWindow(place);
2739      
2740          if (map_obj.settings.infowindow_bounce_animation === on_event) {
2741            map_obj.toggle_bounce(place.marker);
2742          }
2743        });
2744      } else {
2745        // Fallback for classic markers (already working for you)
2746        map_obj.event_listener(place.marker, on_event, function () {
2747
2748          map_obj.places.forEach(p => {
2749            p.infowindow?.close?.();
2750            p.marker?.setAnimation?.(null);
2751          });
2752      
2753          map_obj.openInfoWindow(place);
2754      
2755          if (map_obj.settings.infowindow_bounce_animation === on_event) {
2756            map_obj.toggle_bounce(place.marker);
2757          }
2758        });
2759      }
2760      
2761  
2762      if (oms) oms.addMarker(place.marker);
2763  
2764      if (on_event === "mouseover") {
2765        map_obj.event_listener(place.marker, "click", function () {
2766          if (map_obj.settings.infowindow_click_change_zoom > 0) {
2767            map_obj.map.setZoom(map_obj.settings.infowindow_click_change_zoom);
2768          }
2769          if (map_obj.settings.infowindow_click_change_center) {
2770            map_obj.map.setCenter(place.marker.getPosition());
2771          }
2772        });
2773      }
2774  
2775      if (map_obj.settings.infowindow_bounce_animation === "mouseover" && on_event !== "mouseover") {
2776        map_obj.event_listener(place.marker, "mouseover", function () {
2777          place.marker.setAnimation("bounce");
2778        });
2779        map_obj.event_listener(place.marker, "mouseout", function () {
2780          place.marker.setAnimation(null);
2781        });
2782      }
2783  
2784      if (map_obj.settings.infowindow_bounce_animation) {
2785        if (isGoogle) {
2786          google.maps.event.addListener(place.infowindow, "closeclick", function () {
2787            place.marker.setAnimation(null);
2788          });
2789        }
2790      }
2791      
2792      if (place.location.infowindow_default_open || map_obj.settings.default_infowindow_open) {
2793        setTimeout(function(){
2794          map_obj.openInfoWindow(place);
2795        },500)
2796      }
2797      map_obj.places.push(place);
2798    });
2799  
2800    remove_keys.forEach(key => delete places[key]);
2801  }
2802  
2803  display_markers() {
2804    const map_obj = this;
2805  
2806    map_obj.show_places = [];
2807    const categories = {};
2808  
2809    for (const place of map_obj.places) {
2810  
2811      if (map_obj.settings.infowindow_filter_only === true) {
2812        place.marker.setVisible(false);
2813      } else {
2814        place.marker.setVisible(true);
2815        map_obj.show_places.push(place);
2816      }
2817  
2818      if (place.categories) {
2819        $.each(place.categories, (_, category) => {
2820          if (!categories[category.name]) {
2821            categories[category.name] = category;
2822          }
2823        });
2824      }
2825    }
2826  
2827    map_obj.categories = categories;
2828  }
2829  placeMarker(lat, lng) {
2830    const map_obj = this;
2831    const isGoogle = map_obj.isMapProvider("google");
2832    const position = isGoogle
2833      ? {"lat":lat,"lng":lng}
2834      : L.latLng(lat, lng);
2835    // 🗑️ Remove existing marker (Leaflet: setMap(null), Google: setMap(null))
2836    if (map_obj.searchMarker) {
2837      map_obj.searchMarker.setMap(null);
2838    }
2839  
2840    // Create new marker
2841    if (isGoogle) {
2842      
2843      map_obj.searchMarker = map_obj.create_google_marker({
2844        map: map_obj.map,
2845        position,
2846        iconUrl: map_obj.settings.marker_default_icon || '',
2847        draggable: true,
2848        anchorPoint: { x: 0, y: -29 },
2849      });
2850      
2851
2852    } else {
2853
2854      map_obj.searchMarker = map_obj.create_leaflet_marker({
2855        map: map_obj.map,
2856        position,
2857        iconUrl: map_obj.settings.marker_default_icon || "",
2858        draggable: true,
2859      });
2860
2861      
2862    }
2863  
2864    // Add to map using .setMap()
2865    map_obj.searchMarker.setMap(map_obj.map);
2866  
2867    // ind marker events if defined
2868    if (typeof map_obj.marker_bind === "function") {
2869      map_obj.marker_bind(map_obj.searchMarker);
2870    }
2871  
2872    // Center and zoom
2873    map_obj.map.setCenter(position);
2874    map_obj.map.setZoom(17);
2875  }
2876  
2877  toggle_bounce(marker) {
2878    const isGoogle = this.isMapProvider("google");
2879    if (isGoogle) {
2880      if (marker.getAnimation() !== null) {
2881        marker.setAnimation(null);
2882      } else {
2883        marker.setAnimation(google.maps.Animation.BOUNCE);
2884      }
2885    } else {
2886      const el = marker._icon;
2887      if (!el) return;
2888      const className = 'leaflet-bounce-animation';
2889      if (el.classList.contains(className)) {
2890        el.classList.remove(className);
2891      } else {
2892        el.classList.add(className);
2893      }
2894    }
2895  }
2896  show_center_circle() {
2897    const map_obj = this;
2898    const isGoogle = map_obj.isMapProvider("google");
2899  
2900    if (!map_obj.settings.center_circle_radius) {
2901      map_obj.settings.center_circle_radius = 5;
2902    }
2903  
2904    const radiusInMeters = parseInt(map_obj.settings.center_circle_radius) * 1000;
2905    const center = map_obj.map.getCenter();
2906  
2907    if (isGoogle) {
2908      map_obj.set_center_circle = new google.maps.Circle({
2909        map: map_obj.map,
2910        center: center,
2911        fillColor: map_obj.settings.center_circle_fillcolor,
2912        fillOpacity: map_obj.settings.center_circle_fillopacity,
2913        strokeColor: map_obj.settings.center_circle_strokecolor,
2914        strokeOpacity: map_obj.settings.center_circle_strokeopacity,
2915        strokeWeight: map_obj.settings.center_circle_strokeweight,
2916        radius: radiusInMeters
2917      });
2918    } else {
2919      map_obj.set_center_circle = L.circle(center, {
2920        fillColor: map_obj.settings.center_circle_fillcolor,
2921        fillOpacity: map_obj.settings.center_circle_fillopacity,
2922        color: map_obj.settings.center_circle_strokecolor,
2923        opacity: map_obj.settings.center_circle_strokeopacity,
2924        weight: map_obj.settings.center_circle_strokeweight,
2925        radius: radiusInMeters
2926      }).addTo(map_obj.map);
2927    }
2928  }
2929  
2930  /**
2931 * Adds a marker to the center of the map and binds an optional infowindow
2932 */
2933show_center_marker() {
2934  const map_obj = this;
2935  const isGoogle = map_obj.isMapProvider("google");
2936  const center = map_obj.map.getCenter();
2937  const hasInfo = map_obj.settings.center_marker_infowindow !== "";
2938
2939  if (isGoogle) {
2940
2941    map_obj.map_center_marker = map_obj.create_google_marker({
2942      map: map_obj.map,
2943      position: {lat:center.lat(),lng:center.lng()},
2944      title: map_obj.settings.center_marker_infowindow,
2945      iconUrl: map_obj.settings.center_marker_icon,
2946      clickable: hasInfo,
2947    });
2948    
2949
2950    if (!map_obj.map_center_info) {
2951      map_obj.map_center_info = map_obj.infowindow_marker;
2952    }
2953
2954    if (hasInfo) {
2955      google.maps.event.addListener(map_obj.map_center_marker, "click", function () {
2956        map_obj.map_center_info.setPosition(center);
2957        const content = map_obj.settings.map_infowindow_customisations === true
2958          ? `<div class='fc-infobox-root'><div class='fc-infobox'><div class='fc-infobox-body'>${map_obj.settings.center_marker_infowindow}</div></div></div>`
2959          : map_obj.settings.center_marker_infowindow;
2960        map_obj.map_center_info.setContent(content);
2961        map_obj.map_center_info.open(map_obj.map, this);
2962      });
2963    }
2964  } else {
2965    
2966    map_obj.map_center_marker = map_obj.create_leaflet_marker({
2967      map: map_obj.map,
2968      position: center,
2969      iconUrl: map_obj.settings.center_marker_icon,
2970      draggable: true,
2971    });
2972    
2973
2974    if (!map_obj.map_center_info) {
2975      map_obj.map_center_info = map_obj.infowindow_marker;
2976    }
2977
2978    if (hasInfo) {
2979      map_obj.event_listener(map_obj.map_center_marker, "click", function () {
2980        const content = `<div class='fc-infobox-root'><div class='fc-infobox'><div class='fc-infobox-body'>${map_obj.settings.center_marker_infowindow}</div></div></div>`;
2981        const latlng = map_obj.map.getCenter();
2982        map_obj.map_center_info.setContent(content).setLatLng(latlng).openOn(map_obj.map);
2983      });
2984    }
2985  }
2986}
2987
2988  // Unified version to center the map based on user's current location
2989center_by_nearest() {
2990  const map_obj = this;
2991  const isGoogle = map_obj.isMapProvider("google");
2992
2993  this.get_current_location(
2994    function (user_position) {
2995      if (!map_obj.user_location_marker) {
2996        if (isGoogle) {
2997
2998          map_obj.user_location_marker = map_obj.create_google_marker({
2999            map: map_obj.map,
3000            position: {"lat":user_position.lat(),"lng":user_position.lng()},
3001            title: wpgmp_local.center_location_message,
3002            iconUrl: map_obj.map_data.map_options.center_marker_icon,
3003          });
3004
3005          
3006        } else {
3007
3008          map_obj.user_location_marker = map_obj.create_leaflet_marker({
3009            map: map_obj.map,
3010            position: user_position,
3011            iconUrl: map_obj.settings.center_marker_icon,
3012            title: wpgmp_local.center_location_message,
3013          });
3014          
3015
3016        }
3017      }
3018
3019      if (!map_obj.map_center_info) {
3020        map_obj.map_center_info = map_obj.infowindow_marker;
3021      }
3022
3023      if (map_obj.settings.center_marker_infowindow !== "") {
3024        const showInfo = function () {
3025          const content = map_obj.settings.map_infowindow_customisations
3026            ? `<div class='wpgmp_infowindow'><div class='wpgmp_iw_content'>${map_obj.settings.center_marker_infowindow}</div></div>`
3027            : map_obj.settings.center_marker_infowindow;
3028
3029          if (isGoogle) {
3030            map_obj.map_center_info.setPosition(user_position);
3031            map_obj.map_center_info.setContent(content);
3032            map_obj.map_center_info.open(map_obj.map, map_obj.user_location_marker);
3033          } else {
3034            map_obj.map_center_info.setContent(content);
3035            map_obj.map_center_info.setLatLng(user_position).openOn(map_obj.map);
3036          }
3037        };
3038
3039        if (isGoogle) {
3040          google.maps.event.addListener(map_obj.user_location_marker, "click", showInfo);
3041        } else {
3042          map_obj.event_listener(map_obj.user_location_marker, "click", showInfo);
3043        }
3044      }
3045
3046      if (isGoogle) {
3047        map_obj.map.setCenter(user_position);
3048      } else {
3049        map_obj.map.setView(user_position, map_obj.settings.zoom);
3050      }
3051
3052      if (map_obj.settings.show_center_circle === true) {
3053        map_obj.show_center_circle();
3054      }
3055
3056      if (
3057        map_obj.map_data.listing &&
3058        map_obj.map_data.listing.apply_default_radius === true
3059      ) {
3060        map_obj.search_area = user_position;
3061      }
3062    },
3063    function (user_position) {
3064      // Fallback on error with same logic
3065      if (!map_obj.user_location_marker) {
3066        map_obj.user_location_marker = L.marker(user_position, {
3067          icon: L.icon({
3068            iconUrl: map_obj.settings.center_marker_icon,
3069            iconAnchor: [16, 32],
3070            popupAnchor: [0, -30]
3071          }),
3072          title: wpgmp_local.center_location_message
3073        }).addTo(map_obj.map);
3074      }
3075
3076      if (!map_obj.map_center_info) {
3077        map_obj.map_center_info = map_obj.infowindow_marker;
3078      }
3079
3080      if (map_obj.settings.center_marker_infowindow !== "") {
3081        map_obj.event_listener(map_obj.user_location_marker, "click", function () {
3082          const content = `<div class='wpgmp_infowindow'><div class='wpgmp_iw_content'>${map_obj.settings.center_marker_infowindow}</div></div>`;
3083          map_obj.map_center_info.setContent(content);
3084          map_obj.map_center_info.setLatLng(user_position).openOn(map_obj.map);
3085        });
3086      }
3087
3088      map_obj.map.panTo(user_position);
3089
3090      if (map_obj.settings.show_center_circle === true) {
3091        map_obj.show_center_circle();
3092      }
3093
3094      if (
3095        map_obj.map_data.listing &&
3096        map_obj.map_data.listing.apply_default_radius === true
3097      ) {
3098        map_obj.search_area = user_position;
3099      }
3100    }
3101  );
3102} 
3103
3104  /**
3105 * Adjusts the map viewport to fit all visible markers
3106 */
3107fit_bounds() {
3108  const map_obj = this;
3109  const isGoogle = map_obj.isMapProvider("google");
3110  const places = map_obj.map_data.places || [];
3111  let bounds;
3112  if (places.length === 0) return;
3113
3114  if (isGoogle) {
3115    bounds = new google.maps.LatLngBounds();
3116    places.forEach((place) => {
3117      if (place.location.lat && place.location.lng) {
3118        bounds.extend(new google.maps.LatLng(
3119          parseFloat(place.location.lat),
3120          parseFloat(place.location.lng)
3121        ));
3122      }
3123    });
3124    map_obj.map.fitBounds(bounds);
3125  } else {
3126    bounds = new L.LatLngBounds();
3127    places.forEach((place) => {
3128      if (place.location.lat && place.location.lng) {
3129        bounds.extend(L.latLng(
3130          parseFloat(place.location.lat),
3131          parseFloat(place.location.lng)
3132        ));
3133      }
3134    });
3135    map_obj.map.fitBounds(bounds);
3136  }
3137
3138  // Set center marker and circle to bounds center
3139  const center = isGoogle ? bounds.getCenter() : bounds.getCenter();
3140
3141  if (map_obj.map_center_marker) {
3142    map_obj.map_center_marker.setPosition(center);
3143  }
3144
3145  if (map_obj.set_center_circle) {
3146    if (isGoogle ) {
3147      map_obj.set_center_circle.setCenter(center);
3148    } else {
3149      map_obj.set_center_circle.setLatLng(center);
3150    }
3151  }
3152} 
3153
3154  open_infowindow(current_place_id) {
3155    const map_obj = this;
3156    const isGoogle = map_obj.isMapProvider("google");
3157    const open_event = map_obj.settings.infowindow_open_event || 'click';
3158    const zoom = parseInt(map_obj.settings.infowindow_click_change_zoom);
3159    const shouldZoom = !isNaN(zoom) && zoom > 0;
3160    const shouldCenter = map_obj.settings.infowindow_click_change_center === true;
3161  
3162    const all_places = map_obj.map_data.places || [];
3163  
3164    for (const place of all_places) {
3165      const marker = place.marker;
3166  
3167      if (!marker || marker.getVisible?.() === false) continue;
3168  
3169      // If this is the target place
3170      if (parseInt(place.id) === parseInt(current_place_id)) {
3171        if (shouldZoom) {
3172          map_obj.map.setZoom(zoom);
3173        }
3174  
3175        if (shouldCenter) {
3176          map_obj.map.setCenter(marker.getPosition());
3177        }
3178  
3179        // Trigger the configured open event
3180        if (isGoogle) {
3181          google.maps.event.trigger(marker, open_event);
3182        } else {
3183          marker.fire(open_event);
3184        }
3185      }
3186    }
3187  }
3188  openInfoWindow(place) {
3189    const map_obj = this;
3190    const isGoogle = map_obj.isMapProvider("google");
3191    let skin = "default";
3192  
3193    if (place.source === "post") {
3194      skin = map_obj.settings.infowindow_post_skin?.name || "default";
3195    } else if (
3196      map_obj.map_data.page !== "edit_location" &&
3197      map_obj.settings.infowindow_skin
3198    ) {
3199      skin = map_obj.settings.infowindow_skin.name;
3200    }
3201  
3202    // Handle redirect actions
3203    const action = place.location.onclick_action;
3204    const openInNewTab = place.location.open_new_tab === "yes";
3205    if (action === "post") {
3206      window.open(place.location.redirect_permalink, openInNewTab ? "_blank" : "_self");
3207      return;
3208    } else if (action === "custom_link") {
3209      window.open(place.location.redirect_custom_link, openInNewTab ? "_blank" : "_self");
3210      return;
3211    }
3212  
3213    // Infowindow logic
3214    if (isGoogle && skin !== "default") {
3215      const infoboxText = document.createElement("div");
3216      infoboxText.className = "wpgmp_infobox wpgmp-infowindow-addon";
3217      infoboxText.innerHTML = place.infowindow_data;
3218  
3219      place.infowindow = map_obj.infobox;
3220      place.infowindow.setOptions({
3221        content: infoboxText,
3222        disableAutoPan: false,
3223        alignBottom: true,
3224        maxWidth: 0,
3225        zIndex: null,
3226        closeBoxMargin: "0",
3227        closeBoxURL: "",
3228        infoBoxClearance: new google.maps.Size(25, 25),
3229        isHidden: false,
3230        pane: "floatPane",
3231        enableEventPropagation: false,
3232      });
3233
3234      const mapOptions = map_obj?.map_data?.map_options || {};
3235      let width = "100%";
3236      if( map_obj.settings.map_infowindow_customisations ) {
3237        width = mapOptions.infowindow_width || '100%';
3238      }
3239      const markerSize = map_obj.getMarkerSize?.() || [32, 32];
3240
3241      // Calculate offsetX
3242      let offsetX = -175;
3243      if (width !== '100%') {
3244        const numericWidth = parseInt(width);
3245        if (!isNaN(numericWidth)) {
3246          offsetX = -(numericWidth / 2);
3247        }
3248      }
3249
3250      // Calculate offsetY based on marker height
3251      const markerHeight = parseInt(markerSize[1]) || 32;
3252      const offsetY = -(markerHeight) -15;
3253      // Apply offset to infowindow
3254      
3255      place.infowindow.setOptions({
3256        pixelOffset: new google.maps.Size(offsetX, offsetY),
3257      });
3258
3259    } else {
3260
3261      let offsetX = 0;
3262      const markerSize = map_obj.getMarkerSize?.() || [32, 32];
3263      const markerHeight = parseInt(markerSize[1]) || 32;
3264      const offsetY = -(markerHeight / 2);
3265      place.infowindow = isGoogle
3266        ? map_obj.infowindow_marker
3267        : L.popup({offset:[offsetX,offsetY]});
3268  
3269      place.infowindow.setContent(place.infowindow_data);
3270    }
3271  
3272    // Open infowindow
3273    place.infowindow.open(map_obj.map, place.marker);
3274  
3275    // Move to marker if configured
3276    if (map_obj.settings.infowindow_click_change_center) {
3277      map_obj.map.setCenter(place.marker.getPosition());
3278    }
3279  
3280    if (
3281      map_obj.settings.infowindow_click_change_zoom &&
3282      map_obj.settings.infowindow_click_change_zoom > 0
3283    ) {
3284      map_obj.map.setZoom(map_obj.settings.infowindow_click_change_zoom);
3285      map_obj.map.setCenter(place.marker.getPosition());
3286    }
3287  
3288    // Autofill directions
3289    if (
3290      map_obj.map_data.map_tabs?.direction_tab?.dir_tab === true
3291    ) {
3292      $(map_obj.container).find(".start_point").val(place.address);
3293      $(map_obj.container).find(".start_point").data("longitude", place.location.lng);
3294      $(map_obj.container).find(".start_point").data("latitude", place.location.lat);
3295    }
3296  
3297    // Cleanup
3298    $(map_obj.container).find(".wpgmp_extra_field:contains('wpgmp_empty')").remove();
3299    $(map_obj.container).find(".wpgmp_empty").prev().remove();
3300    $(map_obj.container).find(".wpgmp_empty").remove();
3301
3302    // Dispatch marker click event for addons to hook into
3303    $(document).trigger("wpgmp_marker_clicked", [this, place]);
3304
3305  }
3306  create_element(controlDiv, map, html_element) {
3307
3308    // Set CSS for the control border
3309    controlDiv.className = 'wpgmp-control-outer';
3310    var controlUI = document.createElement('div');
3311    controlUI.className = 'wpgmp-control-inner';
3312    controlDiv.appendChild(controlUI);
3313
3314    // Set CSS for the control interior
3315    var controlText = document.createElement('div');
3316    controlText.className = 'wpgmp-control-content';
3317    controlText.innerHTML = html_element;
3318    controlUI.appendChild(controlText);
3319
3320  }
3321  // -----------------------------
3322  // 📑 Templates & Rendering
3323  // -----------------------------
3324  renderCategories(template, data) {
3325    let rendered = template;
3326
3327    // Handle the case where parent categories do not exist
3328    if (!data || data.length === 0) {
3329      rendered = rendered.replace(
3330        /\{#each parent_categories\}[\s\S]+?\{\/parent_categories\}/g,
3331        "No categories available."
3332      );
3333      return rendered;
3334    }
3335
3336    // Replace the each block for parent and child categories
3337    const parentPattern =
3338      /\{#each parent_categories\}([\s\S]+?)\{\/parent_categories\}/g;
3339    rendered = rendered.replace(
3340      parentPattern,
3341      function (match, parentTemplate) {
3342        let result = "";
3343
3344        data.forEach((parentCategory) => {
3345          let parentHTML = parentTemplate;
3346          // Replace placeholders for parent category
3347          parentHTML = parentHTML.replace(
3348            /\{parent_id\}/g,
3349            parentCategory.parent_id || ""
3350          );
3351          parentHTML = parentHTML.replace(
3352            /\{child_list\}/g,
3353            parentCategory.child_list || ""
3354          );
3355          parentHTML = parentHTML.replace(
3356            /\{parent_category\}/g,
3357            parentCategory.parent_category || "Unknown Category"
3358          );
3359
3360          // Handle child categories
3361          let childPattern =
3362            /\{#each child_categories\}([\s\S]+?)\{\/child_categories\}/g;
3363
3364          if (
3365            parentCategory.child_categories &&
3366            parentCategory.child_categories.length > 0
3367          ) {
3368            parentHTML = parentHTML.replace(
3369              childPattern,
3370              function (childMatch, childTemplate) {
3371                let childResult = "";
3372                parentCategory.child_categories.forEach((child) => {
3373                  let childTemp = childTemplate;
3374                  childTemp = childTemp.replace(
3375                    /\{child_id\}/g,
3376                    child.child_id || ""
3377                  );
3378                  childTemp = childTemp.replace(
3379                    /\{child_category\}/g,
3380                    child.child_category || "Unknown Child Category"
3381                  );
3382                  childResult += childTemp;
3383                });
3384                return childResult;
3385              }
3386            );
3387          } else {
3388            // If no child categories exist, remove the entire child category box
3389            parentHTML = parentHTML.replace(childPattern, "");
3390          }
3391
3392          result += parentHTML;
3393        });
3394
3395        return result;
3396      }
3397    );
3398
3399    return rendered;
3400  }
3401  renderTemplate(template, data) {
3402    var rendered = template;
3403
3404    // Handle if-else condition outside of each loop
3405    var ifPattern = /\{#if (\w+)\}([\s\S]+?)\{else\}([\s\S]+?)\{\/if\}/g;
3406    rendered = rendered.replace(
3407      ifPattern,
3408      function (ifMatch, ifKey, ifTrue, ifFalse) {
3409        return data[ifKey] ? ifTrue : ifFalse;
3410      }
3411    );
3412
3413    var ifSimplePattern = /\{#if (\w+)\}([\s\S]+?)\{\/if\}/g;
3414    rendered = rendered.replace(
3415      ifSimplePattern,
3416      function (ifMatch, ifKey, ifTrue) {
3417        return data[ifKey] ? ifTrue : "";
3418      }
3419    );
3420
3421    // Replace the each block for all_filters
3422    var eachPattern = /\{#each all_filters\}([\s\S]+?)\{\/all_filters\}/g;
3423    rendered = rendered.replace(eachPattern, function (match, p2) {
3424      var result = "";
3425
3426      var allFilters = data["all_filters"];
3427
3428      // Iterate over all filters (facility, bathrooms, etc.)
3429      for (var filterName in allFilters) {
3430        var filterData = allFilters[filterName];
3431
3432        var firstKey = Object.keys(filterData)[0]; // Gets the first key
3433        var filterLabel = filterData[firstKey].label; // Gets the corresponding value
3434
3435        var filterTemplate = p2;
3436
3437        // Replace {filter_name} with the filter key (e.g., facility, bathrooms)
3438        filterTemplate = filterTemplate.replace(
3439          /\{filter_name\}/g,
3440          filterName
3441        );
3442        filterTemplate = filterTemplate.replace(
3443          /\{filter_label\}/g,
3444          filterLabel
3445        );
3446
3447        // Now handle the inner {#each filter} loop for options
3448        var innerEachPattern = /\{#each filter\}([\s\S]+?)\{\/filter\}/g;
3449        filterTemplate = filterTemplate.replace(
3450          innerEachPattern,
3451          function (innerMatch, innerP2) {
3452            var innerResult = "";
3453
3454            for (var key in filterData) {
3455              var option = {
3456                id: key.toLowerCase(),
3457                name: filterData[key].name,
3458                label: filterData[key].label,
3459              };
3460
3461              if (filterName != "category") {
3462                option.id = filterData[key].id;
3463              }
3464
3465              var optionTemplate = innerP2;
3466
3467              // Replace the placeholders {id} and {name}
3468              optionTemplate = optionTemplate.replace(/\{id\}/g, option.id);
3469
3470              optionTemplate = optionTemplate.replace(
3471                /\{name\}/g,
3472                option.name
3473              );
3474
3475              innerResult += optionTemplate;
3476            }
3477            return innerResult;
3478          }
3479        );
3480
3481        result += filterTemplate;
3482      }
3483
3484      return result;
3485    });
3486
3487    var eachPattern = /\{#each ([\w%_-]+)\}([\s\S]+?)\{\/\1\}/g; // Updated to allow dashes
3488    rendered = rendered.replace(eachPattern, function (match, p1, p2) {
3489      var items = data[p1];
3490      var result = "";
3491
3492      if (
3493        typeof items === "object" &&
3494        items !== null &&
3495        !Array.isArray(items)
3496      ) {
3497        for (var key in items) {
3498          var item;
3499          if (p1 == "routes") {
3500            item = {
3501              id: key.toLowerCase(),
3502              name: items[key][0],
3503              color: items[key][1],
3504            };
3505          } else {
3506            item = { id: key.toLowerCase(), name: items[key] };
3507          }
3508
3509          var itemTemplate = p2;
3510
3511          // Handle if-else condition inside each loop
3512          itemTemplate = itemTemplate.replace(
3513            ifPattern,
3514            function (ifMatch, ifKey, ifTrue, ifFalse) {
3515              return item[ifKey] ? ifTrue : ifFalse;
3516            }
3517          );
3518
3519          itemTemplate = itemTemplate.replace(
3520            ifSimplePattern,
3521            function (ifMatch, ifKey, ifTrue) {
3522              return item[ifKey] ? ifTrue : "";
3523            }
3524          );
3525
3526          // Replace the placeholders within each item
3527          for (var fieldKey in item) {
3528            itemTemplate = itemTemplate.replace(
3529              new RegExp("\\{" + fieldKey + "\\}", "g"),
3530              item[fieldKey]
3531            ); // Escape braces
3532          }
3533          result += itemTemplate;
3534        }
3535      }
3536
3537      return result;
3538    });
3539
3540    // Replace the placeholders outside the each block
3541    for (var key in data) {
3542      if (!Array.isArray(data[key]) && typeof data[key] === "object") {
3543        // Skip objects being handled within each block
3544        continue;
3545      }
3546      rendered = rendered.replace(
3547        new RegExp("\\{" + key + "\\}", "g"),
3548        data[key]
3549      ); // Escape braces
3550    }
3551
3552    return rendered;
3553  }
3554 
3555  create_filters() {
3556    var map_obj = this;
3557    var options = "";
3558    var filters = {};
3559    var places = this.map_data.places;
3560    var wpgmp_listing_filter = this.map_data.listing;
3561    var wpgmp_alltfilter = wpgmp_listing_filter.display_taxonomies_all_filter;
3562
3563    $.each(places, function (index, place) {
3564      if (typeof place.categories == "undefined") {
3565        place.categories = {};
3566      }
3567      $.each(place.categories, function (cat_index, category) {
3568        if (typeof filters[category.type] == "undefined") {
3569          filters[category.type] = {};
3570        }
3571
3572        if (category.name) {
3573          if (
3574            category.extension_fields &&
3575            category.extension_fields.cat_order
3576          ) {
3577            filters[category.type][category.name] = {
3578              id: category.id,
3579              order: category.extension_fields.cat_order,
3580              name: category.name,
3581            };
3582          } else {
3583            filters[category.type][category.name] = {
3584              id: category.id,
3585              order: 0,
3586              name: category.name,
3587            };
3588          }
3589        }
3590      });
3591    });
3592    // now create select boxes
3593
3594    var content = "",
3595      by = "name",
3596      type = "",
3597      inorder = "asc";
3598
3599    if (map_obj.map_data.listing) {
3600      if (map_obj.map_data.listing.default_sorting) {
3601        if (map_obj.map_data.listing.default_sorting.orderby == "listorder") {
3602          by = "order";
3603          type = "num";
3604          inorder = map_obj.map_data.listing.default_sorting.inorder;
3605        }
3606        inorder = map_obj.map_data.listing.default_sorting.inorder;
3607      }
3608    }
3609
3610    if (
3611      map_obj.map_data.checkbox_filter_addon_enable != undefined &&
3612      map_obj.map_data.checkbox_filter_addon_enable == true
3613    ) {
3614      $.each(filters, function (index, options) {
3615        if (
3616          wpgmp_listing_filter.display_category_filter === true &&
3617          index == "category"
3618        ) {
3619          content += '<div class="wpgmp_filters_checklist">';
3620          content +=
3621            '<label  data-filter = "place_' +
3622            index +
3623            '" >Select ' +
3624            index +
3625            "</label>";
3626          options = map_obj.sort_object_by_keyvalue(
3627            options,
3628            by,
3629            type,
3630            inorder
3631          );
3632          $.each(options, function (name, value) {
3633            if (value != "" && value != null)
3634              content +=
3635                "<input data-filter='checklist' type='checkbox' data-name = 'category' value='" +
3636                value.id +
3637                "'><span class='wpgmp_checklist_title'>" +
3638                value.name +
3639                "</span>";
3640          });
3641          content += "</div>";
3642        } else if (wpgmp_listing_filter.display_taxonomies_filter === true) {
3643          if (wpgmp_alltfilter === null) return false;
3644
3645          if (wpgmp_alltfilter.indexOf(index) > -1) {
3646            content += '<div class="wpgmp_filters_checklist">';
3647            content +=
3648              '<label  data-filter = "place_' +
3649              index +
3650              '" >Select ' +
3651              index +
3652              "</label>";
3653
3654            $.each(options, function (name, value) {
3655              if (value != "" && value != null)
3656                content +=
3657                  "<input data-filter='checklist' type='checkbox' data-name = 'category' value='" +
3658                  value.id +
3659                  "'><span class='wpgmp_checklist_title'>" +
3660                  value.name +
3661                  "</span>";
3662            });
3663            content += "</div>";
3664          }
3665        }
3666      });
3667    } else {
3668      $.each(filters, function (index, options) {
3669        if (
3670          wpgmp_listing_filter.display_category_filter === true &&
3671          index == "category"
3672        ) {
3673          content +=
3674            '<select data-wpgmp-filter="true" data-wpgmp-map-id="'+map_obj.map_data.map_property.map_id+'" data-wpgmp-filter-by="category" data-filter="dropdown" data-name="category" name="place_' +
3675            index +
3676            '">';
3677          content +=
3678            '<option value="">' + wpgmp_local.select_category + "</option>";
3679          options = map_obj.sort_object_by_keyvalue(
3680            options,
3681            by,
3682            type,
3683            inorder
3684          );
3685          $.each(options, function (name, value) {
3686            content +=
3687              "<option value='" + value.id + "'>" + value.name + "</option>";
3688          });
3689          content += "</select>";
3690        } else if (wpgmp_listing_filter.display_taxonomies_filter === true) {
3691          if (wpgmp_alltfilter === null) return false;
3692
3693          if (wpgmp_alltfilter.indexOf(index) > -1) {
3694            content +=
3695              '<select data-filter="dropdown" data-name="category" name="place_' +
3696              index +
3697              '">';
3698            content += '<option value="">Select ' + index + "</option>";
3699            $.each(options, function (name, value) {
3700              content +=
3701                "<option value='" + value + "'>" + name + "</option>";
3702            });
3703            content += "</select>";
3704          }
3705        }
3706      });
3707    }
3708
3709    if (map_obj.map_data.map_options.advance_template) {
3710      if (!map_obj.template_data) {
3711        map_obj.template_data = {}; // Ensure template_data exists
3712      }
3713      if (!Array.isArray(map_obj.template_data.filter)) {
3714        map_obj.template_data.filter = []; // Ensure filter is an array
3715      }
3716      map_obj.template_data.filter.push(filters);
3717    }
3718
3719    return content;
3720  }
3721
3722  update_places_listing() {
3723    var map_obj = this;
3724
3725    if (map_obj.per_page_value > 0)
3726      map_obj.per_page_value = map_obj.per_page_value;
3727    else
3728      map_obj.per_page_value =
3729        map_obj.map_data.listing.pagination.listing_per_page;
3730
3731    $(map_obj.container)
3732      .find(".location_pagination" + map_obj.map_data.map_property.map_id)
3733      .pagination(map_obj.show_places.length, {
3734        callback: map_obj.display_places_listing,
3735        map_data: map_obj,
3736        items_per_page: map_obj.per_page_value,
3737        prev_text: wpgmp_local.prev,
3738        next_text: wpgmp_local.next,
3739      });
3740  }
3741
3742  display_filters_listing() {
3743    if (this.map_data.listing) {
3744      var hide_locations = this.map_data.listing.hide_locations;
3745
3746      var wpgmpgl = this.map_data.listing.list_grid;
3747
3748      if (hide_locations != true) {
3749        var content = '<div class="wpgmp_listing_container">';
3750
3751        content +=
3752          "<div class='wpgmp_categories wpgmp_print_listing " +
3753          wpgmpgl +
3754          "' data-container='wpgmp-listing-" +
3755          $(this.element).attr("id") +
3756          "'></div>";
3757
3758        content += "</div>";
3759        $(this.map_data.listing.listing_container).html(content);
3760      }
3761    }
3762  }
3763
3764  display_filters() {
3765    var hide_locations = this.map_data.listing.hide_locations;
3766    var listing_header = this.map_data.listing.listing_header;
3767    var content = "";
3768    if (listing_header != undefined) {
3769      content +=
3770        '<div class="wpgmp_before_listing">' +
3771        this.map_data.listing.listing_header +
3772        "</div>";
3773    }
3774    if (this.map_data.listing.display_search_form === true) {
3775      var autosuggest_class = "";
3776
3777      if (this.map_data.listing.search_field_autosuggest === true) {
3778        autosuggest_class = "wpgmp_auto_suggest";
3779      }
3780
3781      content +=
3782        '<div class="wpgmp_listing_header">
3782<div class="wpgmp_search_form"><input type="text" rel="24" data-input="wpgmp-search-text" name="wpgmp_search_input" class="wpgmp_search_input ' +
3783        autosuggest_class +
3784        '" placeholder="' +
3785        wpgmp_local.search_placeholder +
3786        '"></div></div>';
3787    }
3788
3789    content +=
3790      '<div class="categories_filter">' +
3791      this.create_filters() +
3792      '<div data-container="wpgmp-filters-container"></div>';
3793
3794    if (hide_locations != true) content += this.create_sorting() + "";
3795
3796    if (
3797      hide_locations != true &&
3798      this.map_data.listing.display_location_per_page_filter === true
3799    ) {
3800      content += " " + this.create_perpage_option() + " ";
3801    }
3802
3803    content += " " + this.create_radius() + " ";
3804
3805    if (
3806      hide_locations != true &&
3807      this.map_data.listing.display_print_option === true
3808    ) {
3809      content += " " + wpgmp_local.img_print;
3810    }
3811
3812    if (
3813      hide_locations != true &&
3814      this.map_data.listing.display_grid_option === true
3815    ) {
3816      content += " " + wpgmp_local.img_grid + wpgmp_local.img_list;
3817    }
3818
3819    if (
3820      typeof this.map_data.map_options.display_reset_button != "undefined" &&
3821      this.map_data.map_options.display_reset_button === true
3822    ) {
3823      content +=
3824        '<div class="categories_filter_reset"><input type="button" class="categories_filter_reset_btn" name="categories_filter_reset_btn" value="' +
3825        this.map_data.map_options.map_reset_button_text +
3826        '"></div>';
3827    }
3828
3829    content += "</div>";
3830
3831    return content;
3832  }
3833
3834  set_icon_marker(place, iconUrl, iconSize = [32, 32]) {
3835    if (!place || !place.marker || !iconUrl) return;
3836  
3837    const isGoogle = this.isMapProvider('google');
3838    const isSvg = iconUrl.toLowerCase().includes('image/svg') || iconUrl.toLowerCase().endsWith('.svg');
3839  
3840    if (isGoogle) {
3841      // Google Maps: uses scaledSize and url object
3842      const icon = { url: iconUrl };
3843
3844      if (isSvg) {
3845        icon.scaledSize = new google.maps.Size(iconSize[0], iconSize[1]);
3846      }
3847
3848      place.marker.setIcon(icon);
3849
3850  
3851    } else {
3852      const icon = { url: iconUrl };
3853
3854      if (isSvg) {
3855        icon.scaledSize = [iconSize[0], iconSize[1]];
3856      }
3857
3858      place.marker.setIcon(icon);
3859
3860    }
3861  }
3862
3863  
3864  display_places_listing(page_index, jq) {
3865    var content = "";
3866    var map_obj = this;
3867    var category_selector_dropdown = $('select[name = "place_category"]');
3868    var items_per_page = 10;
3869    if (map_obj.items_per_page) items_per_page = map_obj.items_per_page;
3870    else
3871      items_per_page =
3872        map_obj.map_data.map_data.listing.pagination.listing_per_page;
3873
3874    if ($.isFunction($.fn.locationSortByDistance)) {
3875      var distance_image =
3876        map_obj.map_data.map_data.plugin_url +
3877        "assets/images/location-icon.png";
3878      if (
3879        ($("#search_location_autocomplete").val() != "" &&
3880          map_obj.map_data.is_place_changed) ||
3881        map_obj.map_data.is_location_allowed
3882      ) {
3883        map_obj.map_data.show_places =
3884          map_obj.map_data.sorted_locations_by_search;
3885      }
3886    }
3887
3888    var data_source = map_obj.map_data.show_places;
3889
3890    var listing_container =
3891      map_obj.map_data.map_data.listing.listing_container;
3892
3893    var listing_placeholder =
3894      map_obj.map_data.map_data.listing.listing_placeholder;
3895
3896    var max_elem = Math.min(
3897      (page_index + 1) * items_per_page,
3898      data_source.length
3899    );
3900    var link = "";
3901    var onclick_action = "";
3902    if (max_elem > 0) {
3903      for (var i = page_index * items_per_page; i < max_elem; i++) {
3904        var place = data_source[i];
3905        var temp_listing_placeholder = listing_placeholder;
3906        if (place.marker.getVisible() === true) {
3907          if (place.id) {
3908            if (place.location.onclick_action == "marker") {
3909              link =
3910                '<a href="javascript:void(0);" class="place_title" data-zoom="' +
3911                place.location.zoom +
3912                '"  data-marker="' +
3913                place.id +
3914                '" >' +
3915                place.title +
3916                "</a>";
3917              onclick_action =
3918                'href="javascript:void(0);" data-zoom="' +
3919                place.location.zoom +
3920                '"  data-marker="' +
3921                place.id +
3922                '"';
3923            } else if (place.location.onclick_action == "post") {
3924              link =
3925                '<a href="' +
3926                place.location.redirect_permalink +
3927                '" target="_blank">' +
3928                place.title +
3929                "</a>";
3930              onclick_action =
3931                'href="' +
3932                place.location.redirect_permalink +
3933                '" target="_blank"';
3934            } else if (place.location.onclick_action == "custom_link") {
3935              link =
3936                '<a href="' +
3937                place.location.redirect_custom_link +
3938                '" target="_blank">' +
3939                place.title +
3940                "</a>";
3941              onclick_action =
3942                'href="' +
3943                place.location.redirect_custom_link +
3944                '" target="_blank"';
3945            } else {
3946              link =
3947                '<a href="javascript:void(0);" class="place_title" data-zoom="' +
3948                place.location.zoom +
3949                '"  data-marker="' +
3950                place.id +
3951                '" >' +
3952                place.title +
3953                "</a>";
3954              onclick_action =
3955                'href="javascript:void(0);" data-zoom="' +
3956                place.location.zoom +
3957                '"  data-marker="' +
3958                place.id +
3959                '"';
3960            }
3961          }
3962
3963          var image = [];
3964          var category_name = [];
3965          var wpgmp_arr = {};
3966
3967          if (place.categories) {
3968            for (var c = 0; c < place.categories.length; c++) {
3969              if (place.categories[c].icon !== "") {
3970                image.push(
3971                  "<img title='" +
3972                    place.categories[c].name +
3973                    "' alt='" +
3974                    place.categories[c].name +
3975                    "' src='" +
3976                    place.categories[c].icon +
3977                    "' />"
3978                );
3979              }
3980
3981              if (
3982                place.categories[c].type == "category" &&
3983                place.categories[c].name != ""
3984              ) {
3985                if (
3986                  map_obj.map_data.map_data.map_options.advance_template ==
3987                  true
3988                ) {
3989                  category_name.push(
3990                    '<span class="wep-chip">' +
3991                      place.categories[c].name +
3992                      "</span>"
3993                  );
3994                } else {
3995                  category_name.push('<div class="fc-badge">'+place.categories[c].name+'</div>');
3996                }
3997              }
3998
3999              if (place.categories[c].type != "category") {
4000                if (typeof place.categories[c].name == "undefined") continue;
4001
4002                if (place.categories[c].name) var sep = ",";
4003
4004                if (typeof wpgmp_arr[place.categories[c].type] == "undefined")
4005                  wpgmp_arr[place.categories[c].type] = "";
4006
4007                wpgmp_arr[place.categories[c].type] +=
4008                  place.categories[c].name + sep;
4009              }
4010            }
4011          }
4012
4013          var marker_image = "";
4014
4015          if (place.source == "post") {
4016            marker_image = place.location.extra_fields.post_featured_image;
4017          } else {
4018            marker_image = place.location.marker_image;
4019          }
4020
4021          category_name = category_name.join("");
4022
4023          var replaceData = {
4024            "{marker_id}": place.id,
4025            "{marker_title}": link,
4026            "{marker_address}": place.address,
4027            "{marker_latitude}": place.location.lat,
4028            "{marker_longitude}": place.location.lng,
4029            "{marker_city}": place.location.city,
4030            "{marker_state}": place.location.state,
4031            "{marker_country}": place.location.country,
4032            "{marker_postal_code}": place.location.postal_code,
4033            "{marker_zoom}": place.location.zoom,
4034            "{marker_icon}": image,
4035            "{marker_category}": category_name,
4036            "{marker_message}": place.content,
4037            "{marker_image}": marker_image,
4038            "{marker_featured_image}": marker_image,
4039            "{wpgmp_listing_html}": place.listing_hook,
4040            "{onclick_action}
4040": onclick_action,
4041            "{distance}": "",
4042            "{get_directions_link}":
4043              "http://www.google.com/maps/place/" +
4044              parseFloat(place.location.lat) +
4045              "," +
4046              parseFloat(place.location.lng),
4047          };
4048
4049          if ($.isFunction($.fn.locationSortByDistance)) {
4050            if (
4051              typeof place.distance !== "undefined" &&
4052              place.distance !== null &&
4053              place.distance !== "NaN"
4054            ) {
4055              var dimension =
4056                map_obj.map_data.map_data.listing.radius_dimension;
4057              if (dimension == "km") {
4058                if ((place.distance / 1000).toFixed(2) != "NaN") {
4059                  place.distance = (place.distance / 1000).toFixed(2) + " Km";
4060                  place.location.extra_fields.distance =
4061                    '<img width="21px" height="26px" src="' +
4062                    distance_image +
4063                    '" style="width: 21px!important;height: 26px!important;margin-right: 3px!important;margin-top: 0px!important;"><span class="distance_calculate">' +
4064                    place.distance +
4065                    "</span>";
4066                }
4067              } else {
4068                if ((place.distance / 1000).toFixed(2) != "NaN") {
4069                  place.distance = (place.distance / 1000).toFixed(2);
4070                  place.distance =
4071                    (place.distance / 1.6).toFixed(2) + " Miles";
4072                  place.location.extra_fields.distance =
4073                    '<img width="21px" height="26px" src="' +
4074                    distance_image +
4075                    '" style="width: 21px!important;height: 26px!important;margin-right: 3px!important;margin-top: 0px!important;"><span class="distance_calculate">' +
4076                    place.distance +
4077                    "</span>";
4078                }
4079              }
4080            }
4081          }
4082
4083          //Add extra fields of locations
4084          if (typeof place.location.extra_fields != "undefined") {
4085            for (var extra in place.location.extra_fields) {
4086              if (!place.location.extra_fields[extra]) {
4087                replaceData["{" + extra + "}"] =
4088                  "<div class='wpgmp_empty'>wpgmp_empty</div>";
4089              } else {
4090                replaceData["{" + extra + "}"] =
4091                  place.location.extra_fields[extra];
4092              }
4093            }
4094          }
4095
4096          temp_listing_placeholder = temp_listing_placeholder.replace(
4097            /{#if (.*?)}([\s\S]*?){\/if}/g,
4098            function (match, p1, p2) {
4099              const key = "{" + p1 + "}";
4100              const value = replaceData[key];
4101              return value &&
4102                value !== "<div class='wpgmp_empty'>wpgmp_empty</div>"
4103                ? p2
4104                : "";
4105            }
4106          );
4107
4108          if (
4109            map_obj.map_data.map_data.map_options.link_extra_field !=
4110              undefined &&
4111            map_obj.map_data.map_data.map_options.link_extra_field != ""
4112          ) {
4113            var anchor_tag =
4114              map_obj.map_data.map_data.map_options.link_extra_field;
4115            for (var prop_an in anchor_tag) {
4116              if (
4117                replaceData[prop_an] !=
4118                  "<div class='wpgmp_empty'>wpgmp_empty</div>" &&
4119                prop_an != ""
4120              ) {
4121                temp_listing_placeholder = temp_listing_placeholder.replace(
4122                  prop_an,
4123                  anchor_tag[prop_an]
4124                );
4125              }
4126            }
4127          }
4128
4129          for (var prop in replaceData) {
4130            if (
4131              replaceData[prop] == undefined ||
4132              replaceData[prop] == "undefined"
4133            )
4134              replaceData[prop] = "";
4135          }
4136
4137          if (wpgmp_arr) {
4138            for (var n in wpgmp_arr) {
4139              replaceData["{" + n + "}"] = wpgmp_remove_last_comma(
4140                wpgmp_arr[n]
4141              );
4142            }
4143          }
4144
4145          var wpgmp_remove_last_comma = function (strng) {
4146            var n = strng.lastIndexOf(",");
4147            var a = strng.substring(0, n);
4148            return a;
4149          };
4150
4151          temp_listing_placeholder = temp_listing_placeholder.replace(
4152            /{[^{}]+}/g,
4153            function (match) {
4154              if (match in replaceData) {
4155                return replaceData[match];
4156              } else {
4157                return "";
4158              }
4159            }
4160          );
4161
4162          content += temp_listing_placeholder;
4163        }
4164      }
4165    } else {
4166      content =
4167        "<div class='wpgmp_no_locations'>" +
4168        wpgmp_local.wpgmp_location_no_results +
4169        "</div>";
4170    }
4171
4172    for (var j = 0; j < data_source.length; j++) {
4173      place = data_source[j];
4174      if (
4175        typeof place.categories.length !== undefined &&
4176        place.categories.length > 1
4177      ) {
4178        var iconSize = map_obj.map_data.getMarkerSize();
4179        if (category_selector_dropdown.val() !== "") {
4180          if (place.categories) {
4181            for (var c = 0; c < place.categories.length; c++) {
4182              if (
4183                category_selector_dropdown.val() == place.categories[c].id
4184              ) {
4185                
4186                map_obj.map_data.set_icon_marker(place, place.categories[c].icon,iconSize);
4187                
4188                break;
4189              }
4190            }
4191          }
4192        } else {
4193
4194          map_obj.map_data.set_icon_marker(place, place.location.icon,iconSize);
4195          
4196        }
4197      }
4198    }
4199
4200    // content += '<div id="wpgmp_pagination"></div>';
4201
4202    if (map_obj.map_data.map_data.map_options.advance_template === true) {
4203      var $listingElement = $(document).find(
4204        '[data-listing-content="true"][data-wpgmp-map-id]'
4205      );
4206      var allClasses = $listingElement.attr("class").split(" ");
4207      listing_container = "." + allClasses[0];
4208      $(listing_container).html(content);
4209    } else {
4210      content =
4211        '<div class="fc-' +
4212        map_obj.map_data.map_data.listing.list_item_skin.type +
4213        "-" +
4214        map_obj.map_data.map_data.listing.list_item_skin.name +
4215        ' fc-wait"><div data-page="2" class="fc-component-6" data-layout="' +
4216        map_obj.map_data.map_data.listing.list_item_skin.name +
4217        '" >' +
4218        content +
4219        "</div></div>";
4220      $(listing_container).find(".wpgmp_categories").html(content);
4221    }
4222
4223    $(listing_container)
4224      .find(".wpgmp_extra_field:contains('wpgmp_empty')")
4225      .remove();
4226    $(listing_container).find(".wpgmp_empty").prev().remove();
4227    $(listing_container).find(".wpgmp_empty").remove();
4228
4229    if (map_obj.map_data.map_data.listing.list_grid == "wpgmp_listing_grid") {
4230      $(window).on("load", function () {
4231        try {
4232          var container = $(listing_container).find(".wpgmp_listing_grid");
4233          if (container.length) {
4234            var msnry = container.data("masonry");
4235            if (msnry) {
4236              msnry.destroy();
4237            }
4238
4239            container.imagesLoaded(function () {
4240              // init Masonry after all images have loaded
4241              container.masonry({
4242                itemSelector: ".wpgmp_locations",
4243                columnWidth: ".wpgmp_locations",
4244                percentPosition: true,
4245              });
4246
4247              // Now safe to call reload
4248              container.masonry("layout");
4249            });
4250
4251          }
4252        } catch (err) {
4253          console.log(err);
4254        }
4255      });
4256    }
4257    return false;
4258  }
4259  // -----------------------------
4260  // 📊 Filters & Listings
4261  // -----------------------------
4262  apply_filters() {
4263    var map_obj = this;
4264    var filters = map_obj.filters;
4265    var showAll = true;
4266    var show = true;
4267    map_obj.show_places = [];
4268    // Filter by search box.
4269    if ($.isFunction($.fn.locationSortByDistance)) {
4270      map_obj.sorted_locations_by_search = [];
4271    } else {
4272      if (
4273        $(map_obj.container).find('[data-input="wpgmp-search-text"]').length >
4274        0
4275      ) {
4276        map_obj.search_term = $(map_obj.container)
4277          .find('[data-input="wpgmp-search-text"]')
4278          .val()
4279          .trim();
4280
4281        if (map_obj.search_term.length > 0) {
4282          map_obj.search_term = map_obj.search_term.toLowerCase();
4283          map_obj.enable_search_term = true;
4284        }
4285      }
4286    }
4287
4288    if (
4289      (map_obj.map_data.map_tabs &&
4290        map_obj.map_data.map_tabs.category_tab &&
4291        map_obj.map_data.map_tabs.category_tab.cat_tab === true) ||
4292      $(map_obj.container).find("input[data-marker-category]").length > 0
4293    ) {
4294      var all_selected_category_sel = $(map_obj.container).find(
4295        "input[data-marker-category]:checked"
4296      );
4297      var all_selected_category = [];
4298      var all_not_selected_location = [];
4299      if (all_selected_category_sel.length > 0) {
4300        $.each(
4301          all_selected_category_sel,
4302          function (index, selected_category) {
4303            all_selected_category.push(
4304              $(selected_category).data("marker-category")
4305            );
4306            var all_not_selected_location_sel = $(selected_category)
4307              .closest('[data-container="wpgmp-category-tab-item"]')
4308              .find("input[data-marker-location]:not(:checked)");
4309            if (all_not_selected_location_sel.length > 0) {
4310              $.each(
4311                all_not_selected_location_sel,
4312                function (index, not_selected_location) {
4313                  all_not_selected_location.push(
4314                    $(not_selected_location).data("marker-location")
4315                  );
4316                }
4317              );
4318            }
4319          }
4320        );
4321      }
4322      var all_selected_location_sel = $(map_obj.container)
4323        .find('[data-container="wpgmp-category-tab-item"]')
4324        .find("input[data-marker-location]:checked");
4325      var all_selected_location = [];
4326      if (all_selected_location_sel.length > 0) {
4327        $.each(
4328          all_selected_location_sel,
4329          function (index, selected_location) {
4330            all_selected_location.push(
4331              $(selected_location).data("marker-location")
4332            );
4333          }
4334        );
4335      }
4336    }
4337
4338    if (typeof map_obj.map_data.places != "undefined") {
4339      $.each(map_obj.map_data.places, function (place_key, place) {
4340        show = true;
4341        if (typeof filters != "undefined") {
4342          $.each(filters, function (filter_key, filter_values) {
4343            var in_fields = false;
4344
4345            if ($.isArray(filter_values)) {
4346              if (
4347                typeof place.categories != "undefined" &&
4348                filter_key == "category"
4349              ) {
4350                $.each(place.categories, function (cat_index, category) {
4351                  if ($.inArray(category.id, filter_values) > -1) {
4352                    in_fields = true;
4353                  }
4354                });
4355              }
4356
4357              if (typeof place.custom_filters != "undefined") {
4358                $.each(place.custom_filters, function (k, val) {
4359                  if (filter_key == k) {
4360                    in_fields = false;
4361                    if ($.isArray(val)) {
4362                      $.each(val, function (index, value) {
4363                        if ($.inArray(value, filter_values) > -1)
4364                          in_fields = true;
4365                      });
4366                    } else if (val == filter_values.val) in_fields = true;
4367                  }
4368                });
4369              }
4370
4371              if (typeof place[filter_key] != "undefined") {
4372                if (
4373                  $.inArray(place[filter_key].toLowerCase(), filter_values) >
4374                  -1
4375                ) {
4376                  in_fields = true;
4377                }
4378              } else if (typeof place.location[filter_key] != "undefined") {
4379                if (
4380                  $.inArray(
4381                    place.location[filter_key].toLowerCase(),
4382                    filter_values
4383                  ) > -1
4384                ) {
4385                  in_fields = true;
4386                }
4387              } else if (
4388                place.location.extra_fields &&
4389                typeof place.location.extra_fields[filter_key] != "undefined"
4390              ) {
4391                var dropdown_value = filter_values[0];
4392
4393                if (place.location.extra_fields[filter_key] != "") {
4394                  var arrayResult =
4395                    place.location.extra_fields[filter_key].split(",");
4396
4397                  var trimmedArray = $.map(arrayResult, function (value) {
4398                    return $.trim(value).toLowerCase();
4399                  });
4400                }
4401                if (place.location.extra_fields[filter_key]) {
4402                  var dropdown_val =
4403                    place.location.extra_fields[filter_key].toLowerCase();
4404                  var dropdown_val_decoded = $("<div>")
4405                    .html(dropdown_val)
4406                    .text();
4407                  if (
4408                    dropdown_val &&
4409                    (dropdown_val.indexOf(dropdown_value) > -1 ||
4410                      dropdown_val_decoded.indexOf(dropdown_value) > -1)
4411                  ) {
4412                    in_fields = true;
4413                  } else if ($.inArray(dropdown_val, filter_values) > -1) {
4414                    in_fields = true;
4415                  } else if (
4416                    trimmedArray != undefined &&
4417                    $.inArray(dropdown_value, trimmedArray) > -1
4418                  ) {
4419                    in_fields = true;
4420                  } else if (Array.isArray(dropdown_value) && trimmedArray !== undefined && dropdown_value.some(value => trimmedArray.includes(value))) {
4421                    in_fields = true;
4422                }
4423                }
4424              }
4425
4426              if (map_obj.addonInfo !== "") {
4427                $.each(map_obj.addonInfo, function (key, method) {
4428                  var method_name = method.filtration_logic;
4429
4430                  if (
4431                    typeof map_obj[method_name] !== "undefined" &&
4432                    $.isFunction(map_obj[method_name])
4433                  ) {
4434                    in_fields = map_obj[method_name](
4435                      in_fields,
4436                      place,
4437                      filter_values,
4438                      filter_key
4439                    );
4440                  }
4441                });
4442              }
4443
4444              if (in_fields == false) show = false;
4445            } else {
4446              filter_values.val = "";
4447            }
4448          });
4449        }
4450
4451        var search_fields = map_obj.map_data.map_options.search_fields;
4452        var exclude_fields = map_obj.map_data.map_options.exclude_fields;
4453
4454        if (Array.isArray(exclude_fields) && exclude_fields.length > 0) {
4455          if (exclude_fields.includes("{post_title}")) {
4456            if (!exclude_fields.includes("{post_link}")) {
4457              exclude_fields.push("{post_link}");
4458            }
4459            if (!exclude_fields.includes("{marker_title}")) {
4460              exclude_fields.push("{marker_title}");
4461            }
4462          }
4463
4464          if (exclude_fields.includes("{post_content}")) {
4465            if (!exclude_fields.includes("{post_excerpt}")) {
4466              exclude_fields.push("{post_excerpt}");
4467            }
4468            if (!exclude_fields.includes("{marker_message}")) {
4469              exclude_fields.push("{marker_message}");
4470            }
4471          }
4472
4473          if (
4474            exclude_fields.includes("{post_excerpt}") &&
4475            !exclude_fields.includes("{post_content}")
4476          ) {
4477            exclude_fields.push("{post_content}");
4478          }
4479
4480          if (
4481            exclude_fields.includes("{marker_address}") &&
4482            !exclude_fields.includes("{%_wpgmp_location_address%}")
4483          ) {
4484            exclude_fields.push("{%_wpgmp_location_address%}");
4485          }
4486
4487          if (
4488            exclude_fields.includes("{marker_city}") &&
4489            !exclude_fields.includes("{%_wpgmp_location_city%}")
4490          ) {
4491            exclude_fields.push("{%_wpgmp_location_city%}");
4492          }
4493
4494          if (
4495            exclude_fields.includes("{marker_country}") &&
4496            !exclude_fields.includes("{%_wpgmp_location_country%}")
4497          ) {
4498            exclude_fields.push("{%_wpgmp_location_country%}");
4499          }
4500
4501          if (
4502            exclude_fields.includes("{marker_state}") &&
4503            !exclude_fields.includes("{%_wpgmp_location_state%}")
4504          ) {
4505            exclude_fields.push("{%_wpgmp_location_state%}");
4506          }
4507
4508          if (
4509            exclude_fields.includes("{marker_longitude}") &&
4510            !exclude_fields.includes("{%_wpgmp_metabox_longitude%}")
4511          ) {
4512            exclude_fields.push("{%_wpgmp_metabox_longitude%}");
4513          }
4514
4515          if (
4516            exclude_fields.includes("{marker_latitude}") &&
4517            !exclude_fields.includes("{%_wpgmp_metabox_latitude%}")
4518          ) {
4519            exclude_fields.push("{%_wpgmp_metabox_latitude%}");
4520          }
4521        }
4522        var extra_fields_array = place.location.extra_fields;
4523        var flag_search = false;
4524        var flag_exclude = false;
4525
4526        var search_exclude = {};
4527        if (
4528          typeof exclude_fields !== "undefined" &&
4529          exclude_fields.length > 0
4530        ) {
4531          flag_exclude = true;
4532          search_exclude = Object.keys(extra_fields_array)
4533            .filter((key) => !exclude_fields.includes(`{${key}}`))
4534            .reduce((obj, key) => {
4535              obj[key] = extra_fields_array[key];
4536              return obj;
4537            }, {});
4538        }
4539        //search with only these field
4540        var search_fields_present = [];
4541        if (
4542          typeof search_fields !== "undefined" &&
4543          search_fields.length > 0
4544        ) {
4545          flag_search = true;
4546          for (var i = 0; i < search_fields.length; i++) {
4547            if (
4548              extra_fields_array.hasOwnProperty(search_fields[i].slice(1, -1))
4549            ) {
4550              search_fields_present.push(search_fields[i]);
4551            }
4552          }
4553        }
4554
4555        //Apply Search Filter.
4556        var search_term = map_obj.search_term;
4557        if (search_term && search_term.length > 0) {
4558          if (map_obj.enable_search_term === true && show === true) {
4559            if (flag_search == true || flag_exclude == true) {
4560              if (
4561                place.title != undefined &&
4562                place.title.toLowerCase().indexOf(search_term) >= 0 &&
4563                ((flag_search && search_fields.includes("{marker_title}")) ||
4564                  (flag_exclude &&
4565                    !exclude_fields.includes("{marker_title}")))
4566              ) {
4567                show = true;
4568              } else if (
4569                place.content != undefined &&
4570                place.content.toLowerCase().indexOf(search_term) >= 0 &&
4571                ((flag_search == true &&
4572                  search_fields.includes("{marker_message}")) ||
4573                  (flag_exclude == true &&
4574                    !exclude_fields.includes("{marker_message}")))
4575              ) {
4576                show = true;
4577              } else if (
4578                String(place.location.lat)
4579                  .toLowerCase()
4580                  .indexOf(search_term) >= 0 &&
4581                ((flag_search == true &&
4582                  search_fields.includes("{marker_latitude}")) ||
4583                  (flag_exclude == true &&
4584                    !exclude_fields.includes("{marker_latitude}")))
4585              ) {
4586                show = true;
4587              } else if (
4588                String(place.location.lng)
4589                  .toLowerCase()
4590                  .indexOf(search_term) >= 0 &&
4591                ((flag_search == true &&
4592                  search_fields.includes("{marker_longitude}")) ||
4593                  (flag_exclude == true &&
4594                    !exclude_fields.includes("{marker_longitude}")))
4595              ) {
4596                show = true;
4597              } else if (
4598                place.address &&
4599                place.address.toString().toLowerCase().indexOf(search_term) >=
4600                  0 &&
4601                ((flag_search == true &&
4602                  search_fields.includes("{marker_address}")) ||
4603                  (flag_exclude == true &&
4604                    !exclude_fields.includes("{marker_address}")))
4605              ) {
4606                show = true;
4607              } else if (
4608                place.location.state &&
4609                place.location.state.toLowerCase().indexOf(search_term) >=
4610                  0 &&
4611                ((flag_search == true &&
4612                  search_fields.includes("{marker_state}")) ||
4613                  (flag_exclude == true &&
4614                    !exclude_fields.includes("{marker_state}")))
4615              ) {
4616                show = true;
4617              } else if (
4618                place.location.country &&
4619                place.location.country.toLowerCase().indexOf(search_term) >=
4620                  0 &&
4621                ((flag_search == true &&
4622                  search_fields.includes("{marker_country}")) ||
4623                  (flag_exclude == true &&
4624                    !exclude_fields.includes("{marker_country}")))
4625              ) {
4626                show = true;
4627              } else if (
4628                place.location.postal_code &&
4629                String(place.location.postal_code)
4630                  .toLowerCase()
4631                  .indexOf(search_term) >= 0 &&
4632                ((flag_search == true &&
4633                  search_fields.includes("{marker_postal_code}")) ||
4634                  (flag_exclude == true &&
4635                    !exclude_fields.includes("{marker_postal_code}")))
4636              ) {
4637                show = true;
4638              } else if (
4639                place.location.city &&
4640                place.location.city.toLowerCase().indexOf(search_term) >= 0 &&
4641                ((flag_search == true &&
4642                  search_fields.includes("{marker_city}")) ||
4643                  (flag_exclude == true &&
4644                    !exclude_fields.includes("{marker_city}")))
4645              ) {
4646                show = true;
4647              } else {
4648                show = false;
4649              }
4650
4651              if (flag_search == true) {
4652                if (search_fields_present.length > 0) {
4653                  for (const field of search_fields_present) {
4654                    if (typeof place.location.extra_fields != "undefined") {
4655                      $.each(
4656                        place.location.extra_fields,
4657                        function (field, value) {
4658                          if (
4659                            value &&
4660                            $.inArray(
4661                              "{" + field + "}",
4662                              search_fields_present
4663                            ) !== -1
4664                          ) {
4665                            value = value.toString();
4666                            if (
4667                              value &&
4668                              value.toLowerCase().indexOf(search_term) >= 0
4669                            )
4670                              show = true;
4671                          }
4672                        }
4673                      );
4674                    }
4675                  }
4676                }
4677              } else if (flag_exclude == true) {
4678                for (var field in search_exclude) {
4679                  var value = search_exclude[field];
4680
4681                  if (value) {
4682                    value = value.toString();
4683
4684                    if (
4685                      value &&
4686                      value.toLowerCase().indexOf(search_term) >= 0
4687                    ) {
4688                      show = true;
4689                    }
4690                  }
4691                }
4692              }
4693            } else {
4694              if (
4695                place.title != undefined &&
4696                place.title.toLowerCase().indexOf(search_term) >= 0
4697              ) {
4698                show = true;
4699              } else if (
4700                place.content != undefined &&
4701                place.content.toLowerCase().indexOf(search_term) >= 0
4702              ) {
4703                show = true;
4704              } else if (
4705                String(place.location.lat)
4706                  .toLowerCase()
4707                  .indexOf(search_term) >= 0
4708              ) {
4709                show = true;
4710              } else if (
4711                String(place.location.lng)
4712                  .toLowerCase()
4713                  .indexOf(search_term) >= 0
4714              ) {
4715                show = true;
4716              } else if (
4717                place.address &&
4718                place.address.toString().toLowerCase().indexOf(search_term) >=
4719                  0
4720              ) {
4721                show = true;
4722              } else if (
4723                place.location.state &&
4724                place.location.state.toLowerCase().indexOf(search_term) >= 0
4725              ) {
4726                show = true;
4727              } else if (
4728                place.location.country &&
4729                place.location.country.toLowerCase().indexOf(search_term) >= 0
4730              ) {
4731                show = true;
4732              } else if (
4733                place.location.postal_code &&
4734                String(place.location.postal_code)
4735                  .toLowerCase()
4736                  .indexOf(search_term) >= 0
4737              ) {
4738                show = true;
4739              } else if (
4740                place.location.city &&
4741                place.location.city.toLowerCase().indexOf(search_term) >= 0
4742              ) {
4743                show = true;
4744              } else {
4745                show = false;
4746              }
4747
4748              if (typeof place.location.extra_fields != "undefined") {
4749                $.each(place.location.extra_fields, function (field, value) {
4750                  if (value) {
4751                    value = value.toString();
4752                    if (
4753                      value &&
4754                      value.toLowerCase().indexOf(search_term) >= 0
4755                    )
4756                      show = true;
4757                  }
4758                });
4759              }
4760            }
4761          }
4762        }
4763
4764        //Exclude locations without category if location filters are choosed by user
4765        if (
4766          (place.categories.length == undefined ||
4767            place.categories.length == "undefined") &&
4768          all_selected_category &&
4769          all_selected_category.length > 0 &&
4770          $(map_obj.container)
4771            .find('input[name="wpgmp_select_all"]')
4772            .is(":checked") == false &&
4773          show
4774        ) {
4775          show = false;
4776        }
4777
4778        // if checked category
4779        if (
4780          all_selected_category &&
4781          show != false &&
4782          place.categories.length != undefined
4783        ) {
4784          var in_checked_category = false;
4785
4786          if (all_selected_category.length === 0) {
4787            // means no any category selected so show those location without categories.
4788            if (typeof place.categories != "undefined") {
4789              $.each(place.categories, function (cat_index, category) {
4790                if (category.id === "") in_checked_category = true;
4791              });
4792            }
4793          } else {
4794            if (typeof place.categories != "undefined") {
4795              $.each(place.categories, function (cat_index, category) {
4796                if (category.id === "") in_checked_category = true;
4797                else if (
4798                  $.inArray(parseInt(category.id), all_selected_category) > -1
4799                ) {
4800                  in_checked_category = true;
4801                  var iconSize = map_obj.getMarkerSize();
4802                  map_obj.set_icon_marker(place, category.icon,iconSize);
4803                  
4804                }
4805              });
4806            }
4807          }
4808
4809          //Hide unchecked  locations.
4810          if (all_not_selected_location.length !== 0) {
4811            if (
4812              $.inArray(parseInt(place.id), all_not_selected_location) > -1
4813            ) {
4814              in_checked_category = false;
4815            }
4816          }
4817
4818          //var checked_categories = $(map_obj.container).find('input[data-marker-category]:checked').length;
4819          if (in_checked_category === false) show = false;
4820          else show = true;
4821
4822          //Show Here checked location.
4823          if (all_selected_location.length !== 0) {
4824            if ($.inArray(parseInt(place.id), all_selected_location) > -1) {
4825              show = true;
4826            }
4827          }
4828        }
4829        
4830        if( show == true ) {
4831          place.marker.bindMap(map_obj.map);
4832        }
4833        place.marker.setVisible(show);
4834
4835        if (show == false) {
4836          place.infowindow.close();
4837        }
4838        place.marker.setAnimation(null);
4839        if ($.isFunction($.fn.locationSortByDistance)) {
4840          if (show === true) {
4841            map_obj.show_places.push(place);
4842            map_obj.sorted_locations_by_search.push(place);
4843          }
4844        } else {
4845          if (show === true) map_obj.show_places.push(place);
4846        }
4847      });
4848
4849      if ($.isFunction($.fn.locationSortByDistance)) {
4850        if (map_obj.search_place != undefined) {
4851          map_obj.is_place_changed = true;
4852          var sotred_locs = map_obj.shuffle_by_distance(
4853            map_obj.sorted_locations_by_search,
4854            map_obj.search_place
4855          );
4856          map_obj.places = sotred_locs;
4857        }
4858      }
4859    }
4860
4861    if (
4862      typeof map_obj.map_data.map_options.bound_map_after_filter !== 'undefined' &&
4863      map_obj.map_data.map_options.bound_map_after_filter === true
4864    ) {
4865      const isGoogle = map_obj.isMapProvider("google");
4866
4867      // Create a bounds object based on provider
4868      const bounds = isGoogle
4869        ? new google.maps.LatLngBounds()
4870        : new L.LatLngBounds();
4871
4872      if (Array.isArray(map_obj.show_places) && map_obj.show_places.length > 0) {
4873        map_obj.show_places.forEach((place) => {
4874          const lat = parseFloat(place.location.lat);
4875          const lng = parseFloat(place.location.lng);
4876
4877          if (!isNaN(lat) && !isNaN(lng)) {
4878            const latLng = isGoogle
4879              ? new google.maps.LatLng(lat, lng)
4880              : L.latLng(lat, lng);
4881
4882            bounds.extend(latLng);
4883          }
4884        });
4885        // Fit bounds to map
4886        if (isGoogle) {
4887          map_obj.map.fitBounds(bounds);
4888        } else {
4889          map_obj.map.fitBounds(bounds, { padding: [20, 20] }); // optional padding
4890        }
4891      }
4892    }
4893
4894
4895    if (map_obj.map_data.listing) {
4896      if ($(map_obj.container).find('[data-filter="map-sorting"]').val()) {
4897        var order_data = $(map_obj.container)
4898          .find('[data-filter="map-sorting"]')
4899          .val()
4900          .split("__");
4901        var data_type = "";
4902        if (order_data[0] !== "" && order_data[1] !== "") {
4903          if (typeof order_data[2] != "undefined") {
4904            data_type = order_data[2];
4905          }
4906          map_obj.sorting(order_data[0], order_data[1], data_type);
4907        }
4908      } else {
4909        if (
4910          map_obj.map_data.listing.default_sorting &&
4911          map_obj.map_data.autosort
4912        ) {
4913          var data_type = "";
4914          if (
4915            map_obj.map_data.listing.default_sorting.orderby == "listorder"
4916          ) {
4917            data_type = "num";
4918          }
4919          map_obj.sorting(
4920            map_obj.map_data.listing.default_sorting.orderby,
4921            map_obj.map_data.listing.default_sorting.inorder,
4922            data_type
4923          );
4924        }
4925      }
4926
4927      map_obj.update_places_listing();
4928    }
4929
4930    if (map_obj.map_data.marker_cluster) {
4931      setTimeout(function () {
4932        map_obj.set_marker_cluster();
4933      }, 2000);
4934    }
4935  }
4936  update_filters() {
4937    var map_obj = this;
4938    map_obj.filters = {};
4939    var all_dropdowns = $(map_obj.container).find('[data-filter="dropdown"]');
4940    var all_checkboxes = $(map_obj.container).find(
4941      '[data-filter="checklist"]:checked'
4942    );
4943    var all_list = $(map_obj.container).find(
4944      '[data-filter="list"].fc_selected'
4945    );
4946    const map_id = map_obj.map_data.map_property.map_id;
4947    $.each(all_dropdowns, function (index, element) {
4948      if ($(this).val() != "") {
4949        if (typeof map_obj.filters[$(this).data("name")] == "undefined") {
4950          map_obj.filters[$(this).data("name")] = [];
4951        }
4952
4953        map_obj.filters[$(this).data("name")].push($(this).val());
4954      }
4955    });
4956
4957    $.each(all_checkboxes, function (index, element) {
4958      if (typeof map_obj.filters[$(this).data("name")] == "undefined") {
4959        map_obj.filters[$(this).data("name")] = [];
4960      }
4961
4962      map_obj.filters[$(this).data("name")].push($(this).val());
4963    });
4964
4965    $.each(all_list, function (index, element) {
4966      if (typeof map_obj.filters[$(this).data("name")] == "undefined") {
4967        map_obj.filters[$(this).data("name")] = [];
4968      }
4969
4970      map_obj.filters[$(this).data("name")].push(
4971        $(this).data("value").toString()
4972      );
4973    });
4974
4975    $('[data-wpgmp-filter="true"][data-wpgmp-map-id="' + map_id + '"]').each(
4976      function () {
4977        const filterBy = $(this).data("wpgmp-filter-by");
4978        const inputType = $(this).prop("type").toLowerCase();
4979        let inputValue;
4980        if (inputType === "checkbox" && $(this).is(":checked")) {
4981          inputValue = $(this).val();
4982        } else if (inputType === "select-one" || inputType === "select") {
4983          inputValue = $(this).find("option:selected").val();
4984        } else if (inputType === "radio" && $(this).is(":checked")) {
4985          inputValue = $(this).val();
4986        }
4987
4988        if (filterBy == "search" && $(this).val().length > 2) {
4989          map_obj.search_term = $(this).val().toLowerCase();
4990          map_obj.enable_search_term = true;
4991        } else if (filterBy == "search" && $(this).val().length < 2) {
4992          map_obj.search_term = "";
4993          map_obj.enable_search_term = true;
4994        }
4995
4996        if (inputValue !== undefined && inputValue !== "") {
4997          map_obj.filters[filterBy] = map_obj.filters[filterBy] || [];
4998          map_obj.filters[filterBy].push(inputValue);
4999        }
5000      }
5001    );
5002
5003    if (map_obj.addonInfo !== "") {
5004      $.each(map_obj.addonInfo, function (key, method) {
5005        var method_name = method.filter_register_mthod;
5006
5007        if (
5008          typeof map_obj[method_name] !== "undefined" &&
5009          $.isFunction(map_obj[method_name])
5010        ) {
5011          map_obj[method_name]();
5012        }
5013      });
5014    }
5015
5016    this.apply_filters();
5017  }
5018  
5019  register_events() {
5020    const map_obj = this;
5021    const map_id = map_obj.map_data.map_property.map_id;
5022    const $container = $(map_obj.container);
5023    const template = map_obj.map_data.map_options.template_name;
5024    const hasSearchButton = !!$(`[data-wpgmp-filter="true"][data-wpgmp-search-button="true"]`).length;
5025    
5026    $container.on("input change", ".wpgmp_error", function () {
5027      $(this).removeClass("wpgmp_error");
5028  });
5029  
5030    // -------------------------------
5031    // 🔁 Filters (dropdown, checklist, list, radius, per-page)
5032    // -------------------------------
5033    
5034     // Accordion tab toggle UI (for listings/filters etc.)
5035     $("body").on("click", ".fc-accordion-tab", function () {
5036      if ($(this).hasClass("active")) {
5037        $(this).removeClass("active");
5038  
5039        var acc_child = $(this).next().removeClass("active");
5040      } else {
5041        $(".fc-accordion-tab").removeClass("active");
5042  
5043        $(".fc-accordion dd").removeClass("active");
5044  
5045        $(this).addClass("active");
5046  
5047        var acc_child = $(this).next().addClass("active");
5048      }
5049    });
5050
5051    if (map_obj.map_data.listing) {
5052      // Hook for dynamic taxonomy filters
5053      $.each(map_obj.map_data.listing.filters, function (key, filter) {
5054        $(map_obj.container)
5055          .find('select[name="' + filter + '"]')
5056          .on("change", function () {
5057            map_obj.update_filters();
5058          });
5059      });
5060    }
5061
5062    $container.on("change", `select[data-wpgmp-filter="true"][data-wpgmp-map-id="${map_id}"]`, () => {
5063      map_obj.update_filters();
5064    });
5065    
5066    $container.on('click', '.categories_filter_reset_btn', function () {
5067      $(map_obj.container).find('.wpgmp_filter_wrappers select').each(function () {
5068          $(this).find('option:first').attr('selected', 'selected');
5069          $(this).find('option:first').prop('selected', 'selected');
5070      });
5071
5072      $('.wpgmp_search_input').val('');
5073
5074      if (map_obj.addonInfo !== '') {
5075
5076          $.each(map_obj.addonInfo, function (key, method) {
5077              var method_name = method.filter_reset_method;
5078
5079              if (typeof map_obj[method_name] !== 'undefined' && $.isFunction(map_obj[method_name])) {
5080
5081                  map_obj[method_name]();
5082              }
5083
5084          });
5085
5086      }
5087      map_obj.update_filters();
5088
5089  });
5090  
5091  $(map_obj.container).on("click", '[data-filter="dropdown"]', () => map_obj.update_filters());
5092  $container.on("click", '[data-filter="checklist"]', () => map_obj.update_filters());
5093  $container.on("click", '[data-filter="list"]', function () {
5094      $(this).toggleClass("fc_selected");
5095      map_obj.update_filters();
5096    });
5097
5098    // Marker link scroll-to functionality
5099    $container.on("click", ".wpgmp_marker_link", function () {
5100      const markerId = $(this).data("marker");
5101      const source = $(this).data("source");
5102      $("html, body").animate(
5103        { scrollTop: $(map_obj.container).offset().top - 150 },
5104        500
5105      );
5106      map_obj.open_infowindow(markerId, source);
5107    });
5108  
5109    if (!hasSearchButton && (template !== 'layout_6' && template !== 'layout_7')) {
5110      $container.on("keyup", `input[data-wpgmp-filter="true"][data-wpgmp-map-id="${map_id}"]`, () => {
5111        map_obj.update_filters();
5112      });
5113    }
5114  
5115    // Reset all filters (button with reset attribute)
5116    $container.on("click", '[data-filter-reset="true"]', () => {
5117      $('input[type="text"][data-wpgmp-filter="true"]').val('');
5118      $('select[data-wpgmp-filter="true"]').prop("selectedIndex", 0);
5119      $('input[type="checkbox"][data-filter="checklist"], input[type="checkbox"][data-wpgmp-filter="true"]').prop("checked", false);
5120      $('[data-filter="list"].fc_selected').removeClass("fc_selected");
5121      $('input[type="radio"][data-wpgmp-filter="true"]').prop("checked", false);
5122      map_obj.update_filters();
5123    });
5124  
5125    // Advanced template → search button click triggers filtering
5126    $container.on("click", `[data-wpgmp-filter="true"][data-wpgmp-search-button="true"]`, () => {
5127      map_obj.update_filters();
5128    });
5129
5130    // -------------------------------
5131    // 🔍 Search Input
5132    // -------------------------------
5133    $container.on("keyup", '[data-input="wpgmp-search-text"]', function () {
5134      const searchVal = $(this).val().trim();
5135      $container.find('[data-filter="map-radius"]').val("");
5136      map_obj.search_area = "";
5137  
5138      if (searchVal.length >
5138= 2 && map_obj.map_data.listing.apply_default_radius === true) {
5139
5140        map_obj.wpgmp_set_search_area(searchVal);
5141
5142      } else {
5143        map_obj.update_filters();
5144      }
5145    });
5146  
5147    // -------------------------------
5148    // 🔃 Sorting & Per Page
5149    // -------------------------------
5150    $container.on("change", `select[data-wpgmp-map-id="${map_id}"][data-filter="map-sorting"]`, function () {
5151      const [orderby, order, type = ""] = $(this).val().split("__");
5152      if (orderby && order) {
5153        map_obj.sorting(orderby, order, type);
5154        map_obj.update_places_listing();
5155      }
5156    });
5157  
5158    $container.on("change", `select[data-wpgmp-map-id="${map_id}"][data-filter="map-perpage-location-sorting"]`, function () {
5159      map_obj.per_page_value = $(this).val();
5160      map_obj.update_filters();
5161    });
5162  
5163    // -------------------------------
5164    // 🗺️ Marker & InfoWindow Events
5165    // -------------------------------
5166    
5167    $container.on("click", ".wpgmp_location_container a[data-marker]", function (e) {
5168      e.preventDefault();
5169      const markerId = $(this).data("marker");
5170      if (!markerId || typeof map_obj.open_infowindow !== "function") return;
5171  
5172      map_obj.open_infowindow(markerId);
5173    });
5174    
5175    // Listing infowindow (custom event trigger like 'click', 'hover')
5176    $container.on(map_obj.settings.listing_infowindow_open_event, ".wpgmp_locations a[data-marker]", function () {
5177      const $el = $(this);
5178      $("html, body").animate({ scrollTop: $container.offset().top - 150 }, 500);
5179      setTimeout(() => map_obj.open_infowindow($el.data("marker")), 300);
5180    });
5181
5182    $container.on(map_obj.settings.listing_infowindow_open_event, ".wep-card__title a[data-marker]", function () {
5183      const $el = $(this);
5184      $("html, body").animate({ scrollTop: $container.offset().top - 150 }, 500);
5185      setTimeout(() => map_obj.open_infowindow($el.data("marker")), 300);
5186    });
5187  
5188    // -------------------------------
5189    // 📑 Tabs & UI Toggles
5190    // -------------------------------
5191    $container.on("click", ".wpgmp_toggle_container", function () {
5192      $container.find(".wpgmp_toggle_main_container").slideToggle("slow");
5193      const txt = $(this).text();
5194      $(this).text(txt === wpgmp_local.hide ? wpgmp_local.show : wpgmp_local.hide);
5195    });
5196  
5197    $container.on("click", "li[class^='wpgmp-tab-'] a", function () {
5198      const tabId = $(this).parent().attr("rel");
5199      $container.find("li[class^='wpgmp-tab-'] a").removeClass("active");
5200      $(this).addClass("active");
5201      $container.find(".wpgmp_toggle_main_container div[id^='wpgmp_tab_']").hide();
5202      $container.find(`#wpgmp_tab_${tabId}`).show();
5203    });
5204
5205    $container.find(".wpgmp_find_nearby_button").click(function () {
5206      const target = $(this).closest(".wpgmp_nearby_container");
5207      const inputField = $(target).find(".wpgmp_auto_suggest");
5208      const lat = inputField.data('latitude');
5209      const lon = inputField.data('longitude');
5210  
5211      const radiusField = $(map_obj.container).find("input[name='wpgmp_radius']");
5212      const radius = radiusField.val();
5213  
5214      let hasError = false;
5215  
5216      // Reset previous error classes
5217      inputField.removeClass("wpgmp_error");
5218      radiusField.removeClass("wpgmp_error");
5219  
5220      // Validate location
5221      if (!lat || !lon) {
5222          inputField.addClass("wpgmp_error").focus();
5223          hasError = true;
5224      }
5225  
5226      // Validate radius
5227      if (!radius || isNaN(radius) || parseInt(radius) <= 0) {
5228          radiusField.addClass("wpgmp_error");
5229          hasError = true;
5230      }
5231  
5232      if (hasError) {
5233          return; // Stop execution
5234      }
5235  
5236      const dim = $(map_obj.container).find("select[name='wpgmp_route_dimension']").val();
5237      const amenities = $(map_obj.container).find('input[name^="wpgmp_place_types"]:checked');
5238      const divide_by = (dim === 'miles') ? 1.60934 : 1;
5239      const circle_radius_meters = parseInt(radius) * divide_by * 1000;
5240  
5241      // Clear existing amenities
5242      if (map_obj.current_amenities?.length > 0) {
5243          map_obj.current_amenities.forEach((amenity) => {
5244              if (amenity.marker?.setMap) {
5245                  amenity.marker.setMap(null);
5246              }
5247          });
5248      }
5249  
5250      map_obj.current_amenities = [];
5251      map_obj.amenity_infowindow = map_obj.infowindow_marker;
5252  
5253      const place_types = amenities.map(function () {
5254          return $(this).val();
5255      }).get();
5256  
5257      place_types.forEach(function (placeType) {
5258          const request = {
5259              location: new google.maps.LatLng(lat, lon),
5260              radius: circle_radius_meters,
5261              types: [placeType],
5262              rankBy: "DISTANCE"
5263          };
5264  
5265          map_obj.fetchNearbyAmenities(request, function (places) {
5266              places.forEach(function (place) {
5267                  const marker = map_obj.createMarker(place);
5268                  map_obj.current_amenities.push({ marker, place });
5269              });
5270          });
5271      });
5272  
5273      // Center map and draw circle
5274      const centerLatLng = new google.maps.LatLng(lat, lon);
5275      map_obj.map.setCenter(centerLatLng);
5276  
5277      if (map_obj.map_data.map_tabs.nearby_tab?.show_nearby_circle) {
5278          if (map_obj.set_nearbycenter_circle) {
5279              map_obj.set_nearbycenter_circle.setMap(null);
5280          }
5281  
5282          map_obj.set_nearbycenter_circle = new google.maps.Circle({
5283              map: map_obj.map,
5284              fillColor: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_fillcolor,
5285              fillOpacity: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_fillopacity,
5286              strokeColor: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_strokecolor,
5287              strokeOpacity: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_strokeopacity,
5288              strokeWeight: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_strokeweight,
5289              center: centerLatLng,
5290              radius: circle_radius_meters
5291          });
5292  
5293          map_obj.map.setZoom(parseInt(map_obj.map_data.map_tabs.nearby_tab.nearby_circle_zoom));
5294      }
5295  });
5296  
5297  
5298  
5299    // -------------------------------
5300    // 📦 Category / Checkbox
5301    // -------------------------------
5302    $container.on("change", "input[data-marker-category]", function () {
5303      const $el = $(this), isChecked = $el.is(":checked");
5304      const catId = $el.data("marker-category");
5305      const $wrap = $el.closest('[data-container="wpgmp-category-tab-item"]');
5306  
5307      map_obj.last_category_chkbox_action = isChecked ? "checked" : "unchecked";
5308      if (isChecked) {
5309        map_obj.last_selected_cat_id = catId;
5310        $wrap.find("input[data-marker-location]").prop("checked", true);
5311      } else {
5312        map_obj.last_remove_cat_id = catId;
5313        $wrap.find("input[data-marker-location]").prop("checked", false);
5314      }
5315  
5316      const childCats = $el.data("child-cats");
5317      if (childCats) {
5318        childCats.toString().split(",").forEach(cat => {
5319          const $child = $el.closest(".wpgmp_tab_item").find(`[data-marker-category="${cat}"]`);
5320          $child.prop("checked", isChecked);
5321          $child.closest(".wpgmp_tab_item").find("input[data-marker-location]").prop("checked", isChecked);
5322        });
5323      }
5324  
5325      map_obj.update_filters();
5326    });
5327  
5328    $container.on("change", "input[data-marker-location]", () => map_obj.update_filters());
5329  
5330    // -------------------------------
5331    // 🖨️ Print Listings
5332    // -------------------------------
5333    $container.on("click", '[data-action="wpgmp-print"]', function () {
5334      const id = $(map_obj.element).attr("id");
5335      const $default = $(`[data-container="wpgmp-listing-${id}"]`);
5336      const $custom = $(`[data-container="wpgmp-custom-listing-${id}"]`);
5337      $default.length && $default.print();
5338      $custom.length && $custom.print();
5339    });
5340  
5341    // -------------------------------
5342    // 🔁 Select All Categories
5343    // -------------------------------
5344    if (map_obj.map_data.map_tabs?.category_tab?.select_all === true) {
5345      $container.on("click", 'input[name="wpgmp_select_all"]', function () {
5346        const isChecked = $(this).is(":checked");
5347        $container.find("input[data-marker-category], input[data-marker-location]").prop("checked", isChecked);
5348        map_obj.update_filters();
5349      });
5350    }
5351  
5352    // -------------------------------
5353    // 🔍 View Details
5354    // -------------------------------
5355    $container.on("click", "[data-view-details]", function (e) {
5356      e.preventDefault();
5357      const id = $(this).data("view-details");
5358      const target = $(this).attr("target");
5359  
5360      map_obj.places.forEach(place => {
5361        if (place.id == id) {
5362          if (place.source === "post") {
5363            const url = place.location.extra_fields.post_link;
5364            target === "_blank" ? window.open(url, "_blank") : location.href = url;
5365          } else {
5366            $("html, body").animate({ scrollTop: $container.offset().top - 150 }, 500);
5367            map_obj.open_infowindow(place.id);
5368          }
5369        }
5370      });
5371    });
5372  
5373    // -------------------------------
5374    // 📍 Locate Me Button
5375    // -------------------------------
5376    $container.on("click", `[data-wpgmp='mcurrent_location'][data-wpgmp-map-id="${map_id}"]`, function () {
5377      const $this = $(this);
5378      const $input = $this.parent().find(".wpgmp_auto_suggest");
5379
5380      map_obj.get_current_location(
5381        function (loc) {
5382          const lat = map_obj.isMapProvider("google") ? loc.lat() : loc.lat;
5383          const lng = map_obj.isMapProvider("google") ? loc.lng() : loc.lng;
5384  
5385          $input.data("latitude", lat);
5386          $input.data("longitude", lng);
5387  
5388          map_obj.wpgmp_geocode(lat, lng).then((result) => {
5389            $input.val(result.address);
5390          }).catch(console.error);
5391        },
5392        function () {}
5393      );
5394
5395    });
5396
5397  
5398    // -------------------------------
5399    // 📍 Route Toggle Handling
5400    // -------------------------------
5401    $container.find(".wpgmp_specific_route_item").prop("checked", true);
5402  
5403    $container.on("change", `[data-wpgmp='route_toggle'][data-wpgmp-map-id="${map_id}"]`, function () {
5404      const route = map_obj.route_directions[$(this).val()];
5405      if (route) route.setMap($(this).is(":checked") ? map_obj.map : null);
5406    });
5407
5408    // -------------------------------
5409    // 📍 Drawing Events
5410    // --
5411    $('.wpgmp-shape-delete').click(function (e) {
5412      e.preventDefault();
5413
5414      map_obj.deleteSelectedShape();
5415      $('.temp_row').addClass('hiderow');
5416  });
5417
5418  $('select[name="shape_stroke_opacity"]').change(function () {
5419      map_obj.set_shapes_options(map_obj.selectedShape);
5420  });
5421  $('select[name="shape_stroke_weight"]').change(function () {
5422      map_obj.set_shapes_options(map_obj.selectedShape);
5423  });
5424
5425  $('select[name="shape_fill_opacity"]').change(function () {
5426      map_obj.set_shapes_options(map_obj.selectedShape);
5427  });
5428 
5429
5430  if (typeof map_obj.map_data.shapes != 'undefined') {
5431      if (map_obj.map_data.shapes.drawing_editable === true) {
5432         
5433          $('.shape_fill_color').wpColorPicker({
5434              change: function(event, ui) {
5435                  var polyOptions2 = {
5436                      fillColor: $(this).val(),
5437                  };
5438                  map_obj.selectedShape.setOptions(polyOptions2);
5439              }
5440          });
5441
5442          $('.shape_stroke_color').wpColorPicker({
5443              change: function(event, ui) {
5444                  var polyOptions2 = {
5445                      strokeColor: $(this).val(),
5446                  };
5447                  map_obj.selectedShape.setOptions(polyOptions2);
5448              }
5449          });
5450      }
5451  }
5452
5453  $('input[name="shape_click_url"]').change(function () {
5454      map_obj.set_shapes_options(map_obj.selectedShape);
5455  });
5456  $('textarea[name="shape_click_message"]').blur(function () {
5457      map_obj.set_shapes_options(map_obj.selectedShape);
5458  });
5459
5460  $("textarea[name='shape_path']").blur(function () {
5461      var cordinates = $(this).val().split(' ');
5462      if (cordinates.length == 1) {
5463          cordinates = $(this).val().split("\n");
5464      }
5465      var path = [];
5466      $.each(cordinates, function (ind, cordinate) {
5467          var latlng = cordinate.split(',');
5468          path.push(new google.maps.LatLng(latlng[0], latlng[1]));
5469      });
5470      map_obj.selectedShape.setPath(path);
5471  });
5472
5473  $("input[name='shape_radius']").blur(function () {
5474      var radius = parseFloat($(this).val());
5475      map_obj.selectedShape.setRadius(radius);
5476  });
5477
5478  $("input[name='shape_center']").blur(function () {
5479      var latlng = $(this).val().split(',');
5480      map_obj.selectedShape.setCenter(new google.maps.LatLng(parseFloat(latlng[0]), parseFloat(latlng[1])));
5481  });
5482
5483  $("input[name='shape_northeast']").blur(function () {
5484      var ea = $(this).val().split(',');
5485      var sw = $("input[name='shape_southwest']").val().split(',');
5486
5487      map_obj.selectedShape.setBounds(new google.maps.LatLngBounds(new google.maps.LatLng(parseFloat(sw[0]), parseFloat(sw[1])), new google.maps.LatLng(parseFloat(ea[0]), parseFloat(ea[1]))));
5488  });
5489
5490  $("input[name='shape_southwest']").blur(function () {
5491      var sw = $(this).val().split(',');
5492      var ea = $("input[name='shape_northeast']").val().split(',');
5493
5494      map_obj.selectedShape.setBounds(new google.maps.LatLngBounds(new google.maps.LatLng(parseFloat(sw[0]), parseFloat(sw[1])), new google.maps.LatLng(parseFloat(ea[0]), parseFloat(ea[1]))));
5495  });
5496
5497  $("input[name='shape_center']").blur(function () {
5498      var latlng = $(this).val().split(',');
5499      map_obj.selectedShape.setCenter(new google.maps.LatLng(parseFloat(latlng[0]), parseFloat(latlng[1])));
5500  });
5501
5502
5503  }
5504  
5505  create_perpage_option() {
5506    var map_obj = this;
5507    var options = "";
5508    var content = "";
5509
5510    content +=
5511      '<select name="map_perpage_location_sorting" data-wpgmp-map-id="'+this.map_data.map_property.map_id+'" data-filter="map-perpage-location-sorting" class="choose_salutation">';
5512    content +=
5513      '<option value="' +
5514      map_obj.map_data.listing.pagination.listing_per_page +
5515      '">' +
5516      wpgmp_local.show_locations +
5517      "</option>";
5518    content += '<option value="25">25</option>';
5519    content += '<option value="50">50</option>';
5520    content += '<option value="100">100</option>';
5521    content += '<option value="200">200</option>';
5522    content += '<option value="500">500</option>';
5523    content +=
5524      '<option value="' +
5525      map_obj.show_places.length +
5526      '">' +
5527      wpgmp_local.all_location +
5528      "</option>";
5529    content += "</select>";
5530
5531    return content;
5532  }
5533  create_sorting() {
5534    var options = "";
5535
5536    var content = "";
5537
5538    if (this.map_data.listing.display_sorting_filter === true) {
5539      content +=
5540        '<select name="map_sorting" data-wpgmp-map-id="'+this.map_data.map_property.map_id+'" data-filter="map-sorting"><option value="">' +
5541        wpgmp_local.sort_by +
5542        "</option>";
5543      $.each(this.map_data.listing.sorting_options, function (id, name) {
5544        content += "<option value='" + id + "'>" + name + "</option>";
5545      });
5546      content += "</select>";
5547    }
5548
5549    return content;
5550  }
5551  create_radius() {
5552    var options = "";
5553
5554    var content = "";
5555    if (this.map_data.listing.display_radius_filter === true) {
5556      var radius_options = this.map_data.listing.radius_options;
5557
5558      if (radius_options != undefined) {
5559        content +=
5560          '<select data-name="radius"  data-wpgmp-map-id="'+this.map_data.map_property.map_id+'" name="map_radiu
5560s"><option value="">' +
5561          wpgmp_local.select_radius +
5562          "</option>";
5563        var radius_dimension = this.map_data.listing.radius_dimension;
5564        $.each(radius_options.split(","), function (id, name) {
5565          if (radius_dimension == "miles") {
5566            content +=
5567              "<option value='" +
5568              name +
5569              "'>" +
5570              name +
5571              " " +
5572              wpgmp_local.miles +
5573              "</option>";
5574          } else {
5575            content +=
5576              "<option value='" +
5577              name +
5578              "'>" +
5579              name +
5580              " " +
5581              wpgmp_local.km +
5582              "</option>";
5583          }
5584        });
5585        content += "</select>";
5586      }
5587    }
5588
5589    return content;
5590  }
5591  custom_filters() {
5592    var map_obj = this;
5593    var options = "";
5594    var places = this.map_data.places;
5595    var wpgmp_filters = this.map_data.filters;
5596    map_obj.template_data = [];
5597    this.filter_content = this.display_filters();
5598
5599    this.filter_position = this.map_data.listing.filters_position;
5600
5601    if (
5602      $(this.container).find(".wpgmp_filter_wrappers").length > 0 &&
5603      map_obj.map_data.map_options.advance_template == false
5604    )
5605      $(this.container)
5606        .find(".wpgmp_filter_wrappers")
5607        .html(this.filter_content);
5608
5609    if (
5610      typeof wpgmp_filters == "undefined" ||
5611      typeof wpgmp_filters.custom_filters == "undefined" ||
5612      wpgmp_filters.custom_filters.length == 0
5613    ) {
5614      return;
5615    }
5616
5617    $.each(
5618      wpgmp_filters.custom_filters,
5619      function (template_shortcode, filter_options) {
5620        var all_filters = [];
5621        var content = "";
5622        var filters = {};
5623        $.each(filter_options, function (filter_type, filter_parameter) {
5624          $.each(filter_parameter, function (filter_name, filter_label) {
5625            $.each(places, function (index, place) {
5626              if (filter_name == "category") {
5627                if (typeof place.categories == "undefined") {
5628                  place.categories = {};
5629                }
5630                $.each(place.categories, function (cat_index, category) {
5631                  if (typeof filters[category.type] == "undefined") {
5632                    filters[category.type] = {};
5633                  }
5634                  if (category.name) {
5635                    filters[category.type][category.name] = category.id;
5636                  }
5637                });
5638              } else {
5639                if (typeof place[filter_name] != "undefined") {
5640                  if (typeof filters[filter_name] == "undefined") {
5641                    filters[filter_name] = {};
5642                  }
5643                  if (place[filter_name]) {
5644                    filters[filter_name][place[filter_name]] =
5645                      place[filter_name];
5646                  }
5647                }
5648
5649                if (
5650                  typeof place.location.extra_fields[filter_name] !=
5651                  "undefined"
5652                ) {
5653                  if (typeof filters[filter_name] == "undefined") {
5654                    filters[filter_name] = {};
5655                  }
5656                  if (place.location.extra_fields[filter_name]) {
5657                    filters[filter_name][
5658                      place.location.extra_fields[filter_name]
5659                    ] = place.location.extra_fields[filter_name];
5660                  }
5661                }
5662
5663                if (typeof place.location[filter_name] != "undefined") {
5664                  if (typeof filters[filter_name] == "undefined") {
5665                    filters[filter_name] = {};
5666                  }
5667                  if (place.location[filter_name]) {
5668                    filters[filter_name][place.location[filter_name]] =
5669                      place.location[filter_name];
5670                  }
5671                }
5672
5673                if (
5674                  typeof place.custom_filters != "undefined" &&
5675                  typeof place.custom_filters[filter_name] != "undefined"
5676                ) {
5677                  if (typeof filters[filter_name] == "undefined") {
5678                    filters[filter_name] = {};
5679                  }
5680                  if (place.custom_filters[filter_name]) {
5681                    var options = place.custom_filters[filter_name];
5682                    if ($.isArray(options)) {
5683                      $.each(options, function (index, value) {
5684                        filters[filter_name][value] = value;
5685                      });
5686                    } else {
5687                      filters[filter_name][options] = options;
5688                    }
5689                  }
5690                }
5691
5692                // It could be radius filter.
5693                if (filter_name == "radius") {
5694                  if (typeof filters[filter_name] == "undefined") {
5695                    filters[filter_name] = {};
5696                  }
5697
5698                  var radius_options = wpgmp_filters.radius_options;
5699                  var radius_dimension = wpgmp_filters.radius_dimension;
5700                  $.each(radius_options.split(","), function (id, name) {
5701                    if (radius_dimension == "miles") {
5702                      filters[filter_name][name + " " + wpgmp_local.miles] =
5703                        name;
5704                    } else {
5705                      filters[filter_name][name + " " + wpgmp_local.km] =
5706                        name;
5707                    }
5708                  });
5709                }
5710              }
5711            });
5712          });
5713
5714          if (filter_type == "dropdown") {
5715            if (typeof filters != "undefined") {
5716              $.each(filters, function (index, options) {
5717                if(Object.keys(options).length < 1){
5718                  return true;
5719                }
5720                options = map_obj.sort_object_by_value(options);
5721                options = map_obj.sort_object_by_unique_values(options);
5722                options = map_obj.sort_numeric_value_filters(options);
5723                content +=
5724                  '<select data-filter="dropdown"  name="place_' +
5725                  index +
5726                  '" data-name = "' +
5727                  index +
5728                  '">';
5729                content +=
5730                  '<option value="">' +
5731                  (filter_parameter[index]
5732                    ? filter_parameter[index]
5733                    : "Select " + index) +
5734                  "</option>";
5735                $.each(options, function (name, value) {
5736                  var optionlabel = value;
5737                  value = value.replace("'", "&#39;");
5738                  value = value.replace('"', "&#34;");
5739                  if (value != "" && value != null)
5740                    content +=
5741                      "<option value='" +
5742                      value.toLowerCase() +
5743                      "'>" +
5744                      optionlabel +
5745                      "</option>";
5746                });
5747                content += "</select>";
5748              });
5749            }
5750          }
5751
5752          if (filter_type == "checklist") {
5753            if (typeof filters != "undefined") {
5754              $.each(filters, function (index, options) {
5755                options = map_obj.sort_object_by_value(options);
5756                options = map_obj.sort_object_by_unique_values(options);
5757                options = map_obj.sort_numeric_value_filters(options);
5758
5759                content += '<div class="wpgmp_filters_checklist">';
5760                content +=
5761                  '<label  data-filter = "place_' +
5762                  index +
5763                  '" >' +
5764                  (filter_parameter[index]
5765                    ? filter_parameter[index]
5766                    : "Select " + index) +
5767                  "</label>";
5768                content += '<div class="wpgmp_checklist_wrap">';
5769                $.each(options, function (name, value) {
5770                  if (value != "" && value != null)
5771                    content +=
5772                      "<div class='wpgmp_checkbox_input'><input data-filter='checklist' type='checkbox' data-name = '" +
5773                      index +
5774                      "' value='" +
5775                      value.toLowerCase() +
5776                      "'><span class='wpgmp_checklist_title'>" +
5777                      value +
5778                      "</span></div>";
5779                });
5780                content += "</div></div>";
5781              });
5782            }
5783          }
5784
5785          if (filter_type == "list") {
5786            if (typeof filters != "undefined") {
5787              $.each(filters, function (index, options) {
5788                content += '<div class="wpgmp_filters_list">';
5789                content +=
5790                  '<label  data-filter = "place_' +
5791                  index +
5792                  '" >' +
5793                  (wpgmp_filters.custom_filters[index]
5794                    ? wpgmp_filters.custom_filters[index]
5795                    : "Select " + index) +
5796                  "</label><ul>";
5797                $.each(options, function (name, value) {
5798                  if (value != "" && value != null)
5799                    content +=
5800                      "<li data-filter='list' data-name = '" +
5801                      index +
5802                      "' data-value='" +
5803                      value +
5804                      "'>" +
5805                      name +
5806                      "</li>";
5807                });
5808                content += "</ul></div>";
5809              });
5810            }
5811          }
5812          if (map_obj.map_data.map_options.advance_template) {
5813            if (!map_obj.template_data) {
5814              map_obj.template_data = {}; // Ensure template_data exists
5815            }
5816            if (!Array.isArray(map_obj.template_data.filter)) {
5817              map_obj.template_data.filter = []; // Ensure filter is an array
5818            }
5819            map_obj.template_data.filter.push(filters);
5820          }
5821        });
5822
5823        //$(map_obj.container).find("."+template_shortcode).html(content);
5824        if (map_obj.map_data.map_options.advance_template == false) {
5825          $(map_obj.container)
5826            .find(wpgmp_filters.filters_container)
5827            .append(content);
5828        }
5829      }
5830    );
5831
5832    // now create select boxes
5833  }
5834  sort_numeric_value_filters(filter_options) {
5835    if (!filter_options.some(isNaN)) {
5836      filter_options.sort(function (a, b) {
5837        return a - b;
5838      });
5839    }
5840    return filter_options;
5841  }
5842
5843  // -----------------------------
5844  // 📦 Sorting Utilities
5845  // -----------------------------
5846  sorting(order_by, in_order, data_type) {
5847    switch (order_by) {
5848      case "category":
5849        if (this.places !== undefined) {
5850          this.places.sort(this.sortByCategory);
5851        }
5852        if (this.show_places !== undefined) {
5853          this.show_places.sort(this.sortByCategory);
5854        }
5855        if (in_order == "desc") {
5856          this.places.reverse();
5857          this.show_places.reverse();
5858        }
5859        break;
5860
5861      case "title":
5862        if (this.map_data.places !== undefined) {
5863          this.map_data.places.sort(this.sortByTitle);
5864        }
5865        if (this.show_places !== undefined) {
5866          this.show_places.sort(this.sortByTitle);
5867        }
5868        if (in_order == "desc") {
5869          this.map_data.places.reverse();
5870          this.places.reverse();
5871          this.show_places.reverse();
5872        }
5873        break;
5874
5875      case "address":
5876        if (this.map_data.places !== undefined) {
5877          this.map_data.places.sort(this.sortByAddress);
5878        }
5879        if (this.show_places !== undefined) {
5880          this.show_places.sort(this.sortByAddress);
5881        }
5882        if (in_order == "desc") {
5883          this.places.reverse();
5884          this.show_places.reverse();
5885        }
5886        break;
5887      default:
5888        var first_place = this.map_data.places[0];
5889        if (typeof first_place[order_by] != "undefined") {
5890          this.map_data.places.sort(this.sortByPlace(order_by, data_type));
5891          this.show_places.sort(this.sortByPlace(order_by, data_type));
5892        } else if (typeof first_place.location[order_by] != "undefined") {
5893          this.map_data.places.sort(this.sortByLocation(order_by, data_type));
5894          this.show_places.sort(this.sortByLocation(order_by, data_type));
5895        } else if (
5896          typeof first_place.location.extra_fields[order_by] != "undefined"
5897        ) {
5898          this.map_data.places.sort(
5899            this.sortByExtraFields(order_by, data_type)
5900          );
5901          this.show_places.sort(this.sortByExtraFields(order_by, data_type));
5902        }
5903
5904        if (in_order == "desc") {
5905          this.places.reverse();
5906          this.show_places.reverse();
5907        }
5908    }
5909  }
5910  sorting_inside_tabs(data, in_order) {
5911    if (in_order == "asc") {
5912      data.sort();
5913    }
5914    if (in_order == "desc") {
5915      data.sort();
5916      data.reverse();
5917    }
5918    return data;
5919  }
5920  sortByTitle(a, b) {
5921    var a_val = a.title.toLowerCase();
5922    var b_val = b.title.toLowerCase();
5923    return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5924  }
5925
5926  sortByValue(a, b) {
5927    var a_val = a.toLowerCase();
5928    var b_val = b.toLowerCase();
5929    return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5930  }
5931  sortByCategory(a, b) {
5932    if (b.categories[0] && a.categories[0]) {
5933      if (a.categories[0].name && b.categories[0].name) {
5934        var a_val = a.categories[0].name.toLowerCase();
5935        var b_val = b.categories[0].name.toLowerCase();
5936        return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5937      }
5938    }
5939  }
5940  sortByAddress(a, b) {
5941    var a_val = a.address.toLowerCase();
5942    var b_val = b.address.toLowerCase();
5943    return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5944  }
5945  sortByPlace(order_by, data_type) {
5946    return function (a, b) {
5947      if (b[order_by] && a[order_by]) {
5948        if (a[order_by] && b[order_by]) {
5949          var a_val = a[order_by].toLowerCase();
5950          var b_val = b[order_by].toLowerCase();
5951          if (data_type == "num") {
5952            a_val = parseInt(a_val);
5953            b_val = parseInt(b_val);
5954          }
5955          return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5956        }
5957      }
5958    };
5959  }
5960  sortByExtraFields(order_by, data_type) {
5961    return function (a, b) {
5962      if (
5963        typeof b.location.extra_fields[order_by] != "undefined" &&
5964        typeof a.location.extra_fields[order_by] != "undefined"
5965      ) {
5966        if (b.location.extra_fields[order_by] == null) {
5967          b.location.extra_fields[order_by] = "";
5968        }
5969
5970        if (a.location.extra_fields[order_by] == null) {
5971          a.location.extra_fields[order_by] = "";
5972        }
5973
5974        if (data_type == "num") {
5975          var a_val = parseInt(a.location.extra_fields[order_by]);
5976          var b_val = parseInt(b.location.extra_fields[order_by]);
5977        } else {
5978          var a_val = a.location.extra_fields[order_by].toLowerCase();
5979          var b_val = b.location.extra_fields[order_by].toLowerCase();
5980        }
5981
5982        return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5983      }
5984    };
5985  }
5986  sortByLocation(order_by, data_type) {
5987    return function (a, b) {
5988      if (b.location[order_by] && a.location[order_by]) {
5989        if (a.location[order_by] && b.location[order_by]) {
5990          var a_val = a.location[order_by].toLowerCase();
5991          var b_val = b.location[order_by].toLowerCase();
5992          if (data_type == "num") {
5993            a_val = parseInt(a_val);
5994            b_val = parseInt(b_val);
5995          }
5996          return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5997        }
5998      }
5999    };
6000  }
6001  sort_object_by_keyvalue(options, by, type, in_order) {
6002    var sortable = [];
6003    for (var key in options) {
6004      sortable.push(options[key]);
6005    }
6006
6007    sortable.sort(this.sortByPlace(by, type));
6008
6009    if (in_order == "desc") {
6010      sortable.reverse();
6011    }
6012
6013    return sortable;
6014  }
6015  sort_object_by_unique_values(options) {
6016    var new_options = [];
6017    var uniqueNames = [];
6018    for (var key in options) {
6019      if (options[key].indexOf(",") > -1) {
6020        options[key].split(/\s*,\s*/).forEach(function (single_option_value) {
6021          new_options.push(single_option_value.trim());
6022        });
6023      } else {
6024        new_options.push(options[key].trim());
6025      }
6026    }
6027
6028    // var new_options = new_options.map(function(item) {
6029    //     return item.toLowerCase();
6030    // });
6031
6032    uniqueNames = new_options.filter(function (item, pos) {
6033      return new_options.indexOf(item) == pos;
6034    });
6035
6036    return uniqueNames.sort();
6037  }
6038  sort_object_by_value(options) {
6039    var sortable = [];
6040    for (var key in options) {
6041      sortable.push(key);
6042    }
6043
6044    sortable.sort(this.sortByValue);
6045    var new_options = {};
6046    for (var i = 0; i < sortable.length; i++) {
6047      new_options[sortable[i]] = options[sortable[i]];
6048    }
6049
6050    return new_options;
6051  }
6052
6053  // -----------------------------
6054  // 📌 Directions & Nearby
6055  // -----------------------------
6056  get_user_position() { }
6057
6058  wpgmp_get_nearby_locations() {}
6059  wpgmp_within_radius() {}
6060  wpgmp_set_search_area() {}
6061  map_widgets() {}
6062  widget_route_tab() {}
6063  widget_nearby() {}
6064  widget_directions() {}
6065  widget_category() {}
6066  add_tab() {}
6067  show_tabs() {}
6068  create_routes() {}
6069  wpgmp_draw_route() {}
6070  wpgmp_find_direction() {}
6071  wpgmp_direction_steps() {}
6072  register_direction_tab() {}
6073  
6074  wpgmp_sort_distance(obj) {
6075    var arr = [];
6076    for (var prop in obj) {
6077      if (obj.hasOwnProperty(prop)) {
6078        arr.push({
6079          key: prop,
6080          value: obj[prop],
6081        });
6082      }
6083    }
6084    arr.sort(function (a, b) {
6085      return a.value - b.value;
6086    });
6087    return arr;
6088  }
6089  // ------------- Location Auto Suggest Control----------------
6090  // 🧭 Search & Autocomplete
6091  // -----------------------------
6092  
6093 
6094  async _handleKeyUp(e, inputField, resultsElement) {
6095    const map_obj = this;
6096    const isGoogle = map_obj.isMapProvider("google");
6097    const inputText = inputField.value.trim();
6098    const wrapper = $(inputField).closest(".wpgmp-autocomplete-wrapper");
6099    const loader = wrapper.find(".wpgmp-autosuggest-loader");
6100    loader.show();
6101    let activeIndex = -1;
6102  
6103    // Clear results if empty input
6104    if (!inputText) {
6105      resultsElement.innerHTML = "";
6106      resultsElement.style.display = "none";
6107      $(".wpgmp-autosuggest-results").hide();
6108      loader.hide();
6109      return;
6110    }
6111  
6112    // Utility to render list and bind interactions
6113    const renderSuggestions = (suggestions, getLabel, onSelect) => {
6114      resultsElement.innerHTML = "";
6115      resultsElement.style.display = "block";
6116      $(".wpgmp-autosuggest-results").show();
6117      loader.hide();
6118      suggestions.forEach((item, index) => {
6119        const li = document.createElement("li");
6120        li.textContent = getLabel(item);
6121        li.tabIndex = 0;
6122        li.dataset.index = index;
6123  
6124        const handleSelection = () => {
6125          onSelect(item);
6126          resultsElement.innerHTML = "";
6127          resultsElement.style.display = "none";
6128          $(".wpgmp-autosuggest-results").hide();
6129          activeIndex = -1;
6130        };
6131  
6132        li.addEventListener("click", handleSelection);
6133        li.addEventListener("keypress", (e) => {
6134          if (e.key === "Enter") handleSelection();
6135        });
6136  
6137        resultsElement.appendChild(li);
6138      });
6139  
6140      // ⌨️ Keyboard support
6141      inputField.addEventListener("keydown", (event) => {
6142        const items = resultsElement.querySelectorAll("li");
6143        if (!items.length) return;
6144      
6145        if (event.key === "ArrowDown") {
6146          event.preventDefault();
6147          activeIndex = (activeIndex + 1) % items.length;
6148        } else if (event.key === "ArrowUp") {
6149          event.preventDefault();
6150          activeIndex = (activeIndex - 1 + items.length) % items.length;
6151        } else if (event.key === "Enter" && activeIndex >= 0) {
6152          event.preventDefault();
6153          const selectedItem = items[activeIndex];
6154          selectedItem.dispatchEvent(new Event("click")); // triggers the right one
6155          return;
6156        } else if (event.key === "Escape") {
6157          resultsElement.innerHTML = "";
6158          resultsElement.style.display = "none";
6159          $(".wpgmp-autosuggest-results").hide();
6160          return;
6161        }
6162      
6163        items.forEach((item, i) => {
6164          const isActive = i === activeIndex;
6165          item.classList.toggle("active", isActive);
6166          if (isActive) {
6167            inputField.value = item.textContent; // 🟢 update input as you move
6168          }
6169        });
6170      });
6171      
6172  
6173      // 🖱️ Close on outside click
6174      const closeOnOutsideClick = (e) => {
6175        if (!resultsElement.contains(e.target) && e.target !== inputField) {
6176          resultsElement.innerHTML = "";
6177          resultsElement.style.display = "none";
6178          $(".wpgmp-autosuggest-results").hide();
6179
6180          document.removeEventListener("click", closeOnOutsideClick);
6181        }
6182      };
6183  
6184      setTimeout(() => {
6185        document.addEventListener("click", closeOnOutsideClick);
6186      }, 0);
6187    };
6188  
6189    // 🌍 Leaflet (Nominatim)
6190    if (!isGoogle) {
6191      let baseUrl = "https://nominatim.openstreetmap.org/search";
6192      const request = {
6193        q: inputText,
6194        limit: 10,
6195        format: "json",
6196        addressdetails: 1,
6197      };
6198  
6199      if (
6200        wpgmp_local.wpgmp_country_specific &&
6201        wpgmp_local.wpgmp_country_specific == true &&
6202        wpgmp_local.wpgmp_countries &&
6203        wpgmp_local.wpgmp_countries.length > 0
6204      ) {
6205        const country = wpgmp_local.wpgmp_countries.join(",");
6206        baseUrl += `?countrycodes=${country}`;
6207      }
6208      
6209      try {
6210        const suggestions = await $.getJSON(baseUrl, request);
6211  
6212        renderSuggestions(
6213          suggestions,
6214          (item) => item.display_name,
6215          (selected) => {
6216            map_obj.wpgmp_handle_place_selection(selected, inputField);
6217            inputField.value = selected.display_name;
6218          }
6219        );
6220      } catch (error) {
6221        console.error("Nominatim autocomplete failed:", error);
6222      }
6223  
6224      return;
6225    }
6226  
6227    // 📍 Google Places
6228    try {
6229      const {
6230        Place,
6231        AutocompleteSessionToken,
6232        AutocompleteSuggestion,
6233      } = await google.maps.importLibrary("places");
6234  
6235      const token = new AutocompleteSessionToken();
6236      const request = { input: inputText, sessionToken: token };
6237  
6238      if (
6239        wpgmp_local.wpgmp_country_specific &&
6240        wpgmp_local.wpgmp_country_specific == true &&
6241        wpgmp_local.wpgmp_countries &&
6242        wpgmp_local.wpgmp_countries.length > 0
6243      ) {
6244        request.includedRegionCodes = wpgmp_local.wpgmp_countries;
6245      }
6246      
6247      const { suggestions } =
6248        await AutocompleteSuggestion.fetchAutocompleteSuggestions(request);
6249  
6250      renderSuggestions(
6251        suggestions,
6252        (item) => item.placePrediction.text.toString(),
6253        async (selected) => {
6254          const place = selected.placePrediction.toPlace();
6255          await place.fetchFields({
6256            fields: [
6257              "displayName",
6258              "formattedAddress",
6259              "location",
6260              "viewport",
6261              "addressComponents",
6262            ],
6263          });
6264  
6265          map_obj.wpgmp_handle_place_selection(place, inputField);
6266          inputField.value = place.formattedAddress;
6267        }
6268      );
6269    } catch (error) {
6270      console.error("Google Places autocomplete failed:", error);
6271    }
6272  }
6273  
6274  google_auto_suggest(obj) {
6275    var map_obj = this;
6276
6277    obj.each(function () {
6278      var current_input = this;
6279
6280      if (!$(current_input).parent().hasClass("wpgmp-autocomplete-wrapper")) {
6281        $(current_input)
6282          .wrap('<div class="wpgmp-autocomplete-wrapper"></div>')
6283          .after(' <div class="wpgmp-autosuggest-loader" style="display:none;"></div><ul class="wpgmp-autosuggest-results"></ul>');
6284      }
6285
6286      const resultsElement = $(current_input).siblings(".wpgmp-autosuggest-results")[0];
6287
6288      map_obj.wpgmp_initialise_autosuggest(current_input, resultsElement);
6289    });
6290  }
6291
6292  wpgmp_initialise_autosuggest(inputField, resultsElement) {
6293      
6294    $(inputField).on("input", this._debounce((e) => this._handleKeyUp(e,inputField,resultsElement), 500));
6295
6296  }
6297
6298  wpgmp_extract_place_data(place) {
6299    var map_obj = this;
6300    const data = {
6301        address: '',
6302        lat: '',
6303        lng: '',
6304        city: '',
6305        state: '',
6306        country: '',
6307        postal: ''
6308    };
6309
6310    if (map_obj.isMapProvider('leaflet')) {
6311        data.address = place.display_name || '';
6312        data.lat = parseFloat(place.lat);
6313        data.lng = parseFloat(place.lon);
6314
6315        const address = place.address || {};
6316        data.city = address.city || address.county || '';
6317        data.state = address.state || '';
6318        data.country = address.country || '';
6319        data.postal = address.postcode || '';
6320
6321    } else {
6322        data.address = place.formattedAddress || '';
6323        if (place.location) {
6324            data.lat = place.location.lat();
6325            data.lng = place.location.lng();
6326        }
6327
6328        // Assume `this` refers to your instance with wpgmp_finddata method
6329        const finder = this.wpgmp_finddata || instance?.wpgmp_finddata;
6330
6331        if (typeof finder === 'function') {
6332            data.country = finder.call(this, place, 'country') || '';
6333            data.state = finder.call(this, place, 'administrative_area_level_1') || '';
6334            data.city = (
6335                finder.call(this, place, 'locality') ||
6336                finder.call(this, place, 'administrative_area_level_2') ||
6337                finder.call(this, place, 'administrative_area_level_3') || ''
6338            );
6339            data.postal = finder.call(this, place, 'postal_code') || '';
6340        }
6341    }
6342
6343    return data;
6344}
6345
6346wpgmp_handle_place_selection(place, inputField) {
6347  const map_obj = this;
6348  const isGoogle = map_obj.isMapProvider("google");
6349  const fieldName = $(inputField).attr("name");
6350  const callback = $(inputField).data("wpgmp-autosuggest-callback");
6351
6352  if (typeof callback === "function") {
6353    callback(place);
6354    return;
6355  }
6356
6357  // Extract data from place
6358  let lat, lng, city, state, country, postal, fullAddress;
6359
6360  if (isGoogle) {
6361    lat = place.location.lat();
6362    lng = place.location.lng();
6363    city = map_obj.wpgmp_finddata(place, "administrative_area_level_3") ||
6364           map_obj.wpgmp_finddata(place, "locality");
6365    state = map_obj.wpgmp_finddata(place, "administrative_area_level_1");
6366    country = map_obj.wpgmp_finddata(place, "country");
6367    postal = map_obj.wpgmp_finddata(place, "postal_code");
6368    fullAddress = place.formattedAddress || $(inputField).val();
6369  } else {
6370    lat = parseFloat(place.lat);
6371    lng = parseFloat(place.lon);
6372    const address = place.address || {};
6373    city = address.city || address.county || "";
6374    state = address.state || "";
6375    country = address.country || "";
6376    postal = address.postcode || "";
6377    fullAddress = place.display_name || $(inputField).val();
6378  }
6379
6380  // Apply marker and view
6381  map_obj.placeMarker(lat, lng);
6382
6383  // Update relevant fields
6384  if (fieldName === "location_address") {
6385    $(".google_latitude").val(lat);
6386    $(".google_longitude").val(lng);
6387    $(".google_city").val(city);
6388    $(".google_state").val(state);
6389    $(".google_country").val(country);
6390    $(".google_postal_code").val(postal);
6391
6392    if (isGoogle && place.viewport) {
6393      map_obj.map.fitBounds(place.viewport);
6394    }
6395
6396  } else if (fieldName === "wpgmp_metabox_location") {
6397    $("input[name='wpgmp_metabox_latitude']").val(lat);
6398    $("input[name='wpgmp_metabox_longitude']").val(lng);
6399    $("input[name='wpgmp_metabox_location_city']").val(city);
6400    $("input[name='wpgmp_metabox_location_state']").val(state);
6401    $("input[name='wpgmp_metabox_location_country']").val(country);
6402    $("input[name='wpgmp_metabox_location_hidden']").val(fullAddress);
6403
6404    if (isGoogle && place.viewport) {
6405      map_obj.map.fitBounds(place.viewport);
6406    }
6407
6408  } else if (fieldName === "map-search-control") {
6409    const zoom = parseInt(map_obj.settings.zoom_level_after_search || 10);
6410    map_obj.map.setZoom(zoom);
6411    map_obj.map.setCenter(isGoogle ? place.location : [lat, lng]);
6412
6413  } else {
6414    // Other pages (frontend search, etc.)
6415    map_obj.map.setCenter(isGoogle ? place.location : [lat, lng]);
6416
6417    $(inputField).data("longitude", lng);
6418    $(inputField).data("latitude", lat);
6419
6420    if (
6421      fieldName === "wpgmp_search_input" ||
6422      $(inputField).data("wpgmp-filter-by") === "search"
6423    ) {
6424      if (map_obj.map_data.listing) {
6425        map_obj.search_area = isGoogle ? place.location : [lat, lng];
6426      }
6427      map_obj.update_filters();
6428    }
6429
6430    if (typeof map_obj.display_circle_when_searched === "function") {
6431      map_obj.display_circle_when_searched(place, inputField);
6432    }
6433  }
6434}
6435
6436  // ------------- Ended Location Auto Suggest Control----------------
6437
6438
6439  get_current_location(success_func, error_func) {
6440    const map_obj = this;
6441  
6442    if (typeof map_obj.user_location === "undefined") {
6443      navigator.geolocation.getCurrentPosition(
6444        (position) => {
6445          const lat = position.coords.latitude;
6446          const lng = position.coords.longitude;
6447  
6448          map_obj.user_location = map_obj.isMapProvider("google")
6449            ? new google.maps.LatLng(lat, lng)
6450            : L.latLng(lat, lng);
6451  
6452          if (success_func) success_func(map_obj.user_location);
6453        },
6454        (err) => {
6455          console.warn("Geolocation error:", err);
6456  
6457          map_obj.user_location = map_obj.isMapProvider("google")
6458            ? map_obj.map.getCenter()
6459            : map_obj.map.getCenter(); // both APIs support getCenter()
6460  
6461          if (error_func) error_func(map_obj.user_location);
6462        },
6463        {
6464          enableHighAccuracy: true,
6465          timeout: 50000,
6466          maximumAge: 0,
6467        }
6468      );
6469    } else {
6470      if (success_func) success_func(map_obj.user_location);
6471    }
6472  }
6473
6474  wpgmp_geocode_address(address) {
6475    const map_obj = this;
6476    const isGoogle = map_obj.isMapProvider("google");
6477  
6478    return new Promise((resolve) => {
6479      if (!address || address.trim().length < 2) {
6480        resolve(null);
6481        return;
6482      }
6483  
6484      const countries = map_obj.settings.country_codes || [];
6485      const restrictCountries = map_obj.settings.country_specific === true;
6486  
6487      if (isGoogle) {
6488        const request = { address };
6489        if (restrictCountries && countries.length > 0) {
6490          request.componentRestrictions = {
6491            country: countries.join(","),
6492          };
6493        }
6494        const geocoder = new google.maps.Geocoder();
6495        geocoder.geocode(request, (results, status) => {
6496          if (status === google.maps.GeocoderStatus.OK && results[0]) {
6497            const result = results[0];
6498            const location = result.geometry.location;
6499            const components = result.address_components;
6500  
6501            const extract = (type) =>
6502              components.find((c) => c.types.includes(type))?.long_name || "";
6503  
6504            resolve({
6505              address: result.formatted_address,
6506              city:
6507                extract("locality") || extract("administrative_area_level_3"),
6508              state: extract("administrative_area_level_1"),
6509              country: extract("country"),
6510              postal: extract("postal_code"),
6511              lat: location.lat(),
6512              lng: location.lng(),
6513            });
6514          } else {
6515            resolve(null);
6516          }
6517        });
6518      } else {
6519        const nominatimUrl = "https://nominatim.openstreetmap.org/search";
6520        const params = {
6521          q: address,
6522          format: "json",
6523          limit: 1,
6524          addressdetails: 1,
6525        };
6526  
6527        if (restrictCountries && countries.length > 0) {
6528          params.countrycodes = countries.join(",");
6529        }
6530  
6531        $.getJSON(nominatimUrl, params)
6532          .done((results) => {
6533            if (results && results.length > 0) {
6534              const r = results[0];
6535              const a = r.address || {};
6536  
6537              resolve({
6538                address: r.display_name,
6539                city: a.city || a.county || a.town || a.village || "",
6540                state: a.state || "",
6541                country: a.country || "",
6542                postal: a.postcode || "",
6543                lat: parseFloat(r.lat),
6544                lng: parseFloat(r.lon),
6545              });
6546            } else {
6547              resolve(null);
6548            }
6549          })
6550          .fail(() => resolve(null));
6551      }
6552    });
6553  }
6554  
6555  
6556  wpgmp_geocode(lat, lng) {
6557    var map_obj = this;
6558    
6559    return new Promise((resolve, reject) => {
6560      if (map_obj.isMapProvider('google') && typeof google !== 'undefined') {
6561        const geocoder = new google.maps.Geocoder();
6562        const latlng = new google.maps.LatLng(lat, lng);
6563  
6564        geocoder.geocode({ location: latlng }, (results, status) => {
6565          if (status === google.maps.GeocoderStatus.OK && results[0]) {
6566            const components = results[0].address_components;
6567  
6568            const getComp = (type) => {
6569              const match = components.find(c => c.types.includes(type));
6570              return match ? match.long_name : '';
6571            };
6572  
6573            resolve({
6574              address: results[0].formatted_address,
6575              latitude: lat,
6576              longitude: lng,
6577              city: getComp("locality") || getComp("administrative_area_level_2") || getComp("administrative_area_level_3"),
6578              state: getComp("administrative_area_level_1"),
6579              country: getComp("country"),
6580              postal_code: getComp("postal_code")
6581            });
6582          } else {
6583            reject('Google Geocoding failed: ' + status);
6584          }
6585        });
6586  
6587      } else if (map_obj.isMapProvider('leaflet')) {
6588        const url = `https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lng}`;
6589  
6590        fetch(url)
6591          .then(res => res.json())
6592          .then(data => {
6593            const addr = data.address || {};
6594            resolve({
6595              address: data.display_name || '',
6596              latitude: lat,
6597              longitude: lng,
6598              city: addr.city || addr.town || addr.village || addr.county || '',
6599              state: addr.state || '',
6600              country: addr.country || '',
6601              postal_code: addr.postcode || ''
6602            });
6603          })
6604          .catch(err => reject('Leaflet/OSM reverse geocoding failed: ' + err));
6605      } else {
6606        reject('Unknown map provider: ' + provider);
6607      }
6608    });
6609  }
6610  
6611  show_search_control() {
6612    const map_obj = this;
6613    const isGoogle = map_obj.isMapProvider("google");
6614    const input = $(map_obj.container).find('[data-input="map-search-control"]');
6615    if (!input) return;
6616  
6617    // Create a wrapper and move input inside it
6618    const wrapper = document.createElement('div');
6619    wrapper.className = 'wpgmp-search-control-wrapper';
6620    if (input[0]) {
6621      wrapper.appendChild(input[0]);
6622    }
6623    
6624  
6625    if (isGoogle) {
6626      const positionKey = map_obj.settings.search_control_position?.toUpperCase();
6627      const position = google.maps.ControlPosition?.[positionKey];
6628  
6629      if (position !== undefined && map_obj.map.controls) {
6630        map_obj.map.controls[position].push(wrapper);
6631      } else {
6632        console.warn("Invalid Google search control position:", positionKey);
6633      }
6634
6635      // ✅ Initialize autocomplete
6636      if (typeof map_obj.google_auto_suggest === "function") {
6637        map_obj.google_auto_suggest(input);
6638      } else {
6639        console.warn("google_auto_suggest() is not defined or not a function.");
6640      }
6641
6642  
6643    } else {
6644      // Create a custom Leaflet control
6645      const LeafletSearchControl = L.Control.extend({
6646        options: {
6647          position: (map_obj.settings.search_control_position || 'topright').toLowerCase(),
6648        },
6649        onAdd: function () {
6650          return wrapper;
6651        },
6652      });
6653  
6654      map_obj.map.addControl(new LeafletSearchControl());
6655    }
6656  }
6657  
6658
6659  // -----------------------------
6660  // 🗂️ Categories
6661  // -----------------------------
6662  search_category(
6663    array,
6664    cat_id,
6665    index,
6666    categories_tab_data,
6667    child_categories_tab_data
6668  ) {
6669    var map_obj = this;
6670    var flag = true;
6671    $.each(array, function (k, i) {
6672      if (k == cat_id) {
6673        index = i;
6674        flag = false;
6675        if (typeof child_categories_tab_data[cat_id] == "undefined") {
6676          child_categories_tab_data[cat_id] = {};
6677          child_categories_tab_data[cat_id]["data"] = [];
6678          child_categories_tab_data[cat_id]["parent_cat"] = i;
6679          child_categories_tab_data[cat_id]["cat_id"] = cat_id;
6680          $.each(map_obj.categories, function (k, e) {
6681            if (e.group_map_id == cat_id) {
6682              child_categories_tab_data[cat_id]["cat_title"] =
6683                e.group_map_title;
6684              child_categories_tab_data[cat_id]["cat_marker_icon"] =
6685                e.group_marker;
6686            }
6687          });
6688        }
6689        index = map_obj.search_category(
6690          map_obj.map_data.map_tabs.category_tab.child_cats,
6691          i,
6692          index,
6693          categories_tab_data,
6694          child_categories_tab_data
6695        );
6696      }
6697    });
6698    if (flag == true) {
6699      if (typeof categories_tab_data[cat_id] == "undefined") {
6700        categories_tab_data[cat_id] = {};
6701        categories_tab_data[cat_id]["data"] = [];
6702        categories_tab_data[cat_id]["cat_id"] = cat_id;
6703        $.each(map_obj.categories, function (k, e) {
6704          if (e.group_map_id == cat_id) {
6705            categories_tab_data[cat_id]["cat_title"] = e.group_map_title;
6706            categories_tab_data[cat_id]["cat_marker_icon"] = e.group_marker;
6707          }
6708        });
6709      }
6710    }
6711    return index;
6712  }
6713  display_sub_categories(
6714    child_categories_tab_data,
6715    cat_id,
6716    content,
6717    padding
6718  ) {
6719    var map_obj = this;
6720
6721    var category_orders = [];
6722    if (typeof child_categories_tab_data != "undefined") {
6723      $.each(child_categories_tab_data, function (index, categories) {
6724        var loc_count = categories.data.length;
6725
6726        if (typeof child_categories_tab_data != "undefined") {
6727          $.each(child_categories_tab_data, function (c, ccat) {
6728            if (ccat.parent_cat == categories.cat_id) {
6729              loc_count = loc_count + ccat.data.length;
6730              $.each(child_categories_tab_data, function (cc, cccat) {
6731                if (cccat.parent_cat == ccat.cat_id) {
6732                  loc_count = loc_count + cccat.data.length;
6733                }
6734              });
6735            }
6736          });
6737        }
6738        categories.loc_count = loc_count;
6739
6740        if (map_obj.map_data.map_tabs.category_tab.cat_order_by == "count") {
6741          category_orders.push(categories.loc_count);
6742        } else if (
6743          map_obj.map_data.map_tabs.category_tab.cat_order_by == "category"
6744        ) {
6745          if (categories.cat_order) {
6746            category_orders.push(categories.cat_order);
6747          } else if (
6748            !categories.cat_order &&
6749            map_obj.map_data.map_tabs.category_tab.all_cats[categories.cat_id]
6750          ) {
6751            categories.cat_order =
6752              map_obj.map_data.map_tabs.category_tab.all_cats[
6753                categories.cat_id
6754              ].extensions_fields.cat_order;
6755            category_orders.push(categories.cat_order);
6756          }
6757        } else {
6758          if (categories.cat_title) {
6759            category_orders.push(categories.cat_title);
6760          } else if (
6761            !categories.cat_title &&
6762            map_obj.map_data.map_tabs.category_tab.all_cats[categories.cat_id]
6763          ) {
6764            categories.cat_title =
6765              map_obj.map_data.map_tabs.category_tab.all_cats[
6766                categories.cat_id
6767              ].group_map_title;
6768            category_orders.push(categories.cat_title);
6769          }
6770        }
6771      });
6772    }
6773    if (map_obj.map_data.map_tabs.category_tab.cat_order_by == "category") {
6774      category_orders.sort(function (a, b) {
6775        return a - b;
6776      });
6777    } else if (
6778      map_obj.map_data.map_tabs.category_tab.cat_order_by == "count"
6779    ) {
6780      category_orders.sort(function (a, b) {
6781        return b - a;
6782      });
6783    } else {
6784      category_orders.sort();
6785    }
6786    var ordered_categories = [];
6787    var check_cats = [];
6788    $.each(category_orders, function (index, cat_title) {
6789      $.each(child_categories_tab_data, function (index, categories) {
6790        var compare_with;
6791        if (map_obj.map_data.map_tabs.category_tab.cat_order_by == "count") {
6792          compare_with = categories.loc_count;
6793        } else if (
6794          map_obj.map_data.map_tabs.category_tab.cat_order_by == "category"
6795        ) {
6796          compare_with = categories.cat_order;
6797        } else {
6798          compare_with = categories.cat_title;
6799        }
6800
6801        if (
6802          cat_title == compare_with &&
6803          $.inArray(categories.cat_id, check_cats) == -1
6804        ) {
6805          ordered_categories.push(categories);
6806          check_cats.push(categories.cat_id);
6807        }
6808      });
6809    });
6810
6811    $.each(ordered_categories, function (index, child_cat) {
6812      if (child_cat.parent_cat == cat_id) {
6813        var category_image = "";
6814
6815        if (
6816          !child_cat.cat_title &&
6817          map_obj.map_data.map_tabs.category_tab.all_cats[child_cat.cat_id]
6818        ) {
6819          child_cat.cat_title =
6820            map_obj.map_data.map_tabs.category_tab.all_cats[
6821              child_cat.cat_id
6822            ].group_map_title;
6823        }
6824
6825        if (
6826          !child_cat.cat_marker_icon &&
6827          map_obj.map_data.map_tabs.category_tab.all_cats[child_cat.cat_id]
6828        ) {
6829          child_cat.cat_marker_icon =
6830            map_obj.map_data.map_tabs.category_tab.all_cats[
6831              child_cat.cat_id
6832            ].group_marker;
6833        }
6834        if (typeof child_cat.cat_marker_icon != "undefined") {
6835          category_image =
6836            '<span class="arrow"><img src="' +
6837            child_cat.cat_marker_icon +
6838            '"></span>';
6839        }
6840        content +=
6841          '<div class="wpgmp_tab_item" data-container="wpgmp-category-tab-item" style="padding-left:' +
6842          padding +
6843          'px;">';
6844
6845        if (
6846          map_obj.map_data.map_tabs.category_tab.parent_cats !== undefined &&
6847          map_obj.map_data.map_tabs.category_tab.parent_cats[child_cat.cat_id]
6848        )
6849          var child_cats_str =
6850            ' data-child-cats="' +
6851            map_obj.map_data.map_tabs.category_tab.parent_cats[
6852              child_cat.cat_id
6853            ].join(",") +
6854            '"';
6855        else var child_cats_str = "";
6856
6857        content +=
6858          '<input type="checkbox"' +
6859          child_cats_str +
6860          ' data-parent-cat="' +
6861          cat_id +
6862          '" data-marker-category="' +
6863          child_cat.cat_id +
6864          '" value="' +
6865          child_cat.cat_id +
6866          '">';
6867
6868        var loc_count = child_cat.loc_count;
6869
6870        $.each(
6871          map_obj.map_data.map_tabs.category_tab.child_cats,
6872          function (k, v) {
6873            if (v == child_cat.cat_id && loc_count == 0) loc_count = "";
6874          }
6875        );
6876
6877        var location_count = "";
6878        if (
6879          map_obj.map_data.map_tabs.category_tab.show_count === true &&
6880          loc_count != ""
6881        ) {
6882          location_count = " (" + loc_count + ")";
6883        } else {
6884          location_count = "";
6885        }
6886
6887        content +=
6888          '<a href="javascript:void(0);" class="wpgmp_cat_title wpgmp-accordion accordion-close">' +
6889          child_cat.cat_title +
6890          location_count +
6891          category_image +
6892          "</a>";
6893
6894        if (map_obj.map_data.map_tabs.category_tab.hide_location !== true) {
6895          content +=
6896            '<div class="scroll-pane" style="height: 97px; width:100%;">';
6897          content += '<ul class="wpgmp_location_container">';
6898
6899          $.each(child_cat.data, function (name, location) {
6900            if (location.onclick_action == "marker") {
6901              content +=
6902                '<li><input type="checkbox" data-marker-location="' +
6903                location.cat_location_id +
6904                '"  value="' +
6905                location.cat_location_id +
6906                '" /><a data-marker="' +
6907                location.cat_location_id +
6908                '" data-zoom="' +
6909                location.cat_location_zoom +
6910                '" href="javascript:void(0);">' +
6911                location.cat_location_title +
6912                "</a></li>";
6913            } else if (location.onclick_action == "post") {
6914              content +=
6915                '<li><input type="checkbox" data-marker-location="' +
6916                location.cat_location_id +
6917                '"  value="' +
6918                location.cat_location_id +
6919                '" /><a href="' +
6920                location.redirect_permalink +
6921                '" target="_blank">' +
6922                location.cat_location_title +
6923                "</a></li>";
6924            } else if (location.onclick_action == "custom_link") {
6925              content +=
6926                '<li>
6926<input type="checkbox" data-marker-location="' +
6927                location.cat_location_id +
6928                '"  value="' +
6929                location.cat_location_id +
6930                '" /><a href="' +
6931                location.redirect_custom_link +
6932                '" target="_blank">' +
6933                location.cat_location_title +
6934                "</a></li>";
6935            }
6936          });
6937
6938          content += "</ul>";
6939          content += "</div>";
6940        }
6941        content += "</div>";
6942        content += map_obj.display_sub_categories(
6943          child_categories_tab_data,
6944          child_cat.cat_id,
6945          "",
6946          padding + 20
6947        );
6948      } else if (index + 1 == child_categories_tab_data.length) return;
6949    });
6950    return content;
6951  }
6952
6953  // -----------------------------
6954  // ✏️ Drawing Tools
6955  // -----------------------------
6956  enable_drawing() { }
6957  create_polygon() { }
6958  create_polyline() { }
6959  create_circle() { }
6960  create_rectangle() { }
6961  deleteSelectedShape() { }
6962  clearSelection() { }
6963  setSelection() { }
6964  event_listener() { }
6965
6966  // -----------------------------
6967  // 💾 Shape Management
6968  // -----------------------------
6969  get_shapes_options() { }
6970  set_shapes_options() { }
6971  wpgmp_save_shapes() { }
6972  wpgmp_shape_complete() { }
6973  wpgmp_save_polylines() { }
6974  wpgmp_save_polygons() { }
6975  wpgmp_save_circles() { }
6976  wpgmp_save_rectangles() { }
6977
6978  // -----------------------------
6979  // 🧷 Overlays & Layers
6980  // -----------------------------
6981  wpgmp_image_type_overlays() { }
6982  set_kml_layer() { }
6983  set_marker_cluster() { }
6984  set_panning_control() { }
6985  set_visual_refresh() { }
6986  set_45_imagery() { }
6987  set_overlay() { }
6988  set_bicyle_layer() { }
6989  set_traffic_layer() { }
6990  set_panoramic_layer() { }
6991  set_transit_layer() { }
6992  set_weather_layer() { }
6993  set_streetview() { }
6994  
6995  /**
6996 * Creates a labeled marker compatible with both Google Maps and Leaflet.
6997 */
6998create_labeled_marker(label, title, position) {
6999  const map_obj = this;
7000  const isGoogle = map_obj.isMapProvider("google");
7001
7002  if (isGoogle) {
7003    
7004    var iconUrl;
7005    position = {'lat':position.lat(),'lng':position.lng()};
7006    if( label.toLowerCase() == 'a') {
7007      iconUrl = wpgmp_local.place_icon_url+'marker-alpha-1.svg';
7008    }
7009
7010    if( label.toLowerCase() == 'b') {
7011      iconUrl = wpgmp_local.place_icon_url+'marker-alpha-2.svg';
7012    }
7013
7014    return map_obj.create_google_marker({
7015      map: map_obj.map,
7016      position,
7017      iconUrl:iconUrl,
7018      label,
7019      title,
7020    });
7021
7022  } else {
7023    
7024    const marker = map_obj.create_leaflet_marker({
7025      map: map_obj.map,
7026      position,
7027      label,
7028      isDivIcon: true  
7029     });
7030    
7031
7032    return marker;
7033  }
7034}
7035  
7036
7037  // -----------------------------
7038  // 🏪 Amenities
7039  // -----------------------------
7040  create_amenities_markers() { }
7041
7042  // -----------------------------
7043  // 🔧 Utilities
7044  // -----------------------------
7045  load_google_fonts(fonts) {
7046    if (fonts && fonts.length > 0) {
7047      $.each(fonts, function (k, font) {
7048        if (font.indexOf(",") >= 0) {
7049          font = font.split(",");
7050          font = font[0];
7051        }
7052        if (font.indexOf('"') >= 0) {
7053          font = font.replace('"', "");
7054          font = font.replace('"', "");
7055        }
7056        WebFont.load({
7057          google: {
7058            families: [font],
7059          },
7060        });
7061      });
7062    }
7063  }
7064  load_json(url) {
7065    this.map.data.loadGeoJson(url);
7066  }
7067  wpgmp_finddata() { }
7068  place_info(place_id) {
7069    var place_obj;
7070
7071    $.each(this.places, function (index, place) {
7072      if (parseInt(place.id) == parseInt(place_id)) {
7073        place_obj = place;
7074      }
7075    });
7076
7077    return place_obj;
7078  }
7079
7080  _debounce(fn, delay) {
7081    let timer = null;
7082    return function (...args) {
7083      clearTimeout(timer);
7084      timer = setTimeout(() => fn.apply(this, args), delay);
7085    };
7086  }
7087
7088  _encodePolyline(coords) {
7089    let output = '';
7090    let prevLat = 0, prevLng = 0;
7091  
7092    for (const [lat, lng] of coords) {
7093      const latE5 = Math.round(lat * 1e5);
7094      const lngE5 = Math.round(lng * 1e5);
7095  
7096      const dLat = latE5 - prevLat;
7097      const dLng = lngE5 - prevLng;
7098  
7099      output += encodeSignedNumber(dLat) + encodeSignedNumber(dLng);
7100  
7101      prevLat = latE5;
7102      prevLng = lngE5;
7103    }
7104  
7105    return output;
7106  
7107    function encodeSignedNumber(num) {
7108      let sgnNum = num << 1;
7109      if (num < 0) {
7110        sgnNum = ~sgnNum;
7111      }
7112      return encodeNumber(sgnNum);
7113    }
7114  
7115    function encodeNumber(num) {
7116      let encodeString = '';
7117      while (num >= 0x20) {
7118        encodeString += String.fromCharCode((0x20 | (num & 0x1f)) + 63);
7119        num >>= 5;
7120      }
7121      encodeString += String.fromCharCode(num + 63);
7122      return encodeString;
7123    }
7124  }
7125
7126  _decodePolyline(encoded) {
7127    let index = 0, lat = 0, lng = 0, coordinates = [];
7128  
7129    while (index < encoded.length) {
7130      let result = 1, shift = 0, b;
7131  
7132      do {
7133        b = encoded.charCodeAt(index++) - 63 - 1;
7134        result += b << shift;
7135        shift += 5;
7136      } while (b >= 0x1f);
7137  
7138      const deltaLat = (result & 1) ? ~(result >> 1) : (result >> 1);
7139      lat += deltaLat;
7140  
7141      result = 1;
7142      shift = 0;
7143  
7144      do {
7145        b = encoded.charCodeAt(index++) - 63 - 1;
7146        result += b << shift;
7147        shift += 5;
7148      } while (b >= 0x1f);
7149  
7150      const deltaLng = (result & 1) ? ~(result >> 1) : (result >> 1);
7151      lng += deltaLng;
7152  
7153      coordinates.push([lat / 1e5, lng / 1e5]);
7154    }
7155  
7156    return coordinates;
7157  }
7158
7159  formatRouteDuration(durationString) {
7160    const totalSeconds = parseInt(durationString, 10);
7161  
7162    const hours = Math.floor(totalSeconds / 3600);
7163    const minutes = Math.floor((totalSeconds % 3600) / 60);
7164  
7165    let formatted = '';
7166  
7167    if (hours > 0) {
7168      formatted += hours + (hours === 1 ? ' hr ' : ' hrs ');
7169    }
7170  
7171    if (minutes > 0 || hours === 0) { // Always show minutes if no hours
7172      formatted += minutes + ' mins';
7173    }
7174  
7175    return formatted.trim();
7176  }
7177
7178  isMapProvider(providerName) {
7179    const map_obj = this;
7180    const currentProvider = (map_obj?.map_data?.provider || wpgmp_local?.map_provider || 'google').toLowerCase();
7181    return currentProvider === providerName.toLowerCase();
7182  }
7183
7184  isRouteProvider(providerName) {
7185    const map_obj = this;
7186    const currentProvider = (map_obj?.map_data?.route_provider || wpgmp_local?.route_provider || 'leaflet').toLowerCase();
7187
7188    return currentProvider === providerName.toLowerCase();
7189  }
7190
7191  /**
7192 * Adds a locate-me control to the map for both Google Maps and Leaflet
7193 */
7194
7195register_locate_me_control() {
7196  const map_obj = this;
7197  if (map_obj.settings.locateme_control !== true) return;
7198
7199  const className = "wpgmp_locateme_control " + (map_obj.settings.locateme_control_position || "topright").toLowerCase();
7200  const innerHTML = `<span title='${wpgmp_local.locate_me}'></span>`;
7201
7202  if (map_obj.isMapProvider("google")) {
7203    const controlDiv = document.createElement("div");
7204    controlDiv.className = className;
7205    controlDiv.innerHTML = innerHTML;
7206    map_obj.map.controls[
7207      google.maps.ControlPosition[map_obj.settings.locateme_control_position || "TOP_RIGHT"]
7208    ].push(controlDiv);
7209  } else {
7210    const LocateControl = L.Control.extend({
7211      options: { position: map_obj.settings.locateme_control_position?.toLowerCase() || "topright" },
7212      onAdd() {
7213        const container = L.DomUtil.create("div", className);
7214        container.innerHTML = innerHTML;
7215        container.title = wpgmp_local.locate_me;
7216        L.DomEvent.disableClickPropagation(container);
7217        return container;
7218      }
7219    });
7220    map_obj.map.addControl(new LocateControl());
7221  }
7222
7223  // Click Event Binding (Same for both)
7224  $(map_obj.container).on("click", ".wpgmp_locateme_control", function () {
7225    map_obj.get_current_location((user_location) => {
7226      const isGoogle = map_obj.isMapProvider("google");
7227      const lat = typeof user_location.lat === 'function' ? user_location.lat() : user_location.lat;
7228      const lng = typeof user_location.lng === 'function' ? user_location.lng() : user_location.lng;
7229      const latLngObj = isGoogle ? new google.maps.LatLng(lat, lng) : L.latLng(lat, lng);
7230
7231      if (!isGoogle) {
7232        const bounds = latLngObj.toBounds(100);
7233        map_obj.map.flyToBounds(bounds, {
7234          padding: [50, 50],
7235          maxZoom: 15,
7236          animate: true,
7237          duration: 1.5
7238        });
7239      } else {
7240        map_obj.map.panTo(latLngObj);
7241        map_obj.map.setZoom(15);
7242      }
7243
7244      if (!isGoogle && map_obj.pulse_circle && map_obj.map.hasLayer(map_obj.pulse_circle)) {
7245        map_obj.map.removeLayer(map_obj.pulse_circle);
7246      }
7247
7248      if (!isGoogle) {
7249
7250        map_obj.pulse_circle = map_obj.create_leaflet_marker({
7251          map: map_obj.map,
7252          position: latLngObj,
7253          isDivIcon: true,
7254          html: '<div class="pulse-marker"></div>',
7255          customClass: '', // optional, for no extra class
7256        }); 
7257      
7258      } else {
7259        // Google Maps fallback visual marker (if needed)
7260        if (map_obj.pulse_circle) map_obj.pulse_circle.setMap(null);
7261        const markerDiv = document.createElement('div');
7262        markerDiv.className = 'pulse-marker';
7263        const overlay = new google.maps.OverlayView();
7264        overlay.onAdd = function () {
7265          const layer = this.getPanes().overlayMouseTarget;
7266          layer.appendChild(markerDiv);
7267          markerDiv.style.position = 'absolute';
7268        };
7269        overlay.draw = function () {
7270          const projection = this.getProjection();
7271          const point = projection.fromLatLngToDivPixel(latLngObj);
7272          if (point) {
7273            markerDiv.style.left = point.x - 15 + 'px';
7274            markerDiv.style.top = point.y - 15 + 'px';
7275          }
7276        };
7277        overlay.onRemove = function () {
7278          if (markerDiv.parentNode) markerDiv.parentNode.removeChild(markerDiv);
7279        };
7280        overlay.setMap(map_obj.map);
7281        map_obj.pulse_circle = overlay;
7282      }
7283     
7284      if (map_obj.map_center_marker) {
7285        map_obj.map_center_marker.setPosition(latLngObj);
7286      }
7287      // Draw/Move circle
7288      if (map_obj.set_center_circle) {
7289        if (map_obj.isMapProvider("google")) {
7290          map_obj.set_center_circle.setCenter(latLngObj);
7291        } else if (typeof map_obj.set_center_circle.setLatLng === "function") {
7292          map_obj.set_center_circle.setLatLng(latLngObj);
7293        }
7294      }
7295
7296
7297    });
7298  });
7299}
7300
7301getMarkerSize() {
7302  const isMobile = window.innerWidth <= 767;
7303  const isRetina = window.devicePixelRatio > 1.5;
7304
7305  let size;
7306  if (isMobile) {
7307    size = wpgmp_local.mobile_marker_size || [24,24];
7308  } else if (isRetina) {
7309    size = wpgmp_local.retina_marker_size || [64,64];
7310  } else {
7311    size = wpgmp_local.desktop_marker_size || [32,32];
7312  }
7313
7314  return size;
7315}
7316
7317 compute_distance(lat1, lng1, lat2, lng2) {
7318  var map_obj = this;
7319  const isGoogle = map_obj.isMapProvider('google');
7320
7321  lat1 = parseFloat(lat1);
7322  lng1 = parseFloat(lng1);
7323  lat2 = parseFloat(lat2);
7324  lng2 = parseFloat(lng2);
7325
7326  if (isGoogle && typeof google !== 'undefined' && google.maps?.geometry?.spherical) {
7327    const point1 = new google.maps.LatLng(lat1, lng1);
7328    const point2 = new google.maps.LatLng(lat2, lng2);
7329    return google.maps.geometry.spherical.computeDistanceBetween(point1, point2); // meters
7330  }
7331
7332  // Leaflet fallback
7333  if (typeof L !== 'undefined') {
7334    const point1 = L.latLng(lat1, lng1);
7335    const point2 = L.latLng(lat2, lng2);
7336    return point1.distanceTo(point2); // meters
7337  }
7338
7339  console.warn('No supported map provider available to compute distance.');
7340  return null;
7341}
7342
7343
7344
7345}
7346
7347window.WpgmpBaseMaps = WpgmpBaseMaps;
7348
7349})(jQuery, window, document);
7350/**
7351 * WpgmpGoogleMaps class - extends BaseMaps for Google Maps provider.
7352 */
7353
7354(function ($, window, document) {
7355  class WpgmpGoogleMaps extends WpgmpBaseMaps {
7356    constructor(element, map_data = {}, places = []) {
7357      super(element, map_data, places);
7358
7359      var suppress_markers = false;
7360      if (this.map_data.map_tabs && this.map_data.map_tabs.direction_tab) {
7361        suppress_markers =
7362          this.map_data.map_tabs.direction_tab.suppress_markers;
7363      }
7364     
7365      this.infowindow_marker = new google.maps.InfoWindow();
7366      this.infobox = this.wpgmpInitializeInfoBox();
7367      this.newRoutesApiURL =
7368        "https://routes.googleapis.com/directions/v2:computeRoutes";
7369      this.searchNearbyApiURL =
7370        "https://places.googleapis.com/v1/places:searchNearby";
7371        
7372    }
7373    // =========================
7374// 🌀 Part 1: Initialization & Responsive Setup
7375// =========================
7376    init() {
7377      const map_obj = this;
7378
7379      // Determine current screen type
7380      let isMobile = false;
7381      let screen_type = "desktop";
7382      const screen_size = $(window).width();
7383
7384      if (screen_size <= 480) {
7385        screen_type = "smartphones";
7386      } else if (screen_size > 480 && screen_size <= 768) {
7387        screen_type = "ipads";
7388      } else if (screen_size >= 1824) {
7389        screen_type = "large-screens";
7390      }
7391
7392      // Apply mobile-specific settings if configured
7393      if (screen_type !== "desktop" && map_obj.settings.mobile_specific === true) {
7394        isMobile = true;
7395
7396        const mobileSettings = map_obj.settings.screens?.[screen_type];
7397        if (mobileSettings) {
7398          map_obj.settings.width_mobile = mobileSettings.map_width_mobile;
7399          map_obj.settings.height_mobile = mobileSettings.map_height_mobile;
7400          map_obj.settings.zoom = parseInt(mobileSettings.map_zoom_level_mobile);
7401          map_obj.settings.draggable = mobileSettings.map_draggable_mobile !== "false";
7402          map_obj.settings.scroll_wheel = mobileSettings.map_scrolling_wheel_mobile !== "false";
7403        }
7404
7405        // Apply mobile dimensions
7406        if (map_obj.settings.width_mobile !== "") {
7407          $(map_obj.element).css("width", map_obj.settings.width_mobile);
7408        }
7409
7410        if (map_obj.settings.height_mobile !== "") {
7411          $(map_obj.element).css("height", map_obj.settings.height_mobile);
7412        }
7413      }
7414
7415      // =========================
7416    // 🗺️ Part 2: Map Initialization and Configuration
7417    // =========================
7418
7419    const center = new google.maps.LatLng(
7420      map_obj.settings.center_lat,
7421      map_obj.settings.center_lng
7422    );
7423
7424    const mapOptions = {
7425      zoom: parseInt(map_obj.settings.zoom),
7426      center: center,
7427      scrollwheel: map_obj.settings.scroll_wheel !== "true",
7428      disableDoubleClickZoom: map_obj.settings.doubleclickzoom === false,
7429      zoomControl: map_obj.settings.zoom_control === true,
7430      fullscreenControl: map_obj.settings.full_screen_control === true,
7431      fullscreenControlOptions: {
7432        position: google.maps.ControlPosition[map_obj.settings.full_screen_control_position],
7433      },
7434      zoomControlOptions: {
7435        style: google.maps.ZoomControlStyle[map_obj.settings.zoom_control_style],
7436        position: google.maps.ControlPosition[map_obj.settings.zoom_control_position],
7437      },
7438      mapTypeControl: map_obj.settings.map_type_control === true,
7439      mapTypeControlOptions: {
7440        style: google.maps.MapTypeControlStyle[map_obj.settings.map_type_control_style],
7441        position: google.maps.ControlPosition[map_obj.settings.map_type_control_position],
7442      },
7443      cameraControlOptions: {
7444        position: google.maps.ControlPosition[map_obj.settings.camera_control_position],
7445      },
7446      scaleControl: map_obj.settings.scale_control === true,
7447      streetViewControl: map_obj.settings.street_view_control === true,
7448      streetViewControlOptions: {
7449        position: google.maps.ControlPosition[map_obj.settings.street_view_control_position],
7450      },
7451      overviewMapControl: map_obj.settings.overview_map_control === true,
7452      overviewMapControlOptions: {
7453        opened: map_obj.settings.overview_map_control,
7454      },
7455      draggable: map_obj.settings.draggable,
7456      mapTypeId: google.maps.MapTypeId[map_obj.settings.map_type_id],
7457      styles: eval(map_obj.map_data.styles),
7458      minZoom: parseInt(map_obj.settings.min_zoom),
7459      maxZoom: parseInt(map_obj.settings.max_zoom),
7460      gestureHandling: map_obj.settings.gesture,
7461      cameraControl: map_obj.settings.camera_control === true,
7462    }
7463
7464    let useAdvancedMarker = (wpgmp_local.use_advanced_marker == 'true') ? true : false;
7465    const isApplyStyles = (map_obj.map_data.styles && map_obj.map_data.styles!='') ? true:false;
7466    const spiderfier_enabled = map_obj.map_data.map_marker_spiderfier_setting?.marker_spiderfy === "true";
7467
7468    if(map_obj.map_data.marker_cluster){
7469      // Do not work with marker cluster
7470      useAdvancedMarker = false;
7471    } else if(isApplyStyles) {
7472      // Do not work with snazzy maps or custom styles
7473      useAdvancedMarker = false;
7474    } else if(spiderfier_enabled){
7475      // Do no work with spiderfier effects.
7476      useAdvancedMarker = false;
7477    }
7478
7479    map_obj.useAdvancedMarker = useAdvancedMarker;
7480
7481    if (map_obj.useAdvancedMarker === true && isApplyStyles == false) {
7482      mapOptions.mapId = "mapID" + map_obj.map_data.map_property.map_id;
7483    }
7484
7485    map_obj.map = new google.maps.Map(map_obj.element, mapOptions);
7486
7487    if (typeof google?.maps?.marker?.AdvancedMarkerElement !== 'undefined') {
7488      
7489      if (typeof google.maps.Animation === 'undefined') {
7490        google.maps.Animation = {
7491          BOUNCE: 'BOUNCE',
7492          DROP: 'DROP' // Optional: future support
7493        };
7494      }
7495
7496      const proto = google.maps.marker.AdvancedMarkerElement.prototype;
7497    
7498      if (typeof proto.getPosition !== 'function') {
7499        proto.getPosition = function () {
7500          return this.position;
7501        };
7502      }
7503    
7504      if (typeof proto.setPosition !== 'function') {
7505        proto.setPosition = function (latlng) {
7506          this.position = latlng;
7507        };
7508      }
7509    
7510      if (typeof proto.setAnimation !== 'function') {
7511        proto.setAnimation = function (animationType) {
7512          //console.warn("setAnimation() is not natively supported in AdvancedMarkerElement. Applying custom behavior.");
7513          this._animation = animationType;
7514    
7515          const el = this.content;
7516          if (!el || !(el instanceof HTMLElement)) return;
7517    
7518          el.classList.remove('gmp-marker-bounce', 'gmp-marker-drop');
7519    
7520          if (animationType === google.maps.Animation.BOUNCE) {
7521            el.classList.add('gmp-marker-bounce');
7522          } else if (animationType === google.maps.Animation.DROP) {
7523            el.classList.add('gmp-marker-drop');
7524          }
7525
7526        };
7527      }
7528    
7529      if (typeof proto.getAnimation !== 'function') {
7530        proto.getAnimation = function () {
7531          return this._animation || null;
7532        };
7533      }
7534    
7535      if (typeof proto.setVisible !== 'function') {
7536        proto.setVisible = function (visible) {
7537          if (visible) {
7538            if (!this.map && this._boundMap) {
7539              this.map = this._boundMap;
7540            }
7541          } else {
7542            this._boundMap = this.map; // store map reference before hiding
7543            this.map = null;
7544          }
7545          this._visible = visible;
7546        };
7547      }
7548      
7549      if (typeof proto.getVisible !== 'function') {
7550        proto.getVisible = function () {
7551          return this._visible || !!this.map;
7552        };
7553      }
7554
7555      if (typeof proto.bindMap !== 'function') {
7556        proto.bindMap = function (map) {
7557          this._boundMap = map;
7558          this.map = map;
7559          this._visible = true;
7560        };
7561      }
7562
7563      if (typeof google.maps.Marker.prototype.bindMap !== 'function') {
7564        google.maps.Marker.prototype.bindMap = function (map) {
7565          this._boundMap = map;
7566          this.setMap(map);
7567        };
7568      }
7569
7570      if (typeof proto.setIcon !== 'function') {
7571        proto.setIcon = function (icon) {
7572          if (typeof icon !== 'object' || !icon.url) {
7573            console.warn('Invalid icon object passed to setIcon');
7574            return;
7575          }
7576    
7577          const iconUrl = icon.url;
7578          const size = icon.scaledSize 
7579            ? [icon.scaledSize.width, icon.scaledSize.height] 
7580            : [32, 32]; // fallback default size
7581    
7582          // Store icon size for reuse
7583          this._iconSize = size;
7584          
7585          /*
7586          const iconElement = document.createElement('img');
7587          iconElement.src = iconUrl;
7588          iconElement.alt = this.title || '';
7589          iconElement.style.width = `${size[0]}px`;
7590          iconElement.style.height = `${size[1]}px`;
7591    
7592          if (this.title) {
7593            iconElement.title = this.title;
7594          }
7595            */
7596          const iconElement = map_obj.createIconElement(iconUrl, this.title, size);
7597
7598          this.content = iconElement;
7599        };
7600      }
7601    
7602      // Optional: allow storing the icon size for reuse
7603      if (typeof proto.setIconSize !== 'function') {
7604        proto.setIconSize = function (sizeArray) {
7605          if (Array.isArray(sizeArray) && sizeArray.length === 2) {
7606            this._iconSize = sizeArray;
7607          }
7608        };
7609      }
7610
7611    }
7612    
7613    
7614
7615    // Apply localization strings if available
7616    if (map_obj.map_data.map_options.search_placeholder) {
7617      wpgmp_local.search_placeholder = map_obj.map_data.map_options.search_placeholder;
7618    }
7619
7620    if (map_obj.map_data.map_options.select_category) {
7621      wpgmp_local.select_category = map_obj.map_data.map_options.select_category;
7622    }
7623
7624    // Handle template placeholder storage if using advanced template mode
7625    map_obj.search_button = false;
7626    if (map_obj.map_data.map_options.advance_template === true) {
7627      const $listingElement = $(document).find(
7628        '[data-listing-content="true"][data-wpgmp-map-id]'
7629      );
7630      const eachContent = $listingElement.prop("innerHTML");
7631
7632      if (eachContent) {
7633        map_obj.map_data.listing.listing_placeholder = eachContent;
7634      }
7635    }
7636
7637    // =========================
7638    // 📍 Part 3: Core Marker + Layer Initialization
7639    // =========================
7640
7641      // Trigger lifecycle hook after map is initialized
7642      map_obj.map_loaded();
7643
7644      // Handle responsive layout
7645      map_obj.responsive_map();
7646  
7647      // Create and render all map markers
7648      map_obj.create_markers();
7649      map_obj.display_markers();
7650
7651      // Load Google Fonts if configured
7652      if (typeof map_obj.settings.google_fonts !== "undefined") {
7653        map_obj.load_google_fonts(map_obj.settings.google_fonts);
7654      }
7655
7656      // Show search control box if enabled
7657      if (map_obj.settings.search_control === true) {
7658        map_obj.show_search_control();
7659      }
7660      // Add custom map control buttons if enabled
7661      if (map_obj.settings.map_control === true) {
7662        if (typeof map_obj.settings.map_control_settings !== "undefined") {
7663          $.each(map_obj.settings.map_control_settings, function (k, val) {
7664            const centerControlDiv = document.createElement("div");
7665            map_obj.create_element(centerControlDiv, map_obj.map, val.html);
7666            centerControlDiv.index = 1;
7667            map_obj.map.controls[
7668              google.maps.ControlPosition[val.position]
7669            ].push(centerControlDiv);
7670          });
7671        }
7672      }
7673
7674      // Register "Locate Me" button if enabled
7675      if (map_obj.settings.locateme_control === true && map_obj.settings.locateme_control_position) {
7676        map_obj.register_locate_me_control();
7677      }
7678
7679      // Overlays and Visual Layers
7680      if (map_obj.map_data.street_view) map_obj.set_streetview(center);
7681      if (map_obj.map_data.weather_layer) map_obj.set_weather_layer();
7682      if (map_obj.map_data.bicyle_layer) map_obj.set_bicyle_layer();
7683      if (map_obj.map_data.traffic_layer) map_obj.set_traffic_layer();
7684      if (map_obj.map_data.transit_layer) map_obj.set_transit_layer();
7685      if (map_obj.map_data.panoramio_layer) map_obj.set_panoramic_layer();
7686      if (map_obj.map_data.overlay_setting) map_obj.set_overlay();
7687      if (map_obj.settings.display_45_imagery === "45") map_obj.set_45_imagery();
7688      if (map_obj.map_data.map_visual_refresh === true) map_obj.set_visual_refresh();
7689
7690      // Cluster markers if enabled
7691      if (map_obj.map_data.marker_cluster) map_obj.set_marker_cluster();
7692
7693      // Enable panning control if configured
7694      if (map_obj.map_data.panning_control) map_obj.set_panning_control();
7695
7696      // Load KML layer
7697      if (map_obj.map_data.kml_layer) map_obj.set_kml_layer();
7698
7699      // =========================
7700    // 🧩 Part 4: Shapes, Routes, Sorting, and Listings
7701    // =========================
7702
7703      // Create shapes (polygons, polylines, circles, rectangles)
7704      if (map_obj.map_data.shapes?.shape) {
7705        map_obj.opened_info = map_obj.infowindow_marker;
7706
7707        if (map_obj.map_data.shapes.shape.polygons) {
7708          map_obj.create_polygon();
7709        }
7710
7711        if (map_obj.map_data.shapes.shape.polylines) {
7712          map_obj.create_polyline();
7713        }
7714
7715        if (map_obj.map_data.shapes.shape.circles) {
7716          map_obj.create_circle();
7717        }
7718
7719        if (map_obj.map_data.shapes.shape.rectangles) {
7720          map_obj.create_rectangle();
7721        }
7722      }
7723
7724      // Apply default sorting if enabled (for listing or category tabs)
7725      if (map_obj.map_data.listing) {
7726        if (map_obj.map_data.listing.default_sorting && map_obj.map_data.autosort) {
7727          let data_type = "";
7728          if (map_obj.map_data.listing.default_sorting.orderby === "listorder") {
7729            data_type = "num";
7730          }
7731
7732          map_obj.sorting(
7733            map_obj.map_data.listing.default_sorting.orderby,
7734            map_obj.map_data.listing.default_sorting.inorder,
7735            data_type
7736          );
7737        }
7738      } else if (map_obj.map_data.map_tabs?.category_tab?.cat_tab) {
7739        if (!map_obj.map_data.map_tabs.category_tab.cat_post_order) {
7740          map_obj.map_data.map_tabs.category_tab.cat_post_order = "asc";
7741        }
7742
7743        if (map_obj.map_data.autosort) {
7744          map_obj.sorting("title", map_obj.map_data.map_tabs.category_tab.cat_post_order);
7745          map_obj.map_data.places_for_category_tabs = map_obj.map_data.places;
7746          map_obj.map_data.places_for_category_tabs = map_obj.sorting_inside_tabs(
7747            map_obj.map_data.places_for_category_tabs,
7748            map_obj.map_data.map_tabs.category_tab.cat_post_order
7749          );
7750        }
7751      }
7752
7753      // =========================
7754    // 📑 Part 5: Filter UI, Events & Listeners
7755    // =========================
7756
7757    if (map_obj.map_data.listing) {
7758
7759      // Inject filters and custom filters into UI
7760      map_obj.display_filters_listing();
7761      map_obj.custom_filters();
7762      if (
7763        map_obj !== "undefined" &&
7764        map_obj.map_data.default_amenities != undefined &&
7765        map_obj.map_data.enableAmenitiesListing != undefined &&
7766        map_obj.map_data.enableAmenitiesListing
7767      ) {
7768        //WAIT WHILE LOAD AMENITIES
7769      } else {
7770        $(map_obj.container)
7771          .find(".location_pagination" + map_obj.map_data.map_property.map_id)
7772          .pagination(map_obj.show_places.length, {
7773            callback: map_obj.display_places_listing,
7774            map_data: map_obj,
7775            items_per_page:
7776              map_obj.map_data.listing.pagination.listing_per_page,
7777            prev_text: wpgmp_local.prev,
7778            next_text: wpgmp_local.next,
7779          });
7780      }
7781
7782      
7783    }
7784
7785    // =========================
7786    // 🔍 Part 7: Autocomplete, Events & Final Touches
7787    // =========================
7788
7789      // Load GeoJSON data (if any)
7790      if (typeof map_obj.map_data.geojson !== "undefined") {
7791        map_obj.load_json(map_obj.map_data.geojson);
7792      }
7793
7794      
7795
7796      // Register and re-register Google Autocomplete
7797      map_obj.google_auto_suggest($(".wpgmp_auto_suggest"));
7798
7799      // Optionally show center circle and marker
7800      if (map_obj.settings.show_center_circle === true) {
7801        map_obj.show_center_circle();
7802      }
7803
7804      if (map_obj.settings.show_center_marker === true) {
7805        map_obj.show_center_marker();
7806      }
7807
7808      // Enable drawing manager if shape editing is enabled
7809      
7810      if (map_obj.map_data.shapes?.drawing_editable === true) {
7811        map_obj.enable_drawing();
7812      }
7813
7814      // Fit bounds to markers if setting enabled
7815      if (map_obj.settings.fit_bounds === true) {
7816        map_obj.fit_bounds();
7817      }
7818
7819      // Register any custom plugin or map-specific JS events
7820      map_obj.register_events();
7821
7822      // Initialize accordion behavior
7823      $(map_obj.container).find(".wpgmp-accordion").accordion({
7824        speed: "slow",
7825      });
7826
7827    }
7828
7829    createIconElement(iconUrl, title = '', iconSize = [32, 32]) {
7830      const icon = document.createElement('img');
7831      icon.src = iconUrl;
7832      icon.alt = title;
7833      // Only apply size if the icon is an SVG
7834      if (iconUrl.toLowerCase().includes('image/svg') || iconUrl.toLowerCase().endsWith('.svg')) {
7835        icon.style.width = `${iconSize[0]}px`;
7836        icon.style.height = `${iconSize[1]}px`;
7837      }
7838      icon.title = title;
7839      icon.style.objectFit = 'contain';
7840      return icon;
7841    }
7842    
7843    createMarker(place) {
7844      var map_obj = this;
7845      var map = map_obj.map;
7846      var iconSize = map_obj.getMarkerSize();
7847      var image = {
7848        url: place.icon,
7849        scaledSize: new google.maps.Size(iconSize[0], iconSize[1]),
7850      };
7851
7852      place.marker = map_obj.create_google_marker({
7853        map: map,
7854        position: {lat:place.geometry.location.lat(),lng:place.geometry.location.lng()},
7855        iconUrl: place.icon,
7856      });
7857
7858      var post_info_class = "fc-infowindow-";
7859      place.marker = place.marker;
7860      place.address = place.vicinity;
7861      place.title = place.name;
7862      place.location = {};
7863      place.location.onclick_action = "marker";
7864      var content = "";
7865
7866      var temp_listing_placeholder = "";
7867      var post_info_class = "fc-infowindow-";
7868      if (place.source == "post") {
7869        temp_listing_placeholder = map_obj.settings.infowindow_geotags_setting;
7870        post_info_class =
7871          "wpgmp_infowindow_post fc-item-" +
7872          map_obj.settings.infowindow_post_skin.name;
7873      } else {
7874        temp_listing_placeholder = map_obj.settings.infowindow_setting;
7875        if (
7876          map_obj.map_data.page != "edit_location" &&
7877          map_obj.settings.infowindow_skin
7878        )
7879          post_info_class =
7880            "fc-infowindow-" + map_obj.settings.infowindow_skin.name;
7881      }
7882
7883      if (typeof temp_listing_placeholder == "undefined") {
7884        temp_listing_placeholder = place.content;
7885      }
7886
7887      var marker_image = "";
7888      var image_url =
7889        typeof place.photos !== "undefined"
7890          ? place.photos[0].getUrl({ maxWidth: 400, maxHeight: 400 })
7891          : place.icon;
7892      marker_image =
7893        "<div class='fc-feature-img amenities_image'><img alt='" +
7894        place.vicinity +
7895        "' src='" +
7896        image_url +
7897        "' class='wpgmp_marker_image wpgmp_amenities_image' /></div>";
7898
7899      var replaceData = {
7900        "{marker_id}": place.id,
7901        "{marker_title}": place.name,
7902        "{marker_address}": place.vicinity,
7903        "{marker_latitude}": place.geometry.location.lat(),
7904        "{marker_longitude}": place.geometry.location.lng(),
7905        "{marker_city}": "",
7906        "{marker_state}": "",
7907        "{marker_country}": "",
7908        "{marker_postal_code}": "",
7909        "{marker_zoom}": "",
7910        "{marker_icon}": place.icon,
7911        "{marker_category}": place.types[0],
7912        "{marker_message}": place.content,
7913        "{marker_image}": marker_image,
7914      };
7915
7916      for (var prop in replaceData) {
7917        if (replaceData[prop] == undefined || replaceData[prop] == "undefined")
7918          replaceData[prop] = "";
7919      }
7920
7921      if (temp_listing_placeholder) {
7922        temp_listing_placeholder = temp_listing_placeholder.replace(
7923          /{#if (.*?)}([\s\S]*?){\/if}/g,
7924          function (match, p1, p2) {
7925            return replaceData["{" + p1 + "}"] ? p2 : "";
7926          }
7927        );
7928
7929        temp_listing_placeholder = temp_listing_placeholder.replace(
7930          /{[^{}]+}/g,
7931          function (match) {
7932            if (match in replaceData) {
7933              return replaceData[match];
7934            } else {
7935              return "";
7936            }
7937          }
7938        );
7939
7940        var temp_string = temp_listing_placeholder;
7941        var temp_object = $("<div/>").html(temp_string);
7942        $(temp_object)
7943          .find(".wpgmp_extra_field:contains('wpgmp_empty')")
7944          .remove();
7945        $(temp_object).find(".wpgmp_empty").prev().remove();
7946        $(temp_object).find(".wpgmp_empty").remove();
7947
7948        content = $(temp_object).prop("outerHTML").toString();
7949      }
7950
7951      if (content === "") {
7952        if (
7953          map_obj.settings.map_infowindow_customisations === true &&
7954          map_obj.settings.show_infowindow_header === true
7955        )
7956          content =
7957            '<div class="wpgmp_infowindow ' +
7958            post_info_class +
7959            '"><div class="wpgmp_iw_head"><div class="wpgmp_iw_head_content">' +
7960            place.name +
7961            '</div></div><div class="wpgmp_iw_content">' +
7962            place.vicinity +
7963            "</div></div>";
7964        else
7965          content =
7966            '<div class="wpgmp_infowindow ' +
7967            post_info_class +
7968            '"><div class="wpgmp_iw_content">' +
7969            place.content +
7970            "</div></div>";
7971      } else {
7972        if (
7973          map_obj.settings.map_infowindow_customisations === true &&
7974          map_obj.settings.show_infowindow_header === true
7975        )
7976          content =
7977            '<div class="wpgmp_infowindow ' +
7978            post_info_class +
7979            '"><div class="wpgmp_iw_head"><div class="wpgmp_iw_head_content">' +
7980            place.name +
7981            '</div></div><div class="wpgmp_iw_content">' +
7982            content +
7983            "</div></div>";
7984        else
7985          content =
7986            '<div class="wpgmp_infowindow ' +
7987            post_info_class +
7988            '"><div class="wpgmp_iw_content">' +
7989            content +
7990            "</div></div>";
7991      }
7992
7993      place.infowindow_data = content;
7994      place.infowindow = map_obj.infowindow_marker;
7995      var on_event = map_obj.settings.infowindow_open_event;
7996
7997      map_obj.event_listener(place.marker, on_event, function () {
7998        $.each(map_obj.places, function (key, prev_place) {
7999          prev_place.infowindow.close();
8000          prev_place.marker.setAnimation(null);
8001        });
8002        map_obj.openInfoWindow(place);
8003      });
8004
8005      map_obj.places.push(place);
8006    }
8007    wpgmp_image_type_overlays() {
8008      var map_obj = this;
8009      var imageMapType = new google.maps.ImageMapType({
8010        getTileUrl(coord, zoom) {
8011          return [
8012            "http://www.gstatic.com/io2010maps/tiles/5/L2_",
8013            zoom,
8014            "_",
8015            coord.x,
8016            "_",
8017            coord.y,
8018            ".png",
8019          ].join("");
8020        },
8021        tileSize: new google.maps.Size(256, 256),
8022      });
8023
8024      map_obj.map.overlayMapTypes.push(imageMapType);
8025    }
8026   
8027    get_user_position() {
8028      var map_obj = this;
8029
8030      navigator.geolocation.getCurrentPosition(
8031        function (position) {
8032          map_obj.user_lat_lng = new google.maps.LatLng(
8033            position.coords.latitude,
8034            position.coords.longitude
8035          );
8036        },
8037        function (ErrorPosition) {},
8038        {
8039          enableHighAccuracy: true,
8040          timeout: 5000,
8041          maximumAge: 0,
8042        }
8043      );
8044    }
8045
8046    wpgmp_finddata(result, type) {
8047      var component_name = "";
8048
8049      for (var i = 0; i < result.addressComponents.length; ++i) {
8050        var component = result.addressComponents[i];
8051        $.each(component.types, function (index, value) {
8052          if (value == type) {
8053            component_name = component.longText;
8054          }
8055        });
8056      }
8057
8058      return component_name;
8059    }
8060
8061    clearSelection() {
8062      var map_obj = this;
8063      if (map_obj.selectedShape) {
8064        map_obj.selectedShape.setEditable(false);
8065        map_obj.selectedShape = null;
8066      }
8067    }
8068    setSelection(shape) {
8069      var map_obj = this;
8070      map_obj.clearSelection();
8071      map_obj.selectedShape = shape;
8072      map_obj.selectedShape.setEditable(true);
8073    }
8074    deleteSelectedShape() {
8075      var map_obj = this;
8076      var key;
8077      if (map_obj.selectedShape) {
8078        for (key in map_obj.wpgmp_circles) {
8079          if (map_obj.wpgmp_circles[key] == map_obj.selectedShape) {
8080            map_obj.wpgmp_circles.splice(key, 1);
8081          }
8082        }
8083        for (key in map_obj.wpgmp_rectangles) {
8084          if (map_obj.wpgmp_rectangles[key] == map_obj.selectedShape) {
8085            map_obj.wpgmp_rectangles.splice(key, 1);
8086          }
8087        }
8088        for (key in map_obj.wpgmp_polygons) {
8089          if (map_obj.wpgmp_polygons[key] == map_obj.selectedShape) {
8090            map_obj.wpgmp_polygons.splice(key, 1);
8091          }
8092        }
8093        for (key in map_obj.wpgmp_polylines) {
8094          if (map_obj.wpgmp_polylines[key] == map_obj.selectedShape) {
8095            map_obj.wpgmp_polylines.splice(key, 1);
8096          }
8097        }
8098        map_obj.selectedShape.setMap(null);
8099      }
8100    }
8101
8102    create_google_marker({
8103      map,
8104      position,
8105      iconUrl = null,
8106      title = '',
8107      label = '',
8108      draggable = false,
8109      clickable = true,
8110      anchorPoint = null
8111    }) {
8112      const map_obj = this;
8113    
8114      const lat = parseFloat(position.lat || position.lat());
8115      const lng = parseFloat(position.lng || position.lng());
8116      const markerLatLng = new google.maps.LatLng(lat, lng);
8117    
8118      const iconSize = map_obj.getMarkerSize?.() || [32, 32];
8119    
8120      // Default icon fallback
8121      if (!iconUrl || iconUrl.trim() === '') {
8122        iconUrl = map_obj.settings.marker_default_icon || wpgmp_local.default_marker_icon;
8123      }
8124
8125      const isSvg = iconUrl.toLowerCase().includes('image/svg') || iconUrl.toLowerCase().endsWith('.svg');
8126    
8127      if (map_obj.useAdvancedMarker &&  google.maps.marker?.AdvancedMarkerElement ) {
8128        // AdvancedMarkerElement version
8129        const iconElement = isSvg ? map_obj.createIconElement(iconUrl, title, iconSize) : map_obj.createIconElement(iconUrl, title);
8130
8131        return new google.maps.marker.AdvancedMarkerElement({
8132          map: map,
8133          position: markerLatLng,
8134          title: title,
8135          content: iconElement,
8136        });
8137    
8138      } else {
8139        // Fallback to classic google.maps.Marker
8140        const markerOptions = {
8141          position: markerLatLng,
8142          map,
8143          title,
8144          label,
8145          draggable,
8146          clickable,
8147        };
8148    
8149        if (iconUrl) {
8150          markerOptions.icon = {
8151            url: iconUrl,
8152          };
8153          if (isSvg) {
8154            markerOptions.icon.scaledSize = new google.maps.Size(parseInt(iconSize[0]), parseInt(iconSize[1]));
8155          }
8156        }
8157    
8158        if (anchorPoint) {
8159          markerOptions.anchorPoint = new google.maps.Point(anchorPoint.x, anchorPoint.y);
8160        }
8161    
8162        return new google.maps.Marker(markerOptions);
8163      }
8164    }    
8165
8166    enable_drawing() {
8167      var map_obj = this;
8168      map_obj.drawingmanager = new google.maps.drawing.DrawingManager({
8169        drawingMode: null,
8170        drawingControl: true,
8171        drawingControlOptions: {
8172          position: google.maps.ControlPosition.TOP_CENTER,
8173          drawingModes: [
8174            google.maps.drawing.OverlayType.CIRCLE,
8175            google.maps.drawing.OverlayType.POLYGON,
8176            google.maps.drawing.OverlayType.POLYLINE,
8177            google.maps.drawing.OverlayType.RECTANGLE,
8178          ],
8179        },
8180
8181        circleOptions: {
8182          fillColor: "#003dce",
8183          strokeColor: "#003dce",
8184          strokeWeight: "1",
8185          strokeOpacity: "0.5",
8186          zindex: 1,
8187          fillOpacity: "0.5",
8188          editable: false,
8189          draggable: false,
8190        },
8191        polygonOptions: {
8192          fillColor: "#003dce",
8193          strokeColor: "#003dce",
8194          strokeWeight: "1",
8195          strokeOpacity: "0.5",
8196          zindex: 1,
8197          fillOpacity: "0.5",
8198          editable: false,
8199          draggable: false,
8200        },
8201        polylineOptions: {
8202          fillColor: "#003dce",
8203          strokeColor: "#003dce",
8204          strokeWeight: "1",
8205          strokeOpacity: "0.5",
8206          zindex: 1,
8207          fillOpacity: "0.5",
8208          editable: false,
8209          draggable: false,
8210        },
8211        rectangleOptions: {
8212          fillColor: "#003dce",
8213          strokeColor: "#003dce",
8214          strokeWeight: "1",
8215          strokeOpacity: "0.5",
8216          zindex: 1,
8217          fillOpacity: "0.5",
8218          editable: false,
8219          draggable: false,
8220        },
8221      });
8222      map_obj.drawingmanager.setMap(map_obj.map);
8223      map_obj.event_listener(
8224        map_obj.drawingmanager,
8225        "circlecomplete",
8226        function (circle) {
8227          map_obj.wpgmp_circles.push(circle);
8228          map_obj.wpgmp_shape_complete(circle, "circle");
8229        }
8230      );
8231      map_obj.event_listener(
8232        map_obj.drawingmanager,
8233        "polygoncomplete",
8234        function (polygon) {
8235          map_obj.wpgmp_polygons.push(polygon);
8236          map_obj.wpgmp_shape_complete(polygon, "polygon");
8237        }
8238      );
8239      map_obj.event_listener(
8240        map_obj.drawingmanager,
8241        "polylinecomplete",
8242        function (polyline) {
8243          map_obj.wpgmp_polylines.push(polyline);
8244          map_obj.wpgmp_shape_complete(polyline, "polyline");
8245        }
8246      );
8247      map_obj.event_listener(
8248        map_obj.drawingmanager,
8249        "rectanglecomplete",
8250        function (rectangle) {
8251          map_obj.wpgmp_rectangles.push(rectangle);
8252          map_obj.wpgmp_shape_complete(rectangle, "rectangle");
8253        }
8254      );
8255    }
8256
8257    create_polygon() {
8258      var map_obj = this;
8259
8260      $.each(this.map_data.shapes.shape.polygons, function (index, polygon) {
8261        var path = [];
8262        $.each(polygon.cordinates, function (ind, cordinate) {
8263          var latlng = cordinate.split(",");
8264          path.push(new google.maps.LatLng(latlng[0], latlng[1]));
8265        });
8266
8267        polygon.reference = new google.maps.Polygon({
8268          paths: path,
8269          strokeColor: polygon.settings.stroke_color,
8270          strokeOpacity: polygon.settings.stroke_opacity,
8271          strokeWeight: polygon.settings.stroke_weight,
8272          fillColor: polygon.settings.fill_color,
8273          fillOpacity: polygon.settings.fill_opacity,
8274        });
8275        if (typeof map_obj.map_data.shapes != "undefined") {
8276          if (map_obj.map_data.shapes.drawing_editable === true) {
8277            map_obj.event_listener(polygon.reference, "click", function () {
8278              map_obj.setSelection(polygon.reference);
8279              map_obj.get_shapes_options(polygon.reference, "polygon");
8280            });
8281          } else if (
8282            polygon.events !== undefined &&
8283            (polygon.events.url !== "" || polygon.events.message !== "")
8284          ) {
8285            map_obj.event_listener(polygon.reference, "click", function () {
8286              if (
8287                (polygon.events.url === "" ||
8288                  polygon.events.url === undefined) &&
8289                polygon.events.message !== ""
8290              ) {
8291                var bounds = new google.maps.LatLngBounds();
8292                polygon.reference.getPath().forEach(function (element, index) {
8293                  bounds.extend(element);
8294                });
8295                $.each(map_obj.places, function (key, place) {
8296                  place.infowindow.close();
8297                });
8298                map_obj.opened_info.setPosition(bounds.getCenter());
8299                if (map_obj.settings.map_infowindow_customisations === true)
8300                  map_obj.opened_info.setContent(
8301                    '<div class="wpgmp_infowindow"><div class="wpgmp_iw_content">' +
8302                      polygon.events.message +
8303                      "</div></div>"
8304                  );
8305                else map_obj.opened_info.setContent(polygon.events.message);
8306                map_obj.opened_info.open(map_obj.map, this);
8307              } else {
8308                if (
8309                  polygon.events.url !== "undefined" &&
8310                  polygon.events.url !== undefined
8311                )
8312                  window.location = polygon.events.url;
8313              }
8314            });
8315          }
8316        }
8317        polygon.reference.setMap(map_obj.map);
8318
8319        map_obj.wpgmp_polygons.push(polygon.reference);
8320
8321        if (polygon.events == undefined) {
8322          polygon.events = {};
8323          polygon.events.url = "";
8324          polygon.events.message = "";
8325        }
8326
8327        map_obj.wpgmp_shape_events.push({
8328          shape: polygon.reference,
8329          url: polygon.events.url,
8330          message: polygon.events.message,
8331        });
8332      });
8333    }
8334
8335    create_polyline() {
8336      var map_obj = this;
8337
8338      $.each(this.map_data.shapes.shape.polylines, function (index, polyline) {
8339        var path = [];
8340
8341        if (typeof polyline.cordinates != "undefined") {
8342          $.each(polyline.cordinates, function (ind, cordinate) {
8343            var latlng = cordinate.split(",");
8344            path.push(new google.maps.LatLng(latlng[0], latlng[1]));
8345          });
8346
8347          polyline.reference = new google.maps.Polyline({
8348            path: path,
8349            strokeColor: polyline.settings.stroke_color,
8350            strokeOpacity: polyline.settings.stroke_opacity,
8351            strokeWeight: polyline.settings.stroke_weight,
8352          });
8353
8354          if (typeof map_obj.map_data.shapes != "undefined") {
8355            if (map_obj.map_data.shapes.drawing_editable === true) {
8356              map_obj.event_listener(polyline.reference, "click", function () {
8357                map_obj.setSelection(polyline.reference);
8358                map_obj.get_shapes_options(polyline.reference, "polyline");
8359              });
8360            } else if (
8361              polyline.events !== undefined &&
8362              (polyline.events.url !== "" || polyline.events.message !== "")
8363            ) {
8364              map_obj.event_listener(polyline.reference, "click", function () {
8365                if (
8366                  (polyline.events.url === "" ||
8367                    polyline.events.url === undefined) &&
8368                  polyline.events.message !== ""
8369                ) {
8370                  var bounds = new google.maps.LatLngBounds();
8371                  polyline.reference
8372                    .getPath()
8373                    .forEach(function (element, index) {
8374                      bounds.extend(element);
8375                    });
8376                  $.each(map_obj.places, function (key, place) {
8377                    place.infowindow.close();
8378                  });
8379                  map_obj.opened_info.setPosition(bounds.getCenter());
8380                  if (map_obj.settings.map_infowindow_customisations === true)
8381                    map_obj.opened_info.setContent(
8382                      '<div class="wpgmp_infowindow"><div class="wpgmp_iw_content">' +
8383                        polyline.events.message +
8384                        "</div></div>"
8385                    );
8386                  else map_obj.opened_info.setContent(polyline.events.message);
8387                  map_obj.opened_info.open(map_obj.map, this);
8388                } else if (polyline.events.url !== "") {
8389                  if (
8390                    polyline.events.url !== "undefined" &&
8391                    polyline.events.url !== undefined
8392                  )
8393                    window.location = polyline.events.url;
8394                }
8395              });
8396            }
8397          }
8398        }
8399        if (typeof polyline.reference != "undefined") {
8400          polyline.reference.setMap(map_obj.map);
8401          map_obj.wpgmp_polylines.push(polyline.reference);
8402
8403          if (polyline.events == undefined) {
8404            polyline.events = {};
8405            polyline.events.url = "";
8406            polyline.events.message = "";
8407          }
8408
8409          map_obj.wpgmp_shape_events.push({
8410            shape: polyline.reference,
8411            url: polyline.events.url,
8412            message: polyline.events.message,
8413          });
8414        }
8415      });
8416    }
8417    event_listener(obj, type, func) {
8418      google.maps.event.addListener(obj, type, func);
8419    }
8420    create_circle() {
8421      var map_obj = this;
8422      $.each(this.map_data.shapes.shape.circles, function (index, circle) {
8423        var path;
8424        $.each(circle.cordinates, function (ind, cordinate) {
8425          var latlng = cordinate.split(",");
8426          path = new google.maps.LatLng(latlng[0], latlng[1]);
8427        });
8428
8429        circle.reference = new google.maps.Circle({
8430          fillColor: circle.settings.fill_color,
8431          fillOpacity: circle.settings.fill_opacity,
8432          strokeColor: circle.settings.stroke_color,
8433          strokeOpacity: circle.settings.stroke_opacity,
8434          strokeWeight: circle.settings.stroke_weight,
8435          center: path,
8436          radius: parseInt(circle.settings.radius),
8437        });
8438
8439        if (typeof map_obj.map_data.shapes != "undefined") {
8440          if (map_obj.map_data.shapes.drawing_editable === true) {
8441            map_obj.event_listener(circle.reference, "click", function () {
8442              map_obj.setSelection(circle.reference);
8443              map_obj.get_shapes_options(circle.reference, "circle");
8444            });
8445          } else if (
8446            circle.events !== undefined &&
8447            (circle.events.url !== "" || circle.events.message !== "")
8448          ) {
8449            map_obj.event_listener(circle.reference, "click", function () {
8450              if (
8451                (circle.events.url === "" || circle.events.url === undefined) &&
8452                circle.events.message !== ""
8453              ) {
8454                $.each(map_obj.places, function (key, place) {
8455                  place.infowindow.close();
8456                });
8457                map_obj.opened_info.setPosition(circle.reference.getCenter());
8458                if (map_obj.settings.map_infowindow_customisations === true)
8459                  map_obj.opened_info.setContent(
8460                    '<div class="wpgmp_infowindow"><div class="wpgmp_iw_content">' +
8461                      circle.events.message +
8462                      "</div></div>"
8463                  );
8464                else map_obj.opened_info.setContent(circle.events.message);
8465                map_obj.opened_info.open(map_obj.map, this);
8466              } else if (circle.events.url !== "") {
8467                if (
8468                  circle.events.url !== "undefined" &&
8469                  circle.events.url !== undefined
8470                )
8471                  window.location = circle.events.url;
8472              }
8473            });
8474          }
8475        }
8476
8477        circle.reference.setMap(map_obj.map);
8478        map_obj.wpgmp_circles.push(circle.reference);
8479
8480        if (circle.events == undefined) {
8481          circle.events = {};
8482          circle.events.url = "";
8483          circle.events.message = "";
8484        }
8485
8486        map_obj.wpgmp_shape_events.push({
8487          shape: circle.reference,
8488          url: circle.events.url,
8489          message: circle.events.message,
8490        });
8491      });
8492    }
8493
8494    create_rectangle() {
8495      var map_obj = this;
8496      $.each(
8497        this.map_data.shapes.shape.rectangles,
8498        function (index, rectangle) {
8499          var left_latlng = rectangle.cordinates[0].split(",");
8500          var right_latlng = rectangle.cordinates[1].split(",");
8501
8502          var path = new google.maps.LatLngBounds(
8503            new google.maps.LatLng(left_latlng[0], left_latlng[1]),
8504            new google.maps.LatLng(right_latlng[0], right_latlng[1])
8505          );
8506
8507          rectangle.reference = new google.maps.Rectangle({
8508            bounds: path,
8509            fillColor: rectangle.settings.fill_color,
8510            fillOpacity: rectangle.settings.fill_opacity,
8511            strokeColor: rectangle.settings.stroke_color,
8512            strokeOpacity: rectangle.settings.stroke_opacity,
8513            strokeWeight: rectangle.settings.stroke_weight,
8514          });
8515
8516          if (typeof map_obj.map_data.shapes != "undefined") {
8517            if (map_obj.map_data.shapes.drawing_editable === true) {
8518              map_obj.event_listener(rectangle.reference, "click", function () {
8519                map_obj.setSelection(rectangle.reference);
8520                map_obj.get_shapes_options(rectangle.reference, "rectangle");
8521              });
8522            } else if (
8523              rectangle.events !== undefined &&
8524              (rectangle.events.url !== "" || rectangle.events.message !== "")
8525            ) {
8526              map_obj.event_listener(rectangle.reference, "click", function () {
8527                if (
8528                  (rectangle.events.url === "" ||
8529                    rectangle.events.url === undefined) &&
8530                  rectangle.events.message !== ""
8531                ) {
8532                  $.each(map_obj.places, function (key, place) {
8533                    place.infowindow.close();
8534                  });
8535                  map_obj.opened_info.setPosition(
8536                    rectangle.reference.getBounds().getCenter()
8537                  );
8538                  if (map_obj.settings.map_infowindow_customisations === true)
8539                    map_obj.opened_info.setContent(
8540                      '<div class="wpgmp_infowindow"><div class="wpgmp_iw_content">' +
8541                        rectangle.events.message +
8542                        "</div></div>"
8543                    );
8544                  else map_obj.opened_info.setContent(rectangle.events.message);
8545                  map_obj.opened_info.open(map_obj.map, this);
8546                } else if (rectangle.events.url !== "") {
8547                  if (
8548                    rectangle.events.url !== "undefined" &&
8549                    rectangle.events.url !== undefined
8550                  )
8551                    window.location = rectangle.events.url;
8552                }
8553              });
8554            }
8555          }
8556
8557          rectangle.reference.setMap(map_obj.map);
8558          map_obj.wpgmp_rectangles.push(rectangle.reference);
8559
8560          if (rectangle.events == undefined) {
8561            rectangle.events = {};
8562            rectangle.events.url = "";
8563            rectangle.events.message = "";
8564          }
8565
8566          map_obj.wpgmp_shape_events.push({
8567            shape: rectangle.reference,
8568            url: rectangle.events.url,
8569            message: rectangle.events.message,
8570          });
8571        }
8572      );
8573    }
8574
8575    get_shapes_options(shape, type) {
8576      $(".hiderow").addClass("temp_row").removeClass("hiderow");
8577
8578      // Set value to the input
8579      $("input[name='shape_fill_color']").val(shape.fillColor);
8580
8581      // Set background color of the visible preview button (.wp-color-result)
8582      $("input[name='shape_fill_color']")
8583        .closest(".wp-picker-container")
8584        .find(".wp-color-result")
8585        .css("background-color", shape.fillColor);
8586
8587      $("input[name='shape_stroke_color']").val(shape.strokeColor);
8588
8589      // Set background color of the visible preview button (.wp-color-result)
8590      $("input[name='shape_stroke_color']")
8591        .closest(".wp-picker-container")
8592        .find(".wp-color-result")
8593        .css("background-color", shape.strokeColor);
8594
8595      $("select[name='shape_fill_opacity']").val(shape.fillOpacity);
8596      $("select[name='shape_stroke_opacity']").val(shape.strokeOpacity);
8597      $("select[name='shape_stroke_weight']").val(shape.strokeWeight);
8598      $("textarea[name='shape_path']").parent().hide();
8599      $("input[name='shape_radius']").parent().hide();
8600      $("input[name='shape_center']").parent().hide();
8601      $("input[name='shape_northeast']").parent().hide();
8602      $("input[name='shape_southwest']").parent().hide();
8603
8604      var all_shape_events = this.wpgmp_shape_events;
8605      $.each(all_shape_events, function (i, shape_event) {
8606        if (shape_event.shape == shape) {
8607          $("input[name='shape_click_url']").val(shape_event.url);
8608          $("textarea[name='shape_click_message']").val(shape_event.message);
8609        }
8610      });
8611      if (type == "circle") {
8612        $("input[name='shape_radius']").parent().show();
8613        $("input[name='shape_radius']").val(shape.getRadius());
8614        $("input[name='shape_center']").parent().show();
8615        $("input[name='shape_center']").val(
8616          shape.getCenter().lat() + "," + shape.getCenter().lng()
8617        );
8618      } else if (type == "rectangle") {
8619        $("input[name='shape_northeast']").parent().show();
8620        $("input[name='shape_northeast']").val(
8621          shape.getBounds().getNorthEast().lat() +
8622            "," +
8623            shape.getBounds().getNorthEast().lng()
8624        );
8625        $("input[name='shape_southwest']").parent().show();
8626        $("input[name='shape_southwest']").val(
8627          shape.getBounds().getSouthWest().lat() +
8628            "," +
8629            shape.getBounds().getSouthWest().lng()
8630        );
8631      } else {
8632        var polygon_cordinate = [];
8633
8634        var cordinates = shape.getPath();
8635
8636        cordinates.forEach(function (latlng, index) {
8637          var latlngin = [latlng.lat(), latlng.lng()];
8638
8639          if (latlng.lat() !== "" && latlng.lng() !== "")
8640            polygon_cordinate.push(latlngin);
8641        });
8642        $("textarea[name='shape_path']").parent().show();
8643        $("textarea[name='shape_path']").val(polygon_cordinate.join(" "));
8644      }
8645    }
8646
8647    set_shapes_options(shape) {
8648      var polyOptions2 = {
8649        fillColor: $("input[name='shape_fill_color']").val(),
8650        fillOpacity: $("select[name='shape_fill_opacity']").val(),
8651        strokeColor: $("input[name='shape_stroke_color']").val(),
8652        strokeOpacity: $("select[name='shape_stroke_opacity']").val(),
8653        strokeWeight: $("select[name='shape_stroke_weight']").val(),
8654      };
8655      shape.setOptions(polyOptions2);
8656      var all_shape_events = this.wpgmp_shape_events;
8657      $.each(all_shape_events, function (i, shape_event) {
8658        if (shape_event.shape == shape) {
8659          shape_event.url = $("input[name='shape_click_url']").val();
8660          shape_event.message = $("textarea[name='shape_click_message']").val();
8661        }
8662      });
8663    }
8664
8665    wpgmp_shape_complete(shape, type) {
8666      var map_obj = this;
8667      map_obj.setSelection(shape);
8668      map_obj.drawingmanager.setDrawingMode(null);
8669      if (typeof map_obj.map_data.shapes != "undefined") {
8670        if (map_obj.map_data.shapes.drawing_editable === true) {
8671          map_obj.event_listener(shape, "click", function () {
8672            map_obj.setSelection(shape);
8673            map_obj.get_shapes_options(shape, type);
8674          });
8675
8676          map_obj.wpgmp_shape_events.push({
8677            shape: shape,
8678            url: "",
8679            message: "",
8680          });
8681        }
8682      }
8683    }
8684
8685
8686    set_kml_layer() {
8687      var map_obj = this.map;
8688
8689      $.each(this.map_data.kml_layer.kml_layers_links, function (index, link) {
8690        var kmlLayerOptions = {
8691          url: link,
8692          map: map_obj,
8693          preserveViewport: true,
8694        };
8695
8696        new google.maps.KmlLayer(kmlLayerOptions);
8697      });
8698    }
8699
8700    set_marker_cluster() {
8701      var map_obj = this;
8702      var markers = [];
8703      var clusterStyles = [
8704        {
8705          textColor: "black",
8706          url: map_obj.map_data.marker_cluster.icon,
8707          height: 32,
8708          width: 33,
8709        },
8710      ];
8711      $.each(this.places, function (index, place) {
8712        if (place.marker.getVisible() == true) {
8713          markers.push(place.marker);
8714        }
8715      });
8716
8717      if (map_obj.map_data.marker_cluster.apply_style === true) {
8718        if (!map_obj.markerClusterer) {
8719          map_obj.markerClusterer = new MarkerClusterer(
8720            map_obj.map,
8721            {},
8722            {
8723              gridSize: parseInt(map_obj.map_data.marker_cluster.grid),
8724              maxZoom: parseInt(map_obj.map_data.marker_cluster.max_zoom),
8725              styles: clusterStyles,
8726            }
8727          );
8728        }
8729
8730        map_obj.markerClusterer.clearMarkers();
8731        map_obj.markerClusterer.addMarkers(markers);
8732
8733        google.maps.event.addListener(
8734          map_obj.markerClusterer,
8735          "mouseover",
8736          function (c) {
8737            c.clusterIcon_.div_.firstChild.src =
8738              map_obj.map_data.marker_cluster.hover_icon;
8739          }
8740        );
8741
8742        google.maps.event.addListener(
8743          map_obj.markerClusterer,
8744          "mouseout",
8745          function (c) {
8746            c.clusterIcon_.div_.firstChild.src =
8747              map_obj.map_data.marker_cluster.icon;
8748          }
8749        );
8750      } else {
8751        if (!map_obj.markerClusterer) {
8752          map_obj.markerClusterer = new MarkerClusterer(
8753            map_obj.map,
8754            {},
8755            {
8756              gridSize: parseInt(map_obj.map_data.marker_cluster.grid),
8757              maxZoom: parseInt(map_obj.map_data.marker_cluster.max_zoom),
8758              imagePath: map_obj.map_data.marker_cluster.image_path,
8759            }
8760          );
8761        }
8762
8763        map_obj.markerClusterer.clearMarkers();
8764        map_obj.markerClusterer.addMarkers(markers);
8765      }
8766    }
8767
8768    set_panning_control() {
8769      var panning_data = this.map_data.panning_control;
8770      var panning_map_obj = this.map;
8771      var map_obj = this;
8772
8773      var strictBounds = new google.maps.LatLngBounds(
8774        new google.maps.LatLng(
8775          panning_data.from_latitude,
8776          panning_data.from_longitude
8777        ),
8778        new google.maps.LatLng(
8779          panning_data.to_latitude,
8780          panning_data.to_longitude
8781        )
8782      );
8783
8784      google.maps.event.addListener(panning_map_obj, "dragend", function () {
8785        if (strictBounds.contains(panning_map_obj.getCenter())) return;
8786
8787        var c = panning_map_obj.getCenter(),
8788          x = c.lng(),
8789          y = c.lat(),
8790          maxX = strictBounds.getNorthEast().lng(),
8791          maxY = strictBounds.getNorthEast().lat(),
8792          minX = strictBounds.getSouthWest().lng(),
8793          minY = strictBounds.getSouthWest().lat();
8794
8795        if (x < minX) x = minX;
8796        if (x > maxX) x = maxX;
8797        if (y < minY) y = minY;
8798        if (y > maxY) y = maxY;
8799
8800        panning_map_obj.setCenter(new google.maps.LatLng(y, x));
8801      });
8802
8803      google.maps.event.addListener(
8804        panning_map_obj,
8805        "zoom_changed",
8806        function () {
8807          if (panning_map_obj.getZoom() < panning_data.zoom_level) {
8808            panning_map_obj.setZoom(parseInt(map_obj.settings.zoom));
8809          }
8810        }
8811      );
8812    }
8813
8814    set_visual_refresh() {
8815      google.maps.visualRefresh = true;
8816    }
8817
8818    set_45_imagery() {
8819      //this.map.setTilt(45);
8820    }
8821
8822    set_overlay_generator(tileSize, options) {
8823
8824      var overlay_generator = function (tileSize, options) {
8825
8826        this.tileSize = tileSize;
8827        this.overlay_options = options;
8828        if (this.overlay_options.font_size != undefined) {
8829            this.overlay_options.font_size = this.overlay_options.font_size.replace('px', '');
8830        } else {
8831            this.overlay_options.font_size = '16';
8832        }
8833        if (this.overlay_options.border_width != undefined) {
8834            this.overlay_options.border_width = this.overlay_options.border_width.replace('px', '');
8835        } else {
8836            this.overlay_options.border_width = '2';
8837        }
8838  
8839    }
8840  
8841    overlay_generator.prototype.getTile = function (coord, zoom, ownerDocument) {
8842  
8843        var div = ownerDocument.createElement("div");
8844        div.innerHTML = coord;
8845        div.style.width = this.tileSize.width;
8846        div.style.height = this.tileSize.height;
8847        div.style.fontSize = this.overlay_options.font_size + "px";
8848        div.style.borderStyle = this.overlay_options.border_style;
8849        div.style.borderWidth = this.overlay_options.border_width + "px";
8850        div.style.borderColor = this.overlay_options.border_color;
8851        return div;
8852    };
8853
8854    return new overlay_generator(tileSize, options);
8855    
8856    }
8857    
8858    set_overlay() {
8859      if (this.map_data.overlay_setting.width != undefined) {
8860        this.map_data.overlay_setting.width =
8861          this.map_data.overlay_setting.width.replace("px", "");
8862      } else {
8863        this.map_data.overlay_setting.width = "200";
8864      }
8865      if (this.map_data.overlay_setting.height != undefined) {
8866        this.map_data.overlay_setting.height =
8867          this.map_data.overlay_setting.height.replace("px", "");
8868      } else {
8869        this.map_data.overlay_setting.height = "200";
8870      }
8871
8872      this.map.overlayMapTypes.insertAt(
8873        0,
8874        this.set_overlay_generator(
8875          new google.maps.Size(
8876            this.map_data.overlay_setting.width,
8877            this.map_data.overlay_setting.height
8878          ),
8879          this.map_data.overlay_setting
8880        )
8881      );
8882    }
8883
8884    set_bicyle_layer() {
8885      var bikeLayer = new google.maps.BicyclingLayer();
8886      bikeLayer.setMap(this.map);
8887    }
8888
8889    set_traffic_layer() {
8890      var traffic_layer = new google.maps.TrafficLayer();
8891      traffic_layer.setMap(this.map);
8892    }
8893
8894    set_panoramic_layer() {
8895      var panoramic_layer = new google.maps.panoramio.PanoramioLayer();
8896      panoramic_layer.setMap(this.map);
8897    }
8898
8899    set_transit_layer() {
8900      var transit_layer = new google.maps.TransitLayer();
8901      transit_layer.setMap(this.map);
8902    }
8903
8904    set_weather_layer() {
8905      var weatherLayer = new google.maps.weather.WeatherLayer({
8906        windSpeedUnit: eval(
8907          "google.maps.weather.WindSpeedUnit." +
8908            this.map_data.weather_layer.wind_unit
8909        ),
8910        temperatureUnits: eval(
8911          "google.maps.weather.TemperatureUnit." +
8912            this.map_data.weather_layer.temperature_unit
8913        ),
8914      });
8915
8916      weatherLayer.setMap(this.map);
8917      var cloudLayer = new google.maps.weather.CloudLayer();
8918      cloudLayer.setMap(this.map);
8919    }
8920
8921    set_streetview(latlng) {
8922      var panoOptions = {
8923        position: latlng,
8924        addressControlOptions: {
8925          position: google.maps.ControlPosition.BOTTOM_CENTER,
8926        },
8927        linksControl: this.map_data.street_view.links_control,
8928        panControl: this.map_data.street_view.street_view_pan_control,
8929        zoomControlOptions: {
8930          style: google.maps.ZoomControlStyle.SMALL,
8931        },
8932        enableCloseButton: this.map_data.street_view.street_view_close_button,
8933      };
8934      if (
8935        this.map_data.street_view.pov_heading &&
8936        this.map_data.street_view.pov_pitch
8937      ) {
8938        panoOptions["pov"] = {
8939          heading: parseInt(this.map_data.street_view.pov_heading),
8940          pitch: parseInt(this.map_data.street_view.pov_pitch),
8941        };
8942      }
8943      var panorama = new google.maps.StreetViewPanorama(
8944        this.element,
8945        panoOptions
8946      );
8947    }
8948   
8949    /**
8950 * Handles post-load setup for Google Maps
8951 * Includes center logic, infowindow cleanup, amenities load, and UI skinning
8952 */
8953map_loaded() {
8954  const map_obj = this;
8955  const map = map_obj.map;
8956
8957  // Ensure Google map is fully loaded and properly centered after resize
8958  google.maps.event.addListenerOnce(map, "idle", function () {
8959    const center = map.getCenter();
8960    google.maps.event.trigger(map, "resize");
8961    map.setCenter(center);
8962  });
8963
8964  // Optionally center map by user's location
8965  if (map_obj.settings.center_by_nearest === true) {
8966    map_obj.center_by_nearest();
8967  }
8968
8969  // Close all open infowindows on map click
8970  if (map_obj.settings.close_infowindow_on_map_click === true) {
8971    google.maps.event.addListener(map, "click", function () {
8972      map_obj.places?.forEach((place) => {
8973        place.infowindow?.close();
8974        place.marker?.setAnimation(null);
8975      });
8976    });
8977  }
8978
8979 
8980
8981  // DOM Ready styling for Infobox (if custom infowindow skin is active)
8982  google.maps.event.addListener(map_obj.infobox, "domready", function () {
8983    const $outer = $(map_obj.container).find(".infoBox");
8984    const needsSkin =
8985      $outer.find(".fc-infowindow-default").length === 0 &&
8986      $outer.find(".fc-item-default").length === 0 &&
8987      $outer.find(".wpgmp_infowindow").length > 0;
8988
8989    //accordian
8990      $outer.on('click', ".fc-accordion-tab", function () {
8991          if ($(this).hasClass('active')) {
8992              $(this).removeClass('active');
8993              var acc_child = $(this).next().removeClass('active');
8994          } else {
8995              $(".fc-accordion-tab").removeClass('active');
8996              $(".fc-accordion dd").removeClass('active');
8997              $(this).addClass('active');
8998              var acc_child = $(this).next().addClass('active');
8999          }
9000      });
9001
9002    if (needsSkin) {
9003      $outer.find(".wpgmp_infowindow").prepend('<div class="infowindow-close"></div>');
9004
9005      $(".infowindow-close").click(() => {
9006        map_obj.places?.forEach((place) => {
9007          place.infowindow?.close();
9008          place.marker?.setAnimation(null);
9009        });
9010      });
9011
9012      if (
9013        $outer.find(".fc-infowindow-fano").length === 0 &&
9014        $outer.find(".fc-item-fano").length === 0
9015      ) {
9016        $outer.addClass("infoBoxTail");
9017      } else {
9018        $outer.removeClass("infoBoxTail");
9019      }
9020    }
9021  });
9022
9023}
9024
9025    wpgmpInitializeInfoBox() {
9026      var InfoBox = function (opt_opts) {
9027        opt_opts = opt_opts || {};
9028
9029        google.maps.OverlayView.apply(this, arguments);
9030
9031        // Standard options (in common with google.maps.InfoWindow):
9032        //
9033        this.content_ = opt_opts.content || "";
9034        this.disableAutoPan_ = opt_opts.disableAutoPan || false;
9035        this.maxWidth_ = opt_opts.maxWidth || 0;
9036        this.pixelOffset_ = opt_opts.pixelOffset || new google.maps.Size(0, 0);
9037        this.position_ = opt_opts.position || new google.maps.LatLng(0, 0);
9038        this.zIndex_ = opt_opts.zIndex || null;
9039
9040        // Additional options (unique to InfoBox):
9041        //
9042        this.boxClass_ = opt_opts.boxClass || "infoBox";
9043        this.boxStyle_ = opt_opts.boxStyle || {};
9044        this.closeBoxMargin_ = opt_opts.closeBoxMargin || "2px";
9045        this.closeBoxURL_ =
9046          opt_opts.closeBoxURL ||
9047          "//www.google.com/intl/en_us/mapfiles/close.gif";
9048        if (opt_opts.closeBoxURL === "") {
9049          this.closeBoxURL_ = "";
9050        }
9051        this.closeBoxTitle_ = opt_opts.closeBoxTitle || " Close ";
9052        this.infoBoxClearance_ =
9053          opt_opts.infoBoxClearance || new google.maps.Size(1, 1);
9054
9055        if (typeof opt_opts.visible === "undefined") {
9056          if (typeof opt_opts.isHidden === "undefined") {
9057            opt_opts.visible = true;
9058          } else {
9059            opt_opts.visible = !opt_opts.isHidden;
9060          }
9061        }
9062        this.isHidden_ = !opt_opts.visible;
9063
9064        this.alignBottom_ = opt_opts.alignBottom || false;
9065        this.pane_ = opt_opts.pane || "floatPane";
9066        this.enableEventPropagation_ = opt_opts.enableEventPropagation || false;
9067
9068        this.div_ = null;
9069        this.closeListener_ = null;
9070        this.moveListener_ = null;
9071        this.contextListener_ = null;
9072        this.eventListeners_ = null;
9073        this.fixedWidthSet_ = null;
9074      };
9075
9076      InfoBox.prototype = new google.maps.OverlayView();
9077
9078      /**
9079       * Creates the DIV representing the InfoBox.
9080       * @private
9081       */
9082      InfoBox.prototype.createInfoBoxDiv_ = function () {
9083        var i;
9084        var events;
9085        var bw;
9086        var me = this;
9087
9088        // This handler prevents an event in the InfoBox from being passed on to the map.
9089        //
9090        var cancelHandler = function (e) {
9091          e.cancelBubble = true;
9092          if (e.stopPropagation) {
9093            e.stopPropagation();
9094          }
9095        };
9096
9097        // This handler ignores the current event in the InfoBox and conditionally prevents
9098        // the event from being passed on to the map. It is used for the contextmenu event.
9099        //
9100        var ignoreHandler = function (e) {
9101          e.returnValue = false;
9102
9103          if (e.preventDefault) {
9104            e.preventDefault();
9105          }
9106
9107          if (!me.enableEventPropagation_) {
9108            cancelHandler(e);
9109          }
9110        };
9111
9112        if (!this.div_) {
9113          this.div_ = document.createElement("div");
9114
9115          this.setBoxStyle_();
9116
9117          if (typeof this.content_.nodeType === "undefined") {
9118            this.div_.innerHTML = this.getCloseBoxImg_() + this.content_;
9119          } else {
9120            this.div_.innerHTML = this.getCloseBoxImg_();
9121            this.div_.appendChild(this.content_);
9122          }
9123
9124          // Add the InfoBox DIV to the DOM
9125          this.getPanes()[this.pane_].appendChild(this.div_);
9126
9127          this.addClickHandler_();
9128
9129          if (this.div_.style.width) {
9130            this.fixedWidthSet_ = true;
9131          } else {
9132            if (
9133              this.maxWidth_ !== 0 &&
9134              this.div_.offsetWidth > this.maxWidth_
9135            ) {
9136              this.div_.style.width = this.maxWidth_;
9137              this.div_.style.overflow = "auto";
9138              this.fixedWidthSet_ = true;
9139            } else {
9140              // The following code is needed to overcome problems with MSIE
9141
9142              bw = this.getBoxWidths_();
9143
9144              this.div_.style.width =
9145                this.div_.offsetWidth - bw.left - bw.right + "px";
9146              this.fixedWidthSet_ = false;
9147            }
9148          }
9149
9150          this.panBox_(this.disableAutoPan_);
9151
9152          if (!this.enableEventPropagation_) {
9153            this.eventListeners_ = [];
9154
9155            // Cancel event propagation.
9156            //
9157            // Note: mousemove not included (to resolve Issue 152)
9158            events = [
9159              "mousedown",
9160              "mouseover",
9161              "mouseout",
9162              "mouseup",
9163              "click",
9164              "dblclick",
9165              "touchstart",
9166              "touchend",
9167              "touchmove",
9168            ];
9169
9170            for (i = 0; i < events.length; i++) {
9171              this.eventListeners_.push(
9172                this.div_.addEventListener(
9173                  events[i],
9174                  cancelHandler
9175                )
9176              );
9177            }
9178
9179            // Workaround for Google bug that causes the cursor to change to a pointer
9180            // when the mouse moves over a marker underneath InfoBox.
9181            this.eventListeners_.push(
9182              this.div_.addEventListener(
9183                "mouseover",
9184                function (e) {
9185                  this.style.cursor = "default";
9186                }
9187              )
9188            );
9189          }
9190
9191          this.contextListener_ = this.div_.addEventListener(
9192            "contextmenu",
9193            ignoreHandler
9194          );
9195
9196          /**
9197           * This event is fired when the DIV containing the InfoBox's content is attached to the DOM.
9198           * @name InfoBox#domready
9199           * @event
9200           */
9201          google.maps.event.trigger(this, "domready");
9202        }
9203      };
9204
9205      /**
9206       * Returns the HTML <IMG> tag for the close box.
9207       * @private
9208       */
9209      InfoBox.prototype.getCloseBoxImg_ = function () {
9210        var img = "";
9211
9212        if (this.closeBoxURL_ !== "") {
9213          img = "<img";
9214          img += " src='" + this.closeBoxURL_ + "'";
9215          img += " align=right"; // Do this because Opera chokes on style='float: right;'
9216          img += " title='" + this.closeBoxTitle_ + "'";
9217          img += " style='";
9218          img += " position: relative;"; // Required by MSIE
9219          img += " cursor: pointer;";
9220          img += " margin: " + this.closeBoxMargin_ + ";";
9221          img += "'>";
9222        }
9223
9224        return img;
9225      };
9226
9227      /**
9228       * Adds the click handler to the InfoBox close box.
9229       * @private
9230       */
9231      InfoBox.prototype.addClickHandler_ = function () {
9232        var closeBox;
9233
9234        if (this.closeBoxURL_ !== "") {
9235          closeBox = this.div_.firstChild;
9236          this.closeListener_ = closeBox.addEventListener(
9237            "click",
9238            this.getCloseClickHandler_()
9239          );
9240        } else {
9241          this.closeListener_ = null;
9242        }
9243      };
9244
9245      /**
9246       * Returns the function to call when the user clicks the close box of an InfoBox.
9247       * @private
9248       */
9249      InfoBox.prototype.getCloseClickHandler_ = function () {
9250        var me = this;
9251
9252        return function (e) {
9253          // 1.0.3 fix: Always prevent propagation of a close box click to the map:
9254          e.cancelBubble = true;
9255
9256          if (e.stopPropagation) {
9257            e.stopPropagation();
9258          }
9259
9260          /**
9261           * This event is fired when the InfoBox's close box is clicked.
9262           * @name InfoBox#closeclick
9263           * @event
9264           */
9265          google.maps.event.trigger(me, "closeclick");
9266
9267          me.close();
9268        };
9269      };
9270
9271      /**
9272       * Pans the map so that the InfoBox appears entirely within the map's visible area.
9273       * @private
9274       */
9275      InfoBox.prototype.panBox_ = function (disablePan) {
9276        var map;
9277        var bounds;
9278        var xOffset = 0,
9279          yOffset = 0;
9280
9281        if (!disablePan) {
9282          map = this.getMap();
9283
9284          if (map instanceof google.maps.Map) {
9285            // Only pan if attached to map, not panorama
9286
9287            if (!map.getBounds().contains(this.position_)) {
9288              // Marker not in visible area of map, so set center
9289              // of map to the marker position first.
9290              map.setCenter(this.position_);
9291            }
9292
9293            var iwOffsetX = this.pixelOffset_.width;
9294            var iwOffsetY = this.pixelOffset_.height;
9295            var iwWidth = this.div_.offsetWidth;
9296            var iwHeight = this.div_.offsetHeight;
9297            var padX = this.infoBoxClearance_.width;
9298            var padY = this.infoBoxClearance_.height;
9299
9300            if (map.panToBounds.length == 2) {
9301              // Using projection.fromLatLngToContainerPixel to compute the infowindow position
9302              // does not work correctly anymore for JS Maps API v3.32 and above if there is a
9303              // previous synchronous call that causes the map to animate (e.g. setCenter when
9304              // the position is not within bounds). Hence, we are using panToBounds with
9305              // padding instead, which works synchronously.
9306              var padding = {
9307                left: 0,
9308                right: 0,
9309                top: 0,
9310                bottom: 0,
9311              };
9312              padding.left = -iwOffsetX + padX;
9313              padding.right = iwOffsetX + iwWidth + padX;
9314              if (this.alignBottom_) {
9315                padding.top = -iwOffsetY + padY + iwHeight;
9316                padding.bottom = iwOffsetY + padY;
9317              } else {
9318                padding.top = -iwOffsetY + padY;
9319                padding.bottom = iwOffsetY + iwHeight + padY;
9320              }
9321              map.panToBounds(
9322                new google.maps.LatLngBounds(this.position_),
9323                padding
9324              );
9325            } else {
9326              var mapDiv = map.getDiv();
9327              var mapWidth = mapDiv.offsetWidth;
9328              var mapHeight = mapDiv.offsetHeight;
9329              var pixPosition = this.getProjection().fromLatLngToContainerPixel(
9330                this.position_
9331              );
9332
9333              if (pixPosition.x < -iwOffsetX + padX) {
9334                xOffset = pixPosition.x + iwOffsetX - padX;
9335              } else if (
9336                pixPosition.x + iwWidth + iwOffsetX + padX >
9337                mapWidth
9338              ) {
9339                xOffset = pixPosition.x + iwWidth + iwOffsetX + padX - mapWidth;
9340              }
9341              if (this.alignBottom_) {
9342                if (pixPosition.y < -iwOffsetY + padY + iwHeight) {
9343                  yOffset = pixPosition.y + iwOffsetY - padY - iwHeight;
9344                } else if (pixPosition.y + iwOffsetY + padY > mapHeight) {
9345                  yOffset = pixPosition.y + iwOffsetY + padY - mapHeight;
9346                }
9347              } else {
9348                if (pixPosition.y < -iwOffsetY + padY) {
9349                  yOffset = pixPosition.y + iwOffsetY - padY;
9350                } else if (
9351                  pixPosition.y + iwHeight + iwOffsetY + padY >
9352                  mapHeight
9353                ) {
9354                  yOffset =
9355                    pixPosition.y + iwHeight + iwOffsetY + padY - mapHeight;
9356                }
9357              }
9358
9359              if (!(xOffset === 0 && yOffset === 0)) {
9360                // Move the map to the shifted center.
9361                //
9362                var c = map.getCenter();
9363                map.panBy(xOffset, yOffset);
9364              }
9365            }
9366          }
9367        }
9368      };
9369
9370      /**
9371       * Sets the style of the InfoBox by setting the style sheet and applying
9372       * other specific styles requested.
9373       * @private
9374       */
9375      InfoBox.prototype.setBoxStyle_ = function () {
9376        var i, boxStyle;
9377
9378        if (this.div_) {
9379          // Apply style values from the style sheet defined in the boxClass parameter:
9380          this.div_.className = this.boxClass_;
9381
9382          // Clear existing inline style values:
9383          this.div_.style.cssText = "";
9384
9385          // Apply style values defined in the boxStyle parameter:
9386          boxStyle = this.boxStyle_;
9387          for (i in boxStyle) {
9388            if (boxStyle.hasOwnProperty(i)) {
9389              this.div_.style[i] = boxStyle[i];
9390            }
9391          }
9392
9393          // Fix for iOS disappearing InfoBox problem.
9394          // See http://stackoverflow.com/questions/9229535/google-maps-markers-disappear-at-certain-zoom-level-only-on-iphone-ipad
9395          // Required: use "matrix" technique to specify transforms in order to avoid this bug.
9396          if (
9397            typeof this.div_.style.WebkitTransform === "undefined" ||
9398            (this.div_.style.WebkitTransform.indexOf("translateZ") === -1 &&
9399              this.div_.style.WebkitTransform.indexOf("matrix") === -1)
9400          ) {
9401            this.div_.style.WebkitTransform = "translateZ(0)";
9402          }
9403
vendor: 6,831 bytes, lines 9404-9602
9404          // Fix up opacity style for benefit of MSIE:
9405          //
9406          if (
9407            typeof this.div_.style.opacity !== "undefined" &&
9408            this.div_.style.opacity !== ""
9409          ) {
9410            // See http://www.quirksmode.org/css/opacity.html
9411            this.div_.style.MsFilter =
9412              '"progid:DXImageTransform.Microsoft.Alpha(Opacity=' +
9413              this.div_.style.opacity * 100 +
9414              ')"';
9415            this.div_.style.filter =
9416              "alpha(opacity=" + this.div_.style.opacity * 100 + ")";
9417          }
9418
9419          // Apply required styles:
9420          //
9421          this.div_.style.position = "absolute";
9422          this.div_.style.visibility = "hidden";
9423          if (this.zIndex_ !== null) {
9424            this.div_.style.zIndex = this.zIndex_;
9425          }
9426        }
9427      };
9428
9429      /**
9430       * Get the widths of the borders of the InfoBox.
9431       * @private
9432       * @return {Object} widths object (top, bottom left, right)
9433       */
9434      InfoBox.prototype.getBoxWidths_ = function () {
9435        var computedStyle;
9436        var bw = {
9437          top: 0,
9438          bottom: 0,
9439          left: 0,
9440          right: 0,
9441        };
9442        var box = this.div_;
9443
9444        if (document.defaultView && document.defaultView.getComputedStyle) {
9445          computedStyle = box.ownerDocument.defaultView.getComputedStyle(
9446            box,
9447            ""
9448          );
9449
9450          if (computedStyle) {
9451            // The computed styles are always in pixel units (good!)
9452            bw.top = parseInt(computedStyle.borderTopWidth, 10) || 0;
9453            bw.bottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;
9454            bw.left = parseInt(computedStyle.borderLeftWidth, 10) || 0;
9455            bw.right = parseInt(computedStyle.borderRightWidth, 10) || 0;
9456          }
9457        } else if (document.documentElement.currentStyle) {
9458          // MSIE
9459
9460          if (box.currentStyle) {
9461            // The current styles may not be in pixel units, but assume they are (bad!)
9462            bw.top = parseInt(box.currentStyle.borderTopWidth, 10) || 0;
9463            bw.bottom = parseInt(box.currentStyle.borderBottomWidth, 10) || 0;
9464            bw.left = parseInt(box.currentStyle.borderLeftWidth, 10) || 0;
9465            bw.right = parseInt(box.currentStyle.borderRightWidth, 10) || 0;
9466          }
9467        }
9468
9469        return bw;
9470      };
9471
9472      /**
9473       * Invoked when <tt>close</tt> is called. Do not call it directly.
9474       */
9475      InfoBox.prototype.onRemove = function () {
9476        if (this.div_) {
9477          this.div_.parentNode.removeChild(this.div_);
9478          this.div_ = null;
9479        }
9480      };
9481
9482      /**
9483       * Draws the InfoBox based on the current map projection and zoom level.
9484       */
9485      InfoBox.prototype.draw = function () {
9486        this.createInfoBoxDiv_();
9487
9488        var pixPosition = this.getProjection().fromLatLngToDivPixel(
9489          this.position_
9490        );
9491
9492        this.div_.style.left = pixPosition.x + this.pixelOffset_.width + "px";
9493
9494        if (this.alignBottom_) {
9495          this.div_.style.bottom =
9496            -(pixPosition.y + this.pixelOffset_.height) + "px";
9497        } else {
9498          this.div_.style.top = pixPosition.y + this.pixelOffset_.height + "px";
9499        }
9500
9501        if (this.isHidden_) {
9502          this.div_.style.visibility = "hidden";
9503        } else {
9504          this.div_.style.visibility = "visible";
9505        }
9506      };
9507
9508      /**
9509       * Sets the options for the InfoBox. Note that changes to the <tt>maxWidth</tt>,
9510       *  <tt>closeBoxMargin</tt>, <tt>closeBoxTitle</tt>, <tt>closeBoxURL</tt>, and
9511       *  <tt>enableEventPropagation</tt> properties have no affect until the current
9512       *  InfoBox is <tt>close</tt>d and a new one is <tt>open</tt>ed.
9513       * @param {InfoBoxOptions} opt_opts
9514       */
9515      InfoBox.prototype.setOptions = function (opt_opts) {
9516        if (typeof opt_opts.boxClass !== "undefined") {
9517          // Must be first
9518
9519          this.boxClass_ = opt_opts.boxClass;
9520          this.setBoxStyle_();
9521        }
9522        if (typeof opt_opts.boxStyle !== "undefined") {
9523          // Must be second
9524
9525          this.boxStyle_ = opt_opts.boxStyle;
9526          this.setBoxStyle_();
9527        }
9528        if (typeof opt_opts.content !== "undefined") {
9529          this.setContent(opt_opts.content);
9530        }
9531        if (typeof opt_opts.disableAutoPan !== "undefined") {
9532          this.disableAutoPan_ = opt_opts.disableAutoPan;
9533        }
9534        if (typeof opt_opts.maxWidth !== "undefined") {
9535          this.maxWidth_ = opt_opts.maxWidth;
9536        }
9537        if (typeof opt_opts.pixelOffset !== "undefined") {
9538          this.pixelOffset_ = opt_opts.pixelOffset;
9539        }
9540        if (typeof opt_opts.alignBottom !== "undefined") {
9541          this.alignBottom_ = opt_opts.alignBottom;
9542        }
9543        if (typeof opt_opts.position !== "undefined") {
9544          this.setPosition(opt_opts.position);
9545        }
9546        if (typeof opt_opts.zIndex !== "undefined") {
9547          this.setZIndex(opt_opts.zIndex);
9548        }
9549        if (typeof opt_opts.closeBoxMargin !== "undefined") {
9550          this.closeBoxMargin_ = opt_opts.closeBoxMargin;
9551        }
9552        if (typeof opt_opts.closeBoxURL !== "undefined") {
9553          this.closeBoxURL_ = opt_opts.closeBoxURL;
9554        }
9555        if (typeof opt_opts.closeBoxTitle !== "undefined") {
9556          this.closeBoxTitle_ = opt_opts.closeBoxTitle;
9557        }
9558        if (typeof opt_opts.infoBoxClearance !== "undefined") {
9559          this.infoBoxClearance_ = opt_opts.infoBoxClearance;
9560        }
9561        if (typeof opt_opts.isHidden !== "undefined") {
9562          this.isHidden_ = opt_opts.isHidden;
9563        }
9564        if (typeof opt_opts.visible !== "undefined") {
9565          this.isHidden_ = !opt_opts.visible;
9566        }
9567        if (typeof opt_opts.enableEventPropagation !== "undefined") {
9568          this.enableEventPropagation_ = opt_opts.enableEventPropagation;
9569        }
9570
9571        if (this.div_) {
9572          this.draw();
9573        }
9574      };
9575
9576      /**
9577       * Sets the content of the InfoBox.
9578       *  The content can be plain text or an HTML DOM node.
9579       * @param {string|Node} content
9580       */
9581      InfoBox.prototype.setContent = function (content) {
9582        this.content_ = content;
9583
9584        if (this.div_) {
9585          if (this.closeListener_) {
9586            google.maps.event.removeListener(this.closeListener_);
9587            this.closeListener_ = null;
9588          }
9589
9590          // Odd code required to make things work with MSIE.
9591          //
9592          if (!this.fixedWidthSet_) {
9593            this.div_.style.width = "";
9594          }
9595
9596          if (typeof content.nodeType === "undefined") {
9597            this.div_.innerHTML = this.getCloseBoxImg_() + content;
9598          } else {
9599            this.div_.innerHTML = this.getCloseBoxImg_();
9600            this.div_.appendChild(content);
9601          }
9602
9603          // Perverse code required to make things work with MSIE.
9604          // (Ensures the close box does, in fact, float to the right.)
9605          //
9606          if (!this.fixedWidthSet_) {
9607            this.div_.style.width = this.div_.offsetWidth + "px";
9608            if (typeof content.nodeType === "undefined") {
9609              this.div_.innerHTML = this.getCloseBoxImg_() + content;
9610            } else {
9611              this.div_.innerHTML = this.getCloseBoxImg_();
9612              this.div_.appendChild(content);
9613            }
9614          }
9615
9616          this.addClickHandler_();
9617        }
9618
9619        /**
9620         * This event is fired when the content of the InfoBox changes.
9621         * @name InfoBox#content_changed
9622         * @event
9623         */
9624        google.maps.event.trigger(this, "content_changed");
9625      };
9626
9627      /**
9628       * Sets the geographic location of the InfoBox.
9629       * @param {LatLng} latlng
9630       */
9631      InfoBox.prototype.setPosition = function (latlng) {
9632        this.position_ = latlng;
9633
9634        if (this.div_) {
9635          this.draw();
9636        }
9637
9638        /**
9639         * This event is fired when the position of the InfoBox changes.
9640         * @name InfoBox#position_changed
9641         * @event
9642         */
9643        google.maps.event.trigger(this, "position_changed");
9644      };
9645
9646      /**
9647       * Sets the zIndex style for the InfoBox.
9648       * @param {number} index
9649       */
9650      InfoBox.prototype.setZIndex = function (index) {
9651        this.zIndex_ = index;
9652
9653        if (this.div_) {
9654          this.div_.style.zIndex = index;
9655        }
9656
9657        /**
9658         * This event is fired when the zIndex of the InfoBox changes.
9659         * @name InfoBox#zindex_changed
9660         * @event
9661         */
9662        google.maps.event.trigger(this, "zindex_changed");
9663      };
9664
9665      /**
9666       * Sets the visibility of the InfoBox.
9667       * @param {boolean} isVisible
9668       */
9669      InfoBox.prototype.setVisible = function (isVisible) {
9670        this.isHidden_ = !isVisible;
9671        if (this.div_) {
9672          this.div_.style.visibility = this.isHidden_ ? "hidden" : "visible";
9673        }
9674      };
9675
9676      /**
9677       * Returns the content of the InfoBox.
9678       * @returns {string}
9679       */
9680      InfoBox.prototype.getContent = function () {
9681        return this.content_;
9682      };
9683
9684      /**
9685       * Returns the geographic location of the InfoBox.
9686       * @returns {LatLng}
9687       */
9688      InfoBox.prototype.getPosition = function () {
9689        return this.position_;
9690      };
9691
9692      /**
9693       * Returns the zIndex for the InfoBox.
9694       * @returns {number}
9695       */
9696      InfoBox.prototype.getZIndex = function () {
9697        return this.zIndex_;
9698      };
9699
9700      /**
9701       * Returns a flag indicating whether the InfoBox is visible.
9702       * @returns {boolean}
9703       */
9704      InfoBox.prototype.getVisible = function () {
9705        var isVisible;
9706
9707        if (typeof this.getMap() === "undefined" || this.getMap() === null) {
9708          isVisible = false;
9709        } else {
9710          isVisible = !this.isHidden_;
9711        }
9712        return isVisible;
9713      };
9714
9715      /**
9716       * Returns the width of the InfoBox in pixels.
9717       * @returns {number}
9718       */
9719      InfoBox.prototype.getWidth = function () {
9720        var width = null;
9721
9722        if (this.div_) {
9723          width = this.div_.offsetWidth;
9724        }
9725
9726        return width;
9727      };
9728
9729      /**
9730       * Returns the height of the InfoBox in pixels.
9731       * @returns {number}
9732       */
9733      InfoBox.prototype.getHeight = function () {
9734        var height = null;
9735
9736        if (this.div_) {
9737          height = this.div_.offsetHeight;
9738        }
9739
9740        return height;
9741      };
9742
9743      /**
9744       * Shows the InfoBox. [Deprecated; use <tt>setVisible</tt> instead.]
9745       */
9746      InfoBox.prototype.show = function () {
9747        this.isHidden_ = false;
9748        if (this.div_) {
9749          this.div_.style.visibility = "visible";
9750        }
9751      };
9752
9753      /**
9754       * Hides the InfoBox. [Deprecated; use <tt>setVisible</tt> instead.]
9755       */
9756      InfoBox.prototype.hide = function () {
9757        this.isHidden_ = true;
9758        if (this.div_) {
9759          this.div_.style.visibility = "hidden";
9760        }
9761      };
9762
9763      /**
9764       * Adds the InfoBox to the specified map or Street View panorama. If <tt>anchor</tt>
9765       *  (usually a <tt>google.maps.Marker</tt>) is specified, the position
9766       *  of the InfoBox is set to the position of the <tt>anchor</tt>. If the
9767       *  anchor is dragged to a new location, the InfoBox moves as well.
9768       * @param {Map|StreetViewPanorama} map
9769       * @param {MVCObject} [anchor]
9770       */
9771      InfoBox.prototype.open = function (map, anchor) {
9772        var me = this;
9773
9774        if (anchor) {
9775          this.setPosition(anchor.getPosition()); // BUG FIX 2/17/2018: needed for v3.32
9776          this.moveListener_ = google.maps.event.addListener(
9777            anchor,
9778            "position_changed",
9779            function () {
9780              me.setPosition(this.getPosition());
9781            }
9782          );
9783        }
9784
9785        this.setMap(map);
9786
9787        if (this.div_) {
9788          this.panBox_(this.disableAutoPan_); // BUG FIX 2/17/2018: add missing parameter
9789        }
9790      };
9791
9792      /**
9793       * Removes the InfoBox from the map.
9794       */
9795      InfoBox.prototype.close = function () {
9796        var i;
9797
9798        if (this.closeListener_) {
9799          google.maps.event.removeListener(this.closeListener_);
9800          this.closeListener_ = null;
9801        }
9802
9803        if (this.eventListeners_) {
9804          for (i = 0; i < this.eventListeners_.length; i++) {
9805            google.maps.event.removeListener(this.eventListeners_[i]);
9806          }
9807          this.eventListeners_ = null;
9808        }
9809
9810        if (this.moveListener_) {
9811          google.maps.event.removeListener(this.moveListener_);
9812          this.moveListener_ = null;
9813        }
9814
9815        if (this.contextListener_) {
9816          google.maps.event.removeListener(this.contextListener_);
9817          this.contextListener_ = null;
9818        }
9819
9820        this.setMap(null);
9821      };
9822
9823      return new InfoBox();
9824    }
9825  }
9826
9827  window.WpgmpGoogleMaps = WpgmpGoogleMaps;
9828})(jQuery, window, document);
9829
9830/**
9831 * WpgmpLeafletMaps class - extends BaseMaps for Leaflet provider.
9832 */
9833
9834(function ($, window, document) {
9835  class WpgmpLeafletMaps extends WpgmpBaseMaps {
9836    constructor(element, map_data = {}, places = []) {
9837      super(element, map_data, places);
9838
9839      const options = this.map_data.map_options;
9840      this.settings = $.extend(
9841        {
9842          min_zoom: "0",
9843
9844          max_zoom: "19",
9845
9846          zoom: "5",
9847
9848          map_type_id: "mapbox.streets",
9849
9850          scroll_wheel: true,
9851
9852          map_visual_refresh: false,
9853
9854          full_screen_control: false,
9855
9856          full_screen_control_position: "bottomright",
9857
9858          zoom_control: true,
9859
9860          zoom_control_style: "SMALL",
9861
9862          zoom_control_position: "topleft",
9863
9864          map_type_control: true,
9865
9866          map_type_control_style: "HORIZONTAL_BAR",
9867
9868          map_type_control_position: "topright",
9869
9870          scale_control: true,
9871
9872          overview_map_control: true,
9873
9874          center_lat: "40.6153983",
9875
9876          center_lng: "-74.2535216",
9877
9878          draggable: true,
9879
9880          gesture: "auto",
9881
9882          infowindow_open_event: "click",
9883          map_tile_url: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
9884          search_control: false,
9885          locateme_control: false,
9886          map_type_control: false,
9887        },
9888        {},
9889        options
9890      );
9891
9892      this.container = $("div[rel='" + $(this.element).attr("id") + "']");
9893
9894      this.places = [];
9895
9896      this.show_places = [];
9897
9898      this.categories = {};
9899
9900      this.tabs = [];
9901
9902      this.per_page_value = 0;
9903
9904      this.last_remove_cat_id = "";
9905
9906      this.last_selected_cat_id = "";
9907
9908      this.last_category_chkbox_action = "";
9909
9910      this.search_area = "";
9911
9912      this.url_filters = [];
9913
9914      this.mbAttr =
9915        'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://mapbox.com">Mapbox</a>';
9916
9917      this.mbURL = "";
9918
9919      this.isMobile = false;
9920
9921      this.bingmaplayers = {};
9922      this.infowindow_marker = L.popup({
9923        closeOnClick: this.settings.close_infowindow_on_map_click === true,
9924      });
9925    }
9926
9927    /**
9928     * Initializes and renders the Leaflet map with full configuration.
9929     *
9930     * Breakdown of steps:
9931     * 1. Device & screen detection with mobile-specific settings
9932     * 2. Leaflet map initialization using selected provider (Mapbox, or Custom Tile)
9933     * 3. Adds common map controls (zoom, scale, fullscreen, locate)
9934     * 4. Registers dynamic map style switchers and dropdown UI controls
9935     * 5. Builds and displays markers, adjusts layout responsively
9936     * 6. Sets up listings, filtering, sorting, and pagination
9937     * 7. Handles GeoJSON, marker interactions, and scroll-to behavior
9938     * 8. Configures category/location tabs, filter checkboxes, and dynamic content toggles
9939     * 9. Enables accordion UI, autosuggest search, and direction panel logic
9940     * 10. Registers all final event listeners (print, radius change, per-page switch, etc.)
9941     */
9942
9943    init() {
9944      const map_obj = this;
9945
9946      // Fix default Leaflet marker icon path
9947      delete L.Icon.Default.prototype._getIconUrl;
9948
9949      L.Icon.Default.mergeOptions({
9950        iconRetinaUrl: wpgmp_local.default_marker_icon,
9951        iconUrl: wpgmp_local.default_marker_icon,
9952        shadowUrl: wpgmp_local.default_marker_icon,
9953      });
9954
9955      // --------------------------------------------------
9956      // 1. Device Detection and Responsive Settings
9957      // --------------------------------------------------
9958      const screenWidth = $(window).width();
9959      const screenType =
9960        screenWidth <= 480
9961          ? "smartphones"
9962          : screenWidth <= 768
9963          ? "ipads"
9964          : screenWidth >= 1824
9965          ? "large-screens"
9966          : "desktop";
9967
9968      map_obj.isMobile =
9969        screenType !== "desktop" && map_obj.settings.mobile_specific === true;
9970
9971      if (map_obj.isMobile) {
9972        const screenConfig = map_obj.settings.screens?.[screenType];
9973
9974        if (screenConfig) {
9975          Object.assign(map_obj.settings, {
9976            width_mobile: screenConfig.map_width_mobile,
9977            height_mobile: screenConfig.map_height_mobile,
9978            zoom: parseInt(screenConfig.map_zoom_level_mobile),
9979            draggable: screenConfig.map_draggable_mobile !== "false",
9980            scroll_wheel: screenConfig.map_scrolling_wheel_mobile !== "false",
9981          });
9982        } else {
9983          map_obj.settings.width_mobile = "";
9984          map_obj.settings.height_mobile = "";
9985        }
9986
9987        if (map_obj.settings.width_mobile)
9988          $(map_obj.element).css("width", map_obj.settings.width_mobile);
9989
9990        if (map_obj.settings.height_mobile)
9991          $(map_obj.element).css("height", map_obj.settings.height_mobile);
9992      }
9993
9994      // --------------------------------------------------
9995      // 2. Map Options
9996      // --------------------------------------------------
9997      const center = L.latLng(
9998        map_obj.settings.center_lat,
9999        map_obj.settings.center_lng
10000      );
10001
10002      const options = {
10003        center,
10004        zoom: parseInt(map_obj.settings.zoom),
10005        minZoom: parseInt(map_obj.settings.min_zoom),
10006        maxZoom: parseInt(map_obj.settings.max_zoom),
10007        scrollWheelZoom: map_obj.settings.scroll_wheel !== "true",
10008        doubleClickZoom: map_obj.settings.doubleclickzoom === true,
10009        dragging: map_obj.settings.draggable,
10010        zoomControl: false,
10011        attributionControl: map_obj.settings.attribution_screen_control,
10012        closePopupOnClick:
10013          map_obj.settings.close_infowindow_on_map_click === true,
10014      };
10015
10016      // --------------------------------------------------
10017      // 3. Map Provider Setup
10018      // --------------------------------------------------
10019      const provider =
10020        map_obj.settings.tiles_provider ||
10021        wpgmp_local.tiles_provider ||
10022        "OpenStreetMap.Mapnik";
10023      const mapElement = map_obj.element;
10024      try {
10025        // Special case: Bing Maps (not supported by Leaflet Providers)
10026        try {
10027          // Special case: Bing Maps (not in Leaflet Providers)
10028          if (provider === "bingmap" && wpgmp_local.wpomp_bingmap_key) {
10029            const apiKey = wpgmp_local.wpomp_bingmap_key;
10030            const defaults = { key: apiKey, detectRetina: true };
10031            map_obj.bingmaplayers = {};
10032
10033            [
10034              "Aerial",
10035              "AerialWithLabelsOnDemand",
10036              "RoadOnDemand",
10037              "CanvasDark",
10038              "CanvasLight",
10039              "CanvasGray",
10040            ].forEach((type) => {
10041              map_obj.bingmaplayers[type] = L.bingLayer({
10042                ...defaults,
10043                imagerySet: type,
10044              });
10045            });
10046
10047            map_obj.bingmaplayers["CanvasGray"].addTo(map_obj.map);
10048          }
10049          // Standard Leaflet Providers support nested "BasemapAT.grau", "CartoDB.Positron", etc.
10050          else {
10051            map_obj.map = L.map(mapElement, options);
10052            L.tileLayer
10053              .provider(provider, { accessToken: wpgmp_local.wpgmp_mapbox_key })
10054              .addTo(map_obj.map);
10055          }
10056        } catch (error) {
10057          console.error(
10058            "Error loading map tiles from provider:",
10059            provider,
10060            error
10061          );
10062        }
10063      } catch (error) {
10064        console.error("Error initializing tile layer:", error);
10065      }
10066
10067      // --------------------------------------------------
10068      // 4. Controls (Zoom, Scale, Fullscreen, Locate)
10069      // --------------------------------------------------
10070      if (map_obj.settings.scale_control) {
10071        L.control.scale({ position: "bottomleft" }).addTo(map_obj.map);
10072      }
10073
10074      if (map_obj.settings.zoom_control === true) {
10075        L.control
10076          .zoom({
10077            position: map_obj.settings.zoom_control_position,
10078          })
10079          .addTo(map_obj.map);
10080      }
10081
10082      if (map_obj.settings.full_screen_control === true) {
10083        map_obj.map.addControl(
10084          new L.Control.Fullscreen({
10085            position: map_obj.settings.full_screen_control_position,
10086          })
10087        );
10088      }
10089
10090      if (map_obj.map_data.page === "edit_location") {
10091        setTimeout(() => map_obj.map.invalidateSize(true), 300);
10092      }
10093
10094      // --------------------------------------------------
10095      // 5. Map Type Control / Style Dropdowns
10096      // --------------------------------------------------
10097      if (map_obj.settings.map_type_control) {
10098        let mapStylesMarkup = map_obj.settings.openstreet_styles_markup;
10099        if (provider === "mapbox")
10100          mapStylesMarkup = map_obj.settings.map_box_styles_markup;
10101
10102        const MapStyleControl = L.Control.extend({
10103          options: { position: map_obj.settings.map_type_control_position },
10104          onAdd() {
10105            const div = L.DomUtil.create("div", "info legend");
10106            div.innerHTML = mapStylesMarkup;
10107            div.firstChild.onmousedown = div.firstChild.ondblclick =
10108              L.DomEvent.stopPropagation;
10109            return div;
10110          },
10111        });
10112
10113        map_obj.map.addControl(new MapStyleControl());
10114
10115        // Map style dropdowns for providers
10116        $(document).on("change", "select.wpomp_map_type", function () {
10117          const config = map_obj.settings.openstreet_styles[$(this).val()];
10118          L.tileLayer(config, {
10119            maxZoom: parseInt(map_obj.settings.max_zoom),
10120          }).addTo(map_obj.map);
10121        });
10122
10123        $(document).on("change", "select.wpomp_mapbox_type", function () {
10124          const tile_url = `https://api.mapbox.com/styles/v1/mapbox/${$(
10125            this
10126          ).val()}/tiles/{z}/{x}/{y}?access_token=${
10127            wpgmp_local.wpgmp_mapbox_key
10128          }`;
10129          L.tileLayer(tile_url, {
10130            maxZoom: parseInt(map_obj.settings.max_zoom),
10131          }).addTo(map_obj.map);
10132        });
10133      }
10134
10135      // Further sections to be optimized next:
10136      // - Marker creation, listing integration, and filters
10137      // - Event bindings and route controls
10138      // --------------------------------------------------
10139      // 6. Marker Creation, Responsive Layout & Listings
10140      // --------------------------------------------------
10141
10142      // Create and display all markers
10143      map_obj.create_markers();
10144      map_obj.display_markers();
10145
10146      // Load Google Fonts if defined
10147      if (typeof map_obj.settings.google_fonts !== "undefined") {
10148        map_obj.load_google_fonts(map_obj.settings.google_fonts);
10149      }
10150
10151      // Capture initial HTML listing content for advanced template
10152      if (map_obj.map_data.map_options?.advance_template === true) {
10153        const listingEl = document.querySelector(
10154          '[data-listing-content="true"][data-wpgmp-map-id]'
10155        );
10156        if (listingEl?.innerHTML) {
10157          map_obj.map_data.listing.listing_placeholder = listingEl.innerHTML;
10158        }
10159      }
10160
10161      // Fire map loaded hook
10162      map_obj.map_loaded();
10163      // Adjust layout based on screen/mobile settings
10164      map_obj.responsive_map();
10165
10166      // Show search control box if enabled
10167      if (map_obj.settings.search_control === true) {
10168        map_obj.show_search_control();
10169      }
10170
10171      // Show locateme control if enabled
10172      if (map_obj.settings.locateme_control === true) {
10173        map_obj.register_locate_me_control();
10174      }
10175
10176      // Further sections to be optimized next:
10177      // - Listing pagination & sorting
10178      // - Filter UI and update handlers
10179      // - Tabs, accordions, events, and route direction logic
10180
10181      // --------------------------------------------------
10182      // 7. Listing Pagination, Sorting, and Filters
10183      // --------------------------------------------------
10184
10185      const listing = map_obj.map_data.listing;
10186
10187      // Sort default if defined
10188      if (listing?.default_sorting) {
10189        const sort = listing.default_sorting;
10190        const dataType = sort.orderby === "listorder" ? "num" : "";
10191        map_obj.sorting(sort.orderby, sort.inorder, dataType);
10192      }
10193
10194      // If no listing, but tab filters exist (e.g. category tab sorting)
10195      const tabs = map_obj.map_data.map_tabs;
10196      if (!listing && tabs?.category_tab?.cat_tab) {
10197        const catTab = tabs.category_tab;
10198        const order = catTab.cat_post_order ?? "asc";
10199        map_obj.sorting("title", order);
10200      }
10201
10202      // Pagination UI
10203      if (listing) {
10204        $(map_obj.container).on("click", ".categories_filter_reset_btn", () => {
10205          $(map_obj.container)
10206            .find(".wpgmp_filter_wrappers select")
10207            .each(function () {
10208              $(this).val($(this).find("option:first").val());
10209            });
10210
10211          $(".wpgmp_search_input").val("");
10212          map_obj.update_filters();
10213        });
10214
10215        // Custom filters
10216        map_obj.display_filters_listing();
10217        map_obj.custom_filters();
10218
10219        // Pagination plugin
10220        $(map_obj.container)
10221          .find(`.location_pagination${map_obj.map_data.map_property.map_id}`)
10222          .pagination(map_obj.show_places.length, {
10223            callback: map_obj.display_places_listing,
10224            map_data: map_obj,
10225            items_per_page: listing.pagination.listing_per_page,
10226            prev_text: wpgmp_local.prev,
10227            next_text: wpgmp_local.next,
10228          });
10229      }
10230
10231      // Further sections to be optimized next:
10232      // - Tabs, accordions, direction panels
10233      // - Marker detail click and scroll to view
10234      
10235      // --------------------------------------------------
10236      // 9. Accordion, Auto Suggest, Directions Panel, Events
10237      // --------------------------------------------------
10238
10239      $(map_obj.container)
10240        .find(".wpgmp-accordion")
10241        .accordion({ speed: "slow" });
10242
10243      map_obj.google_auto_suggest($(".wpgmp_auto_suggest"));
10244
10245      // --------------------------------------------------
10246      // 10. Final Event Registration
10247      // --------------------------------------------------
10248
10249      map_obj.register_events();
10250    }
10251
10252    event_listener(obj, type, func) {
10253      if (obj && typeof obj.on === "function") {
10254        obj.on(type, func);
10255      } else {
10256        console.warn("event_listener: .on() is not a function for", obj);
10257      }
10258    }
10259
10260    create_leaflet_marker({
10261      map,
10262      position, // [lat, lng]
10263      iconUrl = "",
10264      popupAnchor = [0, -30],
10265      draggable = false,
10266      title = "",
10267      isDivIcon = false,
10268      label = "",
10269      customClass = "wpgmp-custom-label-icon",
10270      addToMap = true,
10271    }) {
10272      var map_obj = this;
10273      let icon;
10274      var iconSize = map_obj.getMarkerSize();
10275
10276      if (!iconUrl || iconUrl.trim() === "") {
10277        iconUrl =
10278          map_obj.settings.marker_default_icon ||
10279          wpgmp_local.default_marker_icon;
10280      }
10281
10282      const isSvg = iconUrl.toLowerCase().includes('image/svg') || iconUrl.toLowerCase().endsWith('.svg');
10283
10284      if (isDivIcon) {
10285        const divIconOptions = {
10286          className: customClass,
10287          html: `<div class="wpgmp-marker-label">${label}</div>`,
10288        };
10289
10290        if (isSvg) {
10291          divIconOptions.iconSize = iconSize;
10292          divIconOptions.iconAnchor = [iconSize[0] / 2, iconSize[1] / 2];
10293        }
10294
10295      icon = L.divIcon(divIconOptions);
10296
10297      } else {
10298        const iconOptions = {
10299          iconUrl,
10300          iconAnchor: [iconSize[0] / 2, iconSize[1]],
10301          popupAnchor,
10302        };
10303
10304        // Only apply iconSize if SVG
10305        if (isSvg) {
10306          iconOptions.iconSize = iconSize;
10307        }
10308
10309        icon = L.icon(iconOptions);
10310
10311      }
10312
10313      const marker = L.marker(position, {
10314        icon,
10315        draggable,
10316        title,
10317      });
10318
10319      if (addToMap && map) {
10320        marker.addTo(map);
10321      }
10322
10323      return marker;
10324    }
10325
10326    map_loaded() {
10327      const map_obj = this;
10328      const map = map_obj.map;
10329
10330      // Center map using current location or static marker
10331      if (map_obj.settings.center_by_nearest === true) {
10332        map_obj.center_by_nearest();
10333      } else if (map_obj.settings.show_center_marker === true) {
10334        map_obj.show_center_marker();
10335      }
10336
10337      // Show center circle if manually positioned
10338      if (
10339        map_obj.settings.center_by_nearest === false &&
10340        map_obj.settings.show_center_circle === true
10341      ) {
10342        map_obj.show_center_circle();
10343      }
10344
10345      // Fit bounds to all markers if enabled
10346      if (map_obj.settings.fit_bounds === true) {
10347        map_obj.fit_bounds();
10348      }
10349
10350      function adjustLeafletPopup(popup) {
10351        const popupEl = popup.getElement();
10352        if (!popupEl) return;
10353
10354        const wrapper = popupEl.querySelector(".leaflet-popup-content-wrapper");
10355        const content = popupEl.querySelector(".leaflet-popup-content");
10356        const markerSize = map_obj.getMarkerSize?.() || [32, 32];
10357
10358        if (wrapper) {
10359          wrapper.classList.add("wpgmp-infowindow-addon");
10360          wrapper.removeAttribute("style");
10361        }
10362        if (content) {
10363          content.removeAttribute("style");
10364        }
10365
10366        // Calculate the popup width and center it
10367        const rect = popupEl.getBoundingClientRect();
10368        const width = rect.width || 200; // fallback if rect is 0
10369        popupEl.style.left = `-${width / 2}px`;
10370        popupEl.style.bottom = `${markerSize[1] / 2}px`;
10371      }
10372      
10373      
10374      // Remove inline styling for Leaflet popups and apply custom class
10375      map.on("popupopen", function (e) {
10376        adjustLeafletPopup(e.popup);
10377      });
10378
10379      map.on("zoomend", function () {
10380        const openPopup = map._popup; // Leaflet stores currently open popup here
10381        if (openPopup) {
10382          adjustLeafletPopup(openPopup);
10383        }
10384      });
10385      
10386
10387    }
10388  }
10389
10390  window.WpgmpLeafletMaps = WpgmpLeafletMaps;
10391})(jQuery, window, document);
10392
10393class WpgmpMapFactory {
10394  create(provider, element, options, places) {
10395    // Use fallback if provider is missing
10396    provider = provider || (options?.provider) || 'google';
10397    options.provider = provider; // enforce for downstream use
10398
10399    switch (provider.toLowerCase()) {
10400      case 'leaflet':
10401        return new WpgmpLeafletMaps(element, options, places);
10402      case 'google':
10403        return new WpgmpGoogleMaps(element, options, places);
10404      default:
10405        console.warn(`Unknown provider "${provider}". Falling back to Google Maps.`);
10406        return new WpgmpGoogleMaps(element, options, places);
10407    }
10408  }
10409}
10410(function ($, window, document) {
10411  "use strict";
10412
10413  $.fn.maps = function (options = {}, places = []) {
10414    return this.each(function () {
10415      const stepLabel = `[wpgmp/maps]`;
10416
10417      if (typeof options === 'string') {
10418        try {
10419          options = JSON.parse(atob(options));
10420          if (wpgmp_local.debug_mode) {
10421            console.log(`${stepLabel} [Step 1] Options decoded from base64`, options);
10422          }
10423        } catch (e) {
10424          console.error(`${stepLabel} [Step 1] Failed to decode options:`, e);
10425          options = {};
10426        }
10427      }
10428
10429      if (!$.data(this, "wpgmp_maps")) {
10430        let provider = wpgmp_local.map_provider || "google";
10431        if (provider !== "google") {
10432          provider = "leaflet";
10433        }
10434
10435        if (wpgmp_local.debug_mode) {
10436          console.log(`${stepLabel} [Step 2] Preparing to initialize map...`);
10437          console.log(`${stepLabel} Provider: ${provider}`);
10438          console.log(`${stepLabel} Target Element:`, this);
10439          console.log(`${stepLabel} Options:`, options);
10440        }
10441
10442        setTimeout(() => {
10443          const instance = new WpgmpMapFactory().create(provider, this, options, places);
10444          instance.init();
10445          $.data(this, "wpgmp_maps", instance);
10446
10447          if (wpgmp_local.debug_mode) {
10448            console.log(`${stepLabel} [Step 3] Map instance created and initialized.`);
10449          }
10450
10451          // 🔔 Internal event to signal complete readiness
10452          if (wpgmp_local.debug_mode) {
10453            console.log(`${stepLabel} [Step 4] Events dispatched: wpgmpInstanceReady, wpgmpLoaded`);
10454          }
10455          const internalEvent = new CustomEvent("wpgmpInstanceReady", {
10456            detail: { element: this, instance, provider },
10457          });
10458          document.dispatchEvent(internalEvent);
10459
10460          // External/public event
10461          const externalEvent = new CustomEvent("wpgmpLoaded", {
10462            detail: { element: this, instance, provider },
10463          });
10464          document.dispatchEvent(externalEvent);
10465
10466          
10467
10468        }, wpgmp_local.set_timeout);
10469      } else {
10470        if (wpgmp_local.debug_mode) {
10471          console.log(`${stepLabel} [Skipped] Map already initialized on element:`, this);
10472        }
10473      }
10474    });
10475  };
10476})(jQuery, window, document);
10477
10478function wpgmpInitMap() {
10479  jQuery(document).ready(function ($) {
10480    var stepLabel = `[wpgmpInitMap]`;
10481
10482    if (!$.fn.maps) {
10483      if (wpgmp_local.debug_mode) {
10484        console.warn(`${stepLabel} [Abort] $.fn.maps not defined`);
10485      }
10486      return;
10487    }
10488
10489    // ✅ STEP 1: Initialize each map
10490    $(".wpgmp_map").each(function () {
10491      stepLabel = `[wpgmpShowMap]`;
10492      const mapId = $(this).data("map-id");
10493      const mapVarName = "mapdata" + mapId;
10494      const mapData = window.wpgmp?.[mapVarName];
10495
10496      if (mapData) {
10497        if (wpgmp_local.debug_mode) {
10498          console.log(`${stepLabel} [Step 1] Map data found for ID: ${mapId}`);
10499        }
10500        $("#map" + mapId).maps(mapData);
10501      } else {
10502        if (wpgmp_local.debug_mode) {
10503          console.warn(`${stepLabel} [Step 1] Map data missing for ID: ${mapId}, retrying in ${wpgmp_local.set_timeout}ms...`);
10504        }
10505
10506        setTimeout(() => {
10507          const retryData = window.wpgmp?.[mapVarName];
10508          if (retryData) {
10509            if (wpgmp_local.debug_mode) {
10510              console.log(`${stepLabel} [Step 1] Retry succeeded for ID: ${mapId}`);
10511            }
10512            $("#map" + mapId).maps(retryData);
10513          } else {
10514            console.error(`${stepLabel} [Step 1] Retry failed: Map data still missing for ID: ${mapId}`);
10515          }
10516        }, wpgmp_local.set_timeout);
10517      }
10518    });
10519
10520    // ✅ STEP 2: Listen for internal complete signal
10521    document.addEventListener("wpgmpInstanceReady", function (e) {
10522      const { element, instance, provider } = e.detail;
10523      const mapId = $(element).data("map-id");
10524
10525      if (wpgmp_local.debug_mode) {
10526        console.log(`${stepLabel} [Step 2] Map fully initialized.`);
10527        console.log(`${stepLabel} Map ID: ${mapId}`);
10528        console.log(`${stepLabel} Provider: ${provider}`);
10529        console.log(`${stepLabel} Instance:`, instance);
10530      }
10531    });
10532
10533    // ✅ STEP 3: Dispatch global ready signal
10534    window.wpgmpInitialized = true;
10535    stepLabel = `[wpgmpInitMap]`;
10536    setTimeout(() => {
10537      if (wpgmp_local.debug_mode) {
10538        console.log(`${stepLabel} [Step 1] Global event dispatched: wpgmpReady`);
10539      }
10540      document.dispatchEvent(new Event("wpgmpReady"));
10541    }, wpgmp_local.set_timeout);
10542  });
10543}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.