PageSourceSearch

https://www.hotel1861.com/wp-content/plugins/wp-google-map-plugin/assets/js/maps.js?ver=4.8.6

js hotel1861.com collected 2026-10-09 17:07:49 UTC 1,052,058 bytes, 10,539 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          if (map_obj.map_data.map_options.select_category) {
3674            wpgmp_local.select_category = map_obj.map_data.map_options.select_category;
3675          }
3676          content +=
3677            '<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_' +
3678            index +
3679            '">';
3680          content +=
3681            '<option value="">' + wpgmp_local.select_category + "</option>";
3682          options = map_obj.sort_object_by_keyvalue(
3683            options,
3684            by,
3685            type,
3686            inorder
3687          );
3688          $.each(options, function (name, value) {
3689            content +=
3690              "<option value='" + value.id + "'>" + value.name + "</option>";
3691          });
3692          content += "</select>";
3693        } else if (wpgmp_listing_filter.display_taxonomies_filter === true) {
3694          if (wpgmp_alltfilter === null) return false;
3695
3696          if (wpgmp_alltfilter.indexOf(index) > -1) {
3697            content +=
3698              '<select data-filter="dropdown" data-name="category" name="place_' +
3699              index +
3700              '">';
3701            content += '<option value="">Select ' + index + "</option>";
3702            $.each(options, function (name, value) {
3703              content +=
3704                "<option value='" + value + "'>" + name + "</option>";
3705            });
3706            content += "</select>";
3707          }
3708        }
3709      });
3710    }
3711
3712    if (map_obj.map_data.map_options.advance_template) {
3713      if (!map_obj.template_data) {
3714        map_obj.template_data = {}; // Ensure template_data exists
3715      }
3716      if (!Array.isArray(map_obj.template_data.filter)) {
3717        map_obj.template_data.filter = []; // Ensure filter is an array
3718      }
3719      map_obj.template_data.filter.push(filters);
3720    }
3721
3722    return content;
3723  }
3724
3725  update_places_listing() {
3726    var map_obj = this;
3727
3728    if (map_obj.per_page_value > 0)
3729      map_obj.per_page_value = map_obj.per_page_value;
3730    else
3731      map_obj.per_page_value =
3732        map_obj.map_data.listing.pagination.listing_per_page;
3733
3734    $(map_obj.container)
3735      .find(".location_pagination" + map_obj.map_data.map_property.map_id)
3736      .pagination(map_obj.show_places.length, {
3737        callback: map_obj.display_places_listing,
3738        map_data: map_obj,
3739        items_per_page: map_obj.per_page_value,
3740        prev_text: wpgmp_local.prev,
3741        next_text: wpgmp_local.next,
3742      });
3743  }
3744
3745  display_filters_listing() {
3746    if (this.map_data.listing) {
3747      var hide_locations = this.map_data.listing.hide_locations;
3748
3749      var wpgmpgl = this.map_data.listing.list_grid;
3750
3751      if (hide_locations != true) {
3752        var content = '<div class="wpgmp_listing_container">';
3753
3754        content +=
3755          "<div class='wpgmp_categories wpgmp_print_listing " +
3756          wpgmpgl +
3757          "' data-container='wpgmp-listing-" +
3758          $(this.element).attr("id") +
3759          "'></div>";
3760
3761        content += "</div>";
3762        $(this.map_data.listing.listing_container).html(content);
3763      }
3764    }
3765  }
3766
3767  display_filters() {
3768    var hide_locations = this.map_data.listing.hide_locations;
3769    var listing_header = this.map_data.listing.listing_header;
3770    var content = "";
3771    if (listing_header != undefined) {
3772      content +=
3773        '<div class="wpgmp_before_listing">' +
3774        this.map_data.listing.listing_header +
3775        "</div>";
3776    }
3777    if (this.map_data.listing.display_search_form === true) {
3778      var autosuggest_class = "";
3779
3780      if (this.map_data.listing.search_field_autosuggest === true) {
3781        autosuggest_class = "wpgmp_auto_suggest";
3782      }
3783
3784      if (this.map_data.map_options.search_placeholder) {
3785        wpgmp_local.search_placeholder = this.map_data.map_options.search_placeholder;
3786      }
3787
3788      content +=
3789        '<div class="wpgmp_listing_header">
3789<div class="wpgmp_search_form"><input type="text" rel="24" data-input="wpgmp-search-text" name="wpgmp_search_input" class="wpgmp_search_input ' +
3790        autosuggest_class +
3791        '" placeholder="' +
3792        wpgmp_local.search_placeholder +
3793        '"></div></div>';
3794    }
3795
3796    content +=
3797      '<div class="categories_filter">' +
3798      this.create_filters() +
3799      '<div data-container="wpgmp-filters-container"></div>';
3800
3801    if (hide_locations != true) content += this.create_sorting() + "";
3802
3803    if (
3804      hide_locations != true &&
3805      this.map_data.listing.display_location_per_page_filter === true
3806    ) {
3807      content += " " + this.create_perpage_option() + " ";
3808    }
3809
3810    content += " " + this.create_radius() + " ";
3811
3812    if (
3813      hide_locations != true &&
3814      this.map_data.listing.display_print_option === true
3815    ) {
3816      content += " " + wpgmp_local.img_print;
3817    }
3818
3819    if (
3820      hide_locations != true &&
3821      this.map_data.listing.display_grid_option === true
3822    ) {
3823      content += " " + wpgmp_local.img_grid + wpgmp_local.img_list;
3824    }
3825
3826    if (
3827      typeof this.map_data.map_options.display_reset_button != "undefined" &&
3828      this.map_data.map_options.display_reset_button === true
3829    ) {
3830      content +=
3831        '<div class="categories_filter_reset"><input type="button" class="categories_filter_reset_btn" name="categories_filter_reset_btn" value="' +
3832        this.map_data.map_options.map_reset_button_text +
3833        '"></div>';
3834    }
3835
3836    content += "</div>";
3837
3838    return content;
3839  }
3840
3841  set_icon_marker(place, iconUrl, iconSize = [32, 32]) {
3842    if (!place || !place.marker || !iconUrl) return;
3843  
3844    const isGoogle = this.isMapProvider('google');
3845    const isSvg = iconUrl.toLowerCase().includes('image/svg') || iconUrl.toLowerCase().endsWith('.svg');
3846  
3847    if (isGoogle) {
3848      // Google Maps: uses scaledSize and url object
3849      const icon = { url: iconUrl };
3850
3851      if (isSvg) {
3852        icon.scaledSize = new google.maps.Size(iconSize[0], iconSize[1]);
3853      }
3854
3855      place.marker.setIcon(icon);
3856
3857  
3858    } else {
3859      const icon = { url: iconUrl };
3860
3861      if (isSvg) {
3862        icon.scaledSize = [iconSize[0], iconSize[1]];
3863      }
3864
3865      place.marker.setIcon(icon);
3866
3867    }
3868  }
3869
3870  
3871  display_places_listing(page_index, jq) {
3872    var content = "";
3873    var map_obj = this;
3874    var category_selector_dropdown = $('select[name = "place_category"]');
3875    var items_per_page = 10;
3876    if (map_obj.items_per_page) items_per_page = map_obj.items_per_page;
3877    else
3878      items_per_page =
3879        map_obj.map_data.map_data.listing.pagination.listing_per_page;
3880
3881    if ($.isFunction($.fn.locationSortByDistance)) {
3882      var distance_image =
3883        map_obj.map_data.map_data.plugin_url +
3884        "assets/images/location-icon.png";
3885      if (
3886        ($("#search_location_autocomplete").val() != "" &&
3887          map_obj.map_data.is_place_changed) ||
3888        map_obj.map_data.is_location_allowed
3889      ) {
3890        map_obj.map_data.show_places =
3891          map_obj.map_data.sorted_locations_by_search;
3892      }
3893    }
3894
3895    var data_source = map_obj.map_data.show_places;
3896
3897    var listing_container =
3898      map_obj.map_data.map_data.listing.listing_container;
3899
3900    var listing_placeholder =
3901      map_obj.map_data.map_data.listing.listing_placeholder;
3902
3903    var max_elem = Math.min(
3904      (page_index + 1) * items_per_page,
3905      data_source.length
3906    );
3907    var link = "";
3908    var onclick_action = "";
3909    if (max_elem > 0) {
3910      for (var i = page_index * items_per_page; i < max_elem; i++) {
3911        var place = data_source[i];
3912        var temp_listing_placeholder = listing_placeholder;
3913        if (place.marker.getVisible() === true) {
3914          if (place.id) {
3915            if (place.location.onclick_action == "marker") {
3916              link =
3917                '<a href="javascript:void(0);" class="place_title" data-zoom="' +
3918                place.location.zoom +
3919                '"  data-marker="' +
3920                place.id +
3921                '" >' +
3922                place.title +
3923                "</a>";
3924              onclick_action =
3925                'href="javascript:void(0);" data-zoom="' +
3926                place.location.zoom +
3927                '"  data-marker="' +
3928                place.id +
3929                '"';
3930            } else if (place.location.onclick_action == "post") {
3931              link =
3932                '<a href="' +
3933                place.location.redirect_permalink +
3934                '" target="_blank">' +
3935                place.title +
3936                "</a>";
3937              onclick_action =
3938                'href="' +
3939                place.location.redirect_permalink +
3940                '" target="_blank"';
3941            } else if (place.location.onclick_action == "custom_link") {
3942              link =
3943                '<a href="' +
3944                place.location.redirect_custom_link +
3945                '" target="_blank">' +
3946                place.title +
3947                "</a>";
3948              onclick_action =
3949                'href="' +
3950                place.location.redirect_custom_link +
3951                '" target="_blank"';
3952            } else {
3953              link =
3954                '<a href="javascript:void(0);" class="place_title" data-zoom="' +
3955                place.location.zoom +
3956                '"  data-marker="' +
3957                place.id +
3958                '" >' +
3959                place.title +
3960                "</a>";
3961              onclick_action =
3962                'href="javascript:void(0);" data-zoom="' +
3963                place.location.zoom +
3964                '"  data-marker="' +
3965                place.id +
3966                '"';
3967            }
3968          }
3969
3970          var image = [];
3971          var category_name = [];
3972          var wpgmp_arr = {};
3973
3974          if (place.categories) {
3975            for (var c = 0; c < place.categories.length; c++) {
3976              if (place.categories[c].icon !== "") {
3977                image.push(
3978                  "<img title='" +
3979                    place.categories[c].name +
3980                    "' alt='" +
3981                    place.categories[c].name +
3982                    "' src='" +
3983                    place.categories[c].icon +
3984                    "' />"
3985                );
3986              }
3987
3988              if (
3989                place.categories[c].type == "category" &&
3990                place.categories[c].name != ""
3991              ) {
3992                if (
3993                  map_obj.map_data.map_data.map_options.advance_template ==
3994                  true
3995                ) {
3996                  category_name.push(
3997                    '<span class="wep-chip">' +
3998                      place.categories[c].name +
3999                      "</span>"
4000                  );
4001                } else {
4002                  category_name.push('<div class="fc-badge">'+place.categories[c].name+'</div>');
4003                }
4004              }
4005
4006              if (place.categories[c].type != "category") {
4007                if (typeof place.categories[c].name == "undefined") continue;
4008
4009                if (place.categories[c].name) var sep = ",";
4010
4011                if (typeof wpgmp_arr[place.categories[c].type] == "undefined")
4012                  wpgmp_arr[place.categories[c].type] = "";
4013
4014                wpgmp_arr[place.categories[c].type] +=
4015                  place.categories[c].name + sep;
4016              }
4017            }
4018          }
4019
4020          var marker_image = "";
4021
4022          if (place.source == "post") {
4023            marker_image = place.location.extra_fields.post_featured_image;
4024          } else {
4025            marker_image = place.location.marker_image;
4026          }
4027
4028          category_name = category_name.join("");
4029
4030          var replaceData = {
4031            "{marker_id}": place.id,
4032            "{marker_title}": link,
4033            "{marker_address}": place.address,
4034            "{marker_latitude}": place.location.lat,
4035            "{marker_longitude}": place.location.lng,
4036            "{marker_city}": place.location.city,
4037            "{marker_state}": place.location.state,
4038            "{marker_country}": place.location.country,
4039            "{marker_postal_code}": place.location.postal_code,
4040            "{marker_zoom}": place.location.zoom,
4041            "{marker_icon}": image,
4042            "{marker_category}": category_name,
4043            "{marker_message}": place.content,
4044            "{marker_image}": marker_image,
4045            "{marker_featured_image}": marker_image,
4046            "{wpgmp_listing_html}": place.listing_hook,
4047            "{onclick_action}
4047": onclick_action,
4048            "{distance}": "",
4049            "{get_directions_link}":
4050              "http://www.google.com/maps/place/" +
4051              parseFloat(place.location.lat) +
4052              "," +
4053              parseFloat(place.location.lng),
4054          };
4055
4056          if ($.isFunction($.fn.locationSortByDistance)) {
4057            if (
4058              typeof place.distance !== "undefined" &&
4059              place.distance !== null &&
4060              place.distance !== "NaN"
4061            ) {
4062              var dimension =
4063                map_obj.map_data.map_data.listing.radius_dimension;
4064              if (dimension == "km") {
4065                if ((place.distance / 1000).toFixed(2) != "NaN") {
4066                  place.distance = (place.distance / 1000).toFixed(2) + " Km";
4067                  place.location.extra_fields.distance =
4068                    '<img width="21px" height="26px" src="' +
4069                    distance_image +
4070                    '" style="width: 21px!important;height: 26px!important;margin-right: 3px!important;margin-top: 0px!important;"><span class="distance_calculate">' +
4071                    place.distance +
4072                    "</span>";
4073                }
4074              } else {
4075                if ((place.distance / 1000).toFixed(2) != "NaN") {
4076                  place.distance = (place.distance / 1000).toFixed(2);
4077                  place.distance =
4078                    (place.distance / 1.6).toFixed(2) + " Miles";
4079                  place.location.extra_fields.distance =
4080                    '<img width="21px" height="26px" src="' +
4081                    distance_image +
4082                    '" style="width: 21px!important;height: 26px!important;margin-right: 3px!important;margin-top: 0px!important;"><span class="distance_calculate">' +
4083                    place.distance +
4084                    "</span>";
4085                }
4086              }
4087            }
4088          }
4089
4090          //Add extra fields of locations
4091          if (typeof place.location.extra_fields != "undefined") {
4092            for (var extra in place.location.extra_fields) {
4093              if (!place.location.extra_fields[extra]) {
4094                replaceData["{" + extra + "}"] =
4095                  "<div class='wpgmp_empty'>wpgmp_empty</div>";
4096              } else {
4097                replaceData["{" + extra + "}"] =
4098                  place.location.extra_fields[extra];
4099              }
4100            }
4101          }
4102
4103          temp_listing_placeholder = temp_listing_placeholder.replace(
4104            /{#if (.*?)}([\s\S]*?){\/if}/g,
4105            function (match, p1, p2) {
4106              const key = "{" + p1 + "}";
4107              const value = replaceData[key];
4108              return value &&
4109                value !== "<div class='wpgmp_empty'>wpgmp_empty</div>"
4110                ? p2
4111                : "";
4112            }
4113          );
4114
4115          if (
4116            map_obj.map_data.map_data.map_options.link_extra_field !=
4117              undefined &&
4118            map_obj.map_data.map_data.map_options.link_extra_field != ""
4119          ) {
4120            var anchor_tag =
4121              map_obj.map_data.map_data.map_options.link_extra_field;
4122            for (var prop_an in anchor_tag) {
4123              if (
4124                replaceData[prop_an] !=
4125                  "<div class='wpgmp_empty'>wpgmp_empty</div>" &&
4126                prop_an != ""
4127              ) {
4128                temp_listing_placeholder = temp_listing_placeholder.replace(
4129                  prop_an,
4130                  anchor_tag[prop_an]
4131                );
4132              }
4133            }
4134          }
4135
4136          for (var prop in replaceData) {
4137            if (
4138              replaceData[prop] == undefined ||
4139              replaceData[prop] == "undefined"
4140            )
4141              replaceData[prop] = "";
4142          }
4143
4144          if (wpgmp_arr) {
4145            for (var n in wpgmp_arr) {
4146              replaceData["{" + n + "}"] = wpgmp_remove_last_comma(
4147                wpgmp_arr[n]
4148              );
4149            }
4150          }
4151
4152          var wpgmp_remove_last_comma = function (strng) {
4153            var n = strng.lastIndexOf(",");
4154            var a = strng.substring(0, n);
4155            return a;
4156          };
4157
4158          temp_listing_placeholder = temp_listing_placeholder.replace(
4159            /{[^{}]+}/g,
4160            function (match) {
4161              if (match in replaceData) {
4162                return replaceData[match];
4163              } else {
4164                return "";
4165              }
4166            }
4167          );
4168
4169          content += temp_listing_placeholder;
4170        }
4171      }
4172    } else {
4173      content =
4174        "<div class='wpgmp_no_locations'>" +
4175        wpgmp_local.wpgmp_location_no_results +
4176        "</div>";
4177    }
4178
4179    for (var j = 0; j < data_source.length; j++) {
4180      place = data_source[j];
4181      if (
4182        typeof place.categories.length !== undefined &&
4183        place.categories.length > 1
4184      ) {
4185        var iconSize = map_obj.map_data.getMarkerSize();
4186        if (category_selector_dropdown.val() !== "") {
4187          if (place.categories) {
4188            for (var c = 0; c < place.categories.length; c++) {
4189              if (
4190                category_selector_dropdown.val() == place.categories[c].id
4191              ) {
4192                
4193                map_obj.map_data.set_icon_marker(place, place.categories[c].icon,iconSize);
4194                
4195                break;
4196              }
4197            }
4198          }
4199        } else {
4200
4201          map_obj.map_data.set_icon_marker(place, place.location.icon,iconSize);
4202          
4203        }
4204      }
4205    }
4206
4207    // content += '<div id="wpgmp_pagination"></div>';
4208
4209    if (map_obj.map_data.map_data.map_options.advance_template === true) {
4210      var $listingElement = $(document).find(
4211        '[data-listing-content="true"][data-wpgmp-map-id]'
4212      );
4213      var allClasses = $listingElement.attr("class").split(" ");
4214      listing_container = "." + allClasses[0];
4215      $(listing_container).html(content);
4216    } else {
4217      content =
4218        '<div class="fc-' +
4219        map_obj.map_data.map_data.listing.list_item_skin.type +
4220        "-" +
4221        map_obj.map_data.map_data.listing.list_item_skin.name +
4222        ' fc-wait"><div data-page="2" class="fc-component-6" data-layout="' +
4223        map_obj.map_data.map_data.listing.list_item_skin.name +
4224        '" >' +
4225        content +
4226        "</div></div>";
4227      $(listing_container).find(".wpgmp_categories").html(content);
4228    }
4229
4230    $(listing_container)
4231      .find(".wpgmp_extra_field:contains('wpgmp_empty')")
4232      .remove();
4233    $(listing_container).find(".wpgmp_empty").prev().remove();
4234    $(listing_container).find(".wpgmp_empty").remove();
4235
4236    if (map_obj.map_data.map_data.listing.list_grid == "wpgmp_listing_grid") {
4237      $(window).on("load", function () {
4238        try {
4239          var container = $(listing_container).find(".wpgmp_listing_grid");
4240          if (container.length) {
4241            var msnry = container.data("masonry");
4242            if (msnry) {
4243              msnry.destroy();
4244            }
4245
4246            container.imagesLoaded(function () {
4247              // init Masonry after all images have loaded
4248              container.masonry({
4249                itemSelector: ".wpgmp_locations",
4250                columnWidth: ".wpgmp_locations",
4251                percentPosition: true,
4252              });
4253
4254              // Now safe to call reload
4255              container.masonry("layout");
4256            });
4257
4258          }
4259        } catch (err) {
4260          console.log(err);
4261        }
4262      });
4263    }
4264    return false;
4265  }
4266  // -----------------------------
4267  // 📊 Filters & Listings
4268  // -----------------------------
4269  apply_filters() {
4270    var map_obj = this;
4271    var filters = map_obj.filters;
4272    var showAll = true;
4273    var show = true;
4274    map_obj.show_places = [];
4275    // Filter by search box.
4276    if ($.isFunction($.fn.locationSortByDistance)) {
4277      map_obj.sorted_locations_by_search = [];
4278    } else {
4279      if (
4280        $(map_obj.container).find('[data-input="wpgmp-search-text"]').length >
4281        0
4282      ) {
4283        map_obj.search_term = $(map_obj.container)
4284          .find('[data-input="wpgmp-search-text"]')
4285          .val()
4286          .trim();
4287
4288        if (map_obj.search_term.length > 0) {
4289          map_obj.search_term = map_obj.search_term.toLowerCase();
4290          map_obj.enable_search_term = true;
4291        }
4292      }
4293    }
4294
4295    if (
4296      (map_obj.map_data.map_tabs &&
4297        map_obj.map_data.map_tabs.category_tab &&
4298        map_obj.map_data.map_tabs.category_tab.cat_tab === true) ||
4299      $(map_obj.container).find("input[data-marker-category]").length > 0
4300    ) {
4301      var all_selected_category_sel = $(map_obj.container).find(
4302        "input[data-marker-category]:checked"
4303      );
4304      var all_selected_category = [];
4305      var all_not_selected_location = [];
4306      if (all_selected_category_sel.length > 0) {
4307        $.each(
4308          all_selected_category_sel,
4309          function (index, selected_category) {
4310            all_selected_category.push(
4311              $(selected_category).data("marker-category")
4312            );
4313            var all_not_selected_location_sel = $(selected_category)
4314              .closest('[data-container="wpgmp-category-tab-item"]')
4315              .find("input[data-marker-location]:not(:checked)");
4316            if (all_not_selected_location_sel.length > 0) {
4317              $.each(
4318                all_not_selected_location_sel,
4319                function (index, not_selected_location) {
4320                  all_not_selected_location.push(
4321                    $(not_selected_location).data("marker-location")
4322                  );
4323                }
4324              );
4325            }
4326          }
4327        );
4328      }
4329      var all_selected_location_sel = $(map_obj.container)
4330        .find('[data-container="wpgmp-category-tab-item"]')
4331        .find("input[data-marker-location]:checked");
4332      var all_selected_location = [];
4333      if (all_selected_location_sel.length > 0) {
4334        $.each(
4335          all_selected_location_sel,
4336          function (index, selected_location) {
4337            all_selected_location.push(
4338              $(selected_location).data("marker-location")
4339            );
4340          }
4341        );
4342      }
4343    }
4344
4345    if (typeof map_obj.map_data.places != "undefined") {
4346      $.each(map_obj.map_data.places, function (place_key, place) {
4347        show = true;
4348        if (typeof filters != "undefined") {
4349          $.each(filters, function (filter_key, filter_values) {
4350            var in_fields = false;
4351
4352            if ($.isArray(filter_values)) {
4353              if (
4354                typeof place.categories != "undefined" &&
4355                filter_key == "category"
4356              ) {
4357                $.each(place.categories, function (cat_index, category) {
4358                  if ($.inArray(category.id, filter_values) > -1) {
4359                    in_fields = true;
4360                  }
4361                });
4362              }
4363
4364              if (typeof place.custom_filters != "undefined") {
4365                $.each(place.custom_filters, function (k, val) {
4366                  if (filter_key == k) {
4367                    in_fields = false;
4368                    if ($.isArray(val)) {
4369                      $.each(val, function (index, value) {
4370                        if ($.inArray(value, filter_values) > -1)
4371                          in_fields = true;
4372                      });
4373                    } else if (val == filter_values.val) in_fields = true;
4374                  }
4375                });
4376              }
4377
4378              if (typeof place[filter_key] != "undefined") {
4379                if (
4380                  $.inArray(place[filter_key].toLowerCase(), filter_values) >
4381                  -1
4382                ) {
4383                  in_fields = true;
4384                }
4385              } else if (typeof place.location[filter_key] != "undefined") {
4386                if (
4387                  $.inArray(
4388                    place.location[filter_key].toLowerCase(),
4389                    filter_values
4390                  ) > -1
4391                ) {
4392                  in_fields = true;
4393                }
4394              } else if (
4395                place.location.extra_fields &&
4396                typeof place.location.extra_fields[filter_key] != "undefined"
4397              ) {
4398                var dropdown_value = filter_values[0];
4399
4400                if (place.location.extra_fields[filter_key] != "") {
4401                  var arrayResult =
4402                    place.location.extra_fields[filter_key].split(",");
4403
4404                  var trimmedArray = $.map(arrayResult, function (value) {
4405                    return $.trim(value).toLowerCase();
4406                  });
4407                }
4408                if (place.location.extra_fields[filter_key]) {
4409                  var dropdown_val =
4410                    place.location.extra_fields[filter_key].toLowerCase();
4411                  var dropdown_val_decoded = $("<div>")
4412                    .html(dropdown_val)
4413                    .text();
4414                  if (
4415                    dropdown_val &&
4416                    (dropdown_val.indexOf(dropdown_value) > -1 ||
4417                      dropdown_val_decoded.indexOf(dropdown_value) > -1)
4418                  ) {
4419                    in_fields = true;
4420                  } else if ($.inArray(dropdown_val, filter_values) > -1) {
4421                    in_fields = true;
4422                  } else if (
4423                    trimmedArray != undefined &&
4424                    $.inArray(dropdown_value, trimmedArray) > -1
4425                  ) {
4426                    in_fields = true;
4427                  } else if (Array.isArray(dropdown_value) && trimmedArray !== undefined && dropdown_value.some(value => trimmedArray.includes(value))) {
4428                    in_fields = true;
4429                }
4430                }
4431              }
4432
4433              if (map_obj.addonInfo !== "") {
4434                $.each(map_obj.addonInfo, function (key, method) {
4435                  var method_name = method.filtration_logic;
4436
4437                  if (
4438                    typeof map_obj[method_name] !== "undefined" &&
4439                    $.isFunction(map_obj[method_name])
4440                  ) {
4441                    in_fields = map_obj[method_name](
4442                      in_fields,
4443                      place,
4444                      filter_values,
4445                      filter_key
4446                    );
4447                  }
4448                });
4449              }
4450
4451              if (in_fields == false) show = false;
4452            } else {
4453              filter_values.val = "";
4454            }
4455          });
4456        }
4457
4458        var search_fields = map_obj.map_data.map_options.search_fields;
4459        var exclude_fields = map_obj.map_data.map_options.exclude_fields;
4460
4461        if (Array.isArray(exclude_fields) && exclude_fields.length > 0) {
4462          if (exclude_fields.includes("{post_title}")) {
4463            if (!exclude_fields.includes("{post_link}")) {
4464              exclude_fields.push("{post_link}");
4465            }
4466            if (!exclude_fields.includes("{marker_title}")) {
4467              exclude_fields.push("{marker_title}");
4468            }
4469          }
4470
4471          if (exclude_fields.includes("{post_content}")) {
4472            if (!exclude_fields.includes("{post_excerpt}")) {
4473              exclude_fields.push("{post_excerpt}");
4474            }
4475            if (!exclude_fields.includes("{marker_message}")) {
4476              exclude_fields.push("{marker_message}");
4477            }
4478          }
4479
4480          if (
4481            exclude_fields.includes("{post_excerpt}") &&
4482            !exclude_fields.includes("{post_content}")
4483          ) {
4484            exclude_fields.push("{post_content}");
4485          }
4486
4487          if (
4488            exclude_fields.includes("{marker_address}") &&
4489            !exclude_fields.includes("{%_wpgmp_location_address%}")
4490          ) {
4491            exclude_fields.push("{%_wpgmp_location_address%}");
4492          }
4493
4494          if (
4495            exclude_fields.includes("{marker_city}") &&
4496            !exclude_fields.includes("{%_wpgmp_location_city%}")
4497          ) {
4498            exclude_fields.push("{%_wpgmp_location_city%}");
4499          }
4500
4501          if (
4502            exclude_fields.includes("{marker_country}") &&
4503            !exclude_fields.includes("{%_wpgmp_location_country%}")
4504          ) {
4505            exclude_fields.push("{%_wpgmp_location_country%}");
4506          }
4507
4508          if (
4509            exclude_fields.includes("{marker_state}") &&
4510            !exclude_fields.includes("{%_wpgmp_location_state%}")
4511          ) {
4512            exclude_fields.push("{%_wpgmp_location_state%}");
4513          }
4514
4515          if (
4516            exclude_fields.includes("{marker_longitude}") &&
4517            !exclude_fields.includes("{%_wpgmp_metabox_longitude%}")
4518          ) {
4519            exclude_fields.push("{%_wpgmp_metabox_longitude%}");
4520          }
4521
4522          if (
4523            exclude_fields.includes("{marker_latitude}") &&
4524            !exclude_fields.includes("{%_wpgmp_metabox_latitude%}")
4525          ) {
4526            exclude_fields.push("{%_wpgmp_metabox_latitude%}");
4527          }
4528        }
4529        var extra_fields_array = place.location.extra_fields;
4530        var flag_search = false;
4531        var flag_exclude = false;
4532
4533        var search_exclude = {};
4534        if (
4535          typeof exclude_fields !== "undefined" &&
4536          exclude_fields.length > 0
4537        ) {
4538          flag_exclude = true;
4539          search_exclude = Object.keys(extra_fields_array)
4540            .filter((key) => !exclude_fields.includes(`{${key}}`))
4541            .reduce((obj, key) => {
4542              obj[key] = extra_fields_array[key];
4543              return obj;
4544            }, {});
4545        }
4546        //search with only these field
4547        var search_fields_present = [];
4548        if (
4549          typeof search_fields !== "undefined" &&
4550          search_fields.length > 0
4551        ) {
4552          flag_search = true;
4553          for (var i = 0; i < search_fields.length; i++) {
4554            if (
4555              extra_fields_array.hasOwnProperty(search_fields[i].slice(1, -1))
4556            ) {
4557              search_fields_present.push(search_fields[i]);
4558            }
4559          }
4560        }
4561
4562        //Apply Search Filter.
4563        var search_term = map_obj.search_term;
4564        if (search_term && search_term.length > 0) {
4565          if (map_obj.enable_search_term === true && show === true) {
4566            if (flag_search == true || flag_exclude == true) {
4567              if (
4568                place.title != undefined &&
4569                place.title.toLowerCase().indexOf(search_term) >= 0 &&
4570                ((flag_search && search_fields.includes("{marker_title}")) ||
4571                  (flag_exclude &&
4572                    !exclude_fields.includes("{marker_title}")))
4573              ) {
4574                show = true;
4575              } else if (
4576                place.content != undefined &&
4577                place.content.toLowerCase().indexOf(search_term) >= 0 &&
4578                ((flag_search == true &&
4579                  search_fields.includes("{marker_message}")) ||
4580                  (flag_exclude == true &&
4581                    !exclude_fields.includes("{marker_message}")))
4582              ) {
4583                show = true;
4584              } else if (
4585                String(place.location.lat)
4586                  .toLowerCase()
4587                  .indexOf(search_term) >= 0 &&
4588                ((flag_search == true &&
4589                  search_fields.includes("{marker_latitude}")) ||
4590                  (flag_exclude == true &&
4591                    !exclude_fields.includes("{marker_latitude}")))
4592              ) {
4593                show = true;
4594              } else if (
4595                String(place.location.lng)
4596                  .toLowerCase()
4597                  .indexOf(search_term) >= 0 &&
4598                ((flag_search == true &&
4599                  search_fields.includes("{marker_longitude}")) ||
4600                  (flag_exclude == true &&
4601                    !exclude_fields.includes("{marker_longitude}")))
4602              ) {
4603                show = true;
4604              } else if (
4605                place.address &&
4606                place.address.toString().toLowerCase().indexOf(search_term) >=
4607                  0 &&
4608                ((flag_search == true &&
4609                  search_fields.includes("{marker_address}")) ||
4610                  (flag_exclude == true &&
4611                    !exclude_fields.includes("{marker_address}")))
4612              ) {
4613                show = true;
4614              } else if (
4615                place.location.state &&
4616                place.location.state.toLowerCase().indexOf(search_term) >=
4617                  0 &&
4618                ((flag_search == true &&
4619                  search_fields.includes("{marker_state}")) ||
4620                  (flag_exclude == true &&
4621                    !exclude_fields.includes("{marker_state}")))
4622              ) {
4623                show = true;
4624              } else if (
4625                place.location.country &&
4626                place.location.country.toLowerCase().indexOf(search_term) >=
4627                  0 &&
4628                ((flag_search == true &&
4629                  search_fields.includes("{marker_country}")) ||
4630                  (flag_exclude == true &&
4631                    !exclude_fields.includes("{marker_country}")))
4632              ) {
4633                show = true;
4634              } else if (
4635                place.location.postal_code &&
4636                String(place.location.postal_code)
4637                  .toLowerCase()
4638                  .indexOf(search_term) >= 0 &&
4639                ((flag_search == true &&
4640                  search_fields.includes("{marker_postal_code}")) ||
4641                  (flag_exclude == true &&
4642                    !exclude_fields.includes("{marker_postal_code}")))
4643              ) {
4644                show = true;
4645              } else if (
4646                place.location.city &&
4647                place.location.city.toLowerCase().indexOf(search_term) >= 0 &&
4648                ((flag_search == true &&
4649                  search_fields.includes("{marker_city}")) ||
4650                  (flag_exclude == true &&
4651                    !exclude_fields.includes("{marker_city}")))
4652              ) {
4653                show = true;
4654              } else {
4655                show = false;
4656              }
4657
4658              if (flag_search == true) {
4659                if (search_fields_present.length > 0) {
4660                  for (const field of search_fields_present) {
4661                    if (typeof place.location.extra_fields != "undefined") {
4662                      $.each(
4663                        place.location.extra_fields,
4664                        function (field, value) {
4665                          if (
4666                            value &&
4667                            $.inArray(
4668                              "{" + field + "}",
4669                              search_fields_present
4670                            ) !== -1
4671                          ) {
4672                            value = value.toString();
4673                            if (
4674                              value &&
4675                              value.toLowerCase().indexOf(search_term) >= 0
4676                            )
4677                              show = true;
4678                          }
4679                        }
4680                      );
4681                    }
4682                  }
4683                }
4684              } else if (flag_exclude == true) {
4685                for (var field in search_exclude) {
4686                  var value = search_exclude[field];
4687
4688                  if (value) {
4689                    value = value.toString();
4690
4691                    if (
4692                      value &&
4693                      value.toLowerCase().indexOf(search_term) >= 0
4694                    ) {
4695                      show = true;
4696                    }
4697                  }
4698                }
4699              }
4700            } else {
4701              if (
4702                place.title != undefined &&
4703                place.title.toLowerCase().indexOf(search_term) >= 0
4704              ) {
4705                show = true;
4706              } else if (
4707                place.content != undefined &&
4708                place.content.toLowerCase().indexOf(search_term) >= 0
4709              ) {
4710                show = true;
4711              } else if (
4712                String(place.location.lat)
4713                  .toLowerCase()
4714                  .indexOf(search_term) >= 0
4715              ) {
4716                show = true;
4717              } else if (
4718                String(place.location.lng)
4719                  .toLowerCase()
4720                  .indexOf(search_term) >= 0
4721              ) {
4722                show = true;
4723              } else if (
4724                place.address &&
4725                place.address.toString().toLowerCase().indexOf(search_term) >=
4726                  0
4727              ) {
4728                show = true;
4729              } else if (
4730                place.location.state &&
4731                place.location.state.toLowerCase().indexOf(search_term) >= 0
4732              ) {
4733                show = true;
4734              } else if (
4735                place.location.country &&
4736                place.location.country.toLowerCase().indexOf(search_term) >= 0
4737              ) {
4738                show = true;
4739              } else if (
4740                place.location.postal_code &&
4741                String(place.location.postal_code)
4742                  .toLowerCase()
4743                  .indexOf(search_term) >= 0
4744              ) {
4745                show = true;
4746              } else if (
4747                place.location.city &&
4748                place.location.city.toLowerCase().indexOf(search_term) >= 0
4749              ) {
4750                show = true;
4751              } else {
4752                show = false;
4753              }
4754
4755              if (typeof place.location.extra_fields != "undefined") {
4756                $.each(place.location.extra_fields, function (field, value) {
4757                  if (value) {
4758                    value = value.toString();
4759                    if (
4760                      value &&
4761                      value.toLowerCase().indexOf(search_term) >= 0
4762                    )
4763                      show = true;
4764                  }
4765                });
4766              }
4767            }
4768          }
4769        }
4770
4771        //Exclude locations without category if location filters are choosed by user
4772        if (
4773          (place.categories.length == undefined ||
4774            place.categories.length == "undefined") &&
4775          all_selected_category &&
4776          all_selected_category.length > 0 &&
4777          $(map_obj.container)
4778            .find('input[name="wpgmp_select_all"]')
4779            .is(":checked") == false &&
4780          show
4781        ) {
4782          show = false;
4783        }
4784
4785        // if checked category
4786        if (
4787          all_selected_category &&
4788          show != false &&
4789          place.categories.length != undefined
4790        ) {
4791          var in_checked_category = false;
4792
4793          if (all_selected_category.length === 0) {
4794            // means no any category selected so show those location without categories.
4795            if (typeof place.categories != "undefined") {
4796              $.each(place.categories, function (cat_index, category) {
4797                if (category.id === "") in_checked_category = true;
4798              });
4799            }
4800          } else {
4801            if (typeof place.categories != "undefined") {
4802              $.each(place.categories, function (cat_index, category) {
4803                if (category.id === "") in_checked_category = true;
4804                else if (
4805                  $.inArray(parseInt(category.id), all_selected_category) > -1
4806                ) {
4807                  in_checked_category = true;
4808                  var iconSize = map_obj.getMarkerSize();
4809                  map_obj.set_icon_marker(place, category.icon,iconSize);
4810                  
4811                }
4812              });
4813            }
4814          }
4815
4816          //Hide unchecked  locations.
4817          if (all_not_selected_location.length !== 0) {
4818            if (
4819              $.inArray(parseInt(place.id), all_not_selected_location) > -1
4820            ) {
4821              in_checked_category = false;
4822            }
4823          }
4824
4825          //var checked_categories = $(map_obj.container).find('input[data-marker-category]:checked').length;
4826          if (in_checked_category === false) show = false;
4827          else show = true;
4828
4829          //Show Here checked location.
4830          if (all_selected_location.length !== 0) {
4831            if ($.inArray(parseInt(place.id), all_selected_location) > -1) {
4832              show = true;
4833            }
4834          }
4835        }
4836        
4837        if( show == true ) {
4838          place.marker.bindMap(map_obj.map);
4839        }
4840        place.marker.setVisible(show);
4841
4842        if (show == false) {
4843          place.infowindow.close();
4844        }
4845        place.marker.setAnimation(null);
4846        if ($.isFunction($.fn.locationSortByDistance)) {
4847          if (show === true) {
4848            map_obj.show_places.push(place);
4849            map_obj.sorted_locations_by_search.push(place);
4850          }
4851        } else {
4852          if (show === true) map_obj.show_places.push(place);
4853        }
4854      });
4855
4856      if ($.isFunction($.fn.locationSortByDistance)) {
4857        if (map_obj.search_place != undefined) {
4858          map_obj.is_place_changed = true;
4859          var sotred_locs = map_obj.shuffle_by_distance(
4860            map_obj.sorted_locations_by_search,
4861            map_obj.search_place
4862          );
4863          map_obj.places = sotred_locs;
4864        }
4865      }
4866    }
4867
4868    if (
4869      typeof map_obj.map_data.map_options.bound_map_after_filter !== 'undefined' &&
4870      map_obj.map_data.map_options.bound_map_after_filter === true
4871    ) {
4872      const isGoogle = map_obj.isMapProvider("google");
4873
4874      // Create a bounds object based on provider
4875      const bounds = isGoogle
4876        ? new google.maps.LatLngBounds()
4877        : new L.LatLngBounds();
4878
4879      if (Array.isArray(map_obj.show_places) && map_obj.show_places.length > 0) {
4880        map_obj.show_places.forEach((place) => {
4881          const lat = parseFloat(place.location.lat);
4882          const lng = parseFloat(place.location.lng);
4883
4884          if (!isNaN(lat) && !isNaN(lng)) {
4885            const latLng = isGoogle
4886              ? new google.maps.LatLng(lat, lng)
4887              : L.latLng(lat, lng);
4888
4889            bounds.extend(latLng);
4890          }
4891        });
4892        // Fit bounds to map
4893        if (isGoogle) {
4894          map_obj.map.fitBounds(bounds);
4895        } else {
4896          map_obj.map.fitBounds(bounds, { padding: [20, 20] }); // optional padding
4897        }
4898      }
4899    }
4900
4901
4902    if (map_obj.map_data.listing) {
4903      if ($(map_obj.container).find('[data-filter="map-sorting"]').val()) {
4904        var order_data = $(map_obj.container)
4905          .find('[data-filter="map-sorting"]')
4906          .val()
4907          .split("__");
4908        var data_type = "";
4909        if (order_data[0] !== "" && order_data[1] !== "") {
4910          if (typeof order_data[2] != "undefined") {
4911            data_type = order_data[2];
4912          }
4913          map_obj.sorting(order_data[0], order_data[1], data_type);
4914        }
4915      } else {
4916        if (
4917          map_obj.map_data.listing.default_sorting &&
4918          map_obj.map_data.autosort
4919        ) {
4920          var data_type = "";
4921          if (
4922            map_obj.map_data.listing.default_sorting.orderby == "listorder"
4923          ) {
4924            data_type = "num";
4925          }
4926          map_obj.sorting(
4927            map_obj.map_data.listing.default_sorting.orderby,
4928            map_obj.map_data.listing.default_sorting.inorder,
4929            data_type
4930          );
4931        }
4932      }
4933
4934      map_obj.update_places_listing();
4935    }
4936
4937    if (map_obj.map_data.marker_cluster) {
4938      setTimeout(function () {
4939        map_obj.set_marker_cluster();
4940      }, 2000);
4941    }
4942  }
4943  update_filters() {
4944    var map_obj = this;
4945    map_obj.filters = {};
4946    var all_dropdowns = $(map_obj.container).find('[data-filter="dropdown"]');
4947    var all_checkboxes = $(map_obj.container).find(
4948      '[data-filter="checklist"]:checked'
4949    );
4950    var all_list = $(map_obj.container).find(
4951      '[data-filter="list"].fc_selected'
4952    );
4953    const map_id = map_obj.map_data.map_property.map_id;
4954    $.each(all_dropdowns, function (index, element) {
4955      if ($(this).val() != "") {
4956        if (typeof map_obj.filters[$(this).data("name")] == "undefined") {
4957          map_obj.filters[$(this).data("name")] = [];
4958        }
4959
4960        map_obj.filters[$(this).data("name")].push($(this).val());
4961      }
4962    });
4963
4964    $.each(all_checkboxes, function (index, element) {
4965      if (typeof map_obj.filters[$(this).data("name")] == "undefined") {
4966        map_obj.filters[$(this).data("name")] = [];
4967      }
4968
4969      map_obj.filters[$(this).data("name")].push($(this).val());
4970    });
4971
4972    $.each(all_list, function (index, element) {
4973      if (typeof map_obj.filters[$(this).data("name")] == "undefined") {
4974        map_obj.filters[$(this).data("name")] = [];
4975      }
4976
4977      map_obj.filters[$(this).data("name")].push(
4978        $(this).data("value").toString()
4979      );
4980    });
4981
4982    $('[data-wpgmp-filter="true"][data-wpgmp-map-id="' + map_id + '"]').each(
4983      function () {
4984        const filterBy = $(this).data("wpgmp-filter-by");
4985        const inputType = $(this).prop("type").toLowerCase();
4986        let inputValue;
4987        if (inputType === "checkbox" && $(this).is(":checked")) {
4988          inputValue = $(this).val();
4989        } else if (inputType === "select-one" || inputType === "select") {
4990          inputValue = $(this).find("option:selected").val();
4991        } else if (inputType === "radio" && $(this).is(":checked")) {
4992          inputValue = $(this).val();
4993        }
4994
4995        if (filterBy == "search" && $(this).val().length > 2) {
4996          map_obj.search_term = $(this).val().toLowerCase();
4997          map_obj.enable_search_term = true;
4998        } else if (filterBy == "search" && $(this).val().length < 2) {
4999          map_obj.search_term = "";
5000          map_obj.enable_search_term = true;
5001        }
5002
5003        if (inputValue !== undefined && inputValue !== "") {
5004          map_obj.filters[filterBy] = map_obj.filters[filterBy] || [];
5005          map_obj.filters[filterBy].push(inputValue);
5006        }
5007      }
5008    );
5009
5010    if (map_obj.addonInfo !== "") {
5011      $.each(map_obj.addonInfo, function (key, method) {
5012        var method_name = method.filter_register_mthod;
5013
5014        if (
5015          typeof map_obj[method_name] !== "undefined" &&
5016          $.isFunction(map_obj[method_name])
5017        ) {
5018          map_obj[method_name]();
5019        }
5020      });
5021    }
5022
5023    this.apply_filters();
5024  }
5025  
5026  register_events() {
5027    const map_obj = this;
5028    const map_id = map_obj.map_data.map_property.map_id;
5029    const $container = $(map_obj.container);
5030    const template = map_obj.map_data.map_options.template_name;
5031    const hasSearchButton = !!$(`[data-wpgmp-filter="true"][data-wpgmp-search-button="true"]`).length;
5032    
5033    $container.on("input change", ".wpgmp_error", function () {
5034      $(this).removeClass("wpgmp_error");
5035  });
5036  
5037    // -------------------------------
5038    // 🔁 Filters (dropdown, checklist, list, radius, per-page)
5039    // -------------------------------
5040    
5041     // Accordion tab toggle UI (for listings/filters etc.)
5042     $("body").on("click", ".fc-accordion-tab", function () {
5043      if ($(this).hasClass("active")) {
5044        $(this).removeClass("active");
5045  
5046        var acc_child = $(this).next().removeClass("active");
5047      } else {
5048        $(".fc-accordion-tab").removeClass("active");
5049  
5050        $(".fc-accordion dd").removeClass("active");
5051  
5052        $(this).addClass("active");
5053  
5054        var acc_child = $(this).next().addClass("active");
5055      }
5056    });
5057
5058    if (map_obj.map_data.listing) {
5059      // Hook for dynamic taxonomy filters
5060      $.each(map_obj.map_data.listing.filters, function (key, filter) {
5061        $(map_obj.container)
5062          .find('select[name="' + filter + '"]')
5063          .on("change", function () {
5064            map_obj.update_filters();
5065          });
5066      });
5067    }
5068
5069    $container.on("change", `select[data-wpgmp-filter="true"][data-wpgmp-map-id="${map_id}"]`, () => {
5070      map_obj.update_filters();
5071    });
5072    
5073    $container.on('click', '.categories_filter_reset_btn', function () {
5074      $(map_obj.container).find('.wpgmp_filter_wrappers select').each(function () {
5075          $(this).find('option:first').attr('selected', 'selected');
5076          $(this).find('option:first').prop('selected', 'selected');
5077      });
5078
5079      $('.wpgmp_search_input').val('');
5080
5081      if (map_obj.addonInfo !== '') {
5082
5083          $.each(map_obj.addonInfo, function (key, method) {
5084              var method_name = method.filter_reset_method;
5085
5086              if (typeof map_obj[method_name] !== 'undefined' && $.isFunction(map_obj[method_name])) {
5087
5088                  map_obj[method_name]();
5089              }
5090
5091          });
5092
5093      }
5094      map_obj.update_filters();
5095
5096  });
5097  
5098  $(map_obj.container).on("click", '[data-filter="dropdown"]', () => map_obj.update_filters());
5099  $container.on("click", '[data-filter="checklist"]', () => map_obj.update_filters());
5100  $container.on("click", '[data-filter="list"]', function () {
5101      $(this).toggleClass("fc_selected");
5102      map_obj.update_filters();
5103    });
5104
5105    // Marker link scroll-to functionality
5106    $container.on("click", ".wpgmp_marker_link", function () {
5107      const markerId = $(this).data("marker");
5108      const source = $(this).data("source");
5109      $("html, body").animate(
5110        { scrollTop: $(map_obj.container).offset().top - 150 },
5111        500
5112      );
5113      map_obj.open_infowindow(markerId, source);
5114    });
5115  
5116    if (!hasSearchButton && (template !== 'layout_6' && template !== 'layout_7')) {
5117      $container.on("keyup", `input[data-wpgmp-filter="true"][data-wpgmp-map-id="${map_id}"]`, () => {
5118        map_obj.update_filters();
5119      });
5120    }
5121  
5122    // Reset all filters (button with reset attribute)
5123    $container.on("click", '[data-filter-reset="true"]', () => {
5124      $('input[type="text"][data-wpgmp-filter="true"]').val('');
5125      $('select[data-wpgmp-filter="true"]').prop("selectedIndex", 0);
5126      $('input[type="checkbox"][data-filter="checklist"], input[type="checkbox"][data-wpgmp-filter="true"]').prop("checked", false);
5127      $('[data-filter="list"].fc_selected').removeClass("fc_selected");
5128      $('input[type="radio"][data-wpgmp-filter="true"]').prop("checked", false);
5129      map_obj.update_filters();
5130    });
5131  
5132    // Advanced template → search button click triggers filtering
5133    $container.on("click", `[data-wpgmp-filter="true"][data-wpgmp-search-button="true"]`, () => {
5134      map_obj.update_filters();
5135    });
5136
5137    // -------------------------------
5138    // 🔍 Search Input
5139    // -------------------------------
5140    $container.on("keyup", '[data-input="wpgmp-search-text"]', function () {
5141      const searchVal = $(this).val().trim();
5142      $container.find('[data-filter="map-radius"]').val("");
5143      map_obj.search_area = "";
5144  
5145      if (searchVal.length >
5145= 2 && map_obj.map_data.listing.apply_default_radius === true) {
5146
5147        map_obj.wpgmp_set_search_area(searchVal);
5148
5149      } else {
5150        map_obj.update_filters();
5151      }
5152    });
5153  
5154    // -------------------------------
5155    // 🔃 Sorting & Per Page
5156    // -------------------------------
5157    $container.on("change", `select[data-wpgmp-map-id="${map_id}"][data-filter="map-sorting"]`, function () {
5158      const [orderby, order, type = ""] = $(this).val().split("__");
5159      if (orderby && order) {
5160        map_obj.sorting(orderby, order, type);
5161        map_obj.update_places_listing();
5162      }
5163    });
5164  
5165    $container.on("change", `select[data-wpgmp-map-id="${map_id}"][data-filter="map-perpage-location-sorting"]`, function () {
5166      map_obj.per_page_value = $(this).val();
5167      map_obj.update_filters();
5168    });
5169  
5170    // -------------------------------
5171    // 🗺️ Marker & InfoWindow Events
5172    // -------------------------------
5173    
5174    $container.on("click", ".wpgmp_location_container a[data-marker]", function (e) {
5175      e.preventDefault();
5176      const markerId = $(this).data("marker");
5177      if (!markerId || typeof map_obj.open_infowindow !== "function") return;
5178  
5179      map_obj.open_infowindow(markerId);
5180    });
5181    
5182    // Listing infowindow (custom event trigger like 'click', 'hover')
5183    $container.on(map_obj.settings.listing_infowindow_open_event, ".wpgmp_locations a[data-marker]", function () {
5184      const $el = $(this);
5185      $("html, body").animate({ scrollTop: $container.offset().top - 150 }, 500);
5186      setTimeout(() => map_obj.open_infowindow($el.data("marker")), 300);
5187    });
5188
5189    $container.on(map_obj.settings.listing_infowindow_open_event, ".wep-card__title a[data-marker]", function () {
5190      const $el = $(this);
5191      $("html, body").animate({ scrollTop: $container.offset().top - 150 }, 500);
5192      setTimeout(() => map_obj.open_infowindow($el.data("marker")), 300);
5193    });
5194  
5195    // -------------------------------
5196    // 📑 Tabs & UI Toggles
5197    // -------------------------------
5198    $container.on("click", ".wpgmp_toggle_container", function () {
5199      $container.find(".wpgmp_toggle_main_container").slideToggle("slow");
5200      const txt = $(this).text();
5201      $(this).text(txt === wpgmp_local.hide ? wpgmp_local.show : wpgmp_local.hide);
5202    });
5203  
5204    $container.on("click", "li[class^='wpgmp-tab-'] a", function () {
5205      const tabId = $(this).parent().attr("rel");
5206      $container.find("li[class^='wpgmp-tab-'] a").removeClass("active");
5207      $(this).addClass("active");
5208      $container.find(".wpgmp_toggle_main_container div[id^='wpgmp_tab_']").hide();
5209      $container.find(`#wpgmp_tab_${tabId}`).show();
5210    });
5211
5212    $container.find(".wpgmp_find_nearby_button").click(function () {
5213      const target = $(this).closest(".wpgmp_nearby_container");
5214      const inputField = $(target).find(".wpgmp_auto_suggest");
5215      const lat = inputField.data('latitude');
5216      const lon = inputField.data('longitude');
5217  
5218      const radiusField = $(map_obj.container).find("input[name='wpgmp_radius']");
5219      const radius = radiusField.val();
5220  
5221      let hasError = false;
5222  
5223      // Reset previous error classes
5224      inputField.removeClass("wpgmp_error");
5225      radiusField.removeClass("wpgmp_error");
5226  
5227      // Validate location
5228      if (!lat || !lon) {
5229          inputField.addClass("wpgmp_error").focus();
5230          hasError = true;
5231      }
5232  
5233      // Validate radius
5234      if (!radius || isNaN(radius) || parseInt(radius) <= 0) {
5235          radiusField.addClass("wpgmp_error");
5236          hasError = true;
5237      }
5238  
5239      if (hasError) {
5240          return; // Stop execution
5241      }
5242  
5243      const dim = $(map_obj.container).find("select[name='wpgmp_route_dimension']").val();
5244      const amenities = $(map_obj.container).find('input[name^="wpgmp_place_types"]:checked');
5245      const divide_by = (dim === 'miles') ? 1.60934 : 1;
5246      const circle_radius_meters = parseInt(radius) * divide_by * 1000;
5247  
5248      // Clear existing amenities
5249      if (map_obj.current_amenities?.length > 0) {
5250          map_obj.current_amenities.forEach((amenity) => {
5251              if (amenity.marker?.setMap) {
5252                  amenity.marker.setMap(null);
5253              }
5254          });
5255      }
5256  
5257      map_obj.current_amenities = [];
5258      map_obj.amenity_infowindow = map_obj.infowindow_marker;
5259  
5260      const place_types = amenities.map(function () {
5261          return $(this).val();
5262      }).get();
5263  
5264      place_types.forEach(function (placeType) {
5265          const request = {
5266              location: new google.maps.LatLng(lat, lon),
5267              radius: circle_radius_meters,
5268              types: [placeType],
5269              rankBy: "DISTANCE"
5270          };
5271  
5272          map_obj.fetchNearbyAmenities(request, function (places) {
5273              places.forEach(function (place) {
5274                  const marker = map_obj.createMarker(place);
5275                  map_obj.current_amenities.push({ marker, place });
5276              });
5277          });
5278      });
5279  
5280      // Center map and draw circle
5281      const centerLatLng = new google.maps.LatLng(lat, lon);
5282      map_obj.map.setCenter(centerLatLng);
5283  
5284      if (map_obj.map_data.map_tabs.nearby_tab?.show_nearby_circle) {
5285          if (map_obj.set_nearbycenter_circle) {
5286              map_obj.set_nearbycenter_circle.setMap(null);
5287          }
5288  
5289          map_obj.set_nearbycenter_circle = new google.maps.Circle({
5290              map: map_obj.map,
5291              fillColor: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_fillcolor,
5292              fillOpacity: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_fillopacity,
5293              strokeColor: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_strokecolor,
5294              strokeOpacity: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_strokeopacity,
5295              strokeWeight: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_strokeweight,
5296              center: centerLatLng,
5297              radius: circle_radius_meters
5298          });
5299  
5300          map_obj.map.setZoom(parseInt(map_obj.map_data.map_tabs.nearby_tab.nearby_circle_zoom));
5301      }
5302  });
5303  
5304  
5305  
5306    // -------------------------------
5307    // 📦 Category / Checkbox
5308    // -------------------------------
5309    $container.on("change", "input[data-marker-category]", function () {
5310      const $el = $(this), isChecked = $el.is(":checked");
5311      const catId = $el.data("marker-category");
5312      const $wrap = $el.closest('[data-container="wpgmp-category-tab-item"]');
5313  
5314      map_obj.last_category_chkbox_action = isChecked ? "checked" : "unchecked";
5315      if (isChecked) {
5316        map_obj.last_selected_cat_id = catId;
5317        $wrap.find("input[data-marker-location]").prop("checked", true);
5318      } else {
5319        map_obj.last_remove_cat_id = catId;
5320        $wrap.find("input[data-marker-location]").prop("checked", false);
5321      }
5322  
5323      const childCats = $el.data("child-cats");
5324      if (childCats) {
5325        childCats.toString().split(",").forEach(cat => {
5326          const $child = $el.closest(".wpgmp_tab_item").find(`[data-marker-category="${cat}"]`);
5327          $child.prop("checked", isChecked);
5328          $child.closest(".wpgmp_tab_item").find("input[data-marker-location]").prop("checked", isChecked);
5329        });
5330      }
5331  
5332      map_obj.update_filters();
5333    });
5334  
5335    $container.on("change", "input[data-marker-location]", () => map_obj.update_filters());
5336  
5337    // -------------------------------
5338    // 🖨️ Print Listings
5339    // -------------------------------
5340    $container.on("click", '[data-action="wpgmp-print"]', function () {
5341      const id = $(map_obj.element).attr("id");
5342      const $default = $(`[data-container="wpgmp-listing-${id}"]`);
5343      const $custom = $(`[data-container="wpgmp-custom-listing-${id}"]`);
5344      $default.length && $default.print();
5345      $custom.length && $custom.print();
5346    });
5347  
5348    // -------------------------------
5349    // 🔁 Select All Categories
5350    // -------------------------------
5351    if (map_obj.map_data.map_tabs?.category_tab?.select_all === true) {
5352      $container.on("click", 'input[name="wpgmp_select_all"]', function () {
5353        const isChecked = $(this).is(":checked");
5354        $container.find("input[data-marker-category], input[data-marker-location]").prop("checked", isChecked);
5355        map_obj.update_filters();
5356      });
5357    }
5358  
5359    // -------------------------------
5360    // 🔍 View Details
5361    // -------------------------------
5362    $container.on("click", "[data-view-details]", function (e) {
5363      e.preventDefault();
5364      const id = $(this).data("view-details");
5365      const target = $(this).attr("target");
5366  
5367      map_obj.places.forEach(place => {
5368        if (place.id == id) {
5369          if (place.source === "post") {
5370            const url = place.location.extra_fields.post_link;
5371            target === "_blank" ? window.open(url, "_blank") : location.href = url;
5372          } else {
5373            $("html, body").animate({ scrollTop: $container.offset().top - 150 }, 500);
5374            map_obj.open_infowindow(place.id);
5375          }
5376        }
5377      });
5378    });
5379  
5380    // -------------------------------
5381    // 📍 Locate Me Button
5382    // -------------------------------
5383    $container.on("click", `[data-wpgmp='mcurrent_location'][data-wpgmp-map-id="${map_id}"]`, function () {
5384      const $this = $(this);
5385      const $input = $this.parent().find(".wpgmp_auto_suggest");
5386
5387      map_obj.get_current_location(
5388        function (loc) {
5389          const lat = map_obj.isMapProvider("google") ? loc.lat() : loc.lat;
5390          const lng = map_obj.isMapProvider("google") ? loc.lng() : loc.lng;
5391  
5392          $input.data("latitude", lat);
5393          $input.data("longitude", lng);
5394  
5395          map_obj.wpgmp_geocode(lat, lng).then((result) => {
5396            $input.val(result.address);
5397          }).catch(console.error);
5398        },
5399        function () {}
5400      );
5401
5402    });
5403
5404  
5405    // -------------------------------
5406    // 📍 Route Toggle Handling
5407    // -------------------------------
5408    $container.find(".wpgmp_specific_route_item").prop("checked", true);
5409  
5410    $container.on("change", `[data-wpgmp='route_toggle'][data-wpgmp-map-id="${map_id}"]`, function () {
5411      const route = map_obj.route_directions[$(this).val()];
5412      if (route) route.setMap($(this).is(":checked") ? map_obj.map : null);
5413    });
5414
5415    // -------------------------------
5416    // 📍 Drawing Events
5417    // --
5418    $('.wpgmp-shape-delete').click(function (e) {
5419      e.preventDefault();
5420
5421      map_obj.deleteSelectedShape();
5422      $('.temp_row').addClass('hiderow');
5423  });
5424
5425  $('select[name="shape_stroke_opacity"]').change(function () {
5426      map_obj.set_shapes_options(map_obj.selectedShape);
5427  });
5428  $('select[name="shape_stroke_weight"]').change(function () {
5429      map_obj.set_shapes_options(map_obj.selectedShape);
5430  });
5431
5432  $('select[name="shape_fill_opacity"]').change(function () {
5433      map_obj.set_shapes_options(map_obj.selectedShape);
5434  });
5435 
5436
5437  if (typeof map_obj.map_data.shapes != 'undefined') {
5438      if (map_obj.map_data.shapes.drawing_editable === true) {
5439         
5440          $('.shape_fill_color').wpColorPicker({
5441              change: function(event, ui) {
5442                  var polyOptions2 = {
5443                      fillColor: $(this).val(),
5444                  };
5445                  map_obj.selectedShape.setOptions(polyOptions2);
5446              }
5447          });
5448
5449          $('.shape_stroke_color').wpColorPicker({
5450              change: function(event, ui) {
5451                  var polyOptions2 = {
5452                      strokeColor: $(this).val(),
5453                  };
5454                  map_obj.selectedShape.setOptions(polyOptions2);
5455              }
5456          });
5457      }
5458  }
5459
5460  $('input[name="shape_click_url"]').change(function () {
5461      map_obj.set_shapes_options(map_obj.selectedShape);
5462  });
5463  $('textarea[name="shape_click_message"]').blur(function () {
5464      map_obj.set_shapes_options(map_obj.selectedShape);
5465  });
5466
5467  $("textarea[name='shape_path']").blur(function () {
5468      var cordinates = $(this).val().split(' ');
5469      if (cordinates.length == 1) {
5470          cordinates = $(this).val().split("\n");
5471      }
5472      var path = [];
5473      $.each(cordinates, function (ind, cordinate) {
5474          var latlng = cordinate.split(',');
5475          path.push(new google.maps.LatLng(latlng[0], latlng[1]));
5476      });
5477      map_obj.selectedShape.setPath(path);
5478  });
5479
5480  $("input[name='shape_radius']").blur(function () {
5481      var radius = parseFloat($(this).val());
5482      map_obj.selectedShape.setRadius(radius);
5483  });
5484
5485  $("input[name='shape_center']").blur(function () {
5486      var latlng = $(this).val().split(',');
5487      map_obj.selectedShape.setCenter(new google.maps.LatLng(parseFloat(latlng[0]), parseFloat(latlng[1])));
5488  });
5489
5490  $("input[name='shape_northeast']").blur(function () {
5491      var ea = $(this).val().split(',');
5492      var sw = $("input[name='shape_southwest']").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_southwest']").blur(function () {
5498      var sw = $(this).val().split(',');
5499      var ea = $("input[name='shape_northeast']").val().split(',');
5500
5501      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]))));
5502  });
5503
5504  $("input[name='shape_center']").blur(function () {
5505      var latlng = $(this).val().split(',');
5506      map_obj.selectedShape.setCenter(new google.maps.LatLng(parseFloat(latlng[0]), parseFloat(latlng[1])));
5507  });
5508
5509
5510  }
5511  
5512  create_perpage_option() {
5513    var map_obj = this;
5514    var options = "";
5515    var content = "";
5516
5517    content +=
5518      '<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">';
5519    content +=
5520      '<option value="' +
5521      map_obj.map_data.listing.pagination.listing_per_page +
5522      '">' +
5523      wpgmp_local.show_locations +
5524      "</option>";
5525    content += '<option value="25">25</option>';
5526    content += '<option value="50">50</option>';
5527    content += '<option value="100">100</option>';
5528    content += '<option value="200">200</option>';
5529    content += '<option value="500">500</option>';
5530    content +=
5531      '<option value="' +
5532      map_obj.show_places.length +
5533      '">' +
5534      wpgmp_local.all_location +
5535      "</option>";
5536    content += "</select>";
5537
5538    return content;
5539  }
5540  create_sorting() {
5541    var options = "";
5542
5543    var content = "";
5544
5545    if (this.map_data.listing.display_sorting_filter === true) {
5546      content +=
5547        '<select name="map_sorting" data-wpgmp-map-id="'+this.map_data.map_property.map_id+'" data-filter="map-sorting"><option value="">' +
5548        wpgmp_local.sort_by +
5549        "</option>";
5550      $.each(this.map_data.listing.sorting_options, function (id, name) {
5551        content += "<option value='" + id + "'>" + name + "</option>";
5552      });
5553      content += "</select>";
5554    }
5555
5556    return content;
5557  }
5558  create_radius() {
5559    var options = "";
5560
5561    var content = "";
5562    if (this.map_data.listing.display_radius_filter === true) {
5563      var radius_options = this.map_data.listing.radius_options;
5564
5565      if (radius_options != undefined) {
5566        content +=
5567          '<select data-name="radius"  data-wpgmp-map-id="'+this.map_data.map_property.map_id+'" name="map_radiu
5567s"><option value="">' +
5568          wpgmp_local.select_radius +
5569          "</option>";
5570        var radius_dimension = this.map_data.listing.radius_dimension;
5571        $.each(radius_options.split(","), function (id, name) {
5572          if (radius_dimension == "miles") {
5573            content +=
5574              "<option value='" +
5575              name +
5576              "'>" +
5577              name +
5578              " " +
5579              wpgmp_local.miles +
5580              "</option>";
5581          } else {
5582            content +=
5583              "<option value='" +
5584              name +
5585              "'>" +
5586              name +
5587              " " +
5588              wpgmp_local.km +
5589              "</option>";
5590          }
5591        });
5592        content += "</select>";
5593      }
5594    }
5595
5596    return content;
5597  }
5598  custom_filters() {
5599    var map_obj = this;
5600    var options = "";
5601    var places = this.map_data.places;
5602    var wpgmp_filters = this.map_data.filters;
5603    map_obj.template_data = [];
5604    this.filter_content = this.display_filters();
5605
5606    this.filter_position = this.map_data.listing.filters_position;
5607
5608    if (
5609      $(this.container).find(".wpgmp_filter_wrappers").length > 0 &&
5610      map_obj.map_data.map_options.advance_template == false
5611    )
5612      $(this.container)
5613        .find(".wpgmp_filter_wrappers")
5614        .html(this.filter_content);
5615
5616    if (
5617      typeof wpgmp_filters == "undefined" ||
5618      typeof wpgmp_filters.custom_filters == "undefined" ||
5619      wpgmp_filters.custom_filters.length == 0
5620    ) {
5621      return;
5622    }
5623
5624    $.each(
5625      wpgmp_filters.custom_filters,
5626      function (template_shortcode, filter_options) {
5627        var all_filters = [];
5628        var content = "";
5629        var filters = {};
5630        $.each(filter_options, function (filter_type, filter_parameter) {
5631          $.each(filter_parameter, function (filter_name, filter_label) {
5632            $.each(places, function (index, place) {
5633              if (filter_name == "category") {
5634                if (typeof place.categories == "undefined") {
5635                  place.categories = {};
5636                }
5637                $.each(place.categories, function (cat_index, category) {
5638                  if (typeof filters[category.type] == "undefined") {
5639                    filters[category.type] = {};
5640                  }
5641                  if (category.name) {
5642                    filters[category.type][category.name] = category.id;
5643                  }
5644                });
5645              } else {
5646                if (typeof place[filter_name] != "undefined") {
5647                  if (typeof filters[filter_name] == "undefined") {
5648                    filters[filter_name] = {};
5649                  }
5650                  if (place[filter_name]) {
5651                    filters[filter_name][place[filter_name]] =
5652                      place[filter_name];
5653                  }
5654                }
5655
5656                if (
5657                  typeof place.location.extra_fields[filter_name] !=
5658                  "undefined"
5659                ) {
5660                  if (typeof filters[filter_name] == "undefined") {
5661                    filters[filter_name] = {};
5662                  }
5663                  if (place.location.extra_fields[filter_name]) {
5664                    filters[filter_name][
5665                      place.location.extra_fields[filter_name]
5666                    ] = place.location.extra_fields[filter_name];
5667                  }
5668                }
5669
5670                if (typeof place.location[filter_name] != "undefined") {
5671                  if (typeof filters[filter_name] == "undefined") {
5672                    filters[filter_name] = {};
5673                  }
5674                  if (place.location[filter_name]) {
5675                    filters[filter_name][place.location[filter_name]] =
5676                      place.location[filter_name];
5677                  }
5678                }
5679
5680                if (
5681                  typeof place.custom_filters != "undefined" &&
5682                  typeof place.custom_filters[filter_name] != "undefined"
5683                ) {
5684                  if (typeof filters[filter_name] == "undefined") {
5685                    filters[filter_name] = {};
5686                  }
5687                  if (place.custom_filters[filter_name]) {
5688                    var options = place.custom_filters[filter_name];
5689                    if ($.isArray(options)) {
5690                      $.each(options, function (index, value) {
5691                        filters[filter_name][value] = value;
5692                      });
5693                    } else {
5694                      filters[filter_name][options] = options;
5695                    }
5696                  }
5697                }
5698
5699                // It could be radius filter.
5700                if (filter_name == "radius") {
5701                  if (typeof filters[filter_name] == "undefined") {
5702                    filters[filter_name] = {};
5703                  }
5704
5705                  var radius_options = wpgmp_filters.radius_options;
5706                  var radius_dimension = wpgmp_filters.radius_dimension;
5707                  $.each(radius_options.split(","), function (id, name) {
5708                    if (radius_dimension == "miles") {
5709                      filters[filter_name][name + " " + wpgmp_local.miles] =
5710                        name;
5711                    } else {
5712                      filters[filter_name][name + " " + wpgmp_local.km] =
5713                        name;
5714                    }
5715                  });
5716                }
5717              }
5718            });
5719          });
5720
5721          if (filter_type == "dropdown") {
5722            if (typeof filters != "undefined") {
5723              $.each(filters, function (index, options) {
5724                if(Object.keys(options).length < 1){
5725                  return true;
5726                }
5727                options = map_obj.sort_object_by_value(options);
5728                options = map_obj.sort_object_by_unique_values(options);
5729                options = map_obj.sort_numeric_value_filters(options);
5730                content +=
5731                  '<select data-filter="dropdown"  name="place_' +
5732                  index +
5733                  '" data-name = "' +
5734                  index +
5735                  '">';
5736                content +=
5737                  '<option value="">' +
5738                  (filter_parameter[index]
5739                    ? filter_parameter[index]
5740                    : "Select " + index) +
5741                  "</option>";
5742                $.each(options, function (name, value) {
5743                  var optionlabel = value;
5744                  value = value.replace("'", "&#39;");
5745                  value = value.replace('"', "&#34;");
5746                  if (value != "" && value != null)
5747                    content +=
5748                      "<option value='" +
5749                      value.toLowerCase() +
5750                      "'>" +
5751                      optionlabel +
5752                      "</option>";
5753                });
5754                content += "</select>";
5755              });
5756            }
5757          }
5758
5759          if (filter_type == "checklist") {
5760            if (typeof filters != "undefined") {
5761              $.each(filters, function (index, options) {
5762                options = map_obj.sort_object_by_value(options);
5763                options = map_obj.sort_object_by_unique_values(options);
5764                options = map_obj.sort_numeric_value_filters(options);
5765
5766                content += '<div class="wpgmp_filters_checklist">';
5767                content +=
5768                  '<label  data-filter = "place_' +
5769                  index +
5770                  '" >' +
5771                  (filter_parameter[index]
5772                    ? filter_parameter[index]
5773                    : "Select " + index) +
5774                  "</label>";
5775                content += '<div class="wpgmp_checklist_wrap">';
5776                $.each(options, function (name, value) {
5777                  if (value != "" && value != null)
5778                    content +=
5779                      "<div class='wpgmp_checkbox_input'><input data-filter='checklist' type='checkbox' data-name = '" +
5780                      index +
5781                      "' value='" +
5782                      value.toLowerCase() +
5783                      "'><span class='wpgmp_checklist_title'>" +
5784                      value +
5785                      "</span></div>";
5786                });
5787                content += "</div></div>";
5788              });
5789            }
5790          }
5791
5792          if (filter_type == "list") {
5793            if (typeof filters != "undefined") {
5794              $.each(filters, function (index, options) {
5795                content += '<div class="wpgmp_filters_list">';
5796                content +=
5797                  '<label  data-filter = "place_' +
5798                  index +
5799                  '" >' +
5800                  (wpgmp_filters.custom_filters[index]
5801                    ? wpgmp_filters.custom_filters[index]
5802                    : "Select " + index) +
5803                  "</label><ul>";
5804                $.each(options, function (name, value) {
5805                  if (value != "" && value != null)
5806                    content +=
5807                      "<li data-filter='list' data-name = '" +
5808                      index +
5809                      "' data-value='" +
5810                      value +
5811                      "'>" +
5812                      name +
5813                      "</li>";
5814                });
5815                content += "</ul></div>";
5816              });
5817            }
5818          }
5819          if (map_obj.map_data.map_options.advance_template) {
5820            if (!map_obj.template_data) {
5821              map_obj.template_data = {}; // Ensure template_data exists
5822            }
5823            if (!Array.isArray(map_obj.template_data.filter)) {
5824              map_obj.template_data.filter = []; // Ensure filter is an array
5825            }
5826            map_obj.template_data.filter.push(filters);
5827          }
5828        });
5829
5830        //$(map_obj.container).find("."+template_shortcode).html(content);
5831        if (map_obj.map_data.map_options.advance_template == false) {
5832          $(map_obj.container)
5833            .find(wpgmp_filters.filters_container)
5834            .append(content);
5835        }
5836      }
5837    );
5838
5839    // now create select boxes
5840  }
5841  sort_numeric_value_filters(filter_options) {
5842    if (!filter_options.some(isNaN)) {
5843      filter_options.sort(function (a, b) {
5844        return a - b;
5845      });
5846    }
5847    return filter_options;
5848  }
5849
5850  // -----------------------------
5851  // 📦 Sorting Utilities
5852  // -----------------------------
5853  sorting(order_by, in_order, data_type) {
5854    switch (order_by) {
5855      case "category":
5856        if (this.places !== undefined) {
5857          this.places.sort(this.sortByCategory);
5858        }
5859        if (this.show_places !== undefined) {
5860          this.show_places.sort(this.sortByCategory);
5861        }
5862        if (in_order == "desc") {
5863          this.places.reverse();
5864          this.show_places.reverse();
5865        }
5866        break;
5867
5868      case "title":
5869        if (this.map_data.places !== undefined) {
5870          this.map_data.places.sort(this.sortByTitle);
5871        }
5872        if (this.show_places !== undefined) {
5873          this.show_places.sort(this.sortByTitle);
5874        }
5875        if (in_order == "desc") {
5876          this.map_data.places.reverse();
5877          this.places.reverse();
5878          this.show_places.reverse();
5879        }
5880        break;
5881
5882      case "address":
5883        if (this.map_data.places !== undefined) {
5884          this.map_data.places.sort(this.sortByAddress);
5885        }
5886        if (this.show_places !== undefined) {
5887          this.show_places.sort(this.sortByAddress);
5888        }
5889        if (in_order == "desc") {
5890          this.places.reverse();
5891          this.show_places.reverse();
5892        }
5893        break;
5894      default:
5895        var first_place = this.map_data.places[0];
5896        if (typeof first_place[order_by] != "undefined") {
5897          this.map_data.places.sort(this.sortByPlace(order_by, data_type));
5898          this.show_places.sort(this.sortByPlace(order_by, data_type));
5899        } else if (typeof first_place.location[order_by] != "undefined") {
5900          this.map_data.places.sort(this.sortByLocation(order_by, data_type));
5901          this.show_places.sort(this.sortByLocation(order_by, data_type));
5902        } else if (
5903          typeof first_place.location.extra_fields[order_by] != "undefined"
5904        ) {
5905          this.map_data.places.sort(
5906            this.sortByExtraFields(order_by, data_type)
5907          );
5908          this.show_places.sort(this.sortByExtraFields(order_by, data_type));
5909        }
5910
5911        if (in_order == "desc") {
5912          this.places.reverse();
5913          this.show_places.reverse();
5914        }
5915    }
5916  }
5917  sorting_inside_tabs(data, in_order) {
5918    if (in_order == "asc") {
5919      data.sort();
5920    }
5921    if (in_order == "desc") {
5922      data.sort();
5923      data.reverse();
5924    }
5925    return data;
5926  }
5927  sortByTitle(a, b) {
5928    var a_val = a.title.toLowerCase();
5929    var b_val = b.title.toLowerCase();
5930    return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5931  }
5932
5933  sortByValue(a, b) {
5934    var a_val = a.toLowerCase();
5935    var b_val = b.toLowerCase();
5936    return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5937  }
5938  sortByCategory(a, b) {
5939    if (b.categories[0] && a.categories[0]) {
5940      if (a.categories[0].name && b.categories[0].name) {
5941        var a_val = a.categories[0].name.toLowerCase();
5942        var b_val = b.categories[0].name.toLowerCase();
5943        return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5944      }
5945    }
5946  }
5947  sortByAddress(a, b) {
5948    var a_val = a.address.toLowerCase();
5949    var b_val = b.address.toLowerCase();
5950    return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5951  }
5952  sortByPlace(order_by, data_type) {
5953    return function (a, b) {
5954      if (b[order_by] && a[order_by]) {
5955        if (a[order_by] && b[order_by]) {
5956          var a_val = a[order_by].toLowerCase();
5957          var b_val = b[order_by].toLowerCase();
5958          if (data_type == "num") {
5959            a_val = parseInt(a_val);
5960            b_val = parseInt(b_val);
5961          }
5962          return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5963        }
5964      }
5965    };
5966  }
5967  sortByExtraFields(order_by, data_type) {
5968    return function (a, b) {
5969      if (
5970        typeof b.location.extra_fields[order_by] != "undefined" &&
5971        typeof a.location.extra_fields[order_by] != "undefined"
5972      ) {
5973        if (b.location.extra_fields[order_by] == null) {
5974          b.location.extra_fields[order_by] = "";
5975        }
5976
5977        if (a.location.extra_fields[order_by] == null) {
5978          a.location.extra_fields[order_by] = "";
5979        }
5980
5981        if (data_type == "num") {
5982          var a_val = parseInt(a.location.extra_fields[order_by]);
5983          var b_val = parseInt(b.location.extra_fields[order_by]);
5984        } else {
5985          var a_val = a.location.extra_fields[order_by].toLowerCase();
5986          var b_val = b.location.extra_fields[order_by].toLowerCase();
5987        }
5988
5989        return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
5990      }
5991    };
5992  }
5993  sortByLocation(order_by, data_type) {
5994    return function (a, b) {
5995      if (b.location[order_by] && a.location[order_by]) {
5996        if (a.location[order_by] && b.location[order_by]) {
5997          var a_val = a.location[order_by].toLowerCase();
5998          var b_val = b.location[order_by].toLowerCase();
5999          if (data_type == "num") {
6000            a_val = parseInt(a_val);
6001            b_val = parseInt(b_val);
6002          }
6003          return a_val < b_val ? -1 : a_val > b_val ? 1 : 0;
6004        }
6005      }
6006    };
6007  }
6008  sort_object_by_keyvalue(options, by, type, in_order) {
6009    var sortable = [];
6010    for (var key in options) {
6011      sortable.push(options[key]);
6012    }
6013
6014    sortable.sort(this.sortByPlace(by, type));
6015
6016    if (in_order == "desc") {
6017      sortable.reverse();
6018    }
6019
6020    return sortable;
6021  }
6022  sort_object_by_unique_values(options) {
6023    var new_options = [];
6024    var uniqueNames = [];
6025    for (var key in options) {
6026      if (options[key].indexOf(",") > -1) {
6027        options[key].split(/\s*,\s*/).forEach(function (single_option_value) {
6028          new_options.push(single_option_value.trim());
6029        });
6030      } else {
6031        new_options.push(options[key].trim());
6032      }
6033    }
6034
6035    // var new_options = new_options.map(function(item) {
6036    //     return item.toLowerCase();
6037    // });
6038
6039    uniqueNames = new_options.filter(function (item, pos) {
6040      return new_options.indexOf(item) == pos;
6041    });
6042
6043    return uniqueNames.sort();
6044  }
6045  sort_object_by_value(options) {
6046    var sortable = [];
6047    for (var key in options) {
6048      sortable.push(key);
6049    }
6050
6051    sortable.sort(this.sortByValue);
6052    var new_options = {};
6053    for (var i = 0; i < sortable.length; i++) {
6054      new_options[sortable[i]] = options[sortable[i]];
6055    }
6056
6057    return new_options;
6058  }
6059
6060  // -----------------------------
6061  // 📌 Directions & Nearby
6062  // -----------------------------
6063  get_user_position() { }
6064
6065  wpgmp_get_nearby_locations() {}
6066  wpgmp_within_radius() {}
6067  wpgmp_set_search_area() {}
6068  map_widgets() {}
6069  widget_route_tab() {}
6070  widget_nearby() {}
6071  widget_directions() {}
6072  widget_category() {}
6073  add_tab() {}
6074  show_tabs() {}
6075  create_routes() {}
6076  wpgmp_draw_route() {}
6077  wpgmp_find_direction() {}
6078  wpgmp_direction_steps() {}
6079  register_direction_tab() {}
6080  
6081  wpgmp_sort_distance(obj) {
6082    var arr = [];
6083    for (var prop in obj) {
6084      if (obj.hasOwnProperty(prop)) {
6085        arr.push({
6086          key: prop,
6087          value: obj[prop],
6088        });
6089      }
6090    }
6091    arr.sort(function (a, b) {
6092      return a.value - b.value;
6093    });
6094    return arr;
6095  }
6096  // ------------- Location Auto Suggest Control----------------
6097  // 🧭 Search & Autocomplete
6098  // -----------------------------
6099  
6100 
6101  async _handleKeyUp(e, inputField, resultsElement) {
6102    const map_obj = this;
6103    const isGoogle = map_obj.isMapProvider("google");
6104    const inputText = inputField.value.trim();
6105    const wrapper = $(inputField).closest(".wpgmp-autocomplete-wrapper");
6106    const loader = wrapper.find(".wpgmp-autosuggest-loader");
6107    loader.show();
6108    let activeIndex = -1;
6109  
6110    // Clear results if empty input
6111    if (!inputText) {
6112      resultsElement.innerHTML = "";
6113      resultsElement.style.display = "none";
6114      $(".wpgmp-autosuggest-results").hide();
6115      loader.hide();
6116      return;
6117    }
6118  
6119    // Utility to render list and bind interactions
6120    const renderSuggestions = (suggestions, getLabel, onSelect) => {
6121      resultsElement.innerHTML = "";
6122      resultsElement.style.display = "block";
6123      $(".wpgmp-autosuggest-results").show();
6124      loader.hide();
6125      suggestions.forEach((item, index) => {
6126        const li = document.createElement("li");
6127        li.textContent = getLabel(item);
6128        li.tabIndex = 0;
6129        li.dataset.index = index;
6130  
6131        const handleSelection = () => {
6132          onSelect(item);
6133          resultsElement.innerHTML = "";
6134          resultsElement.style.display = "none";
6135          $(".wpgmp-autosuggest-results").hide();
6136          activeIndex = -1;
6137        };
6138  
6139        li.addEventListener("click", handleSelection);
6140        li.addEventListener("keypress", (e) => {
6141          if (e.key === "Enter") handleSelection();
6142        });
6143  
6144        resultsElement.appendChild(li);
6145      });
6146  
6147      // ⌨️ Keyboard support
6148      inputField.addEventListener("keydown", (event) => {
6149        const items = resultsElement.querySelectorAll("li");
6150        if (!items.length) return;
6151      
6152        if (event.key === "ArrowDown") {
6153          event.preventDefault();
6154          activeIndex = (activeIndex + 1) % items.length;
6155        } else if (event.key === "ArrowUp") {
6156          event.preventDefault();
6157          activeIndex = (activeIndex - 1 + items.length) % items.length;
6158        } else if (event.key === "Enter" && activeIndex >= 0) {
6159          event.preventDefault();
6160          const selectedItem = items[activeIndex];
6161          selectedItem.dispatchEvent(new Event("click")); // triggers the right one
6162          return;
6163        } else if (event.key === "Escape") {
6164          resultsElement.innerHTML = "";
6165          resultsElement.style.display = "none";
6166          $(".wpgmp-autosuggest-results").hide();
6167          return;
6168        }
6169      
6170        items.forEach((item, i) => {
6171          const isActive = i === activeIndex;
6172          item.classList.toggle("active", isActive);
6173          if (isActive) {
6174            inputField.value = item.textContent; // 🟢 update input as you move
6175          }
6176        });
6177      });
6178      
6179  
6180      // 🖱️ Close on outside click
6181      const closeOnOutsideClick = (e) => {
6182        if (!resultsElement.contains(e.target) && e.target !== inputField) {
6183          resultsElement.innerHTML = "";
6184          resultsElement.style.display = "none";
6185          $(".wpgmp-autosuggest-results").hide();
6186
6187          document.removeEventListener("click", closeOnOutsideClick);
6188        }
6189      };
6190  
6191      setTimeout(() => {
6192        document.addEventListener("click", closeOnOutsideClick);
6193      }, 0);
6194    };
6195  
6196    // 🌍 Leaflet (Nominatim)
6197    if (!isGoogle) {
6198      let baseUrl = "https://nominatim.openstreetmap.org/search";
6199      const request = {
6200        q: inputText,
6201        limit: 10,
6202        format: "json",
6203        addressdetails: 1,
6204      };
6205  
6206      if (
6207        wpgmp_local.wpgmp_country_specific &&
6208        wpgmp_local.wpgmp_country_specific == true &&
6209        wpgmp_local.wpgmp_countries &&
6210        wpgmp_local.wpgmp_countries.length > 0
6211      ) {
6212        const country = wpgmp_local.wpgmp_countries.join(",");
6213        baseUrl += `?countrycodes=${country}`;
6214      }
6215      
6216      try {
6217        const suggestions = await $.getJSON(baseUrl, request);
6218  
6219        renderSuggestions(
6220          suggestions,
6221          (item) => item.display_name,
6222          (selected) => {
6223            map_obj.wpgmp_handle_place_selection(selected, inputField);
6224            inputField.value = selected.display_name;
6225          }
6226        );
6227      } catch (error) {
6228        console.error("Nominatim autocomplete failed:", error);
6229      }
6230  
6231      return;
6232    }
6233  
6234    // 📍 Google Places
6235    try {
6236      const {
6237        Place,
6238        AutocompleteSessionToken,
6239        AutocompleteSuggestion,
6240      } = await google.maps.importLibrary("places");
6241  
6242      const token = new AutocompleteSessionToken();
6243      const request = { input: inputText, sessionToken: token };
6244  
6245      if (
6246        wpgmp_local.wpgmp_country_specific &&
6247        wpgmp_local.wpgmp_country_specific == true &&
6248        wpgmp_local.wpgmp_countries &&
6249        wpgmp_local.wpgmp_countries.length > 0
6250      ) {
6251        request.includedRegionCodes = wpgmp_local.wpgmp_countries;
6252      }
6253      
6254      const { suggestions } =
6255        await AutocompleteSuggestion.fetchAutocompleteSuggestions(request);
6256  
6257      renderSuggestions(
6258        suggestions,
6259        (item) => item.placePrediction.text.toString(),
6260        async (selected) => {
6261          const place = selected.placePrediction.toPlace();
6262          await place.fetchFields({
6263            fields: [
6264              "displayName",
6265              "formattedAddress",
6266              "location",
6267              "viewport",
6268              "addressComponents",
6269            ],
6270          });
6271  
6272          map_obj.wpgmp_handle_place_selection(place, inputField);
6273          inputField.value = selected.placePrediction.text.toString();
6274        }
6275      );
6276    } catch (error) {
6277      console.error("Google Places autocomplete failed:", error);
6278    }
6279  }
6280  
6281  google_auto_suggest(obj) {
6282    var map_obj = this;
6283
6284    obj.each(function () {
6285      var current_input = this;
6286
6287      if (!$(current_input).parent().hasClass("wpgmp-autocomplete-wrapper")) {
6288        $(current_input)
6289          .wrap('<div class="wpgmp-autocomplete-wrapper"></div>')
6290          .after(' <div class="wpgmp-autosuggest-loader" style="display:none;"></div><ul class="wpgmp-autosuggest-results"></ul>');
6291      }
6292
6293      const resultsElement = $(current_input).siblings(".wpgmp-autosuggest-results")[0];
6294
6295      map_obj.wpgmp_initialise_autosuggest(current_input, resultsElement);
6296    });
6297  }
6298
6299  wpgmp_initialise_autosuggest(inputField, resultsElement) {
6300      
6301    $(inputField).on("input", this._debounce((e) => this._handleKeyUp(e,inputField,resultsElement), 500));
6302
6303  }
6304
6305  wpgmp_extract_place_data(place) {
6306    var map_obj = this;
6307    const data = {
6308        address: '',
6309        lat: '',
6310        lng: '',
6311        city: '',
6312        state: '',
6313        country: '',
6314        postal: ''
6315    };
6316
6317    if (map_obj.isMapProvider('leaflet')) {
6318        data.address = place.display_name || '';
6319        data.lat = parseFloat(place.lat);
6320        data.lng = parseFloat(place.lon);
6321
6322        const address = place.address || {};
6323        data.city = address.city || address.county || '';
6324        data.state = address.state || '';
6325        data.country = address.country || '';
6326        data.postal = address.postcode || '';
6327
6328    } else {
6329        data.address = place.formattedAddress || '';
6330        if (place.location) {
6331            data.lat = place.location.lat();
6332            data.lng = place.location.lng();
6333        }
6334
6335        // Assume `this` refers to your instance with wpgmp_finddata method
6336        const finder = this.wpgmp_finddata || instance?.wpgmp_finddata;
6337
6338        if (typeof finder === 'function') {
6339            data.country = finder.call(this, place, 'country') || '';
6340            data.state = finder.call(this, place, 'administrative_area_level_1') || '';
6341            data.city = (
6342                finder.call(this, place, 'locality') ||
6343                finder.call(this, place, 'administrative_area_level_2') ||
6344                finder.call(this, place, 'administrative_area_level_3') || ''
6345            );
6346            data.postal = finder.call(this, place, 'postal_code') || '';
6347        }
6348    }
6349
6350    return data;
6351}
6352
6353wpgmp_handle_place_selection(place, inputField) {
6354  const map_obj = this;
6355  const isGoogle = map_obj.isMapProvider("google");
6356  const fieldName = $(inputField).attr("name");
6357  const callback = $(inputField).data("wpgmp-autosuggest-callback");
6358
6359  if (typeof callback === "function") {
6360    callback(place);
6361    return;
6362  }
6363
6364  // Extract data from place
6365  let lat, lng, city, state, country, postal, fullAddress;
6366
6367  if (isGoogle) {
6368    lat = place.location.lat();
6369    lng = place.location.lng();
6370    city = map_obj.wpgmp_finddata(place, "administrative_area_level_3") ||
6371           map_obj.wpgmp_finddata(place, "locality");
6372    state = map_obj.wpgmp_finddata(place, "administrative_area_level_1");
6373    country = map_obj.wpgmp_finddata(place, "country");
6374    postal = map_obj.wpgmp_finddata(place, "postal_code");
6375    fullAddress = place.formattedAddress || $(inputField).val();
6376  } else {
6377    lat = parseFloat(place.lat);
6378    lng = parseFloat(place.lon);
6379    const address = place.address || {};
6380    city = address.city || address.county || "";
6381    state = address.state || "";
6382    country = address.country || "";
6383    postal = address.postcode || "";
6384    fullAddress = place.display_name || $(inputField).val();
6385  }
6386
6387  // Apply marker and view
6388  map_obj.placeMarker(lat, lng);
6389
6390  // Update relevant fields
6391  if (fieldName === "location_address") {
6392    $(".google_latitude").val(lat);
6393    $(".google_longitude").val(lng);
6394    $(".google_city").val(city);
6395    $(".google_state").val(state);
6396    $(".google_country").val(country);
6397    $(".google_postal_code").val(postal);
6398
6399    if (isGoogle && place.viewport) {
6400      map_obj.map.fitBounds(place.viewport);
6401    }
6402
6403  } else if (fieldName === "wpgmp_metabox_location") {
6404    $("input[name='wpgmp_metabox_latitude']").val(lat);
6405    $("input[name='wpgmp_metabox_longitude']").val(lng);
6406    $("input[name='wpgmp_metabox_location_city']").val(city);
6407    $("input[name='wpgmp_metabox_location_state']").val(state);
6408    $("input[name='wpgmp_metabox_location_country']").val(country);
6409    $("input[name='wpgmp_metabox_location_hidden']").val(fullAddress);
6410
6411    if (isGoogle && place.viewport) {
6412      map_obj.map.fitBounds(place.viewport);
6413    }
6414
6415  } else if (fieldName === "map-search-control") {
6416    const zoom = parseInt(map_obj.settings.zoom_level_after_search || 10);
6417    map_obj.map.setZoom(zoom);
6418    map_obj.map.setCenter(isGoogle ? place.location : [lat, lng]);
6419
6420  } else {
6421    // Other pages (frontend search, etc.)
6422    map_obj.map.setCenter(isGoogle ? place.location : [lat, lng]);
6423
6424    $(inputField).data("longitude", lng);
6425    $(inputField).data("latitude", lat);
6426
6427    if (
6428      fieldName === "wpgmp_search_input" ||
6429      $(inputField).data("wpgmp-filter-by") === "search"
6430    ) {
6431      if (map_obj.map_data.listing) {
6432        map_obj.search_area = isGoogle ? place.location : [lat, lng];
6433      }
6434      map_obj.update_filters();
6435    }
6436
6437    if (typeof map_obj.display_circle_when_searched === "function") {
6438      map_obj.display_circle_when_searched(place, inputField);
6439    }
6440  }
6441}
6442
6443  // ------------- Ended Location Auto Suggest Control----------------
6444
6445
6446  get_current_location(success_func, error_func) {
6447    const map_obj = this;
6448  
6449    if (typeof map_obj.user_location === "undefined") {
6450      navigator.geolocation.getCurrentPosition(
6451        (position) => {
6452          const lat = position.coords.latitude;
6453          const lng = position.coords.longitude;
6454  
6455          map_obj.user_location = map_obj.isMapProvider("google")
6456            ? new google.maps.LatLng(lat, lng)
6457            : L.latLng(lat, lng);
6458  
6459          if (success_func) success_func(map_obj.user_location);
6460        },
6461        (err) => {
6462          console.warn("Geolocation error:", err);
6463  
6464          map_obj.user_location = map_obj.isMapProvider("google")
6465            ? map_obj.map.getCenter()
6466            : map_obj.map.getCenter(); // both APIs support getCenter()
6467  
6468          if (error_func) error_func(map_obj.user_location);
6469        },
6470        {
6471          enableHighAccuracy: true,
6472          timeout: 50000,
6473          maximumAge: 0,
6474        }
6475      );
6476    } else {
6477      if (success_func) success_func(map_obj.user_location);
6478    }
6479  }
6480
6481  wpgmp_geocode_address(address) {
6482    const map_obj = this;
6483    const isGoogle = map_obj.isMapProvider("google");
6484  
6485    return new Promise((resolve) => {
6486      if (!address || address.trim().length < 2) {
6487        resolve(null);
6488        return;
6489      }
6490  
6491      const countries = map_obj.settings.country_codes || [];
6492      const restrictCountries = map_obj.settings.country_specific === true;
6493  
6494      if (isGoogle) {
6495        const request = { address };
6496        if (restrictCountries && countries.length > 0) {
6497          request.componentRestrictions = {
6498            country: countries.join(","),
6499          };
6500        }
6501        const geocoder = new google.maps.Geocoder();
6502        geocoder.geocode(request, (results, status) => {
6503          if (status === google.maps.GeocoderStatus.OK && results[0]) {
6504            const result = results[0];
6505            const location = result.geometry.location;
6506            const components = result.address_components;
6507  
6508            const extract = (type) =>
6509              components.find((c) => c.types.includes(type))?.long_name || "";
6510  
6511            resolve({
6512              address: result.formatted_address,
6513              city:
6514                extract("locality") || extract("administrative_area_level_3"),
6515              state: extract("administrative_area_level_1"),
6516              country: extract("country"),
6517              postal: extract("postal_code"),
6518              lat: location.lat(),
6519              lng: location.lng(),
6520            });
6521          } else {
6522            resolve(null);
6523          }
6524        });
6525      } else {
6526        const nominatimUrl = "https://nominatim.openstreetmap.org/search";
6527        const params = {
6528          q: address,
6529          format: "json",
6530          limit: 1,
6531          addressdetails: 1,
6532        };
6533  
6534        if (restrictCountries && countries.length > 0) {
6535          params.countrycodes = countries.join(",");
6536        }
6537  
6538        $.getJSON(nominatimUrl, params)
6539          .done((results) => {
6540            if (results && results.length > 0) {
6541              const r = results[0];
6542              const a = r.address || {};
6543  
6544              resolve({
6545                address: r.display_name,
6546                city: a.city || a.county || a.town || a.village || "",
6547                state: a.state || "",
6548                country: a.country || "",
6549                postal: a.postcode || "",
6550                lat: parseFloat(r.lat),
6551                lng: parseFloat(r.lon),
6552              });
6553            } else {
6554              resolve(null);
6555            }
6556          })
6557          .fail(() => resolve(null));
6558      }
6559    });
6560  }
6561  
6562  
6563  wpgmp_geocode(lat, lng) {
6564    var map_obj = this;
6565    
6566    return new Promise((resolve, reject) => {
6567      if (map_obj.isMapProvider('google') && typeof google !== 'undefined') {
6568        const geocoder = new google.maps.Geocoder();
6569        const latlng = new google.maps.LatLng(lat, lng);
6570  
6571        geocoder.geocode({ location: latlng }, (results, status) => {
6572          if (status === google.maps.GeocoderStatus.OK && results[0]) {
6573            const components = results[0].address_components;
6574  
6575            const getComp = (type) => {
6576              const match = components.find(c => c.types.includes(type));
6577              return match ? match.long_name : '';
6578            };
6579  
6580            resolve({
6581              address: results[0].formatted_address,
6582              latitude: lat,
6583              longitude: lng,
6584              city: getComp("locality") || getComp("administrative_area_level_2") || getComp("administrative_area_level_3"),
6585              state: getComp("administrative_area_level_1"),
6586              country: getComp("country"),
6587              postal_code: getComp("postal_code")
6588            });
6589          } else {
6590            reject('Google Geocoding failed: ' + status);
6591          }
6592        });
6593  
6594      } else if (map_obj.isMapProvider('leaflet')) {
6595        const url = `https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lng}`;
6596  
6597        fetch(url)
6598          .then(res => res.json())
6599          .then(data => {
6600            const addr = data.address || {};
6601            resolve({
6602              address: data.display_name || '',
6603              latitude: lat,
6604              longitude: lng,
6605              city: addr.city || addr.town || addr.village || addr.county || '',
6606              state: addr.state || '',
6607              country: addr.country || '',
6608              postal_code: addr.postcode || ''
6609            });
6610          })
6611          .catch(err => reject('Leaflet/OSM reverse geocoding failed: ' + err));
6612      } else {
6613        reject('Unknown map provider: ' + provider);
6614      }
6615    });
6616  }
6617  
6618  show_search_control() {
6619    const map_obj = this;
6620    const isGoogle = map_obj.isMapProvider("google");
6621    const input = $(map_obj.container).find('[data-input="map-search-control"]');
6622    if (!input) return;
6623  
6624    // Create a wrapper and move input inside it
6625    const wrapper = document.createElement('div');
6626    wrapper.className = 'wpgmp-search-control-wrapper';
6627    if (input[0]) {
6628      wrapper.appendChild(input[0]);
6629    }
6630    
6631  
6632    if (isGoogle) {
6633      const positionKey = map_obj.settings.search_control_position?.toUpperCase();
6634      const position = google.maps.ControlPosition?.[positionKey];
6635  
6636      if (position !== undefined && map_obj.map.controls) {
6637        map_obj.map.controls[position].push(wrapper);
6638      } else {
6639        console.warn("Invalid Google search control position:", positionKey);
6640      }
6641
6642      // ✅ Initialize autocomplete
6643      if (typeof map_obj.google_auto_suggest === "function") {
6644        map_obj.google_auto_suggest(input);
6645      } else {
6646        console.warn("google_auto_suggest() is not defined or not a function.");
6647      }
6648
6649  
6650    } else {
6651      // Create a custom Leaflet control
6652      const LeafletSearchControl = L.Control.extend({
6653        options: {
6654          position: (map_obj.settings.search_control_position || 'topright').toLowerCase(),
6655        },
6656        onAdd: function () {
6657          return wrapper;
6658        },
6659      });
6660  
6661      map_obj.map.addControl(new LeafletSearchControl());
6662    }
6663  }
6664  
6665
6666  // -----------------------------
6667  // 🗂️ Categories
6668  // -----------------------------
6669  search_category(
6670    array,
6671    cat_id,
6672    index,
6673    categories_tab_data,
6674    child_categories_tab_data
6675  ) {
6676    var map_obj = this;
6677    var flag = true;
6678    $.each(array, function (k, i) {
6679      if (k == cat_id) {
6680        index = i;
6681        flag = false;
6682        if (typeof child_categories_tab_data[cat_id] == "undefined") {
6683          child_categories_tab_data[cat_id] = {};
6684          child_categories_tab_data[cat_id]["data"] = [];
6685          child_categories_tab_data[cat_id]["parent_cat"] = i;
6686          child_categories_tab_data[cat_id]["cat_id"] = cat_id;
6687          $.each(map_obj.categories, function (k, e) {
6688            if (e.group_map_id == cat_id) {
6689              child_categories_tab_data[cat_id]["cat_title"] =
6690                e.group_map_title;
6691              child_categories_tab_data[cat_id]["cat_marker_icon"] =
6692                e.group_marker;
6693            }
6694          });
6695        }
6696        index = map_obj.search_category(
6697          map_obj.map_data.map_tabs.category_tab.child_cats,
6698          i,
6699          index,
6700          categories_tab_data,
6701          child_categories_tab_data
6702        );
6703      }
6704    });
6705    if (flag == true) {
6706      if (typeof categories_tab_data[cat_id] == "undefined") {
6707        categories_tab_data[cat_id] = {};
6708        categories_tab_data[cat_id]["data"] = [];
6709        categories_tab_data[cat_id]["cat_id"] = cat_id;
6710        $.each(map_obj.categories, function (k, e) {
6711          if (e.group_map_id == cat_id) {
6712            categories_tab_data[cat_id]["cat_title"] = e.group_map_title;
6713            categories_tab_data[cat_id]["cat_marker_icon"] = e.group_marker;
6714          }
6715        });
6716      }
6717    }
6718    return index;
6719  }
6720  display_sub_categories(
6721    child_categories_tab_data,
6722    cat_id,
6723    content,
6724    padding
6725  ) {
6726    var map_obj = this;
6727
6728    var category_orders = [];
6729    if (typeof child_categories_tab_data != "undefined") {
6730      $.each(child_categories_tab_data, function (index, categories) {
6731        var loc_count = categories.data.length;
6732
6733        if (typeof child_categories_tab_data != "undefined") {
6734          $.each(child_categories_tab_data, function (c, ccat) {
6735            if (ccat.parent_cat == categories.cat_id) {
6736              loc_count = loc_count + ccat.data.length;
6737              $.each(child_categories_tab_data, function (cc, cccat) {
6738                if (cccat.parent_cat == ccat.cat_id) {
6739                  loc_count = loc_count + cccat.data.length;
6740                }
6741              });
6742            }
6743          });
6744        }
6745        categories.loc_count = loc_count;
6746
6747        if (map_obj.map_data.map_tabs.category_tab.cat_order_by == "count") {
6748          category_orders.push(categories.loc_count);
6749        } else if (
6750          map_obj.map_data.map_tabs.category_tab.cat_order_by == "category"
6751        ) {
6752          if (categories.cat_order) {
6753            category_orders.push(categories.cat_order);
6754          } else if (
6755            !categories.cat_order &&
6756            map_obj.map_data.map_tabs.category_tab.all_cats[categories.cat_id]
6757          ) {
6758            categories.cat_order =
6759              map_obj.map_data.map_tabs.category_tab.all_cats[
6760                categories.cat_id
6761              ].extensions_fields.cat_order;
6762            category_orders.push(categories.cat_order);
6763          }
6764        } else {
6765          if (categories.cat_title) {
6766            category_orders.push(categories.cat_title);
6767          } else if (
6768            !categories.cat_title &&
6769            map_obj.map_data.map_tabs.category_tab.all_cats[categories.cat_id]
6770          ) {
6771            categories.cat_title =
6772              map_obj.map_data.map_tabs.category_tab.all_cats[
6773                categories.cat_id
6774              ].group_map_title;
6775            category_orders.push(categories.cat_title);
6776          }
6777        }
6778      });
6779    }
6780    if (map_obj.map_data.map_tabs.category_tab.cat_order_by == "category") {
6781      category_orders.sort(function (a, b) {
6782        return a - b;
6783      });
6784    } else if (
6785      map_obj.map_data.map_tabs.category_tab.cat_order_by == "count"
6786    ) {
6787      category_orders.sort(function (a, b) {
6788        return b - a;
6789      });
6790    } else {
6791      category_orders.sort();
6792    }
6793    var ordered_categories = [];
6794    var check_cats = [];
6795    $.each(category_orders, function (index, cat_title) {
6796      $.each(child_categories_tab_data, function (index, categories) {
6797        var compare_with;
6798        if (map_obj.map_data.map_tabs.category_tab.cat_order_by == "count") {
6799          compare_with = categories.loc_count;
6800        } else if (
6801          map_obj.map_data.map_tabs.category_tab.cat_order_by == "category"
6802        ) {
6803          compare_with = categories.cat_order;
6804        } else {
6805          compare_with = categories.cat_title;
6806        }
6807
6808        if (
6809          cat_title == compare_with &&
6810          $.inArray(categories.cat_id, check_cats) == -1
6811        ) {
6812          ordered_categories.push(categories);
6813          check_cats.push(categories.cat_id);
6814        }
6815      });
6816    });
6817
6818    $.each(ordered_categories, function (index, child_cat) {
6819      if (child_cat.parent_cat == cat_id) {
6820        var category_image = "";
6821
6822        if (
6823          !child_cat.cat_title &&
6824          map_obj.map_data.map_tabs.category_tab.all_cats[child_cat.cat_id]
6825        ) {
6826          child_cat.cat_title =
6827            map_obj.map_data.map_tabs.category_tab.all_cats[
6828              child_cat.cat_id
6829            ].group_map_title;
6830        }
6831
6832        if (
6833          !child_cat.cat_marker_icon &&
6834          map_obj.map_data.map_tabs.category_tab.all_cats[child_cat.cat_id]
6835        ) {
6836          child_cat.cat_marker_icon =
6837            map_obj.map_data.map_tabs.category_tab.all_cats[
6838              child_cat.cat_id
6839            ].group_marker;
6840        }
6841        if (typeof child_cat.cat_marker_icon != "undefined") {
6842          category_image =
6843            '<span class="arrow"><img src="' +
6844            child_cat.cat_marker_icon +
6845            '"></span>';
6846        }
6847        content +=
6848          '<div class="wpgmp_tab_item" data-container="wpgmp-category-tab-item" style="padding-left:' +
6849          padding +
6850          'px;">';
6851
6852        if (
6853          map_obj.map_data.map_tabs.category_tab.parent_cats !== undefined &&
6854          map_obj.map_data.map_tabs.category_tab.parent_cats[child_cat.cat_id]
6855        )
6856          var child_cats_str =
6857            ' data-child-cats="' +
6858            map_obj.map_data.map_tabs.category_tab.parent_cats[
6859              child_cat.cat_id
6860            ].join(",") +
6861            '"';
6862        else var child_cats_str = "";
6863
6864        content +=
6865          '<input type="checkbox"' +
6866          child_cats_str +
6867          ' data-parent-cat="' +
6868          cat_id +
6869          '" data-marker-category="' +
6870          child_cat.cat_id +
6871          '" value="' +
6872          child_cat.cat_id +
6873          '">';
6874
6875        var loc_count = child_cat.loc_count;
6876
6877        $.each(
6878          map_obj.map_data.map_tabs.category_tab.child_cats,
6879          function (k, v) {
6880            if (v == child_cat.cat_id && loc_count == 0) loc_count = "";
6881          }
6882        );
6883
6884        var location_count = "";
6885        if (
6886          map_obj.map_data.map_tabs.category_tab.show_count === true &&
6887          loc_count != ""
6888        ) {
6889          location_count = " (" + loc_count + ")";
6890        } else {
6891          location_count = "";
6892        }
6893
6894        content +=
6895          '<a href="javascript:void(0);" class="wpgmp_cat_title wpgmp-accordion accordion-close">' +
6896          child_cat.cat_title +
6897          location_count +
6898          category_image +
6899          "</a>";
6900
6901        if (map_obj.map_data.map_tabs.category_tab.hide_location !== true) {
6902          content +=
6903            '<div class="scroll-pane" style="height: 97px; width:100%;">';
6904          content += '<ul class="wpgmp_location_container">';
6905
6906          $.each(child_cat.data, function (name, location) {
6907            if (location.onclick_action == "marker") {
6908              content +=
6909                '<li><input type="checkbox" data-marker-location="' +
6910                location.cat_location_id +
6911                '"  value="' +
6912                location.cat_location_id +
6913                '" /><a data-marker="' +
6914                location.cat_location_id +
6915                '" data-zoom="' +
6916                location.cat_location_zoom +
6917                '" href="javascript:void(0);">' +
6918                location.cat_location_title +
6919                "</a></li>";
6920            } else if (location.onclick_action == "post") {
6921              content +=
6922                '<li><input type="checkbox" data-marker-location="' +
6923                location.cat_location_id +
6924                '"  value="' +
6925                location.cat_location_id +
6926                '" /><a href="' +
6927                location.redirect_permalink +
6928                '" target="_blank">' +
6929                location.cat_location_title +
6930                "</a></li>";
6931            } else if (location.onclick_action == "custom_link") {
6932              content +=
6933                '<li>
6933<input type="checkbox" data-marker-location="' +
6934                location.cat_location_id +
6935                '"  value="' +
6936                location.cat_location_id +
6937                '" /><a href="' +
6938                location.redirect_custom_link +
6939                '" target="_blank">' +
6940                location.cat_location_title +
6941                "</a></li>";
6942            }
6943          });
6944
6945          content += "</ul>";
6946          content += "</div>";
6947        }
6948        content += "</div>";
6949        content += map_obj.display_sub_categories(
6950          child_categories_tab_data,
6951          child_cat.cat_id,
6952          "",
6953          padding + 20
6954        );
6955      } else if (index + 1 == child_categories_tab_data.length) return;
6956    });
6957    return content;
6958  }
6959
6960  // -----------------------------
6961  // ✏️ Drawing Tools
6962  // -----------------------------
6963  enable_drawing() { }
6964  create_polygon() { }
6965  create_polyline() { }
6966  create_circle() { }
6967  create_rectangle() { }
6968  deleteSelectedShape() { }
6969  clearSelection() { }
6970  setSelection() { }
6971  event_listener() { }
6972
6973  // -----------------------------
6974  // 💾 Shape Management
6975  // -----------------------------
6976  get_shapes_options() { }
6977  set_shapes_options() { }
6978  wpgmp_save_shapes() { }
6979  wpgmp_shape_complete() { }
6980  wpgmp_save_polylines() { }
6981  wpgmp_save_polygons() { }
6982  wpgmp_save_circles() { }
6983  wpgmp_save_rectangles() { }
6984
6985  // -----------------------------
6986  // 🧷 Overlays & Layers
6987  // -----------------------------
6988  wpgmp_image_type_overlays() { }
6989  set_kml_layer() { }
6990  set_marker_cluster() { }
6991  set_panning_control() { }
6992  set_visual_refresh() { }
6993  set_45_imagery() { }
6994  set_overlay() { }
6995  set_bicyle_layer() { }
6996  set_traffic_layer() { }
6997  set_panoramic_layer() { }
6998  set_transit_layer() { }
6999  set_weather_layer() { }
7000  set_streetview() { }
7001  
7002  /**
7003 * Creates a labeled marker compatible with both Google Maps and Leaflet.
7004 */
7005create_labeled_marker(label, title, position) {
7006  const map_obj = this;
7007  const isGoogle = map_obj.isMapProvider("google");
7008
7009  if (isGoogle) {
7010    
7011    var iconUrl;
7012    position = {'lat':position.lat(),'lng':position.lng()};
7013    if( label.toLowerCase() == 'a') {
7014      iconUrl = wpgmp_local.place_icon_url+'marker-alpha-1.svg';
7015    }
7016
7017    if( label.toLowerCase() == 'b') {
7018      iconUrl = wpgmp_local.place_icon_url+'marker-alpha-2.svg';
7019    }
7020
7021    return map_obj.create_google_marker({
7022      map: map_obj.map,
7023      position,
7024      iconUrl:iconUrl,
7025      label,
7026      title,
7027    });
7028
7029  } else {
7030    
7031    const marker = map_obj.create_leaflet_marker({
7032      map: map_obj.map,
7033      position,
7034      label,
7035      isDivIcon: true  
7036     });
7037    
7038
7039    return marker;
7040  }
7041}
7042  
7043
7044  // -----------------------------
7045  // 🏪 Amenities
7046  // -----------------------------
7047  create_amenities_markers() { }
7048
7049  // -----------------------------
7050  // 🔧 Utilities
7051  // -----------------------------
7052  load_google_fonts(fonts) {
7053    if (fonts && fonts.length > 0) {
7054      $.each(fonts, function (k, font) {
7055        if (font.indexOf(",") >= 0) {
7056          font = font.split(",");
7057          font = font[0];
7058        }
7059        if (font.indexOf('"') >= 0) {
7060          font = font.replace('"', "");
7061          font = font.replace('"', "");
7062        }
7063        WebFont.load({
7064          google: {
7065            families: [font],
7066          },
7067        });
7068      });
7069    }
7070  }
7071  load_json(url) {
7072    this.map.data.loadGeoJson(url);
7073  }
7074  wpgmp_finddata() { }
7075  place_info(place_id) {
7076    var place_obj;
7077
7078    $.each(this.places, function (index, place) {
7079      if (parseInt(place.id) == parseInt(place_id)) {
7080        place_obj = place;
7081      }
7082    });
7083
7084    return place_obj;
7085  }
7086
7087  _debounce(fn, delay) {
7088    let timer = null;
7089    return function (...args) {
7090      clearTimeout(timer);
7091      timer = setTimeout(() => fn.apply(this, args), delay);
7092    };
7093  }
7094
7095  _encodePolyline(coords) {
7096    let output = '';
7097    let prevLat = 0, prevLng = 0;
7098  
7099    for (const [lat, lng] of coords) {
7100      const latE5 = Math.round(lat * 1e5);
7101      const lngE5 = Math.round(lng * 1e5);
7102  
7103      const dLat = latE5 - prevLat;
7104      const dLng = lngE5 - prevLng;
7105  
7106      output += encodeSignedNumber(dLat) + encodeSignedNumber(dLng);
7107  
7108      prevLat = latE5;
7109      prevLng = lngE5;
7110    }
7111  
7112    return output;
7113  
7114    function encodeSignedNumber(num) {
7115      let sgnNum = num << 1;
7116      if (num < 0) {
7117        sgnNum = ~sgnNum;
7118      }
7119      return encodeNumber(sgnNum);
7120    }
7121  
7122    function encodeNumber(num) {
7123      let encodeString = '';
7124      while (num >= 0x20) {
7125        encodeString += String.fromCharCode((0x20 | (num & 0x1f)) + 63);
7126        num >>= 5;
7127      }
7128      encodeString += String.fromCharCode(num + 63);
7129      return encodeString;
7130    }
7131  }
7132
7133  _decodePolyline(encoded) {
7134    let index = 0, lat = 0, lng = 0, coordinates = [];
7135  
7136    while (index < encoded.length) {
7137      let result = 1, shift = 0, b;
7138  
7139      do {
7140        b = encoded.charCodeAt(index++) - 63 - 1;
7141        result += b << shift;
7142        shift += 5;
7143      } while (b >= 0x1f);
7144  
7145      const deltaLat = (result & 1) ? ~(result >> 1) : (result >> 1);
7146      lat += deltaLat;
7147  
7148      result = 1;
7149      shift = 0;
7150  
7151      do {
7152        b = encoded.charCodeAt(index++) - 63 - 1;
7153        result += b << shift;
7154        shift += 5;
7155      } while (b >= 0x1f);
7156  
7157      const deltaLng = (result & 1) ? ~(result >> 1) : (result >> 1);
7158      lng += deltaLng;
7159  
7160      coordinates.push([lat / 1e5, lng / 1e5]);
7161    }
7162  
7163    return coordinates;
7164  }
7165
7166  formatRouteDuration(durationString) {
7167    const totalSeconds = parseInt(durationString, 10);
7168  
7169    const hours = Math.floor(totalSeconds / 3600);
7170    const minutes = Math.floor((totalSeconds % 3600) / 60);
7171  
7172    let formatted = '';
7173  
7174    if (hours > 0) {
7175      formatted += hours + (hours === 1 ? ' hr ' : ' hrs ');
7176    }
7177  
7178    if (minutes > 0 || hours === 0) { // Always show minutes if no hours
7179      formatted += minutes + ' mins';
7180    }
7181  
7182    return formatted.trim();
7183  }
7184
7185  isMapProvider(providerName) {
7186    const map_obj = this;
7187    const currentProvider = (map_obj?.map_data?.provider || wpgmp_local?.map_provider || 'google').toLowerCase();
7188    return currentProvider === providerName.toLowerCase();
7189  }
7190
7191  isRouteProvider(providerName) {
7192    const map_obj = this;
7193    const currentProvider = (map_obj?.map_data?.route_provider || wpgmp_local?.route_provider || 'leaflet').toLowerCase();
7194
7195    return currentProvider === providerName.toLowerCase();
7196  }
7197
7198  /**
7199 * Adds a locate-me control to the map for both Google Maps and Leaflet
7200 */
7201
7202register_locate_me_control() {
7203  const map_obj = this;
7204  if (map_obj.settings.locateme_control !== true) return;
7205
7206  const className = "wpgmp_locateme_control " + (map_obj.settings.locateme_control_position || "topright").toLowerCase();
7207  const innerHTML = `<span title='${wpgmp_local.locate_me}'></span>`;
7208
7209  if (map_obj.isMapProvider("google")) {
7210    const controlDiv = document.createElement("div");
7211    controlDiv.className = className;
7212    controlDiv.innerHTML = innerHTML;
7213    map_obj.map.controls[
7214      google.maps.ControlPosition[map_obj.settings.locateme_control_position || "TOP_RIGHT"]
7215    ].push(controlDiv);
7216  } else {
7217    const LocateControl = L.Control.extend({
7218      options: { position: map_obj.settings.locateme_control_position?.toLowerCase() || "topright" },
7219      onAdd() {
7220        const container = L.DomUtil.create("div", className);
7221        container.innerHTML = innerHTML;
7222        container.title = wpgmp_local.locate_me;
7223        L.DomEvent.disableClickPropagation(container);
7224        return container;
7225      }
7226    });
7227    map_obj.map.addControl(new LocateControl());
7228  }
7229
7230  // Click Event Binding (Same for both)
7231  $(map_obj.container).on("click", ".wpgmp_locateme_control", function () {
7232    map_obj.get_current_location((user_location) => {
7233      const isGoogle = map_obj.isMapProvider("google");
7234      const lat = typeof user_location.lat === 'function' ? user_location.lat() : user_location.lat;
7235      const lng = typeof user_location.lng === 'function' ? user_location.lng() : user_location.lng;
7236      const latLngObj = isGoogle ? new google.maps.LatLng(lat, lng) : L.latLng(lat, lng);
7237
7238      if (!isGoogle) {
7239        const bounds = latLngObj.toBounds(100);
7240        map_obj.map.flyToBounds(bounds, {
7241          padding: [50, 50],
7242          maxZoom: 15,
7243          animate: true,
7244          duration: 1.5
7245        });
7246      } else {
7247        map_obj.map.panTo(latLngObj);
7248        map_obj.map.setZoom(15);
7249      }
7250
7251      if (!isGoogle && map_obj.pulse_circle && map_obj.map.hasLayer(map_obj.pulse_circle)) {
7252        map_obj.map.removeLayer(map_obj.pulse_circle);
7253      }
7254
7255      if (!isGoogle) {
7256
7257        map_obj.pulse_circle = map_obj.create_leaflet_marker({
7258          map: map_obj.map,
7259          position: latLngObj,
7260          isDivIcon: true,
7261          html: '<div class="pulse-marker"></div>',
7262          customClass: '', // optional, for no extra class
7263        }); 
7264      
7265      } else {
7266        // Google Maps fallback visual marker (if needed)
7267        if (map_obj.pulse_circle) map_obj.pulse_circle.setMap(null);
7268        const markerDiv = document.createElement('div');
7269        markerDiv.className = 'pulse-marker';
7270        const overlay = new google.maps.OverlayView();
7271        overlay.onAdd = function () {
7272          const layer = this.getPanes().overlayMouseTarget;
7273          layer.appendChild(markerDiv);
7274          markerDiv.style.position = 'absolute';
7275        };
7276        overlay.draw = function () {
7277          const projection = this.getProjection();
7278          const point = projection.fromLatLngToDivPixel(latLngObj);
7279          if (point) {
7280            markerDiv.style.left = point.x - 15 + 'px';
7281            markerDiv.style.top = point.y - 15 + 'px';
7282          }
7283        };
7284        overlay.onRemove = function () {
7285          if (markerDiv.parentNode) markerDiv.parentNode.removeChild(markerDiv);
7286        };
7287        overlay.setMap(map_obj.map);
7288        map_obj.pulse_circle = overlay;
7289      }
7290     
7291      if (map_obj.map_center_marker) {
7292        map_obj.map_center_marker.setPosition(latLngObj);
7293      }
7294      // Draw/Move circle
7295      if (map_obj.set_center_circle) {
7296        if (map_obj.isMapProvider("google")) {
7297          map_obj.set_center_circle.setCenter(latLngObj);
7298        } else if (typeof map_obj.set_center_circle.setLatLng === "function") {
7299          map_obj.set_center_circle.setLatLng(latLngObj);
7300        }
7301      }
7302
7303
7304    });
7305  });
7306}
7307
7308getMarkerSize() {
7309  const isMobile = window.innerWidth <= 767;
7310  const isRetina = window.devicePixelRatio > 1.5;
7311
7312  let size;
7313  if (isMobile) {
7314    size = wpgmp_local.mobile_marker_size || [24,24];
7315  } else if (isRetina) {
7316    size = wpgmp_local.retina_marker_size || [64,64];
7317  } else {
7318    size = wpgmp_local.desktop_marker_size || [32,32];
7319  }
7320
7321  return size;
7322}
7323
7324 compute_distance(lat1, lng1, lat2, lng2) {
7325  var map_obj = this;
7326  const isGoogle = map_obj.isMapProvider('google');
7327
7328  lat1 = parseFloat(lat1);
7329  lng1 = parseFloat(lng1);
7330  lat2 = parseFloat(lat2);
7331  lng2 = parseFloat(lng2);
7332
7333  if (isGoogle && typeof google !== 'undefined' && google.maps?.geometry?.spherical) {
7334    const point1 = new google.maps.LatLng(lat1, lng1);
7335    const point2 = new google.maps.LatLng(lat2, lng2);
7336    return google.maps.geometry.spherical.computeDistanceBetween(point1, point2); // meters
7337  }
7338
7339  // Leaflet fallback
7340  if (typeof L !== 'undefined') {
7341    const point1 = L.latLng(lat1, lng1);
7342    const point2 = L.latLng(lat2, lng2);
7343    return point1.distanceTo(point2); // meters
7344  }
7345
7346  console.warn('No supported map provider available to compute distance.');
7347  return null;
7348}
7349
7350
7351
7352}
7353
7354window.WpgmpBaseMaps = WpgmpBaseMaps;
7355
7356})(jQuery, window, document);
7357/**
7358 * WpgmpGoogleMaps class - extends BaseMaps for Google Maps provider.
7359 */
7360
7361(function ($, window, document) {
7362  class WpgmpGoogleMaps extends WpgmpBaseMaps {
7363    constructor(element, map_data = {}, places = []) {
7364      super(element, map_data, places);
7365
7366      var suppress_markers = false;
7367      if (this.map_data.map_tabs && this.map_data.map_tabs.direction_tab) {
7368        suppress_markers =
7369          this.map_data.map_tabs.direction_tab.suppress_markers;
7370      }
7371     
7372      this.infowindow_marker = new google.maps.InfoWindow();
7373      this.infobox = this.wpgmpInitializeInfoBox();
7374      this.newRoutesApiURL =
7375        "https://routes.googleapis.com/directions/v2:computeRoutes";
7376      this.searchNearbyApiURL =
7377        "https://places.googleapis.com/v1/places:searchNearby";
7378        
7379    }
7380    // =========================
7381// 🌀 Part 1: Initialization & Responsive Setup
7382// =========================
7383    init() {
7384      const map_obj = this;
7385
7386      // Determine current screen type
7387      let isMobile = false;
7388      let screen_type = "desktop";
7389      const screen_size = $(window).width();
7390
7391      if (screen_size <= 480) {
7392        screen_type = "smartphones";
7393      } else if (screen_size > 480 && screen_size <= 768) {
7394        screen_type = "ipads";
7395      } else if (screen_size >= 1824) {
7396        screen_type = "large-screens";
7397      }
7398
7399      // Apply mobile-specific settings if configured
7400      if (screen_type !== "desktop" && map_obj.settings.mobile_specific === true) {
7401        isMobile = true;
7402
7403        const mobileSettings = map_obj.settings.screens?.[screen_type];
7404        if (mobileSettings) {
7405          map_obj.settings.width_mobile = mobileSettings.map_width_mobile;
7406          map_obj.settings.height_mobile = mobileSettings.map_height_mobile;
7407          map_obj.settings.zoom = parseInt(mobileSettings.map_zoom_level_mobile);
7408          map_obj.settings.draggable = mobileSettings.map_draggable_mobile !== "false";
7409          map_obj.settings.scroll_wheel = mobileSettings.map_scrolling_wheel_mobile !== "false";
7410        }
7411
7412        // Apply mobile dimensions
7413        if (map_obj.settings.width_mobile !== "") {
7414          $(map_obj.element).css("width", map_obj.settings.width_mobile);
7415        }
7416
7417        if (map_obj.settings.height_mobile !== "") {
7418          $(map_obj.element).css("height", map_obj.settings.height_mobile);
7419        }
7420      }
7421
7422      // =========================
7423    // 🗺️ Part 2: Map Initialization and Configuration
7424    // =========================
7425
7426    const center = new google.maps.LatLng(
7427      map_obj.settings.center_lat,
7428      map_obj.settings.center_lng
7429    );
7430
7431    const mapOptions = {
7432      zoom: parseInt(map_obj.settings.zoom),
7433      center: center,
7434      scrollwheel: map_obj.settings.scroll_wheel !== "true",
7435      disableDoubleClickZoom: map_obj.settings.doubleclickzoom === false,
7436      zoomControl: map_obj.settings.zoom_control === true,
7437      fullscreenControl: map_obj.settings.full_screen_control === true,
7438      fullscreenControlOptions: {
7439        position: google.maps.ControlPosition[map_obj.settings.full_screen_control_position],
7440      },
7441      zoomControlOptions: {
7442        style: google.maps.ZoomControlStyle[map_obj.settings.zoom_control_style],
7443        position: google.maps.ControlPosition[map_obj.settings.zoom_control_position],
7444      },
7445      mapTypeControl: map_obj.settings.map_type_control === true,
7446      mapTypeControlOptions: {
7447        style: google.maps.MapTypeControlStyle[map_obj.settings.map_type_control_style],
7448        position: google.maps.ControlPosition[map_obj.settings.map_type_control_position],
7449      },
7450      cameraControlOptions: {
7451        position: google.maps.ControlPosition[map_obj.settings.camera_control_position],
7452      },
7453      scaleControl: map_obj.settings.scale_control === true,
7454      streetViewControl: map_obj.settings.street_view_control === true,
7455      streetViewControlOptions: {
7456        position: google.maps.ControlPosition[map_obj.settings.street_view_control_position],
7457      },
7458      overviewMapControl: map_obj.settings.overview_map_control === true,
7459      overviewMapControlOptions: {
7460        opened: map_obj.settings.overview_map_control,
7461      },
7462      draggable: map_obj.settings.draggable,
7463      mapTypeId: google.maps.MapTypeId[map_obj.settings.map_type_id],
7464      styles: eval(map_obj.map_data.styles),
7465      minZoom: parseInt(map_obj.settings.min_zoom),
7466      maxZoom: parseInt(map_obj.settings.max_zoom),
7467      gestureHandling: map_obj.settings.gesture,
7468      cameraControl: map_obj.settings.camera_control === true,
7469    }
7470
7471    let useAdvancedMarker = (wpgmp_local.use_advanced_marker == 'true') ? true : false;
7472    const isApplyStyles = (map_obj.map_data.styles && map_obj.map_data.styles!='') ? true:false;
7473    const spiderfier_enabled = map_obj.map_data.map_marker_spiderfier_setting?.marker_spiderfy === "true";
7474
7475    if(map_obj.map_data.marker_cluster){
7476      // Do not work with marker cluster
7477      useAdvancedMarker = false;
7478    } else if(isApplyStyles) {
7479      // Do not work with snazzy maps or custom styles
7480      useAdvancedMarker = false;
7481    } else if(spiderfier_enabled){
7482      // Do no work with spiderfier effects.
7483      useAdvancedMarker = false;
7484    }
7485
7486    map_obj.useAdvancedMarker = useAdvancedMarker;
7487
7488    if (map_obj.useAdvancedMarker === true && isApplyStyles == false) {
7489      mapOptions.mapId = "mapID" + map_obj.map_data.map_property.map_id;
7490    }
7491
7492    map_obj.map = new google.maps.Map(map_obj.element, mapOptions);
7493
7494    if (typeof google?.maps?.marker?.AdvancedMarkerElement !== 'undefined') {
7495      
7496      if (typeof google.maps.Animation === 'undefined') {
7497        google.maps.Animation = {
7498          BOUNCE: 'BOUNCE',
7499          DROP: 'DROP' // Optional: future support
7500        };
7501      }
7502
7503      const proto = google.maps.marker.AdvancedMarkerElement.prototype;
7504    
7505      if (typeof proto.getPosition !== 'function') {
7506        proto.getPosition = function () {
7507          return this.position;
7508        };
7509      }
7510    
7511      if (typeof proto.setPosition !== 'function') {
7512        proto.setPosition = function (latlng) {
7513          this.position = latlng;
7514        };
7515      }
7516    
7517      if (typeof proto.setAnimation !== 'function') {
7518        proto.setAnimation = function (animationType) {
7519          //console.warn("setAnimation() is not natively supported in AdvancedMarkerElement. Applying custom behavior.");
7520          this._animation = animationType;
7521    
7522          const el = this.content;
7523          if (!el || !(el instanceof HTMLElement)) return;
7524    
7525          el.classList.remove('gmp-marker-bounce', 'gmp-marker-drop');
7526    
7527          if (animationType === google.maps.Animation.BOUNCE) {
7528            el.classList.add('gmp-marker-bounce');
7529          } else if (animationType === google.maps.Animation.DROP) {
7530            el.classList.add('gmp-marker-drop');
7531          }
7532
7533        };
7534      }
7535    
7536      if (typeof proto.getAnimation !== 'function') {
7537        proto.getAnimation = function () {
7538          return this._animation || null;
7539        };
7540      }
7541    
7542      if (typeof proto.setVisible !== 'function') {
7543        proto.setVisible = function (visible) {
7544          if (visible) {
7545            if (!this.map && this._boundMap) {
7546              this.map = this._boundMap;
7547            }
7548          } else {
7549            this._boundMap = this.map; // store map reference before hiding
7550            this.map = null;
7551          }
7552          this._visible = visible;
7553        };
7554      }
7555      
7556      if (typeof proto.getVisible !== 'function') {
7557        proto.getVisible = function () {
7558          return this._visible || !!this.map;
7559        };
7560      }
7561
7562      if (typeof proto.bindMap !== 'function') {
7563        proto.bindMap = function (map) {
7564          this._boundMap = map;
7565          this.map = map;
7566          this._visible = true;
7567        };
7568      }
7569
7570      if (typeof google.maps.Marker.prototype.bindMap !== 'function') {
7571        google.maps.Marker.prototype.bindMap = function (map) {
7572          this._boundMap = map;
7573          this.setMap(map);
7574        };
7575      }
7576
7577      if (typeof proto.setIcon !== 'function') {
7578        proto.setIcon = function (icon) {
7579          if (typeof icon !== 'object' || !icon.url) {
7580            console.warn('Invalid icon object passed to setIcon');
7581            return;
7582          }
7583    
7584          const iconUrl = icon.url;
7585          const size = icon.scaledSize 
7586            ? [icon.scaledSize.width, icon.scaledSize.height] 
7587            : [32, 32]; // fallback default size
7588    
7589          // Store icon size for reuse
7590          this._iconSize = size;
7591          
7592          /*
7593          const iconElement = document.createElement('img');
7594          iconElement.src = iconUrl;
7595          iconElement.alt = this.title || '';
7596          iconElement.style.width = `${size[0]}px`;
7597          iconElement.style.height = `${size[1]}px`;
7598    
7599          if (this.title) {
7600            iconElement.title = this.title;
7601          }
7602            */
7603          const iconElement = map_obj.createIconElement(iconUrl, this.title, size);
7604
7605          this.content = iconElement;
7606        };
7607      }
7608    
7609      // Optional: allow storing the icon size for reuse
7610      if (typeof proto.setIconSize !== 'function') {
7611        proto.setIconSize = function (sizeArray) {
7612          if (Array.isArray(sizeArray) && sizeArray.length === 2) {
7613            this._iconSize = sizeArray;
7614          }
7615        };
7616      }
7617
7618    }
7619
7620    // Handle template placeholder storage if using advanced template mode
7621    map_obj.search_button = false;
7622    if (map_obj.map_data.map_options.advance_template === true) {
7623      const $listingElement = $(document).find(
7624        '[data-listing-content="true"][data-wpgmp-map-id]'
7625      );
7626      const eachContent = $listingElement.prop("innerHTML");
7627
7628      if (eachContent) {
7629        map_obj.map_data.listing.listing_placeholder = eachContent;
7630      }
7631    }
7632
7633    // =========================
7634    // 📍 Part 3: Core Marker + Layer Initialization
7635    // =========================
7636
7637      // Trigger lifecycle hook after map is initialized
7638      map_obj.map_loaded();
7639
7640      // Handle responsive layout
7641      map_obj.responsive_map();
7642  
7643      // Create and render all map markers
7644      map_obj.create_markers();
7645      map_obj.display_markers();
7646
7647      // Load Google Fonts if configured
7648      if (typeof map_obj.settings.google_fonts !== "undefined") {
7649        map_obj.load_google_fonts(map_obj.settings.google_fonts);
7650      }
7651
7652      // Show search control box if enabled
7653      if (map_obj.settings.search_control === true) {
7654        map_obj.show_search_control();
7655      }
7656      // Add custom map control buttons if enabled
7657      if (map_obj.settings.map_control === true) {
7658        if (typeof map_obj.settings.map_control_settings !== "undefined") {
7659          $.each(map_obj.settings.map_control_settings, function (k, val) {
7660            const centerControlDiv = document.createElement("div");
7661            map_obj.create_element(centerControlDiv, map_obj.map, val.html);
7662            centerControlDiv.index = 1;
7663            map_obj.map.controls[
7664              google.maps.ControlPosition[val.position]
7665            ].push(centerControlDiv);
7666          });
7667        }
7668      }
7669
7670      // Register "Locate Me" button if enabled
7671      if (map_obj.settings.locateme_control === true && map_obj.settings.locateme_control_position) {
7672        map_obj.register_locate_me_control();
7673      }
7674
7675      // Overlays and Visual Layers
7676      if (map_obj.map_data.street_view) map_obj.set_streetview(center);
7677      if (map_obj.map_data.weather_layer) map_obj.set_weather_layer();
7678      if (map_obj.map_data.bicyle_layer) map_obj.set_bicyle_layer();
7679      if (map_obj.map_data.traffic_layer) map_obj.set_traffic_layer();
7680      if (map_obj.map_data.transit_layer) map_obj.set_transit_layer();
7681      if (map_obj.map_data.panoramio_layer) map_obj.set_panoramic_layer();
7682      if (map_obj.map_data.overlay_setting) map_obj.set_overlay();
7683      if (map_obj.settings.display_45_imagery === "45") map_obj.set_45_imagery();
7684      if (map_obj.map_data.map_visual_refresh === true) map_obj.set_visual_refresh();
7685
7686      // Cluster markers if enabled
7687      if (map_obj.map_data.marker_cluster) map_obj.set_marker_cluster();
7688
7689      // Enable panning control if configured
7690      if (map_obj.map_data.panning_control) map_obj.set_panning_control();
7691
7692      // Load KML layer
7693      if (map_obj.map_data.kml_layer) map_obj.set_kml_layer();
7694
7695      // =========================
7696    // 🧩 Part 4: Shapes, Routes, Sorting, and Listings
7697    // =========================
7698
7699      // Create shapes (polygons, polylines, circles, rectangles)
7700      if (map_obj.map_data.shapes?.shape) {
7701        map_obj.opened_info = map_obj.infowindow_marker;
7702
7703        if (map_obj.map_data.shapes.shape.polygons) {
7704          map_obj.create_polygon();
7705        }
7706
7707        if (map_obj.map_data.shapes.shape.polylines) {
7708          map_obj.create_polyline();
7709        }
7710
7711        if (map_obj.map_data.shapes.shape.circles) {
7712          map_obj.create_circle();
7713        }
7714
7715        if (map_obj.map_data.shapes.shape.rectangles) {
7716          map_obj.create_rectangle();
7717        }
7718      }
7719
7720      // Apply default sorting if enabled (for listing or category tabs)
7721      if (map_obj.map_data.listing) {
7722        if (map_obj.map_data.listing.default_sorting && map_obj.map_data.autosort) {
7723          let data_type = "";
7724          if (map_obj.map_data.listing.default_sorting.orderby === "listorder") {
7725            data_type = "num";
7726          }
7727
7728          map_obj.sorting(
7729            map_obj.map_data.listing.default_sorting.orderby,
7730            map_obj.map_data.listing.default_sorting.inorder,
7731            data_type
7732          );
7733        }
7734      } else if (map_obj.map_data.map_tabs?.category_tab?.cat_tab) {
7735        if (!map_obj.map_data.map_tabs.category_tab.cat_post_order) {
7736          map_obj.map_data.map_tabs.category_tab.cat_post_order = "asc";
7737        }
7738
7739        if (map_obj.map_data.autosort) {
7740          map_obj.sorting("title", map_obj.map_data.map_tabs.category_tab.cat_post_order);
7741          map_obj.map_data.places_for_category_tabs = map_obj.map_data.places;
7742          map_obj.map_data.places_for_category_tabs = map_obj.sorting_inside_tabs(
7743            map_obj.map_data.places_for_category_tabs,
7744            map_obj.map_data.map_tabs.category_tab.cat_post_order
7745          );
7746        }
7747      }
7748
7749      // =========================
7750    // 📑 Part 5: Filter UI, Events & Listeners
7751    // =========================
7752
7753    if (map_obj.map_data.listing) {
7754
7755      // Inject filters and custom filters into UI
7756      map_obj.display_filters_listing();
7757      map_obj.custom_filters();
7758      if (
7759        map_obj !== "undefined" &&
7760        map_obj.map_data.default_amenities != undefined &&
7761        map_obj.map_data.enableAmenitiesListing != undefined &&
7762        map_obj.map_data.enableAmenitiesListing
7763      ) {
7764        //WAIT WHILE LOAD AMENITIES
7765      } else {
7766        $(map_obj.container)
7767          .find(".location_pagination" + map_obj.map_data.map_property.map_id)
7768          .pagination(map_obj.show_places.length, {
7769            callback: map_obj.display_places_listing,
7770            map_data: map_obj,
7771            items_per_page:
7772              map_obj.map_data.listing.pagination.listing_per_page,
7773            prev_text: wpgmp_local.prev,
7774            next_text: wpgmp_local.next,
7775          });
7776      }
7777
7778      
7779    }
7780
7781    // =========================
7782    // 🔍 Part 7: Autocomplete, Events & Final Touches
7783    // =========================
7784
7785      // Load GeoJSON data (if any)
7786      if (typeof map_obj.map_data.geojson !== "undefined") {
7787        map_obj.load_json(map_obj.map_data.geojson);
7788      }
7789
7790      
7791
7792      // Register and re-register Google Autocomplete
7793      map_obj.google_auto_suggest($(".wpgmp_auto_suggest"));
7794
7795      // Optionally show center circle and marker
7796      if (map_obj.settings.show_center_circle === true) {
7797        map_obj.show_center_circle();
7798      }
7799
7800      if (map_obj.settings.show_center_marker === true) {
7801        map_obj.show_center_marker();
7802      }
7803
7804      // Enable drawing manager if shape editing is enabled
7805      
7806      if (map_obj.map_data.shapes?.drawing_editable === true) {
7807        map_obj.enable_drawing();
7808      }
7809
7810      // Fit bounds to markers if setting enabled
7811      if (map_obj.settings.fit_bounds === true) {
7812        map_obj.fit_bounds();
7813      }
7814
7815      // Register any custom plugin or map-specific JS events
7816      map_obj.register_events();
7817
7818      // Initialize accordion behavior
7819      $(map_obj.container).find(".wpgmp-accordion").accordion({
7820        speed: "slow",
7821      });
7822
7823    }
7824
7825    createIconElement(iconUrl, title = '', iconSize = [32, 32]) {
7826      const icon = document.createElement('img');
7827      icon.src = iconUrl;
7828      icon.alt = title;
7829      // Only apply size if the icon is an SVG
7830      if (iconUrl.toLowerCase().includes('image/svg') || iconUrl.toLowerCase().endsWith('.svg')) {
7831        icon.style.width = `${iconSize[0]}px`;
7832        icon.style.height = `${iconSize[1]}px`;
7833      }
7834      icon.title = title;
7835      icon.style.objectFit = 'contain';
7836      return icon;
7837    }
7838    
7839    createMarker(place) {
7840      var map_obj = this;
7841      var map = map_obj.map;
7842      var iconSize = map_obj.getMarkerSize();
7843      var image = {
7844        url: place.icon,
7845        scaledSize: new google.maps.Size(iconSize[0], iconSize[1]),
7846      };
7847
7848      place.marker = map_obj.create_google_marker({
7849        map: map,
7850        position: {lat:place.geometry.location.lat(),lng:place.geometry.location.lng()},
7851        iconUrl: place.icon,
7852      });
7853
7854      var post_info_class = "fc-infowindow-";
7855      place.marker = place.marker;
7856      place.address = place.vicinity;
7857      place.title = place.name;
7858      place.location = {};
7859      place.location.onclick_action = "marker";
7860      var content = "";
7861
7862      var temp_listing_placeholder = "";
7863      var post_info_class = "fc-infowindow-";
7864      if (place.source == "post") {
7865        temp_listing_placeholder = map_obj.settings.infowindow_geotags_setting;
7866        post_info_class =
7867          "wpgmp_infowindow_post fc-item-" +
7868          map_obj.settings.infowindow_post_skin.name;
7869      } else {
7870        temp_listing_placeholder = map_obj.settings.infowindow_setting;
7871        if (
7872          map_obj.map_data.page != "edit_location" &&
7873          map_obj.settings.infowindow_skin
7874        )
7875          post_info_class =
7876            "fc-infowindow-" + map_obj.settings.infowindow_skin.name;
7877      }
7878
7879      if (typeof temp_listing_placeholder == "undefined") {
7880        temp_listing_placeholder = place.content;
7881      }
7882
7883      var marker_image = "";
7884      var image_url =
7885        typeof place.photos !== "undefined"
7886          ? place.photos[0].getUrl({ maxWidth: 400, maxHeight: 400 })
7887          : place.icon;
7888      marker_image =
7889        "<div class='fc-feature-img amenities_image'><img alt='" +
7890        place.vicinity +
7891        "' src='" +
7892        image_url +
7893        "' class='wpgmp_marker_image wpgmp_amenities_image' /></div>";
7894
7895      var replaceData = {
7896        "{marker_id}": place.id,
7897        "{marker_title}": place.name,
7898        "{marker_address}": place.vicinity,
7899        "{marker_latitude}": place.geometry.location.lat(),
7900        "{marker_longitude}": place.geometry.location.lng(),
7901        "{marker_city}": "",
7902        "{marker_state}": "",
7903        "{marker_country}": "",
7904        "{marker_postal_code}": "",
7905        "{marker_zoom}": "",
7906        "{marker_icon}": place.icon,
7907        "{marker_category}": place.types[0],
7908        "{marker_message}": place.content,
7909        "{marker_image}": marker_image,
7910      };
7911
7912      for (var prop in replaceData) {
7913        if (replaceData[prop] == undefined || replaceData[prop] == "undefined")
7914          replaceData[prop] = "";
7915      }
7916
7917      if (temp_listing_placeholder) {
7918        temp_listing_placeholder = temp_listing_placeholder.replace(
7919          /{#if (.*?)}([\s\S]*?){\/if}/g,
7920          function (match, p1, p2) {
7921            return replaceData["{" + p1 + "}"] ? p2 : "";
7922          }
7923        );
7924
7925        temp_listing_placeholder = temp_listing_placeholder.replace(
7926          /{[^{}]+}/g,
7927          function (match) {
7928            if (match in replaceData) {
7929              return replaceData[match];
7930            } else {
7931              return "";
7932            }
7933          }
7934        );
7935
7936        var temp_string = temp_listing_placeholder;
7937        var temp_object = $("<div/>").html(temp_string);
7938        $(temp_object)
7939          .find(".wpgmp_extra_field:contains('wpgmp_empty')")
7940          .remove();
7941        $(temp_object).find(".wpgmp_empty").prev().remove();
7942        $(temp_object).find(".wpgmp_empty").remove();
7943
7944        content = $(temp_object).prop("outerHTML").toString();
7945      }
7946
7947      if (content === "") {
7948        if (
7949          map_obj.settings.map_infowindow_customisations === true &&
7950          map_obj.settings.show_infowindow_header === true
7951        )
7952          content =
7953            '<div class="wpgmp_infowindow ' +
7954            post_info_class +
7955            '"><div class="wpgmp_iw_head"><div class="wpgmp_iw_head_content">' +
7956            place.name +
7957            '</div></div><div class="wpgmp_iw_content">' +
7958            place.vicinity +
7959            "</div></div>";
7960        else
7961          content =
7962            '<div class="wpgmp_infowindow ' +
7963            post_info_class +
7964            '"><div class="wpgmp_iw_content">' +
7965            place.content +
7966            "</div></div>";
7967      } else {
7968        if (
7969          map_obj.settings.map_infowindow_customisations === true &&
7970          map_obj.settings.show_infowindow_header === true
7971        )
7972          content =
7973            '<div class="wpgmp_infowindow ' +
7974            post_info_class +
7975            '"><div class="wpgmp_iw_head"><div class="wpgmp_iw_head_content">' +
7976            place.name +
7977            '</div></div><div class="wpgmp_iw_content">' +
7978            content +
7979            "</div></div>";
7980        else
7981          content =
7982            '<div class="wpgmp_infowindow ' +
7983            post_info_class +
7984            '"><div class="wpgmp_iw_content">' +
7985            content +
7986            "</div></div>";
7987      }
7988
7989      place.infowindow_data = content;
7990      place.infowindow = map_obj.infowindow_marker;
7991      var on_event = map_obj.settings.infowindow_open_event;
7992
7993      map_obj.event_listener(place.marker, on_event, function () {
7994        $.each(map_obj.places, function (key, prev_place) {
7995          prev_place.infowindow.close();
7996          prev_place.marker.setAnimation(null);
7997        });
7998        map_obj.openInfoWindow(place);
7999      });
8000
8001      map_obj.places.push(place);
8002    }
8003    wpgmp_image_type_overlays() {
8004      var map_obj = this;
8005      var imageMapType = new google.maps.ImageMapType({
8006        getTileUrl(coord, zoom) {
8007          return [
8008            "http://www.gstatic.com/io2010maps/tiles/5/L2_",
8009            zoom,
8010            "_",
8011            coord.x,
8012            "_",
8013            coord.y,
8014            ".png",
8015          ].join("");
8016        },
8017        tileSize: new google.maps.Size(256, 256),
8018      });
8019
8020      map_obj.map.overlayMapTypes.push(imageMapType);
8021    }
8022   
8023    get_user_position() {
8024      var map_obj = this;
8025
8026      navigator.geolocation.getCurrentPosition(
8027        function (position) {
8028          map_obj.user_lat_lng = new google.maps.LatLng(
8029            position.coords.latitude,
8030            position.coords.longitude
8031          );
8032        },
8033        function (ErrorPosition) {},
8034        {
8035          enableHighAccuracy: true,
8036          timeout: 5000,
8037          maximumAge: 0,
8038        }
8039      );
8040    }
8041
8042    wpgmp_finddata(result, type) {
8043      var component_name = "";
8044
8045      for (var i = 0; i < result.addressComponents.length; ++i) {
8046        var component = result.addressComponents[i];
8047        $.each(component.types, function (index, value) {
8048          if (value == type) {
8049            component_name = component.longText;
8050          }
8051        });
8052      }
8053
8054      return component_name;
8055    }
8056
8057    clearSelection() {
8058      var map_obj = this;
8059      if (map_obj.selectedShape) {
8060        map_obj.selectedShape.setEditable(false);
8061        map_obj.selectedShape = null;
8062      }
8063    }
8064    setSelection(shape) {
8065      var map_obj = this;
8066      map_obj.clearSelection();
8067      map_obj.selectedShape = shape;
8068      map_obj.selectedShape.setEditable(true);
8069    }
8070    deleteSelectedShape() {
8071      var map_obj = this;
8072      var key;
8073      if (map_obj.selectedShape) {
8074        for (key in map_obj.wpgmp_circles) {
8075          if (map_obj.wpgmp_circles[key] == map_obj.selectedShape) {
8076            map_obj.wpgmp_circles.splice(key, 1);
8077          }
8078        }
8079        for (key in map_obj.wpgmp_rectangles) {
8080          if (map_obj.wpgmp_rectangles[key] == map_obj.selectedShape) {
8081            map_obj.wpgmp_rectangles.splice(key, 1);
8082          }
8083        }
8084        for (key in map_obj.wpgmp_polygons) {
8085          if (map_obj.wpgmp_polygons[key] == map_obj.selectedShape) {
8086            map_obj.wpgmp_polygons.splice(key, 1);
8087          }
8088        }
8089        for (key in map_obj.wpgmp_polylines) {
8090          if (map_obj.wpgmp_polylines[key] == map_obj.selectedShape) {
8091            map_obj.wpgmp_polylines.splice(key, 1);
8092          }
8093        }
8094        map_obj.selectedShape.setMap(null);
8095      }
8096    }
8097
8098    create_google_marker({
8099      map,
8100      position,
8101      iconUrl = null,
8102      title = '',
8103      label = '',
8104      draggable = false,
8105      clickable = true,
8106      anchorPoint = null
8107    }) {
8108      const map_obj = this;
8109    
8110      const lat = parseFloat(position.lat || position.lat());
8111      const lng = parseFloat(position.lng || position.lng());
8112      const markerLatLng = new google.maps.LatLng(lat, lng);
8113    
8114      const iconSize = map_obj.getMarkerSize?.() || [32, 32];
8115    
8116      // Default icon fallback
8117      if (!iconUrl || iconUrl.trim() === '') {
8118        iconUrl = map_obj.settings.marker_default_icon || wpgmp_local.default_marker_icon;
8119      }
8120
8121      const isSvg = iconUrl.toLowerCase().includes('image/svg') || iconUrl.toLowerCase().endsWith('.svg');
8122    
8123      if (map_obj.useAdvancedMarker &&  google.maps.marker?.AdvancedMarkerElement ) {
8124        // AdvancedMarkerElement version
8125        const iconElement = isSvg ? map_obj.createIconElement(iconUrl, title, iconSize) : map_obj.createIconElement(iconUrl, title);
8126
8127        return new google.maps.marker.AdvancedMarkerElement({
8128          map: map,
8129          position: markerLatLng,
8130          title: title,
8131          content: iconElement,
8132        });
8133    
8134      } else {
8135        // Fallback to classic google.maps.Marker
8136        const markerOptions = {
8137          position: markerLatLng,
8138          map,
8139          title,
8140          label,
8141          draggable,
8142          clickable,
8143        };
8144    
8145        if (iconUrl) {
8146          markerOptions.icon = {
8147            url: iconUrl,
8148          };
8149          if (isSvg) {
8150            markerOptions.icon.scaledSize = new google.maps.Size(parseInt(iconSize[0]), parseInt(iconSize[1]));
8151          }
8152        }
8153    
8154        if (anchorPoint) {
8155          markerOptions.anchorPoint = new google.maps.Point(anchorPoint.x, anchorPoint.y);
8156        }
8157    
8158        return new google.maps.Marker(markerOptions);
8159      }
8160    }    
8161
8162    enable_drawing() {
8163      var map_obj = this;
8164      map_obj.drawingmanager = new google.maps.drawing.DrawingManager({
8165        drawingMode: null,
8166        drawingControl: true,
8167        drawingControlOptions: {
8168          position: google.maps.ControlPosition.TOP_CENTER,
8169          drawingModes: [
8170            google.maps.drawing.OverlayType.CIRCLE,
8171            google.maps.drawing.OverlayType.POLYGON,
8172            google.maps.drawing.OverlayType.POLYLINE,
8173            google.maps.drawing.OverlayType.RECTANGLE,
8174          ],
8175        },
8176
8177        circleOptions: {
8178          fillColor: "#003dce",
8179          strokeColor: "#003dce",
8180          strokeWeight: "1",
8181          strokeOpacity: "0.5",
8182          zindex: 1,
8183          fillOpacity: "0.5",
8184          editable: false,
8185          draggable: false,
8186        },
8187        polygonOptions: {
8188          fillColor: "#003dce",
8189          strokeColor: "#003dce",
8190          strokeWeight: "1",
8191          strokeOpacity: "0.5",
8192          zindex: 1,
8193          fillOpacity: "0.5",
8194          editable: false,
8195          draggable: false,
8196        },
8197        polylineOptions: {
8198          fillColor: "#003dce",
8199          strokeColor: "#003dce",
8200          strokeWeight: "1",
8201          strokeOpacity: "0.5",
8202          zindex: 1,
8203          fillOpacity: "0.5",
8204          editable: false,
8205          draggable: false,
8206        },
8207        rectangleOptions: {
8208          fillColor: "#003dce",
8209          strokeColor: "#003dce",
8210          strokeWeight: "1",
8211          strokeOpacity: "0.5",
8212          zindex: 1,
8213          fillOpacity: "0.5",
8214          editable: false,
8215          draggable: false,
8216        },
8217      });
8218      map_obj.drawingmanager.setMap(map_obj.map);
8219      map_obj.event_listener(
8220        map_obj.drawingmanager,
8221        "circlecomplete",
8222        function (circle) {
8223          map_obj.wpgmp_circles.push(circle);
8224          map_obj.wpgmp_shape_complete(circle, "circle");
8225        }
8226      );
8227      map_obj.event_listener(
8228        map_obj.drawingmanager,
8229        "polygoncomplete",
8230        function (polygon) {
8231          map_obj.wpgmp_polygons.push(polygon);
8232          map_obj.wpgmp_shape_complete(polygon, "polygon");
8233        }
8234      );
8235      map_obj.event_listener(
8236        map_obj.drawingmanager,
8237        "polylinecomplete",
8238        function (polyline) {
8239          map_obj.wpgmp_polylines.push(polyline);
8240          map_obj.wpgmp_shape_complete(polyline, "polyline");
8241        }
8242      );
8243      map_obj.event_listener(
8244        map_obj.drawingmanager,
8245        "rectanglecomplete",
8246        function (rectangle) {
8247          map_obj.wpgmp_rectangles.push(rectangle);
8248          map_obj.wpgmp_shape_complete(rectangle, "rectangle");
8249        }
8250      );
8251    }
8252
8253    create_polygon() {
8254      var map_obj = this;
8255
8256      $.each(this.map_data.shapes.shape.polygons, function (index, polygon) {
8257        var path = [];
8258        $.each(polygon.cordinates, function (ind, cordinate) {
8259          var latlng = cordinate.split(",");
8260          path.push(new google.maps.LatLng(latlng[0], latlng[1]));
8261        });
8262
8263        polygon.reference = new google.maps.Polygon({
8264          paths: path,
8265          strokeColor: polygon.settings.stroke_color,
8266          strokeOpacity: polygon.settings.stroke_opacity,
8267          strokeWeight: polygon.settings.stroke_weight,
8268          fillColor: polygon.settings.fill_color,
8269          fillOpacity: polygon.settings.fill_opacity,
8270        });
8271        if (typeof map_obj.map_data.shapes != "undefined") {
8272          if (map_obj.map_data.shapes.drawing_editable === true) {
8273            map_obj.event_listener(polygon.reference, "click", function () {
8274              map_obj.setSelection(polygon.reference);
8275              map_obj.get_shapes_options(polygon.reference, "polygon");
8276            });
8277          } else if (
8278            polygon.events !== undefined &&
8279            (polygon.events.url !== "" || polygon.events.message !== "")
8280          ) {
8281            map_obj.event_listener(polygon.reference, "click", function () {
8282              if (
8283                (polygon.events.url === "" ||
8284                  polygon.events.url === undefined) &&
8285                polygon.events.message !== ""
8286              ) {
8287                var bounds = new google.maps.LatLngBounds();
8288                polygon.reference.getPath().forEach(function (element, index) {
8289                  bounds.extend(element);
8290                });
8291                $.each(map_obj.places, function (key, place) {
8292                  place.infowindow.close();
8293                });
8294                map_obj.opened_info.setPosition(bounds.getCenter());
8295                if (map_obj.settings.map_infowindow_customisations === true)
8296                  map_obj.opened_info.setContent(
8297                    '<div class="wpgmp_infowindow"><div class="wpgmp_iw_content">' +
8298                      polygon.events.message +
8299                      "</div></div>"
8300                  );
8301                else map_obj.opened_info.setContent(polygon.events.message);
8302                map_obj.opened_info.open(map_obj.map, this);
8303              } else {
8304                if (
8305                  polygon.events.url !== "undefined" &&
8306                  polygon.events.url !== undefined
8307                )
8308                  window.location = polygon.events.url;
8309              }
8310            });
8311          }
8312        }
8313        polygon.reference.setMap(map_obj.map);
8314
8315        map_obj.wpgmp_polygons.push(polygon.reference);
8316
8317        if (polygon.events == undefined) {
8318          polygon.events = {};
8319          polygon.events.url = "";
8320          polygon.events.message = "";
8321        }
8322
8323        map_obj.wpgmp_shape_events.push({
8324          shape: polygon.reference,
8325          url: polygon.events.url,
8326          message: polygon.events.message,
8327        });
8328      });
8329    }
8330
8331    create_polyline() {
8332      var map_obj = this;
8333
8334      $.each(this.map_data.shapes.shape.polylines, function (index, polyline) {
8335        var path = [];
8336
8337        if (typeof polyline.cordinates != "undefined") {
8338          $.each(polyline.cordinates, function (ind, cordinate) {
8339            var latlng = cordinate.split(",");
8340            path.push(new google.maps.LatLng(latlng[0], latlng[1]));
8341          });
8342
8343          polyline.reference = new google.maps.Polyline({
8344            path: path,
8345            strokeColor: polyline.settings.stroke_color,
8346            strokeOpacity: polyline.settings.stroke_opacity,
8347            strokeWeight: polyline.settings.stroke_weight,
8348          });
8349
8350          if (typeof map_obj.map_data.shapes != "undefined") {
8351            if (map_obj.map_data.shapes.drawing_editable === true) {
8352              map_obj.event_listener(polyline.reference, "click", function () {
8353                map_obj.setSelection(polyline.reference);
8354                map_obj.get_shapes_options(polyline.reference, "polyline");
8355              });
8356            } else if (
8357              polyline.events !== undefined &&
8358              (polyline.events.url !== "" || polyline.events.message !== "")
8359            ) {
8360              map_obj.event_listener(polyline.reference, "click", function () {
8361                if (
8362                  (polyline.events.url === "" ||
8363                    polyline.events.url === undefined) &&
8364                  polyline.events.message !== ""
8365                ) {
8366                  var bounds = new google.maps.LatLngBounds();
8367                  polyline.reference
8368                    .getPath()
8369                    .forEach(function (element, index) {
8370                      bounds.extend(element);
8371                    });
8372                  $.each(map_obj.places, function (key, place) {
8373                    place.infowindow.close();
8374                  });
8375                  map_obj.opened_info.setPosition(bounds.getCenter());
8376                  if (map_obj.settings.map_infowindow_customisations === true)
8377                    map_obj.opened_info.setContent(
8378                      '<div class="wpgmp_infowindow"><div class="wpgmp_iw_content">' +
8379                        polyline.events.message +
8380                        "</div></div>"
8381                    );
8382                  else map_obj.opened_info.setContent(polyline.events.message);
8383                  map_obj.opened_info.open(map_obj.map, this);
8384                } else if (polyline.events.url !== "") {
8385                  if (
8386                    polyline.events.url !== "undefined" &&
8387                    polyline.events.url !== undefined
8388                  )
8389                    window.location = polyline.events.url;
8390                }
8391              });
8392            }
8393          }
8394        }
8395        if (typeof polyline.reference != "undefined") {
8396          polyline.reference.setMap(map_obj.map);
8397          map_obj.wpgmp_polylines.push(polyline.reference);
8398
8399          if (polyline.events == undefined) {
8400            polyline.events = {};
8401            polyline.events.url = "";
8402            polyline.events.message = "";
8403          }
8404
8405          map_obj.wpgmp_shape_events.push({
8406            shape: polyline.reference,
8407            url: polyline.events.url,
8408            message: polyline.events.message,
8409          });
8410        }
8411      });
8412    }
8413    event_listener(obj, type, func) {
8414      google.maps.event.addListener(obj, type, func);
8415    }
8416    create_circle() {
8417      var map_obj = this;
8418      $.each(this.map_data.shapes.shape.circles, function (index, circle) {
8419        var path;
8420        $.each(circle.cordinates, function (ind, cordinate) {
8421          var latlng = cordinate.split(",");
8422          path = new google.maps.LatLng(latlng[0], latlng[1]);
8423        });
8424
8425        circle.reference = new google.maps.Circle({
8426          fillColor: circle.settings.fill_color,
8427          fillOpacity: circle.settings.fill_opacity,
8428          strokeColor: circle.settings.stroke_color,
8429          strokeOpacity: circle.settings.stroke_opacity,
8430          strokeWeight: circle.settings.stroke_weight,
8431          center: path,
8432          radius: parseInt(circle.settings.radius),
8433        });
8434
8435        if (typeof map_obj.map_data.shapes != "undefined") {
8436          if (map_obj.map_data.shapes.drawing_editable === true) {
8437            map_obj.event_listener(circle.reference, "click", function () {
8438              map_obj.setSelection(circle.reference);
8439              map_obj.get_shapes_options(circle.reference, "circle");
8440            });
8441          } else if (
8442            circle.events !== undefined &&
8443            (circle.events.url !== "" || circle.events.message !== "")
8444          ) {
8445            map_obj.event_listener(circle.reference, "click", function () {
8446              if (
8447                (circle.events.url === "" || circle.events.url === undefined) &&
8448                circle.events.message !== ""
8449              ) {
8450                $.each(map_obj.places, function (key, place) {
8451                  place.infowindow.close();
8452                });
8453                map_obj.opened_info.setPosition(circle.reference.getCenter());
8454                if (map_obj.settings.map_infowindow_customisations === true)
8455                  map_obj.opened_info.setContent(
8456                    '<div class="wpgmp_infowindow"><div class="wpgmp_iw_content">' +
8457                      circle.events.message +
8458                      "</div></div>"
8459                  );
8460                else map_obj.opened_info.setContent(circle.events.message);
8461                map_obj.opened_info.open(map_obj.map, this);
8462              } else if (circle.events.url !== "") {
8463                if (
8464                  circle.events.url !== "undefined" &&
8465                  circle.events.url !== undefined
8466                )
8467                  window.location = circle.events.url;
8468              }
8469            });
8470          }
8471        }
8472
8473        circle.reference.setMap(map_obj.map);
8474        map_obj.wpgmp_circles.push(circle.reference);
8475
8476        if (circle.events == undefined) {
8477          circle.events = {};
8478          circle.events.url = "";
8479          circle.events.message = "";
8480        }
8481
8482        map_obj.wpgmp_shape_events.push({
8483          shape: circle.reference,
8484          url: circle.events.url,
8485          message: circle.events.message,
8486        });
8487      });
8488    }
8489
8490    create_rectangle() {
8491      var map_obj = this;
8492      $.each(
8493        this.map_data.shapes.shape.rectangles,
8494        function (index, rectangle) {
8495          var left_latlng = rectangle.cordinates[0].split(",");
8496          var right_latlng = rectangle.cordinates[1].split(",");
8497
8498          var path = new google.maps.LatLngBounds(
8499            new google.maps.LatLng(left_latlng[0], left_latlng[1]),
8500            new google.maps.LatLng(right_latlng[0], right_latlng[1])
8501          );
8502
8503          rectangle.reference = new google.maps.Rectangle({
8504            bounds: path,
8505            fillColor: rectangle.settings.fill_color,
8506            fillOpacity: rectangle.settings.fill_opacity,
8507            strokeColor: rectangle.settings.stroke_color,
8508            strokeOpacity: rectangle.settings.stroke_opacity,
8509            strokeWeight: rectangle.settings.stroke_weight,
8510          });
8511
8512          if (typeof map_obj.map_data.shapes != "undefined") {
8513            if (map_obj.map_data.shapes.drawing_editable === true) {
8514              map_obj.event_listener(rectangle.reference, "click", function () {
8515                map_obj.setSelection(rectangle.reference);
8516                map_obj.get_shapes_options(rectangle.reference, "rectangle");
8517              });
8518            } else if (
8519              rectangle.events !== undefined &&
8520              (rectangle.events.url !== "" || rectangle.events.message !== "")
8521            ) {
8522              map_obj.event_listener(rectangle.reference, "click", function () {
8523                if (
8524                  (rectangle.events.url === "" ||
8525                    rectangle.events.url === undefined) &&
8526                  rectangle.events.message !== ""
8527                ) {
8528                  $.each(map_obj.places, function (key, place) {
8529                    place.infowindow.close();
8530                  });
8531                  map_obj.opened_info.setPosition(
8532                    rectangle.reference.getBounds().getCenter()
8533                  );
8534                  if (map_obj.settings.map_infowindow_customisations === true)
8535                    map_obj.opened_info.setContent(
8536                      '<div class="wpgmp_infowindow"><div class="wpgmp_iw_content">' +
8537                        rectangle.events.message +
8538                        "</div></div>"
8539                    );
8540                  else map_obj.opened_info.setContent(rectangle.events.message);
8541                  map_obj.opened_info.open(map_obj.map, this);
8542                } else if (rectangle.events.url !== "") {
8543                  if (
8544                    rectangle.events.url !== "undefined" &&
8545                    rectangle.events.url !== undefined
8546                  )
8547                    window.location = rectangle.events.url;
8548                }
8549              });
8550            }
8551          }
8552
8553          rectangle.reference.setMap(map_obj.map);
8554          map_obj.wpgmp_rectangles.push(rectangle.reference);
8555
8556          if (rectangle.events == undefined) {
8557            rectangle.events = {};
8558            rectangle.events.url = "";
8559            rectangle.events.message = "";
8560          }
8561
8562          map_obj.wpgmp_shape_events.push({
8563            shape: rectangle.reference,
8564            url: rectangle.events.url,
8565            message: rectangle.events.message,
8566          });
8567        }
8568      );
8569    }
8570
8571    get_shapes_options(shape, type) {
8572      $(".hiderow").addClass("temp_row").removeClass("hiderow");
8573
8574      // Set value to the input
8575      $("input[name='shape_fill_color']").val(shape.fillColor);
8576
8577      // Set background color of the visible preview button (.wp-color-result)
8578      $("input[name='shape_fill_color']")
8579        .closest(".wp-picker-container")
8580        .find(".wp-color-result")
8581        .css("background-color", shape.fillColor);
8582
8583      $("input[name='shape_stroke_color']").val(shape.strokeColor);
8584
8585      // Set background color of the visible preview button (.wp-color-result)
8586      $("input[name='shape_stroke_color']")
8587        .closest(".wp-picker-container")
8588        .find(".wp-color-result")
8589        .css("background-color", shape.strokeColor);
8590
8591      $("select[name='shape_fill_opacity']").val(shape.fillOpacity);
8592      $("select[name='shape_stroke_opacity']").val(shape.strokeOpacity);
8593      $("select[name='shape_stroke_weight']").val(shape.strokeWeight);
8594      $("textarea[name='shape_path']").parent().hide();
8595      $("input[name='shape_radius']").parent().hide();
8596      $("input[name='shape_center']").parent().hide();
8597      $("input[name='shape_northeast']").parent().hide();
8598      $("input[name='shape_southwest']").parent().hide();
8599
8600      var all_shape_events = this.wpgmp_shape_events;
8601      $.each(all_shape_events, function (i, shape_event) {
8602        if (shape_event.shape == shape) {
8603          $("input[name='shape_click_url']").val(shape_event.url);
8604          $("textarea[name='shape_click_message']").val(shape_event.message);
8605        }
8606      });
8607      if (type == "circle") {
8608        $("input[name='shape_radius']").parent().show();
8609        $("input[name='shape_radius']").val(shape.getRadius());
8610        $("input[name='shape_center']").parent().show();
8611        $("input[name='shape_center']").val(
8612          shape.getCenter().lat() + "," + shape.getCenter().lng()
8613        );
8614      } else if (type == "rectangle") {
8615        $("input[name='shape_northeast']").parent().show();
8616        $("input[name='shape_northeast']").val(
8617          shape.getBounds().getNorthEast().lat() +
8618            "," +
8619            shape.getBounds().getNorthEast().lng()
8620        );
8621        $("input[name='shape_southwest']").parent().show();
8622        $("input[name='shape_southwest']").val(
8623          shape.getBounds().getSouthWest().lat() +
8624            "," +
8625            shape.getBounds().getSouthWest().lng()
8626        );
8627      } else {
8628        var polygon_cordinate = [];
8629
8630        var cordinates = shape.getPath();
8631
8632        cordinates.forEach(function (latlng, index) {
8633          var latlngin = [latlng.lat(), latlng.lng()];
8634
8635          if (latlng.lat() !== "" && latlng.lng() !== "")
8636            polygon_cordinate.push(latlngin);
8637        });
8638        $("textarea[name='shape_path']").parent().show();
8639        $("textarea[name='shape_path']").val(polygon_cordinate.join(" "));
8640      }
8641    }
8642
8643    set_shapes_options(shape) {
8644      var polyOptions2 = {
8645        fillColor: $("input[name='shape_fill_color']").val(),
8646        fillOpacity: $("select[name='shape_fill_opacity']").val(),
8647        strokeColor: $("input[name='shape_stroke_color']").val(),
8648        strokeOpacity: $("select[name='shape_stroke_opacity']").val(),
8649        strokeWeight: $("select[name='shape_stroke_weight']").val(),
8650      };
8651      shape.setOptions(polyOptions2);
8652      var all_shape_events = this.wpgmp_shape_events;
8653      $.each(all_shape_events, function (i, shape_event) {
8654        if (shape_event.shape == shape) {
8655          shape_event.url = $("input[name='shape_click_url']").val();
8656          shape_event.message = $("textarea[name='shape_click_message']").val();
8657        }
8658      });
8659    }
8660
8661    wpgmp_shape_complete(shape, type) {
8662      var map_obj = this;
8663      map_obj.setSelection(shape);
8664      map_obj.drawingmanager.setDrawingMode(null);
8665      if (typeof map_obj.map_data.shapes != "undefined") {
8666        if (map_obj.map_data.shapes.drawing_editable === true) {
8667          map_obj.event_listener(shape, "click", function () {
8668            map_obj.setSelection(shape);
8669            map_obj.get_shapes_options(shape, type);
8670          });
8671
8672          map_obj.wpgmp_shape_events.push({
8673            shape: shape,
8674            url: "",
8675            message: "",
8676          });
8677        }
8678      }
8679    }
8680
8681
8682    set_kml_layer() {
8683      var map_obj = this.map;
8684
8685      $.each(this.map_data.kml_layer.kml_layers_links, function (index, link) {
8686        var kmlLayerOptions = {
8687          url: link,
8688          map: map_obj,
8689          preserveViewport: true,
8690        };
8691
8692        new google.maps.KmlLayer(kmlLayerOptions);
8693      });
8694    }
8695
8696    set_marker_cluster() {
8697      var map_obj = this;
8698      var markers = [];
8699      var clusterStyles = [
8700        {
8701          textColor: "black",
8702          url: map_obj.map_data.marker_cluster.icon,
8703          height: 32,
8704          width: 33,
8705        },
8706      ];
8707      $.each(this.places, function (index, place) {
8708        if (place.marker.getVisible() == true) {
8709          markers.push(place.marker);
8710        }
8711      });
8712
8713      if (map_obj.map_data.marker_cluster.apply_style === true) {
8714        if (!map_obj.markerClusterer) {
8715          map_obj.markerClusterer = new MarkerClusterer(
8716            map_obj.map,
8717            {},
8718            {
8719              gridSize: parseInt(map_obj.map_data.marker_cluster.grid),
8720              maxZoom: parseInt(map_obj.map_data.marker_cluster.max_zoom),
8721              styles: clusterStyles,
8722            }
8723          );
8724        }
8725
8726        map_obj.markerClusterer.clearMarkers();
8727        map_obj.markerClusterer.addMarkers(markers);
8728
8729        google.maps.event.addListener(
8730          map_obj.markerClusterer,
8731          "mouseover",
8732          function (c) {
8733            c.clusterIcon_.div_.firstChild.src =
8734              map_obj.map_data.marker_cluster.hover_icon;
8735          }
8736        );
8737
8738        google.maps.event.addListener(
8739          map_obj.markerClusterer,
8740          "mouseout",
8741          function (c) {
8742            c.clusterIcon_.div_.firstChild.src =
8743              map_obj.map_data.marker_cluster.icon;
8744          }
8745        );
8746      } else {
8747        if (!map_obj.markerClusterer) {
8748          map_obj.markerClusterer = new MarkerClusterer(
8749            map_obj.map,
8750            {},
8751            {
8752              gridSize: parseInt(map_obj.map_data.marker_cluster.grid),
8753              maxZoom: parseInt(map_obj.map_data.marker_cluster.max_zoom),
8754              imagePath: map_obj.map_data.marker_cluster.image_path,
8755            }
8756          );
8757        }
8758
8759        map_obj.markerClusterer.clearMarkers();
8760        map_obj.markerClusterer.addMarkers(markers);
8761      }
8762    }
8763
8764    set_panning_control() {
8765      var panning_data = this.map_data.panning_control;
8766      var panning_map_obj = this.map;
8767      var map_obj = this;
8768
8769      var strictBounds = new google.maps.LatLngBounds(
8770        new google.maps.LatLng(
8771          panning_data.from_latitude,
8772          panning_data.from_longitude
8773        ),
8774        new google.maps.LatLng(
8775          panning_data.to_latitude,
8776          panning_data.to_longitude
8777        )
8778      );
8779
8780      google.maps.event.addListener(panning_map_obj, "dragend", function () {
8781        if (strictBounds.contains(panning_map_obj.getCenter())) return;
8782
8783        var c = panning_map_obj.getCenter(),
8784          x = c.lng(),
8785          y = c.lat(),
8786          maxX = strictBounds.getNorthEast().lng(),
8787          maxY = strictBounds.getNorthEast().lat(),
8788          minX = strictBounds.getSouthWest().lng(),
8789          minY = strictBounds.getSouthWest().lat();
8790
8791        if (x < minX) x = minX;
8792        if (x > maxX) x = maxX;
8793        if (y < minY) y = minY;
8794        if (y > maxY) y = maxY;
8795
8796        panning_map_obj.setCenter(new google.maps.LatLng(y, x));
8797      });
8798
8799      google.maps.event.addListener(
8800        panning_map_obj,
8801        "zoom_changed",
8802        function () {
8803          if (panning_map_obj.getZoom() < panning_data.zoom_level) {
8804            panning_map_obj.setZoom(parseInt(map_obj.settings.zoom));
8805          }
8806        }
8807      );
8808    }
8809
8810    set_visual_refresh() {
8811      google.maps.visualRefresh = true;
8812    }
8813
8814    set_45_imagery() {
8815      //this.map.setTilt(45);
8816    }
8817
8818    set_overlay_generator(tileSize, options) {
8819
8820      var overlay_generator = function (tileSize, options) {
8821
8822        this.tileSize = tileSize;
8823        this.overlay_options = options;
8824        if (this.overlay_options.font_size != undefined) {
8825            this.overlay_options.font_size = this.overlay_options.font_size.replace('px', '');
8826        } else {
8827            this.overlay_options.font_size = '16';
8828        }
8829        if (this.overlay_options.border_width != undefined) {
8830            this.overlay_options.border_width = this.overlay_options.border_width.replace('px', '');
8831        } else {
8832            this.overlay_options.border_width = '2';
8833        }
8834  
8835    }
8836  
8837    overlay_generator.prototype.getTile = function (coord, zoom, ownerDocument) {
8838  
8839        var div = ownerDocument.createElement("div");
8840        div.innerHTML = coord;
8841        div.style.width = this.tileSize.width;
8842        div.style.height = this.tileSize.height;
8843        div.style.fontSize = this.overlay_options.font_size + "px";
8844        div.style.borderStyle = this.overlay_options.border_style;
8845        div.style.borderWidth = this.overlay_options.border_width + "px";
8846        div.style.borderColor = this.overlay_options.border_color;
8847        return div;
8848    };
8849
8850    return new overlay_generator(tileSize, options);
8851    
8852    }
8853    
8854    set_overlay() {
8855      if (this.map_data.overlay_setting.width != undefined) {
8856        this.map_data.overlay_setting.width =
8857          this.map_data.overlay_setting.width.replace("px", "");
8858      } else {
8859        this.map_data.overlay_setting.width = "200";
8860      }
8861      if (this.map_data.overlay_setting.height != undefined) {
8862        this.map_data.overlay_setting.height =
8863          this.map_data.overlay_setting.height.replace("px", "");
8864      } else {
8865        this.map_data.overlay_setting.height = "200";
8866      }
8867
8868      this.map.overlayMapTypes.insertAt(
8869        0,
8870        this.set_overlay_generator(
8871          new google.maps.Size(
8872            this.map_data.overlay_setting.width,
8873            this.map_data.overlay_setting.height
8874          ),
8875          this.map_data.overlay_setting
8876        )
8877      );
8878    }
8879
8880    set_bicyle_layer() {
8881      var bikeLayer = new google.maps.BicyclingLayer();
8882      bikeLayer.setMap(this.map);
8883    }
8884
8885    set_traffic_layer() {
8886      var traffic_layer = new google.maps.TrafficLayer();
8887      traffic_layer.setMap(this.map);
8888    }
8889
8890    set_panoramic_layer() {
8891      var panoramic_layer = new google.maps.panoramio.PanoramioLayer();
8892      panoramic_layer.setMap(this.map);
8893    }
8894
8895    set_transit_layer() {
8896      var transit_layer = new google.maps.TransitLayer();
8897      transit_layer.setMap(this.map);
8898    }
8899
8900    set_weather_layer() {
8901      var weatherLayer = new google.maps.weather.WeatherLayer({
8902        windSpeedUnit: eval(
8903          "google.maps.weather.WindSpeedUnit." +
8904            this.map_data.weather_layer.wind_unit
8905        ),
8906        temperatureUnits: eval(
8907          "google.maps.weather.TemperatureUnit." +
8908            this.map_data.weather_layer.temperature_unit
8909        ),
8910      });
8911
8912      weatherLayer.setMap(this.map);
8913      var cloudLayer = new google.maps.weather.CloudLayer();
8914      cloudLayer.setMap(this.map);
8915    }
8916
8917    set_streetview(latlng) {
8918      var panoOptions = {
8919        position: latlng,
8920        addressControlOptions: {
8921          position: google.maps.ControlPosition.BOTTOM_CENTER,
8922        },
8923        linksControl: this.map_data.street_view.links_control,
8924        panControl: this.map_data.street_view.street_view_pan_control,
8925        zoomControlOptions: {
8926          style: google.maps.ZoomControlStyle.SMALL,
8927        },
8928        enableCloseButton: this.map_data.street_view.street_view_close_button,
8929      };
8930      if (
8931        this.map_data.street_view.pov_heading &&
8932        this.map_data.street_view.pov_pitch
8933      ) {
8934        panoOptions["pov"] = {
8935          heading: parseInt(this.map_data.street_view.pov_heading),
8936          pitch: parseInt(this.map_data.street_view.pov_pitch),
8937        };
8938      }
8939      var panorama = new google.maps.StreetViewPanorama(
8940        this.element,
8941        panoOptions
8942      );
8943    }
8944   
8945    /**
8946 * Handles post-load setup for Google Maps
8947 * Includes center logic, infowindow cleanup, amenities load, and UI skinning
8948 */
8949map_loaded() {
8950  const map_obj = this;
8951  const map = map_obj.map;
8952
8953  // Ensure Google map is fully loaded and properly centered after resize
8954  google.maps.event.addListenerOnce(map, "idle", function () {
8955    const center = map.getCenter();
8956    google.maps.event.trigger(map, "resize");
8957    map.setCenter(center);
8958  });
8959
8960  // Optionally center map by user's location
8961  if (map_obj.settings.center_by_nearest === true) {
8962    map_obj.center_by_nearest();
8963  }
8964
8965  // Close all open infowindows on map click
8966  if (map_obj.settings.close_infowindow_on_map_click === true) {
8967    google.maps.event.addListener(map, "click", function () {
8968      map_obj.places?.forEach((place) => {
8969        place.infowindow?.close();
8970        place.marker?.setAnimation(null);
8971      });
8972    });
8973  }
8974
8975 
8976
8977  // DOM Ready styling for Infobox (if custom infowindow skin is active)
8978  google.maps.event.addListener(map_obj.infobox, "domready", function () {
8979    const $outer = $(map_obj.container).find(".infoBox");
8980    const needsSkin =
8981      $outer.find(".fc-infowindow-default").length === 0 &&
8982      $outer.find(".fc-item-default").length === 0 &&
8983      $outer.find(".wpgmp_infowindow").length > 0;
8984
8985    //accordian
8986      $outer.on('click', ".fc-accordion-tab", function () {
8987          if ($(this).hasClass('active')) {
8988              $(this).removeClass('active');
8989              var acc_child = $(this).next().removeClass('active');
8990          } else {
8991              $(".fc-accordion-tab").removeClass('active');
8992              $(".fc-accordion dd").removeClass('active');
8993              $(this).addClass('active');
8994              var acc_child = $(this).next().addClass('active');
8995          }
8996      });
8997
8998    if (needsSkin) {
8999      $outer.find(".wpgmp_infowindow").prepend('<div class="infowindow-close"></div>');
9000
9001      $(".infowindow-close").click(() => {
9002        map_obj.places?.forEach((place) => {
9003          place.infowindow?.close();
9004          place.marker?.setAnimation(null);
9005        });
9006      });
9007
9008      if (
9009        $outer.find(".fc-infowindow-fano").length === 0 &&
9010        $outer.find(".fc-item-fano").length === 0
9011      ) {
9012        $outer.addClass("infoBoxTail");
9013      } else {
9014        $outer.removeClass("infoBoxTail");
9015      }
9016    }
9017  });
9018
9019}
9020
9021    wpgmpInitializeInfoBox() {
9022      var InfoBox = function (opt_opts) {
9023        opt_opts = opt_opts || {};
9024
9025        google.maps.OverlayView.apply(this, arguments);
9026
9027        // Standard options (in common with google.maps.InfoWindow):
9028        //
9029        this.content_ = opt_opts.content || "";
9030        this.disableAutoPan_ = opt_opts.disableAutoPan || false;
9031        this.maxWidth_ = opt_opts.maxWidth || 0;
9032        this.pixelOffset_ = opt_opts.pixelOffset || new google.maps.Size(0, 0);
9033        this.position_ = opt_opts.position || new google.maps.LatLng(0, 0);
9034        this.zIndex_ = opt_opts.zIndex || null;
9035
9036        // Additional options (unique to InfoBox):
9037        //
9038        this.boxClass_ = opt_opts.boxClass || "infoBox";
9039        this.boxStyle_ = opt_opts.boxStyle || {};
9040        this.closeBoxMargin_ = opt_opts.closeBoxMargin || "2px";
9041        this.closeBoxURL_ =
9042          opt_opts.closeBoxURL ||
9043          "//www.google.com/intl/en_us/mapfiles/close.gif";
9044        if (opt_opts.closeBoxURL === "") {
9045          this.closeBoxURL_ = "";
9046        }
9047        this.closeBoxTitle_ = opt_opts.closeBoxTitle || " Close ";
9048        this.infoBoxClearance_ =
9049          opt_opts.infoBoxClearance || new google.maps.Size(1, 1);
9050
9051        if (typeof opt_opts.visible === "undefined") {
9052          if (typeof opt_opts.isHidden === "undefined") {
9053            opt_opts.visible = true;
9054          } else {
9055            opt_opts.visible = !opt_opts.isHidden;
9056          }
9057        }
9058        this.isHidden_ = !opt_opts.visible;
9059
9060        this.alignBottom_ = opt_opts.alignBottom || false;
9061        this.pane_ = opt_opts.pane || "floatPane";
9062        this.enableEventPropagation_ = opt_opts.enableEventPropagation || false;
9063
9064        this.div_ = null;
9065        this.closeListener_ = null;
9066        this.moveListener_ = null;
9067        this.contextListener_ = null;
9068        this.eventListeners_ = null;
9069        this.fixedWidthSet_ = null;
9070      };
9071
9072      InfoBox.prototype = new google.maps.OverlayView();
9073
9074      /**
9075       * Creates the DIV representing the InfoBox.
9076       * @private
9077       */
9078      InfoBox.prototype.createInfoBoxDiv_ = function () {
9079        var i;
9080        var events;
9081        var bw;
9082        var me = this;
9083
9084        // This handler prevents an event in the InfoBox from being passed on to the map.
9085        //
9086        var cancelHandler = function (e) {
9087          e.cancelBubble = true;
9088          if (e.stopPropagation) {
9089            e.stopPropagation();
9090          }
9091        };
9092
9093        // This handler ignores the current event in the InfoBox and conditionally prevents
9094        // the event from being passed on to the map. It is used for the contextmenu event.
9095        //
9096        var ignoreHandler = function (e) {
9097          e.returnValue = false;
9098
9099          if (e.preventDefault) {
9100            e.preventDefault();
9101          }
9102
9103          if (!me.enableEventPropagation_) {
9104            cancelHandler(e);
9105          }
9106        };
9107
9108        if (!this.div_) {
9109          this.div_ = document.createElement("div");
9110
9111          this.setBoxStyle_();
9112
9113          if (typeof this.content_.nodeType === "undefined") {
9114            this.div_.innerHTML = this.getCloseBoxImg_() + this.content_;
9115          } else {
9116            this.div_.innerHTML = this.getCloseBoxImg_();
9117            this.div_.appendChild(this.content_);
9118          }
9119
9120          // Add the InfoBox DIV to the DOM
9121          this.getPanes()[this.pane_].appendChild(this.div_);
9122
9123          this.addClickHandler_();
9124
9125          if (this.div_.style.width) {
9126            this.fixedWidthSet_ = true;
9127          } else {
9128            if (
9129              this.maxWidth_ !== 0 &&
9130              this.div_.offsetWidth > this.maxWidth_
9131            ) {
9132              this.div_.style.width = this.maxWidth_;
9133              this.div_.style.overflow = "auto";
9134              this.fixedWidthSet_ = true;
9135            } else {
9136              // The following code is needed to overcome problems with MSIE
9137
9138              bw = this.getBoxWidths_();
9139
9140              this.div_.style.width =
9141                this.div_.offsetWidth - bw.left - bw.right + "px";
9142              this.fixedWidthSet_ = false;
9143            }
9144          }
9145
9146          this.panBox_(this.disableAutoPan_);
9147
9148          if (!this.enableEventPropagation_) {
9149            this.eventListeners_ = [];
9150
9151            // Cancel event propagation.
9152            //
9153            // Note: mousemove not included (to resolve Issue 152)
9154            events = [
9155              "mousedown",
9156              "mouseover",
9157              "mouseout",
9158              "mouseup",
9159              "click",
9160              "dblclick",
9161              "touchstart",
9162              "touchend",
9163              "touchmove",
9164            ];
9165
9166            for (i = 0; i < events.length; i++) {
9167              this.eventListeners_.push(
9168                this.div_.addEventListener(
9169                  events[i],
9170                  cancelHandler
9171                )
9172              );
9173            }
9174
9175            // Workaround for Google bug that causes the cursor to change to a pointer
9176            // when the mouse moves over a marker underneath InfoBox.
9177            this.eventListeners_.push(
9178              this.div_.addEventListener(
9179                "mouseover",
9180                function (e) {
9181                  this.style.cursor = "default";
9182                }
9183              )
9184            );
9185          }
9186
9187          this.contextListener_ = this.div_.addEventListener(
9188            "contextmenu",
9189            ignoreHandler
9190          );
9191
9192          /**
9193           * This event is fired when the DIV containing the InfoBox's content is attached to the DOM.
9194           * @name InfoBox#domready
9195           * @event
9196           */
9197          google.maps.event.trigger(this, "domready");
9198        }
9199      };
9200
9201      /**
9202       * Returns the HTML <IMG> tag for the close box.
9203       * @private
9204       */
9205      InfoBox.prototype.getCloseBoxImg_ = function () {
9206        var img = "";
9207
9208        if (this.closeBoxURL_ !== "") {
9209          img = "<img";
9210          img += " src='" + this.closeBoxURL_ + "'";
9211          img += " align=right"; // Do this because Opera chokes on style='float: right;'
9212          img += " title='" + this.closeBoxTitle_ + "'";
9213          img += " style='";
9214          img += " position: relative;"; // Required by MSIE
9215          img += " cursor: pointer;";
9216          img += " margin: " + this.closeBoxMargin_ + ";";
9217          img += "'>";
9218        }
9219
9220        return img;
9221      };
9222
9223      /**
9224       * Adds the click handler to the InfoBox close box.
9225       * @private
9226       */
9227      InfoBox.prototype.addClickHandler_ = function () {
9228        var closeBox;
9229
9230        if (this.closeBoxURL_ !== "") {
9231          closeBox = this.div_.firstChild;
9232          this.closeListener_ = closeBox.addEventListener(
9233            "click",
9234            this.getCloseClickHandler_()
9235          );
9236        } else {
9237          this.closeListener_ = null;
9238        }
9239      };
9240
9241      /**
9242       * Returns the function to call when the user clicks the close box of an InfoBox.
9243       * @private
9244       */
9245      InfoBox.prototype.getCloseClickHandler_ = function () {
9246        var me = this;
9247
9248        return function (e) {
9249          // 1.0.3 fix: Always prevent propagation of a close box click to the map:
9250          e.cancelBubble = true;
9251
9252          if (e.stopPropagation) {
9253            e.stopPropagation();
9254          }
9255
9256          /**
9257           * This event is fired when the InfoBox's close box is clicked.
9258           * @name InfoBox#closeclick
9259           * @event
9260           */
9261          google.maps.event.trigger(me, "closeclick");
9262
9263          me.close();
9264        };
9265      };
9266
9267      /**
9268       * Pans the map so that the InfoBox appears entirely within the map's visible area.
9269       * @private
9270       */
9271      InfoBox.prototype.panBox_ = function (disablePan) {
9272        var map;
9273        var bounds;
9274        var xOffset = 0,
9275          yOffset = 0;
9276
9277        if (!disablePan) {
9278          map = this.getMap();
9279
9280          if (map instanceof google.maps.Map) {
9281            // Only pan if attached to map, not panorama
9282
9283            if (!map.getBounds().contains(this.position_)) {
9284              // Marker not in visible area of map, so set center
9285              // of map to the marker position first.
9286              map.setCenter(this.position_);
9287            }
9288
9289            var iwOffsetX = this.pixelOffset_.width;
9290            var iwOffsetY = this.pixelOffset_.height;
9291            var iwWidth = this.div_.offsetWidth;
9292            var iwHeight = this.div_.offsetHeight;
9293            var padX = this.infoBoxClearance_.width;
9294            var padY = this.infoBoxClearance_.height;
9295
9296            if (map.panToBounds.length == 2) {
9297              // Using projection.fromLatLngToContainerPixel to compute the infowindow position
9298              // does not work correctly anymore for JS Maps API v3.32 and above if there is a
9299              // previous synchronous call that causes the map to animate (e.g. setCenter when
9300              // the position is not within bounds). Hence, we are using panToBounds with
9301              // padding instead, which works synchronously.
9302              var padding = {
9303                left: 0,
9304                right: 0,
9305                top: 0,
9306                bottom: 0,
9307              };
9308              padding.left = -iwOffsetX + padX;
9309              padding.right = iwOffsetX + iwWidth + padX;
9310              if (this.alignBottom_) {
9311                padding.top = -iwOffsetY + padY + iwHeight;
9312                padding.bottom = iwOffsetY + padY;
9313              } else {
9314                padding.top = -iwOffsetY + padY;
9315                padding.bottom = iwOffsetY + iwHeight + padY;
9316              }
9317              map.panToBounds(
9318                new google.maps.LatLngBounds(this.position_),
9319                padding
9320              );
9321            } else {
9322              var mapDiv = map.getDiv();
9323              var mapWidth = mapDiv.offsetWidth;
9324              var mapHeight = mapDiv.offsetHeight;
9325              var pixPosition = this.getProjection().fromLatLngToContainerPixel(
9326                this.position_
9327              );
9328
9329              if (pixPosition.x < -iwOffsetX + padX) {
9330                xOffset = pixPosition.x + iwOffsetX - padX;
9331              } else if (
9332                pixPosition.x + iwWidth + iwOffsetX + padX >
9333                mapWidth
9334              ) {
9335                xOffset = pixPosition.x + iwWidth + iwOffsetX + padX - mapWidth;
9336              }
9337              if (this.alignBottom_) {
9338                if (pixPosition.y < -iwOffsetY + padY + iwHeight) {
9339                  yOffset = pixPosition.y + iwOffsetY - padY - iwHeight;
9340                } else if (pixPosition.y + iwOffsetY + padY > mapHeight) {
9341                  yOffset = pixPosition.y + iwOffsetY + padY - mapHeight;
9342                }
9343              } else {
9344                if (pixPosition.y < -iwOffsetY + padY) {
9345                  yOffset = pixPosition.y + iwOffsetY - padY;
9346                } else if (
9347                  pixPosition.y + iwHeight + iwOffsetY + padY >
9348                  mapHeight
9349                ) {
9350                  yOffset =
9351                    pixPosition.y + iwHeight + iwOffsetY + padY - mapHeight;
9352                }
9353              }
9354
9355              if (!(xOffset === 0 && yOffset === 0)) {
9356                // Move the map to the shifted center.
9357                //
9358                var c = map.getCenter();
9359                map.panBy(xOffset, yOffset);
9360              }
9361            }
9362          }
9363        }
9364      };
9365
9366      /**
9367       * Sets the style of the InfoBox by setting the style sheet and applying
9368       * other specific styles requested.
9369       * @private
9370       */
9371      InfoBox.prototype.setBoxStyle_ = function () {
9372        var i, boxStyle;
9373
9374        if (this.div_) {
9375          // Apply style values from the style sheet defined in the boxClass parameter:
9376          this.div_.className = this.boxClass_;
9377
9378          // Clear existing inline style values:
9379          this.div_.style.cssText = "";
9380
9381          // Apply style values defined in the boxStyle parameter:
9382          boxStyle = this.boxStyle_;
9383          for (i in boxStyle) {
9384            if (boxStyle.hasOwnProperty(i)) {
9385              this.div_.style[i] = boxStyle[i];
9386            }
9387          }
9388
9389          // Fix for iOS disappearing InfoBox problem.
9390          // See http://stackoverflow.com/questions/9229535/google-maps-markers-disappear-at-certain-zoom-level-only-on-iphone-ipad
9391          // Required: use "matrix" technique to specify transforms in order to avoid this bug.
9392          if (
9393            typeof this.div_.style.WebkitTransform === "undefined" ||
9394            (this.div_.style.WebkitTransform.indexOf("translateZ") === -1 &&
9395              this.div_.style.WebkitTransform.indexOf("matrix") === -1)
9396          ) {
9397            this.div_.style.WebkitTransform = "translateZ(0)";
9398          }
9399
vendor: 6,831 bytes, lines 9400-9598
9400          // Fix up opacity style for benefit of MSIE:
9401          //
9402          if (
9403            typeof this.div_.style.opacity !== "undefined" &&
9404            this.div_.style.opacity !== ""
9405          ) {
9406            // See http://www.quirksmode.org/css/opacity.html
9407            this.div_.style.MsFilter =
9408              '"progid:DXImageTransform.Microsoft.Alpha(Opacity=' +
9409              this.div_.style.opacity * 100 +
9410              ')"';
9411            this.div_.style.filter =
9412              "alpha(opacity=" + this.div_.style.opacity * 100 + ")";
9413          }
9414
9415          // Apply required styles:
9416          //
9417          this.div_.style.position = "absolute";
9418          this.div_.style.visibility = "hidden";
9419          if (this.zIndex_ !== null) {
9420            this.div_.style.zIndex = this.zIndex_;
9421          }
9422        }
9423      };
9424
9425      /**
9426       * Get the widths of the borders of the InfoBox.
9427       * @private
9428       * @return {Object} widths object (top, bottom left, right)
9429       */
9430      InfoBox.prototype.getBoxWidths_ = function () {
9431        var computedStyle;
9432        var bw = {
9433          top: 0,
9434          bottom: 0,
9435          left: 0,
9436          right: 0,
9437        };
9438        var box = this.div_;
9439
9440        if (document.defaultView && document.defaultView.getComputedStyle) {
9441          computedStyle = box.ownerDocument.defaultView.getComputedStyle(
9442            box,
9443            ""
9444          );
9445
9446          if (computedStyle) {
9447            // The computed styles are always in pixel units (good!)
9448            bw.top = parseInt(computedStyle.borderTopWidth, 10) || 0;
9449            bw.bottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;
9450            bw.left = parseInt(computedStyle.borderLeftWidth, 10) || 0;
9451            bw.right = parseInt(computedStyle.borderRightWidth, 10) || 0;
9452          }
9453        } else if (document.documentElement.currentStyle) {
9454          // MSIE
9455
9456          if (box.currentStyle) {
9457            // The current styles may not be in pixel units, but assume they are (bad!)
9458            bw.top = parseInt(box.currentStyle.borderTopWidth, 10) || 0;
9459            bw.bottom = parseInt(box.currentStyle.borderBottomWidth, 10) || 0;
9460            bw.left = parseInt(box.currentStyle.borderLeftWidth, 10) || 0;
9461            bw.right = parseInt(box.currentStyle.borderRightWidth, 10) || 0;
9462          }
9463        }
9464
9465        return bw;
9466      };
9467
9468      /**
9469       * Invoked when <tt>close</tt> is called. Do not call it directly.
9470       */
9471      InfoBox.prototype.onRemove = function () {
9472        if (this.div_) {
9473          this.div_.parentNode.removeChild(this.div_);
9474          this.div_ = null;
9475        }
9476      };
9477
9478      /**
9479       * Draws the InfoBox based on the current map projection and zoom level.
9480       */
9481      InfoBox.prototype.draw = function () {
9482        this.createInfoBoxDiv_();
9483
9484        var pixPosition = this.getProjection().fromLatLngToDivPixel(
9485          this.position_
9486        );
9487
9488        this.div_.style.left = pixPosition.x + this.pixelOffset_.width + "px";
9489
9490        if (this.alignBottom_) {
9491          this.div_.style.bottom =
9492            -(pixPosition.y + this.pixelOffset_.height) + "px";
9493        } else {
9494          this.div_.style.top = pixPosition.y + this.pixelOffset_.height + "px";
9495        }
9496
9497        if (this.isHidden_) {
9498          this.div_.style.visibility = "hidden";
9499        } else {
9500          this.div_.style.visibility = "visible";
9501        }
9502      };
9503
9504      /**
9505       * Sets the options for the InfoBox. Note that changes to the <tt>maxWidth</tt>,
9506       *  <tt>closeBoxMargin</tt>, <tt>closeBoxTitle</tt>, <tt>closeBoxURL</tt>, and
9507       *  <tt>enableEventPropagation</tt> properties have no affect until the current
9508       *  InfoBox is <tt>close</tt>d and a new one is <tt>open</tt>ed.
9509       * @param {InfoBoxOptions} opt_opts
9510       */
9511      InfoBox.prototype.setOptions = function (opt_opts) {
9512        if (typeof opt_opts.boxClass !== "undefined") {
9513          // Must be first
9514
9515          this.boxClass_ = opt_opts.boxClass;
9516          this.setBoxStyle_();
9517        }
9518        if (typeof opt_opts.boxStyle !== "undefined") {
9519          // Must be second
9520
9521          this.boxStyle_ = opt_opts.boxStyle;
9522          this.setBoxStyle_();
9523        }
9524        if (typeof opt_opts.content !== "undefined") {
9525          this.setContent(opt_opts.content);
9526        }
9527        if (typeof opt_opts.disableAutoPan !== "undefined") {
9528          this.disableAutoPan_ = opt_opts.disableAutoPan;
9529        }
9530        if (typeof opt_opts.maxWidth !== "undefined") {
9531          this.maxWidth_ = opt_opts.maxWidth;
9532        }
9533        if (typeof opt_opts.pixelOffset !== "undefined") {
9534          this.pixelOffset_ = opt_opts.pixelOffset;
9535        }
9536        if (typeof opt_opts.alignBottom !== "undefined") {
9537          this.alignBottom_ = opt_opts.alignBottom;
9538        }
9539        if (typeof opt_opts.position !== "undefined") {
9540          this.setPosition(opt_opts.position);
9541        }
9542        if (typeof opt_opts.zIndex !== "undefined") {
9543          this.setZIndex(opt_opts.zIndex);
9544        }
9545        if (typeof opt_opts.closeBoxMargin !== "undefined") {
9546          this.closeBoxMargin_ = opt_opts.closeBoxMargin;
9547        }
9548        if (typeof opt_opts.closeBoxURL !== "undefined") {
9549          this.closeBoxURL_ = opt_opts.closeBoxURL;
9550        }
9551        if (typeof opt_opts.closeBoxTitle !== "undefined") {
9552          this.closeBoxTitle_ = opt_opts.closeBoxTitle;
9553        }
9554        if (typeof opt_opts.infoBoxClearance !== "undefined") {
9555          this.infoBoxClearance_ = opt_opts.infoBoxClearance;
9556        }
9557        if (typeof opt_opts.isHidden !== "undefined") {
9558          this.isHidden_ = opt_opts.isHidden;
9559        }
9560        if (typeof opt_opts.visible !== "undefined") {
9561          this.isHidden_ = !opt_opts.visible;
9562        }
9563        if (typeof opt_opts.enableEventPropagation !== "undefined") {
9564          this.enableEventPropagation_ = opt_opts.enableEventPropagation;
9565        }
9566
9567        if (this.div_) {
9568          this.draw();
9569        }
9570      };
9571
9572      /**
9573       * Sets the content of the InfoBox.
9574       *  The content can be plain text or an HTML DOM node.
9575       * @param {string|Node} content
9576       */
9577      InfoBox.prototype.setContent = function (content) {
9578        this.content_ = content;
9579
9580        if (this.div_) {
9581          if (this.closeListener_) {
9582            google.maps.event.removeListener(this.closeListener_);
9583            this.closeListener_ = null;
9584          }
9585
9586          // Odd code required to make things work with MSIE.
9587          //
9588          if (!this.fixedWidthSet_) {
9589            this.div_.style.width = "";
9590          }
9591
9592          if (typeof content.nodeType === "undefined") {
9593            this.div_.innerHTML = this.getCloseBoxImg_() + content;
9594          } else {
9595            this.div_.innerHTML = this.getCloseBoxImg_();
9596            this.div_.appendChild(content);
9597          }
9598
9599          // Perverse code required to make things work with MSIE.
9600          // (Ensures the close box does, in fact, float to the right.)
9601          //
9602          if (!this.fixedWidthSet_) {
9603            this.div_.style.width = this.div_.offsetWidth + "px";
9604            if (typeof content.nodeType === "undefined") {
9605              this.div_.innerHTML = this.getCloseBoxImg_() + content;
9606            } else {
9607              this.div_.innerHTML = this.getCloseBoxImg_();
9608              this.div_.appendChild(content);
9609            }
9610          }
9611
9612          this.addClickHandler_();
9613        }
9614
9615        /**
9616         * This event is fired when the content of the InfoBox changes.
9617         * @name InfoBox#content_changed
9618         * @event
9619         */
9620        google.maps.event.trigger(this, "content_changed");
9621      };
9622
9623      /**
9624       * Sets the geographic location of the InfoBox.
9625       * @param {LatLng} latlng
9626       */
9627      InfoBox.prototype.setPosition = function (latlng) {
9628        this.position_ = latlng;
9629
9630        if (this.div_) {
9631          this.draw();
9632        }
9633
9634        /**
9635         * This event is fired when the position of the InfoBox changes.
9636         * @name InfoBox#position_changed
9637         * @event
9638         */
9639        google.maps.event.trigger(this, "position_changed");
9640      };
9641
9642      /**
9643       * Sets the zIndex style for the InfoBox.
9644       * @param {number} index
9645       */
9646      InfoBox.prototype.setZIndex = function (index) {
9647        this.zIndex_ = index;
9648
9649        if (this.div_) {
9650          this.div_.style.zIndex = index;
9651        }
9652
9653        /**
9654         * This event is fired when the zIndex of the InfoBox changes.
9655         * @name InfoBox#zindex_changed
9656         * @event
9657         */
9658        google.maps.event.trigger(this, "zindex_changed");
9659      };
9660
9661      /**
9662       * Sets the visibility of the InfoBox.
9663       * @param {boolean} isVisible
9664       */
9665      InfoBox.prototype.setVisible = function (isVisible) {
9666        this.isHidden_ = !isVisible;
9667        if (this.div_) {
9668          this.div_.style.visibility = this.isHidden_ ? "hidden" : "visible";
9669        }
9670      };
9671
9672      /**
9673       * Returns the content of the InfoBox.
9674       * @returns {string}
9675       */
9676      InfoBox.prototype.getContent = function () {
9677        return this.content_;
9678      };
9679
9680      /**
9681       * Returns the geographic location of the InfoBox.
9682       * @returns {LatLng}
9683       */
9684      InfoBox.prototype.getPosition = function () {
9685        return this.position_;
9686      };
9687
9688      /**
9689       * Returns the zIndex for the InfoBox.
9690       * @returns {number}
9691       */
9692      InfoBox.prototype.getZIndex = function () {
9693        return this.zIndex_;
9694      };
9695
9696      /**
9697       * Returns a flag indicating whether the InfoBox is visible.
9698       * @returns {boolean}
9699       */
9700      InfoBox.prototype.getVisible = function () {
9701        var isVisible;
9702
9703        if (typeof this.getMap() === "undefined" || this.getMap() === null) {
9704          isVisible = false;
9705        } else {
9706          isVisible = !this.isHidden_;
9707        }
9708        return isVisible;
9709      };
9710
9711      /**
9712       * Returns the width of the InfoBox in pixels.
9713       * @returns {number}
9714       */
9715      InfoBox.prototype.getWidth = function () {
9716        var width = null;
9717
9718        if (this.div_) {
9719          width = this.div_.offsetWidth;
9720        }
9721
9722        return width;
9723      };
9724
9725      /**
9726       * Returns the height of the InfoBox in pixels.
9727       * @returns {number}
9728       */
9729      InfoBox.prototype.getHeight = function () {
9730        var height = null;
9731
9732        if (this.div_) {
9733          height = this.div_.offsetHeight;
9734        }
9735
9736        return height;
9737      };
9738
9739      /**
9740       * Shows the InfoBox. [Deprecated; use <tt>setVisible</tt> instead.]
9741       */
9742      InfoBox.prototype.show = function () {
9743        this.isHidden_ = false;
9744        if (this.div_) {
9745          this.div_.style.visibility = "visible";
9746        }
9747      };
9748
9749      /**
9750       * Hides the InfoBox. [Deprecated; use <tt>setVisible</tt> instead.]
9751       */
9752      InfoBox.prototype.hide = function () {
9753        this.isHidden_ = true;
9754        if (this.div_) {
9755          this.div_.style.visibility = "hidden";
9756        }
9757      };
9758
9759      /**
9760       * Adds the InfoBox to the specified map or Street View panorama. If <tt>anchor</tt>
9761       *  (usually a <tt>google.maps.Marker</tt>) is specified, the position
9762       *  of the InfoBox is set to the position of the <tt>anchor</tt>. If the
9763       *  anchor is dragged to a new location, the InfoBox moves as well.
9764       * @param {Map|StreetViewPanorama} map
9765       * @param {MVCObject} [anchor]
9766       */
9767      InfoBox.prototype.open = function (map, anchor) {
9768        var me = this;
9769
9770        if (anchor) {
9771          this.setPosition(anchor.getPosition()); // BUG FIX 2/17/2018: needed for v3.32
9772          this.moveListener_ = google.maps.event.addListener(
9773            anchor,
9774            "position_changed",
9775            function () {
9776              me.setPosition(this.getPosition());
9777            }
9778          );
9779        }
9780
9781        this.setMap(map);
9782
9783        if (this.div_) {
9784          this.panBox_(this.disableAutoPan_); // BUG FIX 2/17/2018: add missing parameter
9785        }
9786      };
9787
9788      /**
9789       * Removes the InfoBox from the map.
9790       */
9791      InfoBox.prototype.close = function () {
9792        var i;
9793
9794        if (this.closeListener_) {
9795          google.maps.event.removeListener(this.closeListener_);
9796          this.closeListener_ = null;
9797        }
9798
9799        if (this.eventListeners_) {
9800          for (i = 0; i < this.eventListeners_.length; i++) {
9801            google.maps.event.removeListener(this.eventListeners_[i]);
9802          }
9803          this.eventListeners_ = null;
9804        }
9805
9806        if (this.moveListener_) {
9807          google.maps.event.removeListener(this.moveListener_);
9808          this.moveListener_ = null;
9809        }
9810
9811        if (this.contextListener_) {
9812          google.maps.event.removeListener(this.contextListener_);
9813          this.contextListener_ = null;
9814        }
9815
9816        this.setMap(null);
9817      };
9818
9819      return new InfoBox();
9820    }
9821  }
9822
9823  window.WpgmpGoogleMaps = WpgmpGoogleMaps;
9824})(jQuery, window, document);
9825
9826/**
9827 * WpgmpLeafletMaps class - extends BaseMaps for Leaflet provider.
9828 */
9829
9830(function ($, window, document) {
9831  class WpgmpLeafletMaps extends WpgmpBaseMaps {
9832    constructor(element, map_data = {}, places = []) {
9833      super(element, map_data, places);
9834
9835      const options = this.map_data.map_options;
9836      this.settings = $.extend(
9837        {
9838          min_zoom: "0",
9839
9840          max_zoom: "19",
9841
9842          zoom: "5",
9843
9844          map_type_id: "mapbox.streets",
9845
9846          scroll_wheel: true,
9847
9848          map_visual_refresh: false,
9849
9850          full_screen_control: false,
9851
9852          full_screen_control_position: "bottomright",
9853
9854          zoom_control: true,
9855
9856          zoom_control_style: "SMALL",
9857
9858          zoom_control_position: "topleft",
9859
9860          map_type_control: true,
9861
9862          map_type_control_style: "HORIZONTAL_BAR",
9863
9864          map_type_control_position: "topright",
9865
9866          scale_control: true,
9867
9868          overview_map_control: true,
9869
9870          center_lat: "40.6153983",
9871
9872          center_lng: "-74.2535216",
9873
9874          draggable: true,
9875
9876          gesture: "auto",
9877
9878          infowindow_open_event: "click",
9879          map_tile_url: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
9880          search_control: false,
9881          locateme_control: false,
9882          map_type_control: false,
9883        },
9884        {},
9885        options
9886      );
9887
9888      this.container = $("div[rel='" + $(this.element).attr("id") + "']");
9889
9890      this.places = [];
9891
9892      this.show_places = [];
9893
9894      this.categories = {};
9895
9896      this.tabs = [];
9897
9898      this.per_page_value = 0;
9899
9900      this.last_remove_cat_id = "";
9901
9902      this.last_selected_cat_id = "";
9903
9904      this.last_category_chkbox_action = "";
9905
9906      this.search_area = "";
9907
9908      this.url_filters = [];
9909
9910      this.mbAttr =
9911        '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>';
9912
9913      this.mbURL = "";
9914
9915      this.isMobile = false;
9916
9917      this.bingmaplayers = {};
9918      this.infowindow_marker = L.popup({
9919        closeOnClick: this.settings.close_infowindow_on_map_click === true,
9920      });
9921    }
9922
9923    /**
9924     * Initializes and renders the Leaflet map with full configuration.
9925     *
9926     * Breakdown of steps:
9927     * 1. Device & screen detection with mobile-specific settings
9928     * 2. Leaflet map initialization using selected provider (Mapbox, or Custom Tile)
9929     * 3. Adds common map controls (zoom, scale, fullscreen, locate)
9930     * 4. Registers dynamic map style switchers and dropdown UI controls
9931     * 5. Builds and displays markers, adjusts layout responsively
9932     * 6. Sets up listings, filtering, sorting, and pagination
9933     * 7. Handles GeoJSON, marker interactions, and scroll-to behavior
9934     * 8. Configures category/location tabs, filter checkboxes, and dynamic content toggles
9935     * 9. Enables accordion UI, autosuggest search, and direction panel logic
9936     * 10. Registers all final event listeners (print, radius change, per-page switch, etc.)
9937     */
9938
9939    init() {
9940      const map_obj = this;
9941
9942      // Fix default Leaflet marker icon path
9943      delete L.Icon.Default.prototype._getIconUrl;
9944
9945      L.Icon.Default.mergeOptions({
9946        iconRetinaUrl: wpgmp_local.default_marker_icon,
9947        iconUrl: wpgmp_local.default_marker_icon,
9948        shadowUrl: wpgmp_local.default_marker_icon,
9949      });
9950
9951      // --------------------------------------------------
9952      // 1. Device Detection and Responsive Settings
9953      // --------------------------------------------------
9954      const screenWidth = $(window).width();
9955      const screenType =
9956        screenWidth <= 480
9957          ? "smartphones"
9958          : screenWidth <= 768
9959          ? "ipads"
9960          : screenWidth >= 1824
9961          ? "large-screens"
9962          : "desktop";
9963
9964      map_obj.isMobile =
9965        screenType !== "desktop" && map_obj.settings.mobile_specific === true;
9966
9967      if (map_obj.isMobile) {
9968        const screenConfig = map_obj.settings.screens?.[screenType];
9969
9970        if (screenConfig) {
9971          Object.assign(map_obj.settings, {
9972            width_mobile: screenConfig.map_width_mobile,
9973            height_mobile: screenConfig.map_height_mobile,
9974            zoom: parseInt(screenConfig.map_zoom_level_mobile),
9975            draggable: screenConfig.map_draggable_mobile !== "false",
9976            scroll_wheel: screenConfig.map_scrolling_wheel_mobile !== "false",
9977          });
9978        } else {
9979          map_obj.settings.width_mobile = "";
9980          map_obj.settings.height_mobile = "";
9981        }
9982
9983        if (map_obj.settings.width_mobile)
9984          $(map_obj.element).css("width", map_obj.settings.width_mobile);
9985
9986        if (map_obj.settings.height_mobile)
9987          $(map_obj.element).css("height", map_obj.settings.height_mobile);
9988      }
9989
9990      // --------------------------------------------------
9991      // 2. Map Options
9992      // --------------------------------------------------
9993      const center = L.latLng(
9994        map_obj.settings.center_lat,
9995        map_obj.settings.center_lng
9996      );
9997
9998      const options = {
9999        center,
10000        zoom: parseInt(map_obj.settings.zoom),
10001        minZoom: parseInt(map_obj.settings.min_zoom),
10002        maxZoom: parseInt(map_obj.settings.max_zoom),
10003        scrollWheelZoom: map_obj.settings.scroll_wheel !== "true",
10004        doubleClickZoom: map_obj.settings.doubleclickzoom === true,
10005        dragging: map_obj.settings.draggable,
10006        zoomControl: false,
10007        attributionControl: map_obj.settings.attribution_screen_control,
10008        closePopupOnClick:
10009          map_obj.settings.close_infowindow_on_map_click === true,
10010      };
10011
10012      // --------------------------------------------------
10013      // 3. Map Provider Setup
10014      // --------------------------------------------------
10015      const provider =
10016        map_obj.settings.tiles_provider ||
10017        wpgmp_local.tiles_provider ||
10018        "OpenStreetMap.Mapnik";
10019      const mapElement = map_obj.element;
10020      try {
10021        // Special case: Bing Maps (not supported by Leaflet Providers)
10022        try {
10023          // Special case: Bing Maps (not in Leaflet Providers)
10024          if (provider === "bingmap" && wpgmp_local.wpomp_bingmap_key) {
10025            const apiKey = wpgmp_local.wpomp_bingmap_key;
10026            const defaults = { key: apiKey, detectRetina: true };
10027            map_obj.bingmaplayers = {};
10028
10029            [
10030              "Aerial",
10031              "AerialWithLabelsOnDemand",
10032              "RoadOnDemand",
10033              "CanvasDark",
10034              "CanvasLight",
10035              "CanvasGray",
10036            ].forEach((type) => {
10037              map_obj.bingmaplayers[type] = L.bingLayer({
10038                ...defaults,
10039                imagerySet: type,
10040              });
10041            });
10042
10043            map_obj.bingmaplayers["CanvasGray"].addTo(map_obj.map);
10044          }
10045          // Standard Leaflet Providers support nested "BasemapAT.grau", "CartoDB.Positron", etc.
10046          else {
10047            map_obj.map = L.map(mapElement, options);
10048            L.tileLayer
10049              .provider(provider, { accessToken: wpgmp_local.wpgmp_mapbox_key })
10050              .addTo(map_obj.map);
10051          }
10052        } catch (error) {
10053          console.error(
10054            "Error loading map tiles from provider:",
10055            provider,
10056            error
10057          );
10058        }
10059      } catch (error) {
10060        console.error("Error initializing tile layer:", error);
10061      }
10062
10063      // --------------------------------------------------
10064      // 4. Controls (Zoom, Scale, Fullscreen, Locate)
10065      // --------------------------------------------------
10066      if (map_obj.settings.scale_control) {
10067        L.control.scale({ position: "bottomleft" }).addTo(map_obj.map);
10068      }
10069
10070      if (map_obj.settings.zoom_control === true) {
10071        L.control
10072          .zoom({
10073            position: map_obj.settings.zoom_control_position,
10074          })
10075          .addTo(map_obj.map);
10076      }
10077
10078      if (map_obj.settings.full_screen_control === true) {
10079        map_obj.map.addControl(
10080          new L.Control.Fullscreen({
10081            position: map_obj.settings.full_screen_control_position,
10082          })
10083        );
10084      }
10085
10086      if (map_obj.map_data.page === "edit_location") {
10087        setTimeout(() => map_obj.map.invalidateSize(true), 300);
10088      }
10089
10090      // --------------------------------------------------
10091      // 5. Map Type Control / Style Dropdowns
10092      // --------------------------------------------------
10093      if (map_obj.settings.map_type_control) {
10094        let mapStylesMarkup = map_obj.settings.openstreet_styles_markup;
10095        if (provider === "mapbox")
10096          mapStylesMarkup = map_obj.settings.map_box_styles_markup;
10097
10098        const MapStyleControl = L.Control.extend({
10099          options: { position: map_obj.settings.map_type_control_position },
10100          onAdd() {
10101            const div = L.DomUtil.create("div", "info legend");
10102            div.innerHTML = mapStylesMarkup;
10103            div.firstChild.onmousedown = div.firstChild.ondblclick =
10104              L.DomEvent.stopPropagation;
10105            return div;
10106          },
10107        });
10108
10109        map_obj.map.addControl(new MapStyleControl());
10110
10111        // Map style dropdowns for providers
10112        $(document).on("change", "select.wpomp_map_type", function () {
10113          const config = map_obj.settings.openstreet_styles[$(this).val()];
10114          L.tileLayer(config, {
10115            maxZoom: parseInt(map_obj.settings.max_zoom),
10116          }).addTo(map_obj.map);
10117        });
10118
10119        $(document).on("change", "select.wpomp_mapbox_type", function () {
10120          const tile_url = `https://api.mapbox.com/styles/v1/mapbox/${$(
10121            this
10122          ).val()}/tiles/{z}/{x}/{y}?access_token=${
10123            wpgmp_local.wpgmp_mapbox_key
10124          }`;
10125          L.tileLayer(tile_url, {
10126            maxZoom: parseInt(map_obj.settings.max_zoom),
10127          }).addTo(map_obj.map);
10128        });
10129      }
10130
10131      // Further sections to be optimized next:
10132      // - Marker creation, listing integration, and filters
10133      // - Event bindings and route controls
10134      // --------------------------------------------------
10135      // 6. Marker Creation, Responsive Layout & Listings
10136      // --------------------------------------------------
10137
10138      // Create and display all markers
10139      map_obj.create_markers();
10140      map_obj.display_markers();
10141
10142      // Load Google Fonts if defined
10143      if (typeof map_obj.settings.google_fonts !== "undefined") {
10144        map_obj.load_google_fonts(map_obj.settings.google_fonts);
10145      }
10146
10147      // Capture initial HTML listing content for advanced template
10148      if (map_obj.map_data.map_options?.advance_template === true) {
10149        const listingEl = document.querySelector(
10150          '[data-listing-content="true"][data-wpgmp-map-id]'
10151        );
10152        if (listingEl?.innerHTML) {
10153          map_obj.map_data.listing.listing_placeholder = listingEl.innerHTML;
10154        }
10155      }
10156
10157      // Fire map loaded hook
10158      map_obj.map_loaded();
10159      // Adjust layout based on screen/mobile settings
10160      map_obj.responsive_map();
10161
10162      // Show search control box if enabled
10163      if (map_obj.settings.search_control === true) {
10164        map_obj.show_search_control();
10165      }
10166
10167      // Show locateme control if enabled
10168      if (map_obj.settings.locateme_control === true) {
10169        map_obj.register_locate_me_control();
10170      }
10171
10172      // Further sections to be optimized next:
10173      // - Listing pagination & sorting
10174      // - Filter UI and update handlers
10175      // - Tabs, accordions, events, and route direction logic
10176
10177      // --------------------------------------------------
10178      // 7. Listing Pagination, Sorting, and Filters
10179      // --------------------------------------------------
10180
10181      const listing = map_obj.map_data.listing;
10182
10183      // Sort default if defined
10184      if (listing?.default_sorting) {
10185        const sort = listing.default_sorting;
10186        const dataType = sort.orderby === "listorder" ? "num" : "";
10187        map_obj.sorting(sort.orderby, sort.inorder, dataType);
10188      }
10189
10190      // If no listing, but tab filters exist (e.g. category tab sorting)
10191      const tabs = map_obj.map_data.map_tabs;
10192      if (!listing && tabs?.category_tab?.cat_tab) {
10193        const catTab = tabs.category_tab;
10194        const order = catTab.cat_post_order ?? "asc";
10195        map_obj.sorting("title", order);
10196      }
10197
10198      // Pagination UI
10199      if (listing) {
10200        $(map_obj.container).on("click", ".categories_filter_reset_btn", () => {
10201          $(map_obj.container)
10202            .find(".wpgmp_filter_wrappers select")
10203            .each(function () {
10204              $(this).val($(this).find("option:first").val());
10205            });
10206
10207          $(".wpgmp_search_input").val("");
10208          map_obj.update_filters();
10209        });
10210
10211        // Custom filters
10212        map_obj.display_filters_listing();
10213        map_obj.custom_filters();
10214
10215        // Pagination plugin
10216        $(map_obj.container)
10217          .find(`.location_pagination${map_obj.map_data.map_property.map_id}`)
10218          .pagination(map_obj.show_places.length, {
10219            callback: map_obj.display_places_listing,
10220            map_data: map_obj,
10221            items_per_page: listing.pagination.listing_per_page,
10222            prev_text: wpgmp_local.prev,
10223            next_text: wpgmp_local.next,
10224          });
10225      }
10226
10227      // Further sections to be optimized next:
10228      // - Tabs, accordions, direction panels
10229      // - Marker detail click and scroll to view
10230      
10231      // --------------------------------------------------
10232      // 9. Accordion, Auto Suggest, Directions Panel, Events
10233      // --------------------------------------------------
10234
10235      $(map_obj.container)
10236        .find(".wpgmp-accordion")
10237        .accordion({ speed: "slow" });
10238
10239      map_obj.google_auto_suggest($(".wpgmp_auto_suggest"));
10240
10241      // --------------------------------------------------
10242      // 10. Final Event Registration
10243      // --------------------------------------------------
10244
10245      map_obj.register_events();
10246    }
10247
10248    event_listener(obj, type, func) {
10249      if (obj && typeof obj.on === "function") {
10250        obj.on(type, func);
10251      } else {
10252        console.warn("event_listener: .on() is not a function for", obj);
10253      }
10254    }
10255
10256    create_leaflet_marker({
10257      map,
10258      position, // [lat, lng]
10259      iconUrl = "",
10260      popupAnchor = [0, -30],
10261      draggable = false,
10262      title = "",
10263      isDivIcon = false,
10264      label = "",
10265      customClass = "wpgmp-custom-label-icon",
10266      addToMap = true,
10267    }) {
10268      var map_obj = this;
10269      let icon;
10270      var iconSize = map_obj.getMarkerSize();
10271
10272      if (!iconUrl || iconUrl.trim() === "") {
10273        iconUrl =
10274          map_obj.settings.marker_default_icon ||
10275          wpgmp_local.default_marker_icon;
10276      }
10277
10278      const isSvg = iconUrl.toLowerCase().includes('image/svg') || iconUrl.toLowerCase().endsWith('.svg');
10279
10280      if (isDivIcon) {
10281        const divIconOptions = {
10282          className: customClass,
10283          html: `<div class="wpgmp-marker-label">${label}</div>`,
10284        };
10285
10286        if (isSvg) {
10287          divIconOptions.iconSize = iconSize;
10288          divIconOptions.iconAnchor = [iconSize[0] / 2, iconSize[1] / 2];
10289        }
10290
10291      icon = L.divIcon(divIconOptions);
10292
10293      } else {
10294        const iconOptions = {
10295          iconUrl,
10296          iconAnchor: [iconSize[0] / 2, iconSize[1]],
10297          popupAnchor,
10298        };
10299
10300        // Only apply iconSize if SVG
10301        if (isSvg) {
10302          iconOptions.iconSize = iconSize;
10303        }
10304
10305        icon = L.icon(iconOptions);
10306
10307      }
10308
10309      const marker = L.marker(position, {
10310        icon,
10311        draggable,
10312        title,
10313      });
10314
10315      if (addToMap && map) {
10316        marker.addTo(map);
10317      }
10318
10319      return marker;
10320    }
10321
10322    map_loaded() {
10323      const map_obj = this;
10324      const map = map_obj.map;
10325
10326      // Center map using current location or static marker
10327      if (map_obj.settings.center_by_nearest === true) {
10328        map_obj.center_by_nearest();
10329      } else if (map_obj.settings.show_center_marker === true) {
10330        map_obj.show_center_marker();
10331      }
10332
10333      // Show center circle if manually positioned
10334      if (
10335        map_obj.settings.center_by_nearest === false &&
10336        map_obj.settings.show_center_circle === true
10337      ) {
10338        map_obj.show_center_circle();
10339      }
10340
10341      // Fit bounds to all markers if enabled
10342      if (map_obj.settings.fit_bounds === true) {
10343        map_obj.fit_bounds();
10344      }
10345
10346      function adjustLeafletPopup(popup) {
10347        const popupEl = popup.getElement();
10348        if (!popupEl) return;
10349
10350        const wrapper = popupEl.querySelector(".leaflet-popup-content-wrapper");
10351        const content = popupEl.querySelector(".leaflet-popup-content");
10352        const markerSize = map_obj.getMarkerSize?.() || [32, 32];
10353
10354        if (wrapper) {
10355          wrapper.classList.add("wpgmp-infowindow-addon");
10356          wrapper.removeAttribute("style");
10357        }
10358        if (content) {
10359          content.removeAttribute("style");
10360        }
10361
10362        // Calculate the popup width and center it
10363        const rect = popupEl.getBoundingClientRect();
10364        const width = rect.width || 200; // fallback if rect is 0
10365        popupEl.style.left = `-${width / 2}px`;
10366        popupEl.style.bottom = `${markerSize[1] / 2}px`;
10367      }
10368      
10369      
10370      // Remove inline styling for Leaflet popups and apply custom class
10371      map.on("popupopen", function (e) {
10372        adjustLeafletPopup(e.popup);
10373      });
10374
10375      map.on("zoomend", function () {
10376        const openPopup = map._popup; // Leaflet stores currently open popup here
10377        if (openPopup) {
10378          adjustLeafletPopup(openPopup);
10379        }
10380      });
10381      
10382
10383    }
10384  }
10385
10386  window.WpgmpLeafletMaps = WpgmpLeafletMaps;
10387})(jQuery, window, document);
10388
10389class WpgmpMapFactory {
10390  create(provider, element, options, places) {
10391    // Use fallback if provider is missing
10392    provider = provider || (options?.provider) || 'google';
10393    options.provider = provider; // enforce for downstream use
10394
10395    switch (provider.toLowerCase()) {
10396      case 'leaflet':
10397        return new WpgmpLeafletMaps(element, options, places);
10398      case 'google':
10399        return new WpgmpGoogleMaps(element, options, places);
10400      default:
10401        console.warn(`Unknown provider "${provider}". Falling back to Google Maps.`);
10402        return new WpgmpGoogleMaps(element, options, places);
10403    }
10404  }
10405}
10406(function ($, window, document) {
10407  "use strict";
10408
10409  $.fn.maps = function (options = {}, places = []) {
10410    return this.each(function () {
10411      const stepLabel = `[wpgmp/maps]`;
10412
10413      if (typeof options === 'string') {
10414        try {
10415          options = JSON.parse(atob(options));
10416          if (wpgmp_local.debug_mode) {
10417            console.log(`${stepLabel} [Step 1] Options decoded from base64`, options);
10418          }
10419        } catch (e) {
10420          console.error(`${stepLabel} [Step 1] Failed to decode options:`, e);
10421          options = {};
10422        }
10423      }
10424
10425      if (!$.data(this, "wpgmp_maps")) {
10426        let provider = wpgmp_local.map_provider || "google";
10427        if (provider !== "google") {
10428          provider = "leaflet";
10429        }
10430
10431        if (wpgmp_local.debug_mode) {
10432          console.log(`${stepLabel} [Step 2] Preparing to initialize map...`);
10433          console.log(`${stepLabel} Provider: ${provider}`);
10434          console.log(`${stepLabel} Target Element:`, this);
10435          console.log(`${stepLabel} Options:`, options);
10436        }
10437
10438        setTimeout(() => {
10439          const instance = new WpgmpMapFactory().create(provider, this, options, places);
10440          instance.init();
10441          $.data(this, "wpgmp_maps", instance);
10442
10443          if (wpgmp_local.debug_mode) {
10444            console.log(`${stepLabel} [Step 3] Map instance created and initialized.`);
10445          }
10446
10447          // 🔔 Internal event to signal complete readiness
10448          if (wpgmp_local.debug_mode) {
10449            console.log(`${stepLabel} [Step 4] Events dispatched: wpgmpInstanceReady, wpgmpLoaded`);
10450          }
10451          const internalEvent = new CustomEvent("wpgmpInstanceReady", {
10452            detail: { element: this, instance, provider },
10453          });
10454          document.dispatchEvent(internalEvent);
10455
10456          // External/public event
10457          const externalEvent = new CustomEvent("wpgmpLoaded", {
10458            detail: { element: this, instance, provider },
10459          });
10460          document.dispatchEvent(externalEvent);
10461
10462          
10463
10464        }, wpgmp_local.set_timeout);
10465      } else {
10466        if (wpgmp_local.debug_mode) {
10467          console.log(`${stepLabel} [Skipped] Map already initialized on element:`, this);
10468        }
10469      }
10470    });
10471  };
10472})(jQuery, window, document);
10473
10474function wpgmpInitMap() {
10475  jQuery(document).ready(function ($) {
10476    var stepLabel = `[wpgmpInitMap]`;
10477
10478    if (!$.fn.maps) {
10479      if (wpgmp_local.debug_mode) {
10480        console.warn(`${stepLabel} [Abort] $.fn.maps not defined`);
10481      }
10482      return;
10483    }
10484
10485    // ✅ STEP 1: Initialize each map
10486    $(".wpgmp_map").each(function () {
10487      stepLabel = `[wpgmpShowMap]`;
10488      const mapId = $(this).data("map-id");
10489      const mapVarName = "mapdata" + mapId;
10490      const mapData = window.wpgmp?.[mapVarName];
10491
10492      if (mapData) {
10493        if (wpgmp_local.debug_mode) {
10494          console.log(`${stepLabel} [Step 1] Map data found for ID: ${mapId}`);
10495        }
10496        $("#map" + mapId).maps(mapData);
10497      } else {
10498        if (wpgmp_local.debug_mode) {
10499          console.warn(`${stepLabel} [Step 1] Map data missing for ID: ${mapId}, retrying in ${wpgmp_local.set_timeout}ms...`);
10500        }
10501
10502        setTimeout(() => {
10503          const retryData = window.wpgmp?.[mapVarName];
10504          if (retryData) {
10505            if (wpgmp_local.debug_mode) {
10506              console.log(`${stepLabel} [Step 1] Retry succeeded for ID: ${mapId}`);
10507            }
10508            $("#map" + mapId).maps(retryData);
10509          } else {
10510            console.error(`${stepLabel} [Step 1] Retry failed: Map data still missing for ID: ${mapId}`);
10511          }
10512        }, wpgmp_local.set_timeout);
10513      }
10514    });
10515
10516    // ✅ STEP 2: Listen for internal complete signal
10517    document.addEventListener("wpgmpInstanceReady", function (e) {
10518      const { element, instance, provider } = e.detail;
10519      const mapId = $(element).data("map-id");
10520
10521      if (wpgmp_local.debug_mode) {
10522        console.log(`${stepLabel} [Step 2] Map fully initialized.`);
10523        console.log(`${stepLabel} Map ID: ${mapId}`);
10524        console.log(`${stepLabel} Provider: ${provider}`);
10525        console.log(`${stepLabel} Instance:`, instance);
10526      }
10527    });
10528
10529    // ✅ STEP 3: Dispatch global ready signal
10530    window.wpgmpInitialized = true;
10531    stepLabel = `[wpgmpInitMap]`;
10532    setTimeout(() => {
10533      if (wpgmp_local.debug_mode) {
10534        console.log(`${stepLabel} [Step 1] Global event dispatched: wpgmpReady`);
10535      }
10536      document.dispatchEvent(new Event("wpgmpReady"));
10537    }, wpgmp_local.set_timeout);
10538  });
10539}

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.