Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • geocontrib/geocontrib-frontend
  • ext_matthieu/geocontrib-frontend
  • fnecas/geocontrib-frontend
  • MatthieuE/geocontrib-frontend
4 results
Show changes
Showing
with 46 additions and 2421 deletions
public/img/icons/favicon.ico

15 KiB | W: 48px | H: 48px

public/img/icons/favicon.ico

15 KiB | W: 48px | H: 48px

public/img/icons/favicon.ico
public/img/icons/favicon.ico
public/img/icons/favicon.ico
public/img/icons/favicon.ico
  • 2-up
  • Swipe
  • Onion skin
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file
public/img/logo-geocontrib.png

156 KiB

public/img/logo-neogeo-circle.png

40.5 KiB | W: 0px | H: 0px

public/img/logo-neogeo-circle.png

120 KiB | W: 0px | H: 0px

public/img/logo-neogeo-circle.png
public/img/logo-neogeo-circle.png
public/img/logo-neogeo-circle.png
public/img/logo-neogeo-circle.png
  • 2-up
  • Swipe
  • Onion skin
public/img/logo_g2f.png

54.3 KiB

/* @preserve
* Leaflet Control Geocoder 1.13.0
* https://github.com/perliedman/leaflet-control-geocoder
*
* Copyright (c) 2012 sa3m (https://github.com/sa3m)
* Copyright (c) 2018 Per Liedman
* All rights reserved.
*/
this.L = this.L || {};
this.L.Control = this.L.Control || {};
this.L.Control.Geocoder = (function (L) {
'use strict';
L = L && Object.prototype.hasOwnProperty.call(L, 'default') ? L['default'] : L;
var lastCallbackId = 0;
// Adapted from handlebars.js
// https://github.com/wycats/handlebars.js/
var badChars = /[&<>"'`]/g;
var possible = /[&<>"'`]/;
var escape = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#x27;',
'`': '&#x60;'
};
function escapeChar(chr) {
return escape[chr];
}
function htmlEscape(string) {
if (string == null) {
return '';
} else if (!string) {
return string + '';
}
// Force a string conversion as this will be done by the append regardless and
// the regex test will do this transparently behind the scenes, causing issues if
// an object's to string has escaped characters in it.
string = '' + string;
if (!possible.test(string)) {
return string;
}
return string.replace(badChars, escapeChar);
}
function jsonp(url, params, callback, context, jsonpParam) {
var callbackId = '_l_geocoder_' + lastCallbackId++;
params[jsonpParam || 'callback'] = callbackId;
window[callbackId] = L.Util.bind(callback, context);
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url + getParamString(params);
script.id = callbackId;
document.getElementsByTagName('head')[0].appendChild(script);
}
function getJSON(url, params, callback) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState !== 4) {
return;
}
var message;
if (xmlHttp.status !== 200 && xmlHttp.status !== 304) {
message = '';
} else if (typeof xmlHttp.response === 'string') {
// IE doesn't parse JSON responses even with responseType: 'json'.
try {
message = JSON.parse(xmlHttp.response);
} catch (e) {
// Not a JSON response
message = xmlHttp.response;
}
} else {
message = xmlHttp.response;
}
callback(message);
};
xmlHttp.open('GET', url + getParamString(params), true);
xmlHttp.responseType = 'json';
xmlHttp.setRequestHeader('Accept', 'application/json');
xmlHttp.send(null);
}
function template(str, data) {
return str.replace(/\{ *([\w_]+) *\}/g, function (str, key) {
var value = data[key];
if (value === undefined) {
value = '';
} else if (typeof value === 'function') {
value = value(data);
}
return htmlEscape(value);
});
}
function getParamString(obj, existingUrl, uppercase) {
var params = [];
for (var i in obj) {
var key = encodeURIComponent(uppercase ? i.toUpperCase() : i);
var value = obj[i];
if (!L.Util.isArray(value)) {
params.push(key + '=' + encodeURIComponent(value));
} else {
for (var j = 0; j < value.length; j++) {
params.push(key + '=' + encodeURIComponent(value[j]));
}
}
}
return (!existingUrl || existingUrl.indexOf('?') === -1 ? '?' : '&') + params.join('&');
}
var ArcGis = L.Class.extend({
options: {
service_url: 'https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer'
},
initialize: function (accessToken, options) {
L.setOptions(this, options);
this._accessToken = accessToken;
},
geocode: function (query, cb, context) {
var params = {
SingleLine: query,
outFields: 'Addr_Type',
forStorage: false,
maxLocations: 10,
f: 'json'
};
if (this._key && this._key.length) {
params.token = this._key;
}
getJSON(
this.options.service_url + '/findAddressCandidates',
L.extend(params, this.options.geocodingQueryParams),
function (data) {
var results = [],
loc,
latLng,
latLngBounds;
if (data.candidates && data.candidates.length) {
for (var i = 0; i <= data.candidates.length - 1; i++) {
loc = data.candidates[i];
latLng = L.latLng(loc.location.y, loc.location.x);
latLngBounds = L.latLngBounds(
L.latLng(loc.extent.ymax, loc.extent.xmax),
L.latLng(loc.extent.ymin, loc.extent.xmin)
);
results[i] = {
name: loc.address,
bbox: latLngBounds,
center: latLng
};
}
}
cb.call(context, results);
}
);
},
suggest: function (query, cb, context) {
return this.geocode(query, cb, context);
},
reverse: function (location, scale, cb, context) {
var params = {
location: encodeURIComponent(location.lng) + ',' + encodeURIComponent(location.lat),
distance: 100,
f: 'json'
};
getJSON(this.options.service_url + '/reverseGeocode', params, function (data) {
var result = [],
loc;
if (data && !data.error) {
loc = L.latLng(data.location.y, data.location.x);
result.push({
name: data.address.Match_addr,
center: loc,
bounds: L.latLngBounds(loc, loc)
});
}
cb.call(context, result);
});
}
});
function arcgis(accessToken, options) {
return new ArcGis(accessToken, options);
}
var Bing = L.Class.extend({
initialize: function (key) {
this.key = key;
},
geocode: function (query, cb, context) {
jsonp(
'https://dev.virtualearth.net/REST/v1/Locations',
{
query: query,
key: this.key
},
function (data) {
var results = [];
if (data.resourceSets.length > 0) {
for (var i = data.resourceSets[0].resources.length - 1; i >= 0; i--) {
var resource = data.resourceSets[0].resources[i],
bbox = resource.bbox;
results[i] = {
name: resource.name,
bbox: L.latLngBounds([bbox[0], bbox[1]], [bbox[2], bbox[3]]),
center: L.latLng(resource.point.coordinates)
};
}
}
cb.call(context, results);
},
this,
'jsonp'
);
},
reverse: function (location, scale, cb, context) {
jsonp(
'//dev.virtualearth.net/REST/v1/Locations/' + location.lat + ',' + location.lng,
{
key: this.key
},
function (data) {
var results = [];
for (var i = data.resourceSets[0].resources.length - 1; i >= 0; i--) {
var resource = data.resourceSets[0].resources[i],
bbox = resource.bbox;
results[i] = {
name: resource.name,
bbox: L.latLngBounds([bbox[0], bbox[1]], [bbox[2], bbox[3]]),
center: L.latLng(resource.point.coordinates)
};
}
cb.call(context, results);
},
this,
'jsonp'
);
}
});
function bing(key) {
return new Bing(key);
}
var Google = L.Class.extend({
options: {
serviceUrl: 'https://maps.googleapis.com/maps/api/geocode/json',
geocodingQueryParams: {},
reverseQueryParams: {}
},
initialize: function (key, options) {
this._key = key;
L.setOptions(this, options);
// Backwards compatibility
this.options.serviceUrl = this.options.service_url || this.options.serviceUrl;
},
geocode: function (query, cb, context) {
var params = {
address: query
};
if (this._key && this._key.length) {
params.key = this._key;
}
params = L.Util.extend(params, this.options.geocodingQueryParams);
getJSON(this.options.serviceUrl, params, function (data) {
var results = [],
loc,
latLng,
latLngBounds;
if (data.results && data.results.length) {
for (var i = 0; i <= data.results.length - 1; i++) {
loc = data.results[i];
latLng = L.latLng(loc.geometry.location);
latLngBounds = L.latLngBounds(
L.latLng(loc.geometry.viewport.northeast),
L.latLng(loc.geometry.viewport.southwest)
);
results[i] = {
name: loc.formatted_address,
bbox: latLngBounds,
center: latLng,
properties: loc.address_components
};
}
}
cb.call(context, results);
});
},
reverse: function (location, scale, cb, context) {
var params = {
latlng: encodeURIComponent(location.lat) + ',' + encodeURIComponent(location.lng)
};
params = L.Util.extend(params, this.options.reverseQueryParams);
if (this._key && this._key.length) {
params.key = this._key;
}
getJSON(this.options.serviceUrl, params, function (data) {
var results = [],
loc,
latLng,
latLngBounds;
if (data.results && data.results.length) {
for (var i = 0; i <= data.results.length - 1; i++) {
loc = data.results[i];
latLng = L.latLng(loc.geometry.location);
latLngBounds = L.latLngBounds(
L.latLng(loc.geometry.viewport.northeast),
L.latLng(loc.geometry.viewport.southwest)
);
results[i] = {
name: loc.formatted_address,
bbox: latLngBounds,
center: latLng,
properties: loc.address_components
};
}
}
cb.call(context, results);
});
}
});
function google(key, options) {
return new Google(key, options);
}
var HERE = L.Class.extend({
options: {
geocodeUrl: 'https://geocoder.api.here.com/6.2/geocode.json',
reverseGeocodeUrl: 'https://reverse.geocoder.api.here.com/6.2/reversegeocode.json',
app_id: '<insert your app_id here>',
app_code: '<insert your app_code here>',
geocodingQueryParams: {},
reverseQueryParams: {},
reverseGeocodeProxRadius: null
},
initialize: function (options) {
L.setOptions(this, options);
},
geocode: function (query, cb, context) {
var params = {
searchtext: query,
gen: 9,
app_id: this.options.app_id,
app_code: this.options.app_code,
jsonattributes: 1
};
params = L.Util.extend(params, this.options.geocodingQueryParams);
this.getJSON(this.options.geocodeUrl, params, cb, context);
},
reverse: function (location, scale, cb, context) {
var _proxRadius = this.options.reverseGeocodeProxRadius
? this.options.reverseGeocodeProxRadius
: null;
var proxRadius = _proxRadius ? ',' + encodeURIComponent(_proxRadius) : '';
var params = {
prox: encodeURIComponent(location.lat) + ',' + encodeURIComponent(location.lng) + proxRadius,
mode: 'retrieveAddresses',
app_id: this.options.app_id,
app_code: this.options.app_code,
gen: 9,
jsonattributes: 1
};
params = L.Util.extend(params, this.options.reverseQueryParams);
this.getJSON(this.options.reverseGeocodeUrl, params, cb, context);
},
getJSON: function (url, params, cb, context) {
getJSON(url, params, function (data) {
var results = [],
loc,
latLng,
latLngBounds;
if (data.response.view && data.response.view.length) {
for (var i = 0; i <= data.response.view[0].result.length - 1; i++) {
loc = data.response.view[0].result[i].location;
latLng = L.latLng(loc.displayPosition.latitude, loc.displayPosition.longitude);
latLngBounds = L.latLngBounds(
L.latLng(loc.mapView.topLeft.latitude, loc.mapView.topLeft.longitude),
L.latLng(loc.mapView.bottomRight.latitude, loc.mapView.bottomRight.longitude)
);
results[i] = {
name: loc.address.label,
properties: loc.address,
bbox: latLngBounds,
center: latLng
};
}
}
cb.call(context, results);
});
}
});
function here(options) {
return new HERE(options);
}
var LatLng = L.Class.extend({
options: {
// the next geocoder to use
next: undefined,
sizeInMeters: 10000
},
initialize: function (options) {
L.Util.setOptions(this, options);
},
geocode: function (query, cb, context) {
var match;
var center;
// regex from https://github.com/openstreetmap/openstreetmap-website/blob/master/app/controllers/geocoder_controller.rb
if ((match = query.match(/^([NS])\s*(\d{1,3}(?:\.\d*)?)\W*([EW])\s*(\d{1,3}(?:\.\d*)?)$/))) {
// [NSEW] decimal degrees
center = L.latLng(
(/N/i.test(match[1]) ? 1 : -1) * parseFloat(match[2]),
(/E/i.test(match[3]) ? 1 : -1) * parseFloat(match[4])
);
} else if (
(match = query.match(/^(\d{1,3}(?:\.\d*)?)\s*([NS])\W*(\d{1,3}(?:\.\d*)?)\s*([EW])$/))
) {
// decimal degrees [NSEW]
center = L.latLng(
(/N/i.test(match[2]) ? 1 : -1) * parseFloat(match[1]),
(/E/i.test(match[4]) ? 1 : -1) * parseFloat(match[3])
);
} else if (
(match = query.match(
/^([NS])\s*(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?\W*([EW])\s*(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?$/
))
) {
// [NSEW] degrees, decimal minutes
center = L.latLng(
(/N/i.test(match[1]) ? 1 : -1) * (parseFloat(match[2]) + parseFloat(match[3] / 60)),
(/E/i.test(match[4]) ? 1 : -1) * (parseFloat(match[5]) + parseFloat(match[6] / 60))
);
} else if (
(match = query.match(
/^(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?\s*([NS])\W*(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?\s*([EW])$/
))
) {
// degrees, decimal minutes [NSEW]
center = L.latLng(
(/N/i.test(match[3]) ? 1 : -1) * (parseFloat(match[1]) + parseFloat(match[2] / 60)),
(/E/i.test(match[6]) ? 1 : -1) * (parseFloat(match[4]) + parseFloat(match[5] / 60))
);
} else if (
(match = query.match(
/^([NS])\s*(\d{1,3})°?\s*(\d{1,2})['′]?\s*(\d{1,3}(?:\.\d*)?)?["″]?\W*([EW])\s*(\d{1,3})°?\s*(\d{1,2})['′]?\s*(\d{1,3}(?:\.\d*)?)?["″]?$/
))
) {
// [NSEW] degrees, minutes, decimal seconds
center = L.latLng(
(/N/i.test(match[1]) ? 1 : -1) *
(parseFloat(match[2]) + parseFloat(match[3] / 60 + parseFloat(match[4] / 3600))),
(/E/i.test(match[5]) ? 1 : -1) *
(parseFloat(match[6]) + parseFloat(match[7] / 60) + parseFloat(match[8] / 3600))
);
} else if (
(match = query.match(
/^(\d{1,3})°?\s*(\d{1,2})['′]?\s*(\d{1,3}(?:\.\d*)?)?["″]\s*([NS])\W*(\d{1,3})°?\s*(\d{1,2})['′]?\s*(\d{1,3}(?:\.\d*)?)?["″]?\s*([EW])$/
))
) {
// degrees, minutes, decimal seconds [NSEW]
center = L.latLng(
(/N/i.test(match[4]) ? 1 : -1) *
(parseFloat(match[1]) + parseFloat(match[2] / 60 + parseFloat(match[3] / 3600))),
(/E/i.test(match[8]) ? 1 : -1) *
(parseFloat(match[5]) + parseFloat(match[6] / 60) + parseFloat(match[7] / 3600))
);
} else if (
(match = query.match(/^\s*([+-]?\d+(?:\.\d*)?)\s*[\s,]\s*([+-]?\d+(?:\.\d*)?)\s*$/))
) {
center = L.latLng(parseFloat(match[1]), parseFloat(match[2]));
}
if (center) {
var results = [
{
name: query,
center: center,
bbox: center.toBounds(this.options.sizeInMeters)
}
];
cb.call(context, results);
} else if (this.options.next) {
this.options.next.geocode(query, cb, context);
}
}
});
function latLng(options) {
return new LatLng(options);
}
var Mapbox = L.Class.extend({
options: {
serviceUrl: 'https://api.mapbox.com/geocoding/v5/mapbox.places/',
geocodingQueryParams: {},
reverseQueryParams: {}
},
initialize: function (accessToken, options) {
L.setOptions(this, options);
this.options.geocodingQueryParams.access_token = accessToken;
this.options.reverseQueryParams.access_token = accessToken;
},
geocode: function (query, cb, context) {
var params = this.options.geocodingQueryParams;
if (
params.proximity !== undefined &&
params.proximity.lat !== undefined &&
params.proximity.lng !== undefined
) {
params.proximity = params.proximity.lng + ',' + params.proximity.lat;
}
getJSON(this.options.serviceUrl + encodeURIComponent(query) + '.json', params, function (data) {
var results = [],
loc,
latLng,
latLngBounds;
if (data.features && data.features.length) {
for (var i = 0; i <= data.features.length - 1; i++) {
loc = data.features[i];
latLng = L.latLng(loc.center.reverse());
if (loc.bbox) {
latLngBounds = L.latLngBounds(
L.latLng(loc.bbox.slice(0, 2).reverse()),
L.latLng(loc.bbox.slice(2, 4).reverse())
);
} else {
latLngBounds = L.latLngBounds(latLng, latLng);
}
var properties = {
text: loc.text,
address: loc.address
};
for (var j = 0; j < (loc.context || []).length; j++) {
var id = loc.context[j].id.split('.')[0];
properties[id] = loc.context[j].text;
// Get country code when available
if (loc.context[j].short_code) {
properties['countryShortCode'] = loc.context[j].short_code;
}
}
results[i] = {
name: loc.place_name,
bbox: latLngBounds,
center: latLng,
properties: properties
};
}
}
cb.call(context, results);
});
},
suggest: function (query, cb, context) {
return this.geocode(query, cb, context);
},
reverse: function (location, scale, cb, context) {
getJSON(
this.options.serviceUrl +
encodeURIComponent(location.lng) +
',' +
encodeURIComponent(location.lat) +
'.json',
this.options.reverseQueryParams,
function (data) {
var results = [],
loc,
latLng,
latLngBounds;
if (data.features && data.features.length) {
for (var i = 0; i <= data.features.length - 1; i++) {
loc = data.features[i];
latLng = L.latLng(loc.center.reverse());
if (loc.bbox) {
latLngBounds = L.latLngBounds(
L.latLng(loc.bbox.slice(0, 2).reverse()),
L.latLng(loc.bbox.slice(2, 4).reverse())
);
} else {
latLngBounds = L.latLngBounds(latLng, latLng);
}
results[i] = {
name: loc.place_name,
bbox: latLngBounds,
center: latLng
};
}
}
cb.call(context, results);
}
);
}
});
function mapbox(accessToken, options) {
return new Mapbox(accessToken, options);
}
var MapQuest = L.Class.extend({
options: {
serviceUrl: 'https://www.mapquestapi.com/geocoding/v1'
},
initialize: function (key, options) {
// MapQuest seems to provide URI encoded API keys,
// so to avoid encoding them twice, we decode them here
this._key = decodeURIComponent(key);
L.Util.setOptions(this, options);
},
_formatName: function () {
var r = [],
i;
for (i = 0; i < arguments.length; i++) {
if (arguments[i]) {
r.push(arguments[i]);
}
}
return r.join(', ');
},
geocode: function (query, cb, context) {
getJSON(
this.options.serviceUrl + '/address',
{
key: this._key,
location: query,
limit: 5,
outFormat: 'json'
},
L.bind(function (data) {
var results = [],
loc,
latLng;
if (data.results && data.results[0].locations) {
for (var i = data.results[0].locations.length - 1; i >= 0; i--) {
loc = data.results[0].locations[i];
latLng = L.latLng(loc.latLng);
results[i] = {
name: this._formatName(loc.street, loc.adminArea4, loc.adminArea3, loc.adminArea1),
bbox: L.latLngBounds(latLng, latLng),
center: latLng
};
}
}
cb.call(context, results);
}, this)
);
},
reverse: function (location, scale, cb, context) {
getJSON(
this.options.serviceUrl + '/reverse',
{
key: this._key,
location: location.lat + ',' + location.lng,
outputFormat: 'json'
},
L.bind(function (data) {
var results = [],
loc,
latLng;
if (data.results && data.results[0].locations) {
for (var i = data.results[0].locations.length - 1; i >= 0; i--) {
loc = data.results[0].locations[i];
latLng = L.latLng(loc.latLng);
results[i] = {
name: this._formatName(loc.street, loc.adminArea4, loc.adminArea3, loc.adminArea1),
bbox: L.latLngBounds(latLng, latLng),
center: latLng
};
}
}
cb.call(context, results);
}, this)
);
}
});
function mapQuest(key, options) {
return new MapQuest(key, options);
}
var Neutrino = L.Class.extend({
options: {
userId: '<insert your userId here>',
apiKey: '<insert your apiKey here>',
serviceUrl: 'https://neutrinoapi.com/'
},
initialize: function (options) {
L.Util.setOptions(this, options);
},
// https://www.neutrinoapi.com/api/geocode-address/
geocode: function (query, cb, context) {
getJSON(
this.options.serviceUrl + 'geocode-address',
{
apiKey: this.options.apiKey,
userId: this.options.userId,
//get three words and make a dot based string
address: query.split(/\s+/).join('.')
},
function (data) {
var results = [],
latLng,
latLngBounds;
if (data.locations) {
data.geometry = data.locations[0];
latLng = L.latLng(data.geometry['latitude'], data.geometry['longitude']);
latLngBounds = L.latLngBounds(latLng, latLng);
results[0] = {
name: data.geometry.address,
bbox: latLngBounds,
center: latLng
};
}
cb.call(context, results);
}
);
},
suggest: function (query, cb, context) {
return this.geocode(query, cb, context);
},
// https://www.neutrinoapi.com/api/geocode-reverse/
reverse: function (location, scale, cb, context) {
getJSON(
this.options.serviceUrl + 'geocode-reverse',
{
apiKey: this.options.apiKey,
userId: this.options.userId,
latitude: location.lat,
longitude: location.lng
},
function (data) {
var results = [],
latLng,
latLngBounds;
if (data.status.status == 200 && data.found) {
latLng = L.latLng(location.lat, location.lng);
latLngBounds = L.latLngBounds(latLng, latLng);
results[0] = {
name: data.address,
bbox: latLngBounds,
center: latLng
};
}
cb.call(context, results);
}
);
}
});
function neutrino(accessToken) {
return new Neutrino(accessToken);
}
var Nominatim = L.Class.extend({
options: {
serviceUrl: 'https://nominatim.openstreetmap.org/',
geocodingQueryParams: {},
reverseQueryParams: {},
htmlTemplate: function (r) {
var a = r.address,
className,
parts = [];
if (a.road || a.building) {
parts.push('{building} {road} {house_number}');
}
if (a.city || a.town || a.village || a.hamlet) {
className = parts.length > 0 ? 'leaflet-control-geocoder-address-detail' : '';
parts.push(
'<span class="' + className + '">{postcode} {city} {town} {village} {hamlet}</span>'
);
}
if (a.state || a.country) {
className = parts.length > 0 ? 'leaflet-control-geocoder-address-context' : '';
parts.push('<span class="' + className + '">{state} {country}</span>');
}
return template(parts.join('<br/>'), a);
}
},
initialize: function (options) {
L.Util.setOptions(this, options);
},
geocode: function (query, cb, context) {
getJSON(
this.options.serviceUrl + 'search',
L.extend(
{
q: query,
limit: 5,
format: 'json',
addressdetails: 1
},
this.options.geocodingQueryParams
),
L.bind(function (data) {
var results = [];
for (var i = data.length - 1; i >= 0; i--) {
var bbox = data[i].boundingbox;
for (var j = 0; j < 4; j++) bbox[j] = parseFloat(bbox[j]);
results[i] = {
icon: data[i].icon,
name: data[i].display_name,
html: this.options.htmlTemplate ? this.options.htmlTemplate(data[i]) : undefined,
bbox: L.latLngBounds([bbox[0], bbox[2]], [bbox[1], bbox[3]]),
center: L.latLng(data[i].lat, data[i].lon),
properties: data[i]
};
}
cb.call(context, results);
}, this)
);
},
suggest: function (query, cb, context) {
return this.geocode(query, cb, context);
},
reverse: function (location, scale, cb, context) {
getJSON(
this.options.serviceUrl + 'reverse',
L.extend(
{
lat: location.lat,
lon: location.lng,
zoom: Math.round(Math.log(scale / 256) / Math.log(2)),
addressdetails: 1,
format: 'json'
},
this.options.reverseQueryParams
),
L.bind(function (data) {
var result = [],
loc;
if (data && data.lat && data.lon) {
loc = L.latLng(data.lat, data.lon);
result.push({
name: data.display_name,
html: this.options.htmlTemplate ? this.options.htmlTemplate(data) : undefined,
center: loc,
bounds: L.latLngBounds(loc, loc),
properties: data
});
}
cb.call(context, result);
}, this)
);
}
});
function nominatim(options) {
return new Nominatim(options);
}
var OpenLocationCode = L.Class.extend({
options: {
OpenLocationCode: undefined,
codeLength: undefined
},
initialize: function (options) {
L.setOptions(this, options);
},
geocode: function (query, cb, context) {
try {
var decoded = this.options.OpenLocationCode.decode(query);
var result = {
name: query,
center: L.latLng(decoded.latitudeCenter, decoded.longitudeCenter),
bbox: L.latLngBounds(
L.latLng(decoded.latitudeLo, decoded.longitudeLo),
L.latLng(decoded.latitudeHi, decoded.longitudeHi)
)
};
cb.call(context, [result]);
} catch (e) {
console.warn(e); // eslint-disable-line no-console
cb.call(context, []);
}
},
reverse: function (location, scale, cb, context) {
try {
var code = this.options.OpenLocationCode.encode(
location.lat,
location.lng,
this.options.codeLength
);
var result = {
name: code,
center: L.latLng(location.lat, location.lng),
bbox: L.latLngBounds(
L.latLng(location.lat, location.lng),
L.latLng(location.lat, location.lng)
)
};
cb.call(context, [result]);
} catch (e) {
console.warn(e); // eslint-disable-line no-console
cb.call(context, []);
}
}
});
function openLocationCode(options) {
return new OpenLocationCode(options);
}
var OpenCage = L.Class.extend({
options: {
serviceUrl: 'https://api.opencagedata.com/geocode/v1/json',
geocodingQueryParams: {},
reverseQueryParams: {}
},
initialize: function (apiKey, options) {
L.setOptions(this, options);
this._accessToken = apiKey;
},
geocode: function (query, cb, context) {
var params = {
key: this._accessToken,
q: query
};
params = L.extend(params, this.options.geocodingQueryParams);
getJSON(this.options.serviceUrl, params, function (data) {
var results = [],
latLng,
latLngBounds,
loc;
if (data.results && data.results.length) {
for (var i = 0; i < data.results.length; i++) {
loc = data.results[i];
latLng = L.latLng(loc.geometry);
if (loc.annotations && loc.annotations.bounds) {
latLngBounds = L.latLngBounds(
L.latLng(loc.annotations.bounds.northeast),
L.latLng(loc.annotations.bounds.southwest)
);
} else {
latLngBounds = L.latLngBounds(latLng, latLng);
}
results.push({
name: loc.formatted,
bbox: latLngBounds,
center: latLng
});
}
}
cb.call(context, results);
});
},
suggest: function (query, cb, context) {
return this.geocode(query, cb, context);
},
reverse: function (location, scale, cb, context) {
var params = {
key: this._accessToken,
q: [location.lat, location.lng].join(',')
};
params = L.extend(params, this.options.reverseQueryParams);
getJSON(this.options.serviceUrl, params, function (data) {
var results = [],
latLng,
latLngBounds,
loc;
if (data.results && data.results.length) {
for (var i = 0; i < data.results.length; i++) {
loc = data.results[i];
latLng = L.latLng(loc.geometry);
if (loc.annotations && loc.annotations.bounds) {
latLngBounds = L.latLngBounds(
L.latLng(loc.annotations.bounds.northeast),
L.latLng(loc.annotations.bounds.southwest)
);
} else {
latLngBounds = L.latLngBounds(latLng, latLng);
}
results.push({
name: loc.formatted,
bbox: latLngBounds,
center: latLng
});
}
}
cb.call(context, results);
});
}
});
function opencage(apiKey, options) {
return new OpenCage(apiKey, options);
}
var Pelias = L.Class.extend({
options: {
serviceUrl: 'https://api.geocode.earth/v1',
geocodingQueryParams: {},
reverseQueryParams: {}
},
initialize: function (apiKey, options) {
L.Util.setOptions(this, options);
this._apiKey = apiKey;
this._lastSuggest = 0;
},
geocode: function (query, cb, context) {
var _this = this;
getJSON(
this.options.serviceUrl + '/search',
L.extend(
{
api_key: this._apiKey,
text: query
},
this.options.geocodingQueryParams
),
function (data) {
cb.call(context, _this._parseResults(data, 'bbox'));
}
);
},
suggest: function (query, cb, context) {
var _this = this;
getJSON(
this.options.serviceUrl + '/autocomplete',
L.extend(
{
api_key: this._apiKey,
text: query
},
this.options.geocodingQueryParams
),
L.bind(function (data) {
if (data.geocoding.timestamp > this._lastSuggest) {
this._lastSuggest = data.geocoding.timestamp;
cb.call(context, _this._parseResults(data, 'bbox'));
}
}, this)
);
},
reverse: function (location, scale, cb, context) {
var _this = this;
getJSON(
this.options.serviceUrl + '/reverse',
L.extend(
{
api_key: this._apiKey,
'point.lat': location.lat,
'point.lon': location.lng
},
this.options.reverseQueryParams
),
function (data) {
cb.call(context, _this._parseResults(data, 'bounds'));
}
);
},
_parseResults: function (data, bboxname) {
var results = [];
L.geoJson(data, {
pointToLayer: function (feature, latlng) {
return L.circleMarker(latlng);
},
onEachFeature: function (feature, layer) {
var result = {},
bbox,
center;
if (layer.getBounds) {
bbox = layer.getBounds();
center = bbox.getCenter();
} else if (layer.feature.bbox) {
center = layer.getLatLng();
bbox = L.latLngBounds(
L.GeoJSON.coordsToLatLng(layer.feature.bbox.slice(0, 2)),
L.GeoJSON.coordsToLatLng(layer.feature.bbox.slice(2, 4))
);
} else {
center = layer.getLatLng();
bbox = L.latLngBounds(center, center);
}
result.name = layer.feature.properties.label;
result.center = center;
result[bboxname] = bbox;
result.properties = layer.feature.properties;
results.push(result);
}
});
return results;
}
});
function pelias(apiKey, options) {
return new Pelias(apiKey, options);
}
var GeocodeEarth = Pelias;
var geocodeEarth = pelias;
var Mapzen = Pelias; // r.i.p.
var mapzen = pelias;
var Openrouteservice = Mapzen.extend({
options: {
serviceUrl: 'https://api.openrouteservice.org/geocode'
}
});
function openrouteservice(apiKey, options) {
return new Openrouteservice(apiKey, options);
}
var Photon = L.Class.extend({
options: {
serviceUrl: 'https://photon.komoot.de/api/',
reverseUrl: 'https://photon.komoot.de/reverse/',
nameProperties: ['name', 'street', 'suburb', 'hamlet', 'town', 'city', 'state', 'country']
},
initialize: function (options) {
L.setOptions(this, options);
},
geocode: function (query, cb, context) {
var params = L.extend(
{
q: query
},
this.options.geocodingQueryParams
);
getJSON(
this.options.serviceUrl,
params,
L.bind(function (data) {
cb.call(context, this._decodeFeatures(data));
}, this)
);
},
suggest: function (query, cb, context) {
return this.geocode(query, cb, context);
},
reverse: function (latLng, scale, cb, context) {
var params = L.extend(
{
lat: latLng.lat,
lon: latLng.lng
},
this.options.reverseQueryParams
);
getJSON(
this.options.reverseUrl,
params,
L.bind(function (data) {
cb.call(context, this._decodeFeatures(data));
}, this)
);
},
_decodeFeatures: function (data) {
var results = [],
i,
f,
c,
latLng,
extent,
bbox;
if (data && data.features) {
for (i = 0; i < data.features.length; i++) {
f = data.features[i];
c = f.geometry.coordinates;
latLng = L.latLng(c[1], c[0]);
extent = f.properties.extent;
if (extent) {
bbox = L.latLngBounds([extent[1], extent[0]], [extent[3], extent[2]]);
} else {
bbox = L.latLngBounds(latLng, latLng);
}
results.push({
name: this._decodeFeatureName(f),
html: this.options.htmlTemplate ? this.options.htmlTemplate(f) : undefined,
center: latLng,
bbox: bbox,
properties: f.properties
});
}
}
return results;
},
_decodeFeatureName: function (f) {
return (this.options.nameProperties || [])
.map(function (p) {
return f.properties[p];
})
.filter(function (v) {
return !!v;
})
.join(', ');
}
});
function photon(options) {
return new Photon(options);
}
const TYPE_LABEL = {
housenumber: 'Numéro',
street: 'Rue',
locality: 'Lieux-dit',
municipality: 'Commune',
};
var AddOk = L.Class.extend({
options: {
serviceUrl: 'https://api-adresse.data.gouv.fr',
limit: 5,
htmlTemplate: function (r) {
var parts = [];
/* some available classes:
leaflet-control-geocoder-address-detail
leaflet-control-geocoder-address-context
*/
parts.push('<span class="leaflet-control-geocoder-address-item"> {label} </span>({type})<span>' + '</span>');
parts.push('<span class="' + (parts.length > 0 ? 'leaflet-control-geocoder-address-detail' : '') +
'">{context}</span>');
return template(parts.join('<br/>'), r);
}
},
initialize: function (options) {
L.setOptions(this, options);
},
geocode: function (query, cb, context) {
var params = L.extend({
q: query,
limit: this.options.limit
}, this.options.geocodingQueryParams);
var that = this;
getJSON(this.options.serviceUrl + '/search/', params, function (data) {
var results = [],
i,
f,
c,
latLng,
extent,
bbox;
if (data && data.features) {
for (i = 0; i < data.features.length; i++) {
f = data.features[i];
c = f.geometry.coordinates;
latLng = L.latLng(c[1], c[0]);
extent = f.properties.extent;
if (extent) {
bbox = L.latLngBounds([extent[1], extent[0]], [extent[3], extent[2]]);
} else {
bbox = L.latLngBounds(latLng, latLng);
}
// Translate the type in french
if (f.properties.type) {
f.properties.type = TYPE_LABEL[f.properties.type];
}
results.push({
name: f.properties.name,
center: latLng,
bbox: bbox,
html: that.options.htmlTemplate ?
that.options.htmlTemplate(f.properties)
: undefined
});
}
}
cb.call(context, results);
});
},
suggest: function (query, cb, context) {
return this.geocode(query, cb, context);
},
reverse: function (location, scale, cb, context) {
var params = L.extend({
lat: location.lat,
lon: location.lng
}, this.options.reverseQueryParams);
var that = this;
getJSON(this.options.serviceUrl + '/reverse/', params, function (data) {
var results = [],
i,
f,
c,
latLng,
extent,
bbox;
if (data && data.features) {
for (i = 0; i < data.features.length; i++) {
f = data.features[i];
c = f.geometry.coordinates;
latLng = L.latLng(c[1], c[0]);
extent = f.properties.extent;
if (extent) {
bbox = L.latLngBounds([extent[1], extent[0]], [extent[3], extent[2]]);
} else {
bbox = L.latLngBounds(latLng, latLng);
}
results.push({
name: f.properties.name,
center: latLng,
bbox: bbox,
html: that.options.htmlTemplate ?
that.options.htmlTemplate(f.properties)
: undefined
});
}
}
cb.call(context, results);
});
}
});
function addok(key) {
return new AddOk(key);
}
var What3Words = L.Class.extend({
options: {
serviceUrl: 'https://api.what3words.com/v2/'
},
initialize: function (accessToken) {
this._accessToken = accessToken;
},
geocode: function (query, cb, context) {
//get three words and make a dot based string
getJSON(
this.options.serviceUrl + 'forward',
{
key: this._accessToken,
addr: query.split(/\s+/).join('.')
},
function (data) {
var results = [],
latLng,
latLngBounds;
if (data.geometry) {
latLng = L.latLng(data.geometry['lat'], data.geometry['lng']);
latLngBounds = L.latLngBounds(latLng, latLng);
results[0] = {
name: data.words,
bbox: latLngBounds,
center: latLng
};
}
cb.call(context, results);
}
);
},
suggest: function (query, cb, context) {
return this.geocode(query, cb, context);
},
reverse: function (location, scale, cb, context) {
getJSON(
this.options.serviceUrl + 'reverse',
{
key: this._accessToken,
coords: [location.lat, location.lng].join(',')
},
function (data) {
var results = [],
latLng,
latLngBounds;
if (data.status.status == 200) {
latLng = L.latLng(data.geometry['lat'], data.geometry['lng']);
latLngBounds = L.latLngBounds(latLng, latLng);
results[0] = {
name: data.words,
bbox: latLngBounds,
center: latLng
};
}
cb.call(context, results);
}
);
}
});
function what3words(accessToken) {
return new What3Words(accessToken);
}
var geocoders = /*#__PURE__*/Object.freeze({
__proto__: null,
ArcGis: ArcGis,
arcgis: arcgis,
Bing: Bing,
bing: bing,
Google: Google,
google: google,
HERE: HERE,
here: here,
LatLng: LatLng,
latLng: latLng,
Mapbox: Mapbox,
mapbox: mapbox,
MapQuest: MapQuest,
mapQuest: mapQuest,
Neutrino: Neutrino,
neutrino: neutrino,
Nominatim: Nominatim,
nominatim: nominatim,
OpenLocationCode: OpenLocationCode,
openLocationCode: openLocationCode,
OpenCage: OpenCage,
opencage: opencage,
Pelias: Pelias,
pelias: pelias,
GeocodeEarth: GeocodeEarth,
geocodeEarth: geocodeEarth,
Mapzen: Mapzen,
mapzen: mapzen,
Openrouteservice: Openrouteservice,
openrouteservice: openrouteservice,
Photon: Photon,
photon: photon,
AddOk: AddOk,
addok: addok,
What3Words: What3Words,
what3words: what3words
});
var Geocoder = L.Control.extend({
options: {
showUniqueResult: true,
showResultIcons: false,
collapsed: true,
expand: 'touch', // options: touch, click, anythingelse
position: 'topright',
placeholder: 'Search...',
errorMessage: 'Nothing found.',
iconLabel: 'Initiate a new search',
queryMinLength: 1,
suggestMinLength: 3,
suggestTimeout: 250,
defaultMarkGeocode: true
},
includes: L.Evented.prototype || L.Mixin.Events,
initialize: function (options) {
L.Util.setOptions(this, options);
if (!this.options.geocoder) {
this.options.geocoder = new Nominatim();
}
this._requestCount = 0;
},
addThrobberClass: function () {
L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-throbber');
},
removeThrobberClass: function () {
L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-throbber');
},
onAdd: function (map) {
var className = 'leaflet-control-geocoder',
container = L.DomUtil.create('div', className + ' leaflet-bar'),
icon = L.DomUtil.create('button', className + '-icon', container),
form = (this._form = L.DomUtil.create('div', className + '-form', container)),
input;
this._map = map;
this._container = container;
icon.innerHTML = '&nbsp;';
icon.type = 'button';
icon.setAttribute('aria-label', this.options.iconLabel);
input = this._input = L.DomUtil.create('input', '', form);
input.type = 'text';
input.value = this.options.query || '';
input.placeholder = this.options.placeholder;
L.DomEvent.disableClickPropagation(input);
this._errorElement = L.DomUtil.create('div', className + '-form-no-error', container);
this._errorElement.innerHTML = this.options.errorMessage;
this._alts = L.DomUtil.create(
'ul',
className + '-alternatives leaflet-control-geocoder-alternatives-minimized',
container
);
L.DomEvent.disableClickPropagation(this._alts);
L.DomEvent.addListener(input, 'keydown', this._keydown, this);
if (this.options.geocoder.suggest) {
L.DomEvent.addListener(input, 'input', this._change, this);
}
L.DomEvent.addListener(
input,
'blur',
function () {
if (this.options.collapsed && !this._preventBlurCollapse) {
this._collapse();
}
this._preventBlurCollapse = false;
},
this
);
if (this.options.collapsed) {
if (this.options.expand === 'click') {
L.DomEvent.addListener(
container,
'click',
function (e) {
if (e.button === 0 && e.detail !== 2) {
this._toggle();
}
},
this
);
} else if (this.options.expand === 'touch') {
L.DomEvent.addListener(
container,
L.Browser.touch ? 'touchstart mousedown' : 'mousedown',
function (e) {
this._toggle();
e.preventDefault(); // mobile: clicking focuses the icon, so UI expands and immediately collapses
e.stopPropagation();
},
this
);
} else {
L.DomEvent.addListener(container, 'mouseover', this._expand, this);
L.DomEvent.addListener(container, 'mouseout', this._collapse, this);
this._map.on('movestart', this._collapse, this);
}
} else {
this._expand();
if (L.Browser.touch) {
L.DomEvent.addListener(
container,
'touchstart',
function () {
this._geocode();
},
this
);
} else {
L.DomEvent.addListener(
container,
'click',
function () {
this._geocode();
},
this
);
}
}
if (this.options.defaultMarkGeocode) {
this.on('markgeocode', this.markGeocode, this);
}
this.on('startgeocode', this.addThrobberClass, this);
this.on('finishgeocode', this.removeThrobberClass, this);
this.on('startsuggest', this.addThrobberClass, this);
this.on('finishsuggest', this.removeThrobberClass, this);
L.DomEvent.disableClickPropagation(container);
return container;
},
setQuery: function (string) {
this._input.value = string;
return this;
},
_geocodeResult: function (results, suggest) {
if (!suggest && this.options.showUniqueResult && results.length === 1) {
this._geocodeResultSelected(results[0]);
} else if (results.length > 0) {
this._alts.innerHTML = '';
this._results = results;
L.DomUtil.removeClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');
L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-options-open');
for (var i = 0; i < results.length; i++) {
this._alts.appendChild(this._createAlt(results[i], i));
}
} else {
L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-options-error');
L.DomUtil.addClass(this._errorElement, 'leaflet-control-geocoder-error');
}
},
markGeocode: function (result) {
result = result.geocode || result;
this._map.fitBounds(result.bbox);
if (this._geocodeMarker) {
this._map.removeLayer(this._geocodeMarker);
}
const CustomIcon = L.Icon.extend({ //* recreate leaflet default icon, because not working out of box, reason not found
options: {
iconUrl: "data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=",
shadowUrl: "data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAQAAAACach9AAACMUlEQVR4Ae3ShY7jQBAE0Aoz/f9/HTMzhg1zrdKUrJbdx+Kd2nD8VNudfsL/Th///dyQN2TH6f3y/BGpC379rV+S+qqetBOxImNQXL8JCAr2V4iMQXHGNJxeCfZXhSRBcQMfvkOWUdtfzlLgAENmZDcmo2TVmt8OSM2eXxBp3DjHSMFutqS7SbmemzBiR+xpKCNUIRkdkkYxhAkyGoBvyQFEJEefwSmmvBfJuJ6aKqKWnAkvGZOaZXTUgFqYULWNSHUckZuR1HIIimUExutRxwzOLROIG4vKmCKQt364mIlhSyzAf1m9lHZHJZrlAOMMztRRiKimp/rpdJDc9Awry5xTZCte7FHtuS8wJgeYGrex28xNTd086Dik7vUMscQOa8y4DoGtCCSkAKlNwpgNtphjrC6MIHUkR6YWxxs6Sc5xqn222mmCRFzIt8lEdKx+ikCtg91qS2WpwVfBelJCiQJwvzixfI9cxZQWgiSJelKnwBElKYtDOb2MFbhmUigbReQBV0Cg4+qMXSxXSyGUn4UbF8l+7qdSGnTC0XLCmahIgUHLhLOhpVCtw4CzYXvLQWQbJNmxoCsOKAxSgBJno75avolkRw8iIAFcsdc02e9iyCd8tHwmeSSoKTowIgvscSGZUOA7PuCN5b2BX9mQM7S0wYhMNU74zgsPBj3HU7wguAfnxxjFQGBE6pwN+GjME9zHY7zGp8wVxMShYX9NXvEWD3HbwJf4giO4CFIQxXScH1/TM+04kkBiAAAAAElFTkSuQmCC",
iconSize: [25, 41],
iconAnchor: [12.5, 41],
popupAnchor: [0, -40]
}
});
const icon = new CustomIcon()
this._geocodeMarker = new L.Marker(result.center, { icon })
.bindPopup(result.html || result.name)
.addTo(this._map)
.openPopup();
return this;
},
_geocode: function (suggest) {
var value = this._input.value;
if (!suggest && value.length < this.options.queryMinLength) {
return;
}
var requestCount = ++this._requestCount,
mode = suggest ? 'suggest' : 'geocode',
eventData = { input: value };
this._lastGeocode = value;
if (!suggest) {
this._clearResults();
}
this.fire('start' + mode, eventData);
this.options.geocoder[mode](
value,
function (results) {
if (requestCount === this._requestCount) {
eventData.results = results;
this.fire('finish' + mode, eventData);
this._geocodeResult(results, suggest);
}
},
this
);
},
_geocodeResultSelected: function (result) {
this.fire('markgeocode', { geocode: result });
},
_toggle: function () {
if (L.DomUtil.hasClass(this._container, 'leaflet-control-geocoder-expanded')) {
this._collapse();
} else {
this._expand();
}
},
_expand: function () {
L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-expanded');
this._input.select();
this.fire('expand');
},
_collapse: function () {
L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-expanded');
L.DomUtil.addClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');
L.DomUtil.removeClass(this._errorElement, 'leaflet-control-geocoder-error');
L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-open');
L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-error');
this._input.blur(); // mobile: keyboard shouldn't stay expanded
this.fire('collapse');
},
_clearResults: function () {
L.DomUtil.addClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');
this._selection = null;
L.DomUtil.removeClass(this._errorElement, 'leaflet-control-geocoder-error');
L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-open');
L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-error');
},
_createAlt: function (result, index) {
var li = L.DomUtil.create('li', ''),
a = L.DomUtil.create('a', '', li),
icon = this.options.showResultIcons && result.icon ? L.DomUtil.create('img', '', a) : null,
text = result.html ? undefined : document.createTextNode(result.name),
mouseDownHandler = function mouseDownHandler(e) {
// In some browsers, a click will fire on the map if the control is
// collapsed directly after mousedown. To work around this, we
// wait until the click is completed, and _then_ collapse the
// control. Messy, but this is the workaround I could come up with
// for #142.
this._preventBlurCollapse = true;
L.DomEvent.stop(e);
this._geocodeResultSelected(result);
L.DomEvent.on(
li,
'click touchend',
function () {
if (this.options.collapsed) {
this._collapse();
} else {
this._clearResults();
}
},
this
);
};
if (icon) {
icon.src = result.icon;
}
li.setAttribute('data-result-index', index);
if (result.html) {
a.innerHTML = a.innerHTML + result.html;
} else {
a.appendChild(text);
}
// Use mousedown and not click, since click will fire _after_ blur,
// causing the control to have collapsed and removed the items
// before the click can fire.
L.DomEvent.addListener(li, 'mousedown touchstart', mouseDownHandler, this);
return li;
},
_keydown: function (e) {
var _this = this,
select = function select(dir) {
if (_this._selection) {
L.DomUtil.removeClass(_this._selection, 'leaflet-control-geocoder-selected');
_this._selection = _this._selection[dir > 0 ? 'nextSibling' : 'previousSibling'];
}
if (!_this._selection) {
_this._selection = _this._alts[dir > 0 ? 'firstChild' : 'lastChild'];
}
if (_this._selection) {
L.DomUtil.addClass(_this._selection, 'leaflet-control-geocoder-selected');
}
};
switch (e.keyCode) {
// Escape
case 27:
if (this.options.collapsed) {
this._collapse();
} else {
this._clearResults();
}
break;
// Up
case 38:
select(-1);
break;
// Up
case 40:
select(1);
break;
// Enter
case 13:
if (this._selection) {
var index = parseInt(this._selection.getAttribute('data-result-index'), 10);
this._geocodeResultSelected(this._results[index]);
this._clearResults();
} else {
this._geocode();
}
break;
default:
return;
}
L.DomEvent.preventDefault(e);
},
_change: function () {
var v = this._input.value;
if (v !== this._lastGeocode) {
clearTimeout(this._suggestTimeout);
if (v.length >= this.options.suggestMinLength) {
this._suggestTimeout = setTimeout(
L.bind(function () {
this._geocode(true);
}, this),
this.options.suggestTimeout
);
} else {
this._clearResults();
}
}
}
});
function geocoder(options) {
return new Geocoder(options);
}
L.Util.extend(Geocoder, geocoders);
L.Util.extend(L.Control, {
Geocoder: Geocoder,
geocoder: geocoder
});
return Geocoder;
}(L));
//# sourceMappingURL=Control.Geocoder.js.map
{"version":3,"file":"Control.Geocoder.js","sources":["../src/util.js","../src/geocoders/arcgis.js","../src/geocoders/bing.js","../src/geocoders/google.js","../src/geocoders/here.js","../src/geocoders/latlng.js","../src/geocoders/mapbox.js","../src/geocoders/mapquest.js","../src/geocoders/neutrino.js","../src/geocoders/nominatim.js","../src/geocoders/open-location-code.js","../src/geocoders/opencage.js","../src/geocoders/pelias.js","../src/geocoders/photon.js","../src/geocoders/addok.js","../src/geocoders/what3words.js","../src/control.js","../src/index.js"],"sourcesContent":["import L from 'leaflet';\nvar lastCallbackId = 0;\n\n// Adapted from handlebars.js\n// https://github.com/wycats/handlebars.js/\nvar badChars = /[&<>\"'`]/g;\nvar possible = /[&<>\"'`]/;\nvar escape = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n '`': '&#x60;'\n};\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nexport function htmlEscape(string) {\n if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nexport function jsonp(url, params, callback, context, jsonpParam) {\n var callbackId = '_l_geocoder_' + lastCallbackId++;\n params[jsonpParam || 'callback'] = callbackId;\n window[callbackId] = L.Util.bind(callback, context);\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url + getParamString(params);\n script.id = callbackId;\n document.getElementsByTagName('head')[0].appendChild(script);\n}\n\nexport function getJSON(url, params, callback) {\n var xmlHttp = new XMLHttpRequest();\n xmlHttp.onreadystatechange = function() {\n if (xmlHttp.readyState !== 4) {\n return;\n }\n var message;\n if (xmlHttp.status !== 200 && xmlHttp.status !== 304) {\n message = '';\n } else if (typeof xmlHttp.response === 'string') {\n // IE doesn't parse JSON responses even with responseType: 'json'.\n try {\n message = JSON.parse(xmlHttp.response);\n } catch (e) {\n // Not a JSON response\n message = xmlHttp.response;\n }\n } else {\n message = xmlHttp.response;\n }\n callback(message);\n };\n xmlHttp.open('GET', url + getParamString(params), true);\n xmlHttp.responseType = 'json';\n xmlHttp.setRequestHeader('Accept', 'application/json');\n xmlHttp.send(null);\n}\n\nexport function template(str, data) {\n return str.replace(/\\{ *([\\w_]+) *\\}/g, function(str, key) {\n var value = data[key];\n if (value === undefined) {\n value = '';\n } else if (typeof value === 'function') {\n value = value(data);\n }\n return htmlEscape(value);\n });\n}\n\nexport function getParamString(obj, existingUrl, uppercase) {\n var params = [];\n for (var i in obj) {\n var key = encodeURIComponent(uppercase ? i.toUpperCase() : i);\n var value = obj[i];\n if (!L.Util.isArray(value)) {\n params.push(key + '=' + encodeURIComponent(value));\n } else {\n for (var j = 0; j < value.length; j++) {\n params.push(key + '=' + encodeURIComponent(value[j]));\n }\n }\n }\n return (!existingUrl || existingUrl.indexOf('?') === -1 ? '?' : '&') + params.join('&');\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var ArcGis = L.Class.extend({\n options: {\n service_url: 'https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer'\n },\n\n initialize: function(accessToken, options) {\n L.setOptions(this, options);\n this._accessToken = accessToken;\n },\n\n geocode: function(query, cb, context) {\n var params = {\n SingleLine: query,\n outFields: 'Addr_Type',\n forStorage: false,\n maxLocations: 10,\n f: 'json'\n };\n\n if (this._key && this._key.length) {\n params.token = this._key;\n }\n\n getJSON(\n this.options.service_url + '/findAddressCandidates',\n L.extend(params, this.options.geocodingQueryParams),\n function(data) {\n var results = [],\n loc,\n latLng,\n latLngBounds;\n\n if (data.candidates && data.candidates.length) {\n for (var i = 0; i <= data.candidates.length - 1; i++) {\n loc = data.candidates[i];\n latLng = L.latLng(loc.location.y, loc.location.x);\n latLngBounds = L.latLngBounds(\n L.latLng(loc.extent.ymax, loc.extent.xmax),\n L.latLng(loc.extent.ymin, loc.extent.xmin)\n );\n results[i] = {\n name: loc.address,\n bbox: latLngBounds,\n center: latLng\n };\n }\n }\n\n cb.call(context, results);\n }\n );\n },\n\n suggest: function(query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n reverse: function(location, scale, cb, context) {\n var params = {\n location: encodeURIComponent(location.lng) + ',' + encodeURIComponent(location.lat),\n distance: 100,\n f: 'json'\n };\n\n getJSON(this.options.service_url + '/reverseGeocode', params, function(data) {\n var result = [],\n loc;\n\n if (data && !data.error) {\n loc = L.latLng(data.location.y, data.location.x);\n result.push({\n name: data.address.Match_addr,\n center: loc,\n bounds: L.latLngBounds(loc, loc)\n });\n }\n\n cb.call(context, result);\n });\n }\n});\n\nexport function arcgis(accessToken, options) {\n return new ArcGis(accessToken, options);\n}\n","import L from 'leaflet';\nimport { jsonp } from '../util';\n\nexport var Bing = L.Class.extend({\n initialize: function(key) {\n this.key = key;\n },\n\n geocode: function(query, cb, context) {\n jsonp(\n 'https://dev.virtualearth.net/REST/v1/Locations',\n {\n query: query,\n key: this.key\n },\n function(data) {\n var results = [];\n if (data.resourceSets.length > 0) {\n for (var i = data.resourceSets[0].resources.length - 1; i >= 0; i--) {\n var resource = data.resourceSets[0].resources[i],\n bbox = resource.bbox;\n results[i] = {\n name: resource.name,\n bbox: L.latLngBounds([bbox[0], bbox[1]], [bbox[2], bbox[3]]),\n center: L.latLng(resource.point.coordinates)\n };\n }\n }\n cb.call(context, results);\n },\n this,\n 'jsonp'\n );\n },\n\n reverse: function(location, scale, cb, context) {\n jsonp(\n '//dev.virtualearth.net/REST/v1/Locations/' + location.lat + ',' + location.lng,\n {\n key: this.key\n },\n function(data) {\n var results = [];\n for (var i = data.resourceSets[0].resources.length - 1; i >= 0; i--) {\n var resource = data.resourceSets[0].resources[i],\n bbox = resource.bbox;\n results[i] = {\n name: resource.name,\n bbox: L.latLngBounds([bbox[0], bbox[1]], [bbox[2], bbox[3]]),\n center: L.latLng(resource.point.coordinates)\n };\n }\n cb.call(context, results);\n },\n this,\n 'jsonp'\n );\n }\n});\n\nexport function bing(key) {\n return new Bing(key);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var Google = L.Class.extend({\n options: {\n serviceUrl: 'https://maps.googleapis.com/maps/api/geocode/json',\n geocodingQueryParams: {},\n reverseQueryParams: {}\n },\n\n initialize: function(key, options) {\n this._key = key;\n L.setOptions(this, options);\n // Backwards compatibility\n this.options.serviceUrl = this.options.service_url || this.options.serviceUrl;\n },\n\n geocode: function(query, cb, context) {\n var params = {\n address: query\n };\n\n if (this._key && this._key.length) {\n params.key = this._key;\n }\n\n params = L.Util.extend(params, this.options.geocodingQueryParams);\n\n getJSON(this.options.serviceUrl, params, function(data) {\n var results = [],\n loc,\n latLng,\n latLngBounds;\n if (data.results && data.results.length) {\n for (var i = 0; i <= data.results.length - 1; i++) {\n loc = data.results[i];\n latLng = L.latLng(loc.geometry.location);\n latLngBounds = L.latLngBounds(\n L.latLng(loc.geometry.viewport.northeast),\n L.latLng(loc.geometry.viewport.southwest)\n );\n results[i] = {\n name: loc.formatted_address,\n bbox: latLngBounds,\n center: latLng,\n properties: loc.address_components\n };\n }\n }\n\n cb.call(context, results);\n });\n },\n\n reverse: function(location, scale, cb, context) {\n var params = {\n latlng: encodeURIComponent(location.lat) + ',' + encodeURIComponent(location.lng)\n };\n params = L.Util.extend(params, this.options.reverseQueryParams);\n if (this._key && this._key.length) {\n params.key = this._key;\n }\n\n getJSON(this.options.serviceUrl, params, function(data) {\n var results = [],\n loc,\n latLng,\n latLngBounds;\n if (data.results && data.results.length) {\n for (var i = 0; i <= data.results.length - 1; i++) {\n loc = data.results[i];\n latLng = L.latLng(loc.geometry.location);\n latLngBounds = L.latLngBounds(\n L.latLng(loc.geometry.viewport.northeast),\n L.latLng(loc.geometry.viewport.southwest)\n );\n results[i] = {\n name: loc.formatted_address,\n bbox: latLngBounds,\n center: latLng,\n properties: loc.address_components\n };\n }\n }\n\n cb.call(context, results);\n });\n }\n});\n\nexport function google(key, options) {\n return new Google(key, options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\nexport var HERE = L.Class.extend({\n options: {\n geocodeUrl: 'https://geocoder.api.here.com/6.2/geocode.json',\n reverseGeocodeUrl: 'https://reverse.geocoder.api.here.com/6.2/reversegeocode.json',\n app_id: '<insert your app_id here>',\n app_code: '<insert your app_code here>',\n geocodingQueryParams: {},\n reverseQueryParams: {},\n reverseGeocodeProxRadius: null\n },\n initialize: function(options) {\n L.setOptions(this, options);\n },\n geocode: function(query, cb, context) {\n var params = {\n searchtext: query,\n gen: 9,\n app_id: this.options.app_id,\n app_code: this.options.app_code,\n jsonattributes: 1\n };\n params = L.Util.extend(params, this.options.geocodingQueryParams);\n this.getJSON(this.options.geocodeUrl, params, cb, context);\n },\n reverse: function(location, scale, cb, context) {\n var _proxRadius = this.options.reverseGeocodeProxRadius\n ? this.options.reverseGeocodeProxRadius\n : null;\n var proxRadius = _proxRadius ? ',' + encodeURIComponent(_proxRadius) : '';\n var params = {\n prox: encodeURIComponent(location.lat) + ',' + encodeURIComponent(location.lng) + proxRadius,\n mode: 'retrieveAddresses',\n app_id: this.options.app_id,\n app_code: this.options.app_code,\n gen: 9,\n jsonattributes: 1\n };\n params = L.Util.extend(params, this.options.reverseQueryParams);\n this.getJSON(this.options.reverseGeocodeUrl, params, cb, context);\n },\n getJSON: function(url, params, cb, context) {\n getJSON(url, params, function(data) {\n var results = [],\n loc,\n latLng,\n latLngBounds;\n if (data.response.view && data.response.view.length) {\n for (var i = 0; i <= data.response.view[0].result.length - 1; i++) {\n loc = data.response.view[0].result[i].location;\n latLng = L.latLng(loc.displayPosition.latitude, loc.displayPosition.longitude);\n latLngBounds = L.latLngBounds(\n L.latLng(loc.mapView.topLeft.latitude, loc.mapView.topLeft.longitude),\n L.latLng(loc.mapView.bottomRight.latitude, loc.mapView.bottomRight.longitude)\n );\n results[i] = {\n name: loc.address.label,\n properties: loc.address,\n bbox: latLngBounds,\n center: latLng\n };\n }\n }\n cb.call(context, results);\n });\n }\n});\nexport function here(options) {\n return new HERE(options);\n}\n","import L from 'leaflet';\n\nexport var LatLng = L.Class.extend({\n options: {\n // the next geocoder to use\n next: undefined,\n sizeInMeters: 10000\n },\n\n initialize: function(options) {\n L.Util.setOptions(this, options);\n },\n\n geocode: function(query, cb, context) {\n var match;\n var center;\n // regex from https://github.com/openstreetmap/openstreetmap-website/blob/master/app/controllers/geocoder_controller.rb\n if ((match = query.match(/^([NS])\\s*(\\d{1,3}(?:\\.\\d*)?)\\W*([EW])\\s*(\\d{1,3}(?:\\.\\d*)?)$/))) {\n // [NSEW] decimal degrees\n center = L.latLng(\n (/N/i.test(match[1]) ? 1 : -1) * parseFloat(match[2]),\n (/E/i.test(match[3]) ? 1 : -1) * parseFloat(match[4])\n );\n } else if (\n (match = query.match(/^(\\d{1,3}(?:\\.\\d*)?)\\s*([NS])\\W*(\\d{1,3}(?:\\.\\d*)?)\\s*([EW])$/))\n ) {\n // decimal degrees [NSEW]\n center = L.latLng(\n (/N/i.test(match[2]) ? 1 : -1) * parseFloat(match[1]),\n (/E/i.test(match[4]) ? 1 : -1) * parseFloat(match[3])\n );\n } else if (\n (match = query.match(\n /^([NS])\\s*(\\d{1,3})°?\\s*(\\d{1,3}(?:\\.\\d*)?)?['′]?\\W*([EW])\\s*(\\d{1,3})°?\\s*(\\d{1,3}(?:\\.\\d*)?)?['′]?$/\n ))\n ) {\n // [NSEW] degrees, decimal minutes\n center = L.latLng(\n (/N/i.test(match[1]) ? 1 : -1) * (parseFloat(match[2]) + parseFloat(match[3] / 60)),\n (/E/i.test(match[4]) ? 1 : -1) * (parseFloat(match[5]) + parseFloat(match[6] / 60))\n );\n } else if (\n (match = query.match(\n /^(\\d{1,3})°?\\s*(\\d{1,3}(?:\\.\\d*)?)?['′]?\\s*([NS])\\W*(\\d{1,3})°?\\s*(\\d{1,3}(?:\\.\\d*)?)?['′]?\\s*([EW])$/\n ))\n ) {\n // degrees, decimal minutes [NSEW]\n center = L.latLng(\n (/N/i.test(match[3]) ? 1 : -1) * (parseFloat(match[1]) + parseFloat(match[2] / 60)),\n (/E/i.test(match[6]) ? 1 : -1) * (parseFloat(match[4]) + parseFloat(match[5] / 60))\n );\n } else if (\n (match = query.match(\n /^([NS])\\s*(\\d{1,3})°?\\s*(\\d{1,2})['′]?\\s*(\\d{1,3}(?:\\.\\d*)?)?[\"″]?\\W*([EW])\\s*(\\d{1,3})°?\\s*(\\d{1,2})['′]?\\s*(\\d{1,3}(?:\\.\\d*)?)?[\"″]?$/\n ))\n ) {\n // [NSEW] degrees, minutes, decimal seconds\n center = L.latLng(\n (/N/i.test(match[1]) ? 1 : -1) *\n (parseFloat(match[2]) + parseFloat(match[3] / 60 + parseFloat(match[4] / 3600))),\n (/E/i.test(match[5]) ? 1 : -1) *\n (parseFloat(match[6]) + parseFloat(match[7] / 60) + parseFloat(match[8] / 3600))\n );\n } else if (\n (match = query.match(\n /^(\\d{1,3})°?\\s*(\\d{1,2})['′]?\\s*(\\d{1,3}(?:\\.\\d*)?)?[\"″]\\s*([NS])\\W*(\\d{1,3})°?\\s*(\\d{1,2})['′]?\\s*(\\d{1,3}(?:\\.\\d*)?)?[\"″]?\\s*([EW])$/\n ))\n ) {\n // degrees, minutes, decimal seconds [NSEW]\n center = L.latLng(\n (/N/i.test(match[4]) ? 1 : -1) *\n (parseFloat(match[1]) + parseFloat(match[2] / 60 + parseFloat(match[3] / 3600))),\n (/E/i.test(match[8]) ? 1 : -1) *\n (parseFloat(match[5]) + parseFloat(match[6] / 60) + parseFloat(match[7] / 3600))\n );\n } else if (\n (match = query.match(/^\\s*([+-]?\\d+(?:\\.\\d*)?)\\s*[\\s,]\\s*([+-]?\\d+(?:\\.\\d*)?)\\s*$/))\n ) {\n center = L.latLng(parseFloat(match[1]), parseFloat(match[2]));\n }\n if (center) {\n var results = [\n {\n name: query,\n center: center,\n bbox: center.toBounds(this.options.sizeInMeters)\n }\n ];\n cb.call(context, results);\n } else if (this.options.next) {\n this.options.next.geocode(query, cb, context);\n }\n }\n});\n\nexport function latLng(options) {\n return new LatLng(options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var Mapbox = L.Class.extend({\n options: {\n serviceUrl: 'https://api.mapbox.com/geocoding/v5/mapbox.places/',\n geocodingQueryParams: {},\n reverseQueryParams: {}\n },\n\n initialize: function(accessToken, options) {\n L.setOptions(this, options);\n this.options.geocodingQueryParams.access_token = accessToken;\n this.options.reverseQueryParams.access_token = accessToken;\n },\n\n geocode: function(query, cb, context) {\n var params = this.options.geocodingQueryParams;\n if (\n params.proximity !== undefined &&\n params.proximity.lat !== undefined &&\n params.proximity.lng !== undefined\n ) {\n params.proximity = params.proximity.lng + ',' + params.proximity.lat;\n }\n getJSON(this.options.serviceUrl + encodeURIComponent(query) + '.json', params, function(data) {\n var results = [],\n loc,\n latLng,\n latLngBounds;\n if (data.features && data.features.length) {\n for (var i = 0; i <= data.features.length - 1; i++) {\n loc = data.features[i];\n latLng = L.latLng(loc.center.reverse());\n if (loc.bbox) {\n latLngBounds = L.latLngBounds(\n L.latLng(loc.bbox.slice(0, 2).reverse()),\n L.latLng(loc.bbox.slice(2, 4).reverse())\n );\n } else {\n latLngBounds = L.latLngBounds(latLng, latLng);\n }\n\n var properties = {\n text: loc.text,\n address: loc.address\n };\n\n for (var j = 0; j < (loc.context || []).length; j++) {\n var id = loc.context[j].id.split('.')[0];\n properties[id] = loc.context[j].text;\n\n // Get country code when available\n if (loc.context[j].short_code) {\n properties['countryShortCode'] = loc.context[j].short_code;\n }\n }\n\n results[i] = {\n name: loc.place_name,\n bbox: latLngBounds,\n center: latLng,\n properties: properties\n };\n }\n }\n\n cb.call(context, results);\n });\n },\n\n suggest: function(query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n reverse: function(location, scale, cb, context) {\n getJSON(\n this.options.serviceUrl +\n encodeURIComponent(location.lng) +\n ',' +\n encodeURIComponent(location.lat) +\n '.json',\n this.options.reverseQueryParams,\n function(data) {\n var results = [],\n loc,\n latLng,\n latLngBounds;\n if (data.features && data.features.length) {\n for (var i = 0; i <= data.features.length - 1; i++) {\n loc = data.features[i];\n latLng = L.latLng(loc.center.reverse());\n if (loc.bbox) {\n latLngBounds = L.latLngBounds(\n L.latLng(loc.bbox.slice(0, 2).reverse()),\n L.latLng(loc.bbox.slice(2, 4).reverse())\n );\n } else {\n latLngBounds = L.latLngBounds(latLng, latLng);\n }\n results[i] = {\n name: loc.place_name,\n bbox: latLngBounds,\n center: latLng\n };\n }\n }\n\n cb.call(context, results);\n }\n );\n }\n});\n\nexport function mapbox(accessToken, options) {\n return new Mapbox(accessToken, options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var MapQuest = L.Class.extend({\n options: {\n serviceUrl: 'https://www.mapquestapi.com/geocoding/v1'\n },\n\n initialize: function(key, options) {\n // MapQuest seems to provide URI encoded API keys,\n // so to avoid encoding them twice, we decode them here\n this._key = decodeURIComponent(key);\n\n L.Util.setOptions(this, options);\n },\n\n _formatName: function() {\n var r = [],\n i;\n for (i = 0; i < arguments.length; i++) {\n if (arguments[i]) {\n r.push(arguments[i]);\n }\n }\n\n return r.join(', ');\n },\n\n geocode: function(query, cb, context) {\n getJSON(\n this.options.serviceUrl + '/address',\n {\n key: this._key,\n location: query,\n limit: 5,\n outFormat: 'json'\n },\n L.bind(function(data) {\n var results = [],\n loc,\n latLng;\n if (data.results && data.results[0].locations) {\n for (var i = data.results[0].locations.length - 1; i >= 0; i--) {\n loc = data.results[0].locations[i];\n latLng = L.latLng(loc.latLng);\n results[i] = {\n name: this._formatName(loc.street, loc.adminArea4, loc.adminArea3, loc.adminArea1),\n bbox: L.latLngBounds(latLng, latLng),\n center: latLng\n };\n }\n }\n\n cb.call(context, results);\n }, this)\n );\n },\n\n reverse: function(location, scale, cb, context) {\n getJSON(\n this.options.serviceUrl + '/reverse',\n {\n key: this._key,\n location: location.lat + ',' + location.lng,\n outputFormat: 'json'\n },\n L.bind(function(data) {\n var results = [],\n loc,\n latLng;\n if (data.results && data.results[0].locations) {\n for (var i = data.results[0].locations.length - 1; i >= 0; i--) {\n loc = data.results[0].locations[i];\n latLng = L.latLng(loc.latLng);\n results[i] = {\n name: this._formatName(loc.street, loc.adminArea4, loc.adminArea3, loc.adminArea1),\n bbox: L.latLngBounds(latLng, latLng),\n center: latLng\n };\n }\n }\n\n cb.call(context, results);\n }, this)\n );\n }\n});\n\nexport function mapQuest(key, options) {\n return new MapQuest(key, options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var Neutrino = L.Class.extend({\n options: {\n userId: '<insert your userId here>',\n apiKey: '<insert your apiKey here>',\n serviceUrl: 'https://neutrinoapi.com/'\n },\n\n initialize: function(options) {\n L.Util.setOptions(this, options);\n },\n\n // https://www.neutrinoapi.com/api/geocode-address/\n geocode: function(query, cb, context) {\n getJSON(\n this.options.serviceUrl + 'geocode-address',\n {\n apiKey: this.options.apiKey,\n userId: this.options.userId,\n //get three words and make a dot based string\n address: query.split(/\\s+/).join('.')\n },\n function(data) {\n var results = [],\n latLng,\n latLngBounds;\n if (data.locations) {\n data.geometry = data.locations[0];\n latLng = L.latLng(data.geometry['latitude'], data.geometry['longitude']);\n latLngBounds = L.latLngBounds(latLng, latLng);\n results[0] = {\n name: data.geometry.address,\n bbox: latLngBounds,\n center: latLng\n };\n }\n\n cb.call(context, results);\n }\n );\n },\n\n suggest: function(query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n // https://www.neutrinoapi.com/api/geocode-reverse/\n reverse: function(location, scale, cb, context) {\n getJSON(\n this.options.serviceUrl + 'geocode-reverse',\n {\n apiKey: this.options.apiKey,\n userId: this.options.userId,\n latitude: location.lat,\n longitude: location.lng\n },\n function(data) {\n var results = [],\n latLng,\n latLngBounds;\n if (data.status.status == 200 && data.found) {\n latLng = L.latLng(location.lat, location.lng);\n latLngBounds = L.latLngBounds(latLng, latLng);\n results[0] = {\n name: data.address,\n bbox: latLngBounds,\n center: latLng\n };\n }\n cb.call(context, results);\n }\n );\n }\n});\n\nexport function neutrino(accessToken) {\n return new Neutrino(accessToken);\n}\n","import L from 'leaflet';\nimport { template, getJSON } from '../util';\n\nexport var Nominatim = L.Class.extend({\n options: {\n serviceUrl: 'https://nominatim.openstreetmap.org/',\n geocodingQueryParams: {},\n reverseQueryParams: {},\n htmlTemplate: function(r) {\n var a = r.address,\n className,\n parts = [];\n if (a.road || a.building) {\n parts.push('{building} {road} {house_number}');\n }\n\n if (a.city || a.town || a.village || a.hamlet) {\n className = parts.length > 0 ? 'leaflet-control-geocoder-address-detail' : '';\n parts.push(\n '<span class=\"' + className + '\">{postcode} {city} {town} {village} {hamlet}</span>'\n );\n }\n\n if (a.state || a.country) {\n className = parts.length > 0 ? 'leaflet-control-geocoder-address-context' : '';\n parts.push('<span class=\"' + className + '\">{state} {country}</span>');\n }\n\n return template(parts.join('<br/>'), a, true);\n }\n },\n\n initialize: function(options) {\n L.Util.setOptions(this, options);\n },\n\n geocode: function(query, cb, context) {\n getJSON(\n this.options.serviceUrl + 'search',\n L.extend(\n {\n q: query,\n limit: 5,\n format: 'json',\n addressdetails: 1\n },\n this.options.geocodingQueryParams\n ),\n L.bind(function(data) {\n var results = [];\n for (var i = data.length - 1; i >= 0; i--) {\n var bbox = data[i].boundingbox;\n for (var j = 0; j < 4; j++) bbox[j] = parseFloat(bbox[j]);\n results[i] = {\n icon: data[i].icon,\n name: data[i].display_name,\n html: this.options.htmlTemplate ? this.options.htmlTemplate(data[i]) : undefined,\n bbox: L.latLngBounds([bbox[0], bbox[2]], [bbox[1], bbox[3]]),\n center: L.latLng(data[i].lat, data[i].lon),\n properties: data[i]\n };\n }\n cb.call(context, results);\n }, this)\n );\n },\n\n suggest: function (query, cb, context) {\n return this.geocode(query, cb, context);\n},\n\n reverse: function(location, scale, cb, context) {\n getJSON(\n this.options.serviceUrl + 'reverse',\n L.extend(\n {\n lat: location.lat,\n lon: location.lng,\n zoom: Math.round(Math.log(scale / 256) / Math.log(2)),\n addressdetails: 1,\n format: 'json'\n },\n this.options.reverseQueryParams\n ),\n L.bind(function(data) {\n var result = [],\n loc;\n\n if (data && data.lat && data.lon) {\n loc = L.latLng(data.lat, data.lon);\n result.push({\n name: data.display_name,\n html: this.options.htmlTemplate ? this.options.htmlTemplate(data) : undefined,\n center: loc,\n bounds: L.latLngBounds(loc, loc),\n properties: data\n });\n }\n\n cb.call(context, result);\n }, this)\n );\n }\n});\n\nexport function nominatim(options) {\n return new Nominatim(options);\n}\n","import L from 'leaflet';\n\nexport var OpenLocationCode = L.Class.extend({\n options: {\n OpenLocationCode: undefined,\n codeLength: undefined\n },\n\n initialize: function(options) {\n L.setOptions(this, options);\n },\n\n geocode: function(query, cb, context) {\n try {\n var decoded = this.options.OpenLocationCode.decode(query);\n var result = {\n name: query,\n center: L.latLng(decoded.latitudeCenter, decoded.longitudeCenter),\n bbox: L.latLngBounds(\n L.latLng(decoded.latitudeLo, decoded.longitudeLo),\n L.latLng(decoded.latitudeHi, decoded.longitudeHi)\n )\n };\n cb.call(context, [result]);\n } catch (e) {\n console.warn(e); // eslint-disable-line no-console\n cb.call(context, []);\n }\n },\n reverse: function(location, scale, cb, context) {\n try {\n var code = this.options.OpenLocationCode.encode(\n location.lat,\n location.lng,\n this.options.codeLength\n );\n var result = {\n name: code,\n center: L.latLng(location.lat, location.lng),\n bbox: L.latLngBounds(\n L.latLng(location.lat, location.lng),\n L.latLng(location.lat, location.lng)\n )\n };\n cb.call(context, [result]);\n } catch (e) {\n console.warn(e); // eslint-disable-line no-console\n cb.call(context, []);\n }\n }\n});\n\nexport function openLocationCode(options) {\n return new OpenLocationCode(options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var OpenCage = L.Class.extend({\n options: {\n serviceUrl: 'https://api.opencagedata.com/geocode/v1/json',\n geocodingQueryParams: {},\n reverseQueryParams: {}\n },\n\n initialize: function(apiKey, options) {\n L.setOptions(this, options);\n this._accessToken = apiKey;\n },\n\n geocode: function(query, cb, context) {\n var params = {\n key: this._accessToken,\n q: query\n };\n params = L.extend(params, this.options.geocodingQueryParams);\n getJSON(this.options.serviceUrl, params, function(data) {\n var results = [],\n latLng,\n latLngBounds,\n loc;\n if (data.results && data.results.length) {\n for (var i = 0; i < data.results.length; i++) {\n loc = data.results[i];\n latLng = L.latLng(loc.geometry);\n if (loc.annotations && loc.annotations.bounds) {\n latLngBounds = L.latLngBounds(\n L.latLng(loc.annotations.bounds.northeast),\n L.latLng(loc.annotations.bounds.southwest)\n );\n } else {\n latLngBounds = L.latLngBounds(latLng, latLng);\n }\n results.push({\n name: loc.formatted,\n bbox: latLngBounds,\n center: latLng\n });\n }\n }\n cb.call(context, results);\n });\n },\n\n suggest: function(query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n reverse: function(location, scale, cb, context) {\n var params = {\n key: this._accessToken,\n q: [location.lat, location.lng].join(',')\n };\n params = L.extend(params, this.options.reverseQueryParams);\n getJSON(this.options.serviceUrl, params, function(data) {\n var results = [],\n latLng,\n latLngBounds,\n loc;\n if (data.results && data.results.length) {\n for (var i = 0; i < data.results.length; i++) {\n loc = data.results[i];\n latLng = L.latLng(loc.geometry);\n if (loc.annotations && loc.annotations.bounds) {\n latLngBounds = L.latLngBounds(\n L.latLng(loc.annotations.bounds.northeast),\n L.latLng(loc.annotations.bounds.southwest)\n );\n } else {\n latLngBounds = L.latLngBounds(latLng, latLng);\n }\n results.push({\n name: loc.formatted,\n bbox: latLngBounds,\n center: latLng\n });\n }\n }\n cb.call(context, results);\n });\n }\n});\n\nexport function opencage(apiKey, options) {\n return new OpenCage(apiKey, options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var Pelias = L.Class.extend({\n options: {\n serviceUrl: 'https://api.geocode.earth/v1',\n geocodingQueryParams: {},\n reverseQueryParams: {}\n },\n\n initialize: function(apiKey, options) {\n L.Util.setOptions(this, options);\n this._apiKey = apiKey;\n this._lastSuggest = 0;\n },\n\n geocode: function(query, cb, context) {\n var _this = this;\n getJSON(\n this.options.serviceUrl + '/search',\n L.extend(\n {\n api_key: this._apiKey,\n text: query\n },\n this.options.geocodingQueryParams\n ),\n function(data) {\n cb.call(context, _this._parseResults(data, 'bbox'));\n }\n );\n },\n\n suggest: function(query, cb, context) {\n var _this = this;\n getJSON(\n this.options.serviceUrl + '/autocomplete',\n L.extend(\n {\n api_key: this._apiKey,\n text: query\n },\n this.options.geocodingQueryParams\n ),\n L.bind(function(data) {\n if (data.geocoding.timestamp > this._lastSuggest) {\n this._lastSuggest = data.geocoding.timestamp;\n cb.call(context, _this._parseResults(data, 'bbox'));\n }\n }, this)\n );\n },\n\n reverse: function(location, scale, cb, context) {\n var _this = this;\n getJSON(\n this.options.serviceUrl + '/reverse',\n L.extend(\n {\n api_key: this._apiKey,\n 'point.lat': location.lat,\n 'point.lon': location.lng\n },\n this.options.reverseQueryParams\n ),\n function(data) {\n cb.call(context, _this._parseResults(data, 'bounds'));\n }\n );\n },\n\n _parseResults: function(data, bboxname) {\n var results = [];\n L.geoJson(data, {\n pointToLayer: function(feature, latlng) {\n return L.circleMarker(latlng);\n },\n onEachFeature: function(feature, layer) {\n var result = {},\n bbox,\n center;\n\n if (layer.getBounds) {\n bbox = layer.getBounds();\n center = bbox.getCenter();\n } else if (layer.feature.bbox) {\n center = layer.getLatLng();\n bbox = L.latLngBounds(\n L.GeoJSON.coordsToLatLng(layer.feature.bbox.slice(0, 2)),\n L.GeoJSON.coordsToLatLng(layer.feature.bbox.slice(2, 4))\n );\n } else {\n center = layer.getLatLng();\n bbox = L.latLngBounds(center, center);\n }\n\n result.name = layer.feature.properties.label;\n result.center = center;\n result[bboxname] = bbox;\n result.properties = layer.feature.properties;\n results.push(result);\n }\n });\n return results;\n }\n});\n\nexport function pelias(apiKey, options) {\n return new Pelias(apiKey, options);\n}\nexport var GeocodeEarth = Pelias;\nexport var geocodeEarth = pelias;\n\nexport var Mapzen = Pelias; // r.i.p.\nexport var mapzen = pelias;\n\nexport var Openrouteservice = Mapzen.extend({\n options: {\n serviceUrl: 'https://api.openrouteservice.org/geocode'\n }\n});\nexport function openrouteservice(apiKey, options) {\n return new Openrouteservice(apiKey, options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var Photon = L.Class.extend({\n options: {\n serviceUrl: 'https://photon.komoot.de/api/',\n reverseUrl: 'https://photon.komoot.de/reverse/',\n nameProperties: ['name', 'street', 'suburb', 'hamlet', 'town', 'city', 'state', 'country']\n },\n\n initialize: function(options) {\n L.setOptions(this, options);\n },\n\n geocode: function(query, cb, context) {\n var params = L.extend(\n {\n q: query\n },\n this.options.geocodingQueryParams\n );\n\n getJSON(\n this.options.serviceUrl,\n params,\n L.bind(function(data) {\n cb.call(context, this._decodeFeatures(data));\n }, this)\n );\n },\n\n suggest: function(query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n reverse: function(latLng, scale, cb, context) {\n var params = L.extend(\n {\n lat: latLng.lat,\n lon: latLng.lng\n },\n this.options.reverseQueryParams\n );\n\n getJSON(\n this.options.reverseUrl,\n params,\n L.bind(function(data) {\n cb.call(context, this._decodeFeatures(data));\n }, this)\n );\n },\n\n _decodeFeatures: function(data) {\n var results = [],\n i,\n f,\n c,\n latLng,\n extent,\n bbox;\n\n if (data && data.features) {\n for (i = 0; i < data.features.length; i++) {\n f = data.features[i];\n c = f.geometry.coordinates;\n latLng = L.latLng(c[1], c[0]);\n extent = f.properties.extent;\n\n if (extent) {\n bbox = L.latLngBounds([extent[1], extent[0]], [extent[3], extent[2]]);\n } else {\n bbox = L.latLngBounds(latLng, latLng);\n }\n\n results.push({\n name: this._decodeFeatureName(f),\n html: this.options.htmlTemplate ? this.options.htmlTemplate(f) : undefined,\n center: latLng,\n bbox: bbox,\n properties: f.properties\n });\n }\n }\n\n return results;\n },\n\n _decodeFeatureName: function(f) {\n return (this.options.nameProperties || [])\n .map(function(p) {\n return f.properties[p];\n })\n .filter(function(v) {\n return !!v;\n })\n .join(', ');\n }\n});\n\nexport function photon(options) {\n return new Photon(options);\n}\n","'use strict';\n\nimport { getJSON, template } from '../util';\nimport L from 'leaflet';\n\nconst TYPE_LABEL = {\n housenumber: 'Numéro',\n street: 'Rue',\n locality: 'Lieux-dit',\n municipality: 'Commune',\n};\n\nexport var AddOk = L.Class.extend({\n options: {\n serviceUrl: 'https://api-adresse.data.gouv.fr',\n limit: 5,\n htmlTemplate: function (r) {\n var parts = [];\n\n\t\t\t/* some available classes:\n\t\t\t\tleaflet-control-geocoder-address-detail\n\t\t\t\tleaflet-control-geocoder-address-context\n\t\t\t*/\n parts.push('<span class=\"leaflet-control-geocoder-address-item\"> {label} </span>({type})<span>' + '</span>');\n parts.push('<span class=\"' + (parts.length > 0 ? 'leaflet-control-geocoder-address-detail' : '') +\n '\">{context}</span>');\n\n return template(parts.join('<br/>'), r, true);\n }\n\n },\n\n initialize: function (options) {\n L.setOptions(this, options);\n },\n\n geocode: function (query, cb, context) {\n\n var params = L.extend({\n q: query,\n limit: this.options.limit\n }, this.options.geocodingQueryParams);\n var that = this;\n\n getJSON(this.options.serviceUrl + '/search/', params, function (data) {\n var results = [],\n i,\n f,\n c,\n latLng,\n extent,\n bbox;\n if (data && data.features) {\n for (i = 0; i < data.features.length; i++) {\n f = data.features[i];\n c = f.geometry.coordinates;\n latLng = L.latLng(c[1], c[0]);\n extent = f.properties.extent;\n\n if (extent) {\n bbox = L.latLngBounds([extent[1], extent[0]], [extent[3], extent[2]]);\n } else {\n bbox = L.latLngBounds(latLng, latLng);\n }\n \n // Translate the type in french\n if (f.properties.type) {\n f.properties.type = TYPE_LABEL[f.properties.type];\n }\n \n results.push({\n name: f.properties.name,\n center: latLng,\n bbox: bbox,\n html: that.options.htmlTemplate ?\n that.options.htmlTemplate(f.properties)\n : undefined\n });\n }\n }\n\n cb.call(context, results);\n });\n },\n\n suggest: function (query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n reverse: function (location, scale, cb, context) {\n var params = L.extend({\n lat: location.lat,\n lon: location.lng\n }, this.options.reverseQueryParams);\n var that = this;\n getJSON(this.options.serviceUrl + '/reverse/', params, function (data) {\n var results = [],\n i,\n f,\n c,\n latLng,\n extent,\n bbox;\n if (data && data.features) {\n for (i = 0; i < data.features.length; i++) {\n f = data.features[i];\n c = f.geometry.coordinates;\n latLng = L.latLng(c[1], c[0]);\n extent = f.properties.extent;\n\n if (extent) {\n bbox = L.latLngBounds([extent[1], extent[0]], [extent[3], extent[2]]);\n } else {\n bbox = L.latLngBounds(latLng, latLng);\n }\n\n results.push({\n name: f.properties.name,\n center: latLng,\n bbox: bbox,\n html: that.options.htmlTemplate ?\n that.options.htmlTemplate(f.properties)\n : undefined\n });\n }\n }\n\n cb.call(context, results);\n });\n }\n});\n\n\nexport function addok(key) {\n return new AddOk(key);\n}","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var What3Words = L.Class.extend({\n options: {\n serviceUrl: 'https://api.what3words.com/v2/'\n },\n\n initialize: function(accessToken) {\n this._accessToken = accessToken;\n },\n\n geocode: function(query, cb, context) {\n //get three words and make a dot based string\n getJSON(\n this.options.serviceUrl + 'forward',\n {\n key: this._accessToken,\n addr: query.split(/\\s+/).join('.')\n },\n function(data) {\n var results = [],\n latLng,\n latLngBounds;\n if (data.geometry) {\n latLng = L.latLng(data.geometry['lat'], data.geometry['lng']);\n latLngBounds = L.latLngBounds(latLng, latLng);\n results[0] = {\n name: data.words,\n bbox: latLngBounds,\n center: latLng\n };\n }\n\n cb.call(context, results);\n }\n );\n },\n\n suggest: function(query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n reverse: function(location, scale, cb, context) {\n getJSON(\n this.options.serviceUrl + 'reverse',\n {\n key: this._accessToken,\n coords: [location.lat, location.lng].join(',')\n },\n function(data) {\n var results = [],\n latLng,\n latLngBounds;\n if (data.status.status == 200) {\n latLng = L.latLng(data.geometry['lat'], data.geometry['lng']);\n latLngBounds = L.latLngBounds(latLng, latLng);\n results[0] = {\n name: data.words,\n bbox: latLngBounds,\n center: latLng\n };\n }\n cb.call(context, results);\n }\n );\n }\n});\n\nexport function what3words(accessToken) {\n return new What3Words(accessToken);\n}\n","import L from 'leaflet';\nimport { Nominatim } from './geocoders/index';\n\nexport var Geocoder = L.Control.extend({\n options: {\n showUniqueResult: true,\n showResultIcons: false,\n collapsed: true,\n expand: 'touch', // options: touch, click, anythingelse\n position: 'topright',\n placeholder: 'Search...',\n errorMessage: 'Nothing found.',\n iconLabel: 'Initiate a new search',\n queryMinLength: 1,\n suggestMinLength: 3,\n suggestTimeout: 250,\n defaultMarkGeocode: true\n },\n\n includes: L.Evented.prototype || L.Mixin.Events,\n\n initialize: function(options) {\n L.Util.setOptions(this, options);\n if (!this.options.geocoder) {\n this.options.geocoder = new Nominatim();\n }\n\n this._requestCount = 0;\n },\n\n addThrobberClass: function() {\n L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-throbber');\n },\n\n removeThrobberClass: function() {\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-throbber');\n },\n\n onAdd: function(map) {\n var className = 'leaflet-control-geocoder',\n container = L.DomUtil.create('div', className + ' leaflet-bar'),\n icon = L.DomUtil.create('button', className + '-icon', container),\n form = (this._form = L.DomUtil.create('div', className + '-form', container)),\n input;\n\n this._map = map;\n this._container = container;\n\n icon.innerHTML = '&nbsp;';\n icon.type = 'button';\n icon.setAttribute('aria-label', this.options.iconLabel);\n\n input = this._input = L.DomUtil.create('input', '', form);\n input.type = 'text';\n input.value = this.options.query || '';\n input.placeholder = this.options.placeholder;\n L.DomEvent.disableClickPropagation(input);\n\n this._errorElement = L.DomUtil.create('div', className + '-form-no-error', container);\n this._errorElement.innerHTML = this.options.errorMessage;\n\n this._alts = L.DomUtil.create(\n 'ul',\n className + '-alternatives leaflet-control-geocoder-alternatives-minimized',\n container\n );\n L.DomEvent.disableClickPropagation(this._alts);\n\n L.DomEvent.addListener(input, 'keydown', this._keydown, this);\n if (this.options.geocoder.suggest) {\n L.DomEvent.addListener(input, 'input', this._change, this);\n }\n L.DomEvent.addListener(\n input,\n 'blur',\n function() {\n if (this.options.collapsed && !this._preventBlurCollapse) {\n this._collapse();\n }\n this._preventBlurCollapse = false;\n },\n this\n );\n\n if (this.options.collapsed) {\n if (this.options.expand === 'click') {\n L.DomEvent.addListener(\n container,\n 'click',\n function(e) {\n if (e.button === 0 && e.detail !== 2) {\n this._toggle();\n }\n },\n this\n );\n } else if (this.options.expand === 'touch') {\n L.DomEvent.addListener(\n container,\n L.Browser.touch ? 'touchstart mousedown' : 'mousedown',\n function(e) {\n this._toggle();\n e.preventDefault(); // mobile: clicking focuses the icon, so UI expands and immediately collapses\n e.stopPropagation();\n },\n this\n );\n } else {\n L.DomEvent.addListener(container, 'mouseover', this._expand, this);\n L.DomEvent.addListener(container, 'mouseout', this._collapse, this);\n this._map.on('movestart', this._collapse, this);\n }\n } else {\n this._expand();\n if (L.Browser.touch) {\n L.DomEvent.addListener(\n container,\n 'touchstart',\n function() {\n this._geocode();\n },\n this\n );\n } else {\n L.DomEvent.addListener(\n container,\n 'click',\n function() {\n this._geocode();\n },\n this\n );\n }\n }\n\n if (this.options.defaultMarkGeocode) {\n this.on('markgeocode', this.markGeocode, this);\n }\n\n this.on('startgeocode', this.addThrobberClass, this);\n this.on('finishgeocode', this.removeThrobberClass, this);\n this.on('startsuggest', this.addThrobberClass, this);\n this.on('finishsuggest', this.removeThrobberClass, this);\n\n L.DomEvent.disableClickPropagation(container);\n\n return container;\n },\n\n setQuery: function(string) {\n this._input.value = string;\n return this;\n },\n\n _geocodeResult: function(results, suggest) {\n if (!suggest && this.options.showUniqueResult && results.length === 1) {\n this._geocodeResultSelected(results[0]);\n } else if (results.length > 0) {\n this._alts.innerHTML = '';\n this._results = results;\n L.DomUtil.removeClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');\n L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-options-open');\n for (var i = 0; i < results.length; i++) {\n this._alts.appendChild(this._createAlt(results[i], i));\n }\n } else {\n L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-options-error');\n L.DomUtil.addClass(this._errorElement, 'leaflet-control-geocoder-error');\n }\n },\n\n markGeocode: function(result) {\n result = result.geocode || result;\n\n this._map.fitBounds(result.bbox);\n\n if (this._geocodeMarker) {\n this._map.removeLayer(this._geocodeMarker);\n }\n\n this._geocodeMarker = new L.Marker(result.center)\n .bindPopup(result.html || result.name)\n .addTo(this._map)\n .openPopup();\n\n return this;\n },\n\n _geocode: function(suggest) {\n var value = this._input.value;\n if (!suggest && value.length < this.options.queryMinLength) {\n return;\n }\n\n var requestCount = ++this._requestCount,\n mode = suggest ? 'suggest' : 'geocode',\n eventData = { input: value };\n\n this._lastGeocode = value;\n if (!suggest) {\n this._clearResults();\n }\n\n this.fire('start' + mode, eventData);\n this.options.geocoder[mode](\n value,\n function(results) {\n if (requestCount === this._requestCount) {\n eventData.results = results;\n this.fire('finish' + mode, eventData);\n this._geocodeResult(results, suggest);\n }\n },\n this\n );\n },\n\n _geocodeResultSelected: function(result) {\n this.fire('markgeocode', { geocode: result });\n },\n\n _toggle: function() {\n if (L.DomUtil.hasClass(this._container, 'leaflet-control-geocoder-expanded')) {\n this._collapse();\n } else {\n this._expand();\n }\n },\n\n _expand: function() {\n L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-expanded');\n this._input.select();\n this.fire('expand');\n },\n\n _collapse: function() {\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-expanded');\n L.DomUtil.addClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');\n L.DomUtil.removeClass(this._errorElement, 'leaflet-control-geocoder-error');\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-open');\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-error');\n this._input.blur(); // mobile: keyboard shouldn't stay expanded\n this.fire('collapse');\n },\n\n _clearResults: function() {\n L.DomUtil.addClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');\n this._selection = null;\n L.DomUtil.removeClass(this._errorElement, 'leaflet-control-geocoder-error');\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-open');\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-error');\n },\n\n _createAlt: function(result, index) {\n var li = L.DomUtil.create('li', ''),\n a = L.DomUtil.create('a', '', li),\n icon = this.options.showResultIcons && result.icon ? L.DomUtil.create('img', '', a) : null,\n text = result.html ? undefined : document.createTextNode(result.name),\n mouseDownHandler = function mouseDownHandler(e) {\n // In some browsers, a click will fire on the map if the control is\n // collapsed directly after mousedown. To work around this, we\n // wait until the click is completed, and _then_ collapse the\n // control. Messy, but this is the workaround I could come up with\n // for #142.\n this._preventBlurCollapse = true;\n L.DomEvent.stop(e);\n this._geocodeResultSelected(result);\n L.DomEvent.on(\n li,\n 'click touchend',\n function() {\n if (this.options.collapsed) {\n this._collapse();\n } else {\n this._clearResults();\n }\n },\n this\n );\n };\n\n if (icon) {\n icon.src = result.icon;\n }\n\n li.setAttribute('data-result-index', index);\n\n if (result.html) {\n a.innerHTML = a.innerHTML + result.html;\n } else {\n a.appendChild(text);\n }\n\n // Use mousedown and not click, since click will fire _after_ blur,\n // causing the control to have collapsed and removed the items\n // before the click can fire.\n L.DomEvent.addListener(li, 'mousedown touchstart', mouseDownHandler, this);\n\n return li;\n },\n\n _keydown: function(e) {\n var _this = this,\n select = function select(dir) {\n if (_this._selection) {\n L.DomUtil.removeClass(_this._selection, 'leaflet-control-geocoder-selected');\n _this._selection = _this._selection[dir > 0 ? 'nextSibling' : 'previousSibling'];\n }\n if (!_this._selection) {\n _this._selection = _this._alts[dir > 0 ? 'firstChild' : 'lastChild'];\n }\n\n if (_this._selection) {\n L.DomUtil.addClass(_this._selection, 'leaflet-control-geocoder-selected');\n }\n };\n\n switch (e.keyCode) {\n // Escape\n case 27:\n if (this.options.collapsed) {\n this._collapse();\n } else {\n this._clearResults();\n }\n break;\n // Up\n case 38:\n select(-1);\n break;\n // Up\n case 40:\n select(1);\n break;\n // Enter\n case 13:\n if (this._selection) {\n var index = parseInt(this._selection.getAttribute('data-result-index'), 10);\n this._geocodeResultSelected(this._results[index]);\n this._clearResults();\n } else {\n this._geocode();\n }\n break;\n default:\n return;\n }\n\n L.DomEvent.preventDefault(e);\n },\n _change: function() {\n var v = this._input.value;\n if (v !== this._lastGeocode) {\n clearTimeout(this._suggestTimeout);\n if (v.length >= this.options.suggestMinLength) {\n this._suggestTimeout = setTimeout(\n L.bind(function() {\n this._geocode(true);\n }, this),\n this.options.suggestTimeout\n );\n } else {\n this._clearResults();\n }\n }\n }\n});\n\nexport function geocoder(options) {\n return new Geocoder(options);\n}\n","import L from 'leaflet';\nimport { Geocoder, geocoder } from './control';\nimport * as geocoders from './geocoders/index';\n\nL.Util.extend(Geocoder, geocoders);\nexport default Geocoder;\n\nL.Util.extend(L.Control, {\n Geocoder: Geocoder,\n geocoder: geocoder\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;EACA,IAAI,cAAc,GAAG,CAAC,CAAC;AACvB;EACA;EACA;EACA,IAAI,QAAQ,GAAG,WAAW,CAAC;EAC3B,IAAI,QAAQ,GAAG,UAAU,CAAC;EAC1B,IAAI,MAAM,GAAG;EACb,EAAE,GAAG,EAAE,OAAO;EACd,EAAE,GAAG,EAAE,MAAM;EACb,EAAE,GAAG,EAAE,MAAM;EACb,EAAE,GAAG,EAAE,QAAQ;EACf,EAAE,GAAG,EAAE,QAAQ;EACf,EAAE,GAAG,EAAE,QAAQ;EACf,CAAC,CAAC;AACF;EACA,SAAS,UAAU,CAAC,GAAG,EAAE;EACzB,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;EACrB,CAAC;AACD;EACO,SAAS,UAAU,CAAC,MAAM,EAAE;EACnC,EAAE,IAAI,MAAM,IAAI,IAAI,EAAE;EACtB,IAAI,OAAO,EAAE,CAAC;EACd,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE;EACtB,IAAI,OAAO,MAAM,GAAG,EAAE,CAAC;EACvB,GAAG;AACH;EACA;EACA;EACA;EACA,EAAE,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC;AACvB;EACA,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;EAC9B,IAAI,OAAO,MAAM,CAAC;EAClB,GAAG;EACH,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;EAC9C,CAAC;AACD;EACO,SAAS,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;EAClE,EAAE,IAAI,UAAU,GAAG,cAAc,GAAG,cAAc,EAAE,CAAC;EACrD,EAAE,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,GAAG,UAAU,CAAC;EAChD,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;EACtD,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;EAChD,EAAE,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC;EAClC,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;EAC5C,EAAE,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC;EACzB,EAAE,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;EAC/D,CAAC;AACD;EACO,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;EAC/C,EAAE,IAAI,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;EACrC,EAAE,OAAO,CAAC,kBAAkB,GAAG,WAAW;EAC1C,IAAI,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,EAAE;EAClC,MAAM,OAAO;EACb,KAAK;EACL,IAAI,IAAI,OAAO,CAAC;EAChB,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE;EAC1D,MAAM,OAAO,GAAG,EAAE,CAAC;EACnB,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;EACrD;EACA,MAAM,IAAI;EACV,QAAQ,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;EAC/C,OAAO,CAAC,OAAO,CAAC,EAAE;EAClB;EACA,QAAQ,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;EACnC,OAAO;EACP,KAAK,MAAM;EACX,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;EACjC,KAAK;EACL,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;EACtB,GAAG,CAAC;EACJ,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;EAC1D,EAAE,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC;EAChC,EAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;EACzD,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACrB,CAAC;AACD;EACO,SAAS,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE;EACpC,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,SAAS,GAAG,EAAE,GAAG,EAAE;EAC7D,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;EAC1B,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;EAC7B,MAAM,KAAK,GAAG,EAAE,CAAC;EACjB,KAAK,MAAM,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;EAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;EAC1B,KAAK;EACL,IAAI,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;EAC7B,GAAG,CAAC,CAAC;EACL,CAAC;AACD;EACO,SAAS,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE;EAC5D,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;EAClB,EAAE,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE;EACrB,IAAI,IAAI,GAAG,GAAG,kBAAkB,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;EAClE,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EACvB,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;EAChC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;EACzD,KAAK,MAAM;EACX,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC7C,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9D,OAAO;EACP,KAAK;EACL,GAAG;EACH,EAAE,OAAO,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAC1F;;ECpGO,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACnC,EAAE,OAAO,EAAE;EACX,IAAI,WAAW,EAAE,qEAAqE;EACtF,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,WAAW,EAAE,OAAO,EAAE;EAC7C,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EAChC,IAAI,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;EACpC,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,IAAI,MAAM,GAAG;EACjB,MAAM,UAAU,EAAE,KAAK;EACvB,MAAM,SAAS,EAAE,WAAW;EAC5B,MAAM,UAAU,EAAE,KAAK;EACvB,MAAM,YAAY,EAAE,EAAE;EACtB,MAAM,CAAC,EAAE,MAAM;EACf,KAAK,CAAC;AACN;EACA,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;EACvC,MAAM,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;EAC/B,KAAK;AACL;EACA,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,wBAAwB;EACzD,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;EACzD,MAAM,SAAS,IAAI,EAAE;EACrB,QAAQ,IAAI,OAAO,GAAG,EAAE;EACxB,UAAU,GAAG;EACb,UAAU,MAAM;EAChB,UAAU,YAAY,CAAC;AACvB;EACA,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;EACvD,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;EAChE,YAAY,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;EACrC,YAAY,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC9D,YAAY,YAAY,GAAG,CAAC,CAAC,YAAY;EACzC,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;EACxD,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;EACxD,aAAa,CAAC;EACd,YAAY,OAAO,CAAC,CAAC,CAAC,GAAG;EACzB,cAAc,IAAI,EAAE,GAAG,CAAC,OAAO;EAC/B,cAAc,IAAI,EAAE,YAAY;EAChC,cAAc,MAAM,EAAE,MAAM;EAC5B,aAAa,CAAC;EACd,WAAW;EACX,SAAS;AACT;EACA,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAClC,OAAO;EACP,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;EAC5C,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAClD,IAAI,IAAI,MAAM,GAAG;EACjB,MAAM,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC;EACzF,MAAM,QAAQ,EAAE,GAAG;EACnB,MAAM,CAAC,EAAE,MAAM;EACf,KAAK,CAAC;AACN;EACA,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,iBAAiB,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE;EACjF,MAAM,IAAI,MAAM,GAAG,EAAE;EACrB,QAAQ,GAAG,CAAC;AACZ;EACA,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;EAC/B,QAAQ,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EACzD,QAAQ,MAAM,CAAC,IAAI,CAAC;EACpB,UAAU,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;EACvC,UAAU,MAAM,EAAE,GAAG;EACrB,UAAU,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;EAC1C,SAAS,CAAC,CAAC;EACX,OAAO;AACP;EACA,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;EAC/B,KAAK,CAAC,CAAC;EACP,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE;EAC7C,EAAE,OAAO,IAAI,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;EAC1C;;ECpFO,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACjC,EAAE,UAAU,EAAE,SAAS,GAAG,EAAE;EAC5B,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;EACnB,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,KAAK;EACT,MAAM,gDAAgD;EACtD,MAAM;EACN,QAAQ,KAAK,EAAE,KAAK;EACpB,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG;EACrB,OAAO;EACP,MAAM,SAAS,IAAI,EAAE;EACrB,QAAQ,IAAI,OAAO,GAAG,EAAE,CAAC;EACzB,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;EAC1C,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EAC/E,YAAY,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;EAC5D,cAAc,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EACnC,YAAY,OAAO,CAAC,CAAC,CAAC,GAAG;EACzB,cAAc,IAAI,EAAE,QAAQ,CAAC,IAAI;EACjC,cAAc,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAC1E,cAAc,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;EAC1D,aAAa,CAAC;EACd,WAAW;EACX,SAAS;EACT,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAClC,OAAO;EACP,MAAM,IAAI;EACV,MAAM,OAAO;EACb,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAClD,IAAI,KAAK;EACT,MAAM,2CAA2C,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG;EACrF,MAAM;EACN,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG;EACrB,OAAO;EACP,MAAM,SAAS,IAAI,EAAE;EACrB,QAAQ,IAAI,OAAO,GAAG,EAAE,CAAC;EACzB,QAAQ,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EAC7E,UAAU,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;EAC1D,YAAY,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EACjC,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG;EACvB,YAAY,IAAI,EAAE,QAAQ,CAAC,IAAI;EAC/B,YAAY,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACxE,YAAY,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;EACxD,WAAW,CAAC;EACZ,SAAS;EACT,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAClC,OAAO;EACP,MAAM,IAAI;EACV,MAAM,OAAO;EACb,KAAK,CAAC;EACN,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,IAAI,CAAC,GAAG,EAAE;EAC1B,EAAE,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;EACvB;;EC3DO,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACnC,EAAE,OAAO,EAAE;EACX,IAAI,UAAU,EAAE,mDAAmD;EACnE,IAAI,oBAAoB,EAAE,EAAE;EAC5B,IAAI,kBAAkB,EAAE,EAAE;EAC1B,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,GAAG,EAAE,OAAO,EAAE;EACrC,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;EACpB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EAChC;EACA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;EAClF,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,IAAI,MAAM,GAAG;EACjB,MAAM,OAAO,EAAE,KAAK;EACpB,KAAK,CAAC;AACN;EACA,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;EACvC,MAAM,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;EAC7B,KAAK;AACL;EACA,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;AACtE;EACA,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE;EAC5D,MAAM,IAAI,OAAO,GAAG,EAAE;EACtB,QAAQ,GAAG;EACX,QAAQ,MAAM;EACd,QAAQ,YAAY,CAAC;EACrB,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;EAC/C,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;EAC3D,UAAU,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EAChC,UAAU,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;EACnD,UAAU,YAAY,GAAG,CAAC,CAAC,YAAY;EACvC,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;EACrD,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;EACrD,WAAW,CAAC;EACZ,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG;EACvB,YAAY,IAAI,EAAE,GAAG,CAAC,iBAAiB;EACvC,YAAY,IAAI,EAAE,YAAY;EAC9B,YAAY,MAAM,EAAE,MAAM;EAC1B,YAAY,UAAU,EAAE,GAAG,CAAC,kBAAkB;EAC9C,WAAW,CAAC;EACZ,SAAS;EACT,OAAO;AACP;EACA,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAChC,KAAK,CAAC,CAAC;EACP,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAClD,IAAI,IAAI,MAAM,GAAG;EACjB,MAAM,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC;EACvF,KAAK,CAAC;EACN,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;EACpE,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;EACvC,MAAM,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;EAC7B,KAAK;AACL;EACA,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE;EAC5D,MAAM,IAAI,OAAO,GAAG,EAAE;EACtB,QAAQ,GAAG;EACX,QAAQ,MAAM;EACd,QAAQ,YAAY,CAAC;EACrB,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;EAC/C,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;EAC3D,UAAU,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EAChC,UAAU,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;EACnD,UAAU,YAAY,GAAG,CAAC,CAAC,YAAY;EACvC,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;EACrD,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;EACrD,WAAW,CAAC;EACZ,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG;EACvB,YAAY,IAAI,EAAE,GAAG,CAAC,iBAAiB;EACvC,YAAY,IAAI,EAAE,YAAY;EAC9B,YAAY,MAAM,EAAE,MAAM;EAC1B,YAAY,UAAU,EAAE,GAAG,CAAC,kBAAkB;EAC9C,WAAW,CAAC;EACZ,SAAS;EACT,OAAO;AACP;EACA,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAChC,KAAK,CAAC,CAAC;EACP,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;EACrC,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;EAClC;;EC1FO,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACjC,EAAE,OAAO,EAAE;EACX,IAAI,UAAU,EAAE,gDAAgD;EAChE,IAAI,iBAAiB,EAAE,+DAA+D;EACtF,IAAI,MAAM,EAAE,2BAA2B;EACvC,IAAI,QAAQ,EAAE,6BAA6B;EAC3C,IAAI,oBAAoB,EAAE,EAAE;EAC5B,IAAI,kBAAkB,EAAE,EAAE;EAC1B,IAAI,wBAAwB,EAAE,IAAI;EAClC,GAAG;EACH,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE;EAChC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EAChC,GAAG;EACH,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,IAAI,MAAM,GAAG;EACjB,MAAM,UAAU,EAAE,KAAK;EACvB,MAAM,GAAG,EAAE,CAAC;EACZ,MAAM,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;EACjC,MAAM,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;EACrC,MAAM,cAAc,EAAE,CAAC;EACvB,KAAK,CAAC;EACN,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;EACtE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;EAC/D,GAAG;EACH,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAClD,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB;EAC3D,QAAQ,IAAI,CAAC,OAAO,CAAC,wBAAwB;EAC7C,QAAQ,IAAI,CAAC;EACb,IAAI,IAAI,UAAU,GAAG,WAAW,GAAG,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;EAC9E,IAAI,IAAI,MAAM,GAAG;EACjB,MAAM,IAAI,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU;EAClG,MAAM,IAAI,EAAE,mBAAmB;EAC/B,MAAM,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;EACjC,MAAM,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;EACrC,MAAM,GAAG,EAAE,CAAC;EACZ,MAAM,cAAc,EAAE,CAAC;EACvB,KAAK,CAAC;EACN,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;EACpE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;EACtE,GAAG;EACH,EAAE,OAAO,EAAE,SAAS,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE;EAC9C,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE;EACxC,MAAM,IAAI,OAAO,GAAG,EAAE;EACtB,QAAQ,GAAG;EACX,QAAQ,MAAM;EACd,QAAQ,YAAY,CAAC;EACrB,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE;EAC3D,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;EAC3E,UAAU,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;EACzD,UAAU,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;EACzF,UAAU,YAAY,GAAG,CAAC,CAAC,YAAY;EACvC,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;EACjF,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;EACzF,WAAW,CAAC;EACZ,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG;EACvB,YAAY,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK;EACnC,YAAY,UAAU,EAAE,GAAG,CAAC,OAAO;EACnC,YAAY,IAAI,EAAE,YAAY;EAC9B,YAAY,MAAM,EAAE,MAAM;EAC1B,WAAW,CAAC;EACZ,SAAS;EACT,OAAO;EACP,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAChC,KAAK,CAAC,CAAC;EACP,GAAG;EACH,CAAC,CAAC,CAAC;EACI,SAAS,IAAI,CAAC,OAAO,EAAE;EAC9B,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;EAC3B;;ECpEO,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACnC,EAAE,OAAO,EAAE;EACX;EACA,IAAI,IAAI,EAAE,SAAS;EACnB,IAAI,YAAY,EAAE,KAAK;EACvB,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE;EAChC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EACrC,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,IAAI,KAAK,CAAC;EACd,IAAI,IAAI,MAAM,CAAC;EACf;EACA,IAAI,KAAK,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,+DAA+D,CAAC,GAAG;EAChG;EACA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM;EACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC7D,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC7D,OAAO,CAAC;EACR,KAAK,MAAM;EACX,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,+DAA+D,CAAC;EAC3F,MAAM;EACN;EACA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM;EACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC7D,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC7D,OAAO,CAAC;EACR,KAAK,MAAM;EACX,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK;EAC1B,QAAQ,uGAAuG;EAC/G,OAAO;EACP,MAAM;EACN;EACA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM;EACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;EAC3F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;EAC3F,OAAO,CAAC;EACR,KAAK,MAAM;EACX,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK;EAC1B,QAAQ,uGAAuG;EAC/G,OAAO;EACP,MAAM;EACN;EACA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM;EACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;EAC3F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;EAC3F,OAAO,CAAC;EACR,KAAK,MAAM;EACX,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK;EAC1B,QAAQ,yIAAyI;EACjJ,OAAO;EACP,MAAM;EACN;EACA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM;EACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACrC,WAAW,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;EAC1F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACrC,WAAW,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;EAC1F,OAAO,CAAC;EACR,KAAK,MAAM;EACX,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK;EAC1B,QAAQ,wIAAwI;EAChJ,OAAO;EACP,MAAM;EACN;EACA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM;EACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACrC,WAAW,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;EAC1F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACrC,WAAW,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;EAC1F,OAAO,CAAC;EACR,KAAK,MAAM;EACX,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,6DAA6D,CAAC;EACzF,MAAM;EACN,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACpE,KAAK;EACL,IAAI,IAAI,MAAM,EAAE;EAChB,MAAM,IAAI,OAAO,GAAG;EACpB,QAAQ;EACR,UAAU,IAAI,EAAE,KAAK;EACrB,UAAU,MAAM,EAAE,MAAM;EACxB,UAAU,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;EAC1D,SAAS;EACT,OAAO,CAAC;EACR,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAChC,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;EAClC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;EACpD,KAAK;EACL,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,MAAM,CAAC,OAAO,EAAE;EAChC,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;EAC7B;;EC9FO,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACnC,EAAE,OAAO,EAAE;EACX,IAAI,UAAU,EAAE,oDAAoD;EACpE,IAAI,oBAAoB,EAAE,EAAE;EAC5B,IAAI,kBAAkB,EAAE,EAAE;EAC1B,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,WAAW,EAAE,OAAO,EAAE;EAC7C,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EAChC,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,YAAY,GAAG,WAAW,CAAC;EACjE,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,YAAY,GAAG,WAAW,CAAC;EAC/D,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;EACnD,IAAI;EACJ,MAAM,MAAM,CAAC,SAAS,KAAK,SAAS;EACpC,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,SAAS;EACxC,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,SAAS;EACxC,MAAM;EACN,MAAM,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;EAC3E,KAAK;EACL,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE;EAClG,MAAM,IAAI,OAAO,GAAG,EAAE;EACtB,QAAQ,GAAG;EACX,QAAQ,MAAM;EACd,QAAQ,YAAY,CAAC;EACrB,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;EACjD,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;EAC5D,UAAU,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EACjC,UAAU,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;EAClD,UAAU,IAAI,GAAG,CAAC,IAAI,EAAE;EACxB,YAAY,YAAY,GAAG,CAAC,CAAC,YAAY;EACzC,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;EACtD,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;EACtD,aAAa,CAAC;EACd,WAAW,MAAM;EACjB,YAAY,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC1D,WAAW;AACX;EACA,UAAU,IAAI,UAAU,GAAG;EAC3B,YAAY,IAAI,EAAE,GAAG,CAAC,IAAI;EAC1B,YAAY,OAAO,EAAE,GAAG,CAAC,OAAO;EAChC,WAAW,CAAC;AACZ;EACA,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;EAC/D,YAAY,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EACrD,YAAY,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD;EACA;EACA,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;EAC3C,cAAc,UAAU,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;EACzE,aAAa;EACb,WAAW;AACX;EACA,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG;EACvB,YAAY,IAAI,EAAE,GAAG,CAAC,UAAU;EAChC,YAAY,IAAI,EAAE,YAAY;EAC9B,YAAY,MAAM,EAAE,MAAM;EAC1B,YAAY,UAAU,EAAE,UAAU;EAClC,WAAW,CAAC;EACZ,SAAS;EACT,OAAO;AACP;EACA,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAChC,KAAK,CAAC,CAAC;EACP,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;EAC5C,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAClD,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU;EAC7B,QAAQ,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC;EACxC,QAAQ,GAAG;EACX,QAAQ,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC;EACxC,QAAQ,OAAO;EACf,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB;EACrC,MAAM,SAAS,IAAI,EAAE;EACrB,QAAQ,IAAI,OAAO,GAAG,EAAE;EACxB,UAAU,GAAG;EACb,UAAU,MAAM;EAChB,UAAU,YAAY,CAAC;EACvB,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;EACnD,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;EAC9D,YAAY,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EACnC,YAAY,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;EACpD,YAAY,IAAI,GAAG,CAAC,IAAI,EAAE;EAC1B,cAAc,YAAY,GAAG,CAAC,CAAC,YAAY;EAC3C,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;EACxD,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;EACxD,eAAe,CAAC;EAChB,aAAa,MAAM;EACnB,cAAc,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC5D,aAAa;EACb,YAAY,OAAO,CAAC,CAAC,CAAC,GAAG;EACzB,cAAc,IAAI,EAAE,GAAG,CAAC,UAAU;EAClC,cAAc,IAAI,EAAE,YAAY;EAChC,cAAc,MAAM,EAAE,MAAM;EAC5B,aAAa,CAAC;EACd,WAAW;EACX,SAAS;AACT;EACA,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAClC,OAAO;EACP,KAAK,CAAC;EACN,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE;EAC7C,EAAE,OAAO,IAAI,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;EAC1C;;ECjHO,IAAI,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACrC,EAAE,OAAO,EAAE;EACX,IAAI,UAAU,EAAE,0CAA0C;EAC1D,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,GAAG,EAAE,OAAO,EAAE;EACrC;EACA;EACA,IAAI,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACxC;EACA,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EACrC,GAAG;AACH;EACA,EAAE,WAAW,EAAE,WAAW;EAC1B,IAAI,IAAI,CAAC,GAAG,EAAE;EACd,MAAM,CAAC,CAAC;EACR,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC3C,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;EACxB,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;EAC7B,OAAO;EACP,KAAK;AACL;EACA,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACxB,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,UAAU;EAC1C,MAAM;EACN,QAAQ,GAAG,EAAE,IAAI,CAAC,IAAI;EACtB,QAAQ,QAAQ,EAAE,KAAK;EACvB,QAAQ,KAAK,EAAE,CAAC;EAChB,QAAQ,SAAS,EAAE,MAAM;EACzB,OAAO;EACP,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;EAC5B,QAAQ,IAAI,OAAO,GAAG,EAAE;EACxB,UAAU,GAAG;EACb,UAAU,MAAM,CAAC;EACjB,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;EACvD,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EAC1E,YAAY,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;EAC/C,YAAY,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EAC1C,YAAY,OAAO,CAAC,CAAC,CAAC,GAAG;EACzB,cAAc,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;EAChG,cAAc,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;EAClD,cAAc,MAAM,EAAE,MAAM;EAC5B,aAAa,CAAC;EACd,WAAW;EACX,SAAS;AACT;EACA,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAClC,OAAO,EAAE,IAAI,CAAC;EACd,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAClD,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,UAAU;EAC1C,MAAM;EACN,QAAQ,GAAG,EAAE,IAAI,CAAC,IAAI;EACtB,QAAQ,QAAQ,EAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG;EACnD,QAAQ,YAAY,EAAE,MAAM;EAC5B,OAAO;EACP,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;EAC5B,QAAQ,IAAI,OAAO,GAAG,EAAE;EACxB,UAAU,GAAG;EACb,UAAU,MAAM,CAAC;EACjB,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;EACvD,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EAC1E,YAAY,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;EAC/C,YAAY,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EAC1C,YAAY,OAAO,CAAC,CAAC,CAAC,GAAG;EACzB,cAAc,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;EAChG,cAAc,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;EAClD,cAAc,MAAM,EAAE,MAAM;EAC5B,aAAa,CAAC;EACd,WAAW;EACX,SAAS;AACT;EACA,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAClC,OAAO,EAAE,IAAI,CAAC;EACd,KAAK,CAAC;EACN,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE;EACvC,EAAE,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;EACpC;;ECvFO,IAAI,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACrC,EAAE,OAAO,EAAE;EACX,IAAI,MAAM,EAAE,2BAA2B;EACvC,IAAI,MAAM,EAAE,2BAA2B;EACvC,IAAI,UAAU,EAAE,0BAA0B;EAC1C,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE;EAChC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EACrC,GAAG;AACH;EACA;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,iBAAiB;EACjD,MAAM;EACN,QAAQ,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;EACnC,QAAQ,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;EACnC;EACA,QAAQ,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;EAC7C,OAAO;EACP,MAAM,SAAS,IAAI,EAAE;EACrB,QAAQ,IAAI,OAAO,GAAG,EAAE;EACxB,UAAU,MAAM;EAChB,UAAU,YAAY,CAAC;EACvB,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;EAC5B,UAAU,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;EAC5C,UAAU,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;EACnF,UAAU,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EACxD,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG;EACvB,YAAY,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;EACvC,YAAY,IAAI,EAAE,YAAY;EAC9B,YAAY,MAAM,EAAE,MAAM;EAC1B,WAAW,CAAC;EACZ,SAAS;AACT;EACA,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAClC,OAAO;EACP,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;EAC5C,GAAG;AACH;EACA;EACA,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAClD,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,iBAAiB;EACjD,MAAM;EACN,QAAQ,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;EACnC,QAAQ,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;EACnC,QAAQ,QAAQ,EAAE,QAAQ,CAAC,GAAG;EAC9B,QAAQ,SAAS,EAAE,QAAQ,CAAC,GAAG;EAC/B,OAAO;EACP,MAAM,SAAS,IAAI,EAAE;EACrB,QAAQ,IAAI,OAAO,GAAG,EAAE;EACxB,UAAU,MAAM;EAChB,UAAU,YAAY,CAAC;EACvB,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;EACrD,UAAU,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;EACxD,UAAU,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EACxD,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG;EACvB,YAAY,IAAI,EAAE,IAAI,CAAC,OAAO;EAC9B,YAAY,IAAI,EAAE,YAAY;EAC9B,YAAY,MAAM,EAAE,MAAM;EAC1B,WAAW,CAAC;EACZ,SAAS;EACT,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAClC,OAAO;EACP,KAAK,CAAC;EACN,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,QAAQ,CAAC,WAAW,EAAE;EACtC,EAAE,OAAO,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;EACnC;;EC5EO,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACtC,EAAE,OAAO,EAAE;EACX,IAAI,UAAU,EAAE,sCAAsC;EACtD,IAAI,oBAAoB,EAAE,EAAE;EAC5B,IAAI,kBAAkB,EAAE,EAAE;EAC1B,IAAI,YAAY,EAAE,SAAS,CAAC,EAAE;EAC9B,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO;EACvB,QAAQ,SAAS;EACjB,QAAQ,KAAK,GAAG,EAAE,CAAC;EACnB,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE;EAChC,QAAQ,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;EACvD,OAAO;AACP;EACA,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,EAAE;EACrD,QAAQ,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,yCAAyC,GAAG,EAAE,CAAC;EACtF,QAAQ,KAAK,CAAC,IAAI;EAClB,UAAU,eAAe,GAAG,SAAS,GAAG,sDAAsD;EAC9F,SAAS,CAAC;EACV,OAAO;AACP;EACA,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE;EAChC,QAAQ,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,0CAA0C,GAAG,EAAE,CAAC;EACvF,QAAQ,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,SAAS,GAAG,4BAA4B,CAAC,CAAC;EAC/E,OAAO;AACP;EACA,MAAM,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAO,CAAC,CAAC;EACpD,KAAK;EACL,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE;EAChC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EACrC,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,QAAQ;EACxC,MAAM,CAAC,CAAC,MAAM;EACd,QAAQ;EACR,UAAU,CAAC,EAAE,KAAK;EAClB,UAAU,KAAK,EAAE,CAAC;EAClB,UAAU,MAAM,EAAE,MAAM;EACxB,UAAU,cAAc,EAAE,CAAC;EAC3B,SAAS;EACT,QAAQ,IAAI,CAAC,OAAO,CAAC,oBAAoB;EACzC,OAAO;EACP,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;EAC5B,QAAQ,IAAI,OAAO,GAAG,EAAE,CAAC;EACzB,QAAQ,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EACnD,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;EACzC,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACpE,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG;EACvB,YAAY,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;EAC9B,YAAY,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY;EACtC,YAAY,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;EAC5F,YAAY,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACxE,YAAY,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;EACtD,YAAY,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;EAC/B,WAAW,CAAC;EACZ,SAAS;EACT,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAClC,OAAO,EAAE,IAAI,CAAC;EACd,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,EAAE,UAAU,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACzC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;EAC5C,CAAC;AACD;EACA,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAClD,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,SAAS;EACzC,MAAM,CAAC,CAAC,MAAM;EACd,QAAQ;EACR,UAAU,GAAG,EAAE,QAAQ,CAAC,GAAG;EAC3B,UAAU,GAAG,EAAE,QAAQ,CAAC,GAAG;EAC3B,UAAU,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC/D,UAAU,cAAc,EAAE,CAAC;EAC3B,UAAU,MAAM,EAAE,MAAM;EACxB,SAAS;EACT,QAAQ,IAAI,CAAC,OAAO,CAAC,kBAAkB;EACvC,OAAO;EACP,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;EAC5B,QAAQ,IAAI,MAAM,GAAG,EAAE;EACvB,UAAU,GAAG,CAAC;AACd;EACA,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;EAC1C,UAAU,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;EAC7C,UAAU,MAAM,CAAC,IAAI,CAAC;EACtB,YAAY,IAAI,EAAE,IAAI,CAAC,YAAY;EACnC,YAAY,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS;EACzF,YAAY,MAAM,EAAE,GAAG;EACvB,YAAY,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;EAC5C,YAAY,UAAU,EAAE,IAAI;EAC5B,WAAW,CAAC,CAAC;EACb,SAAS;AACT;EACA,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;EACjC,OAAO,EAAE,IAAI,CAAC;EACd,KAAK,CAAC;EACN,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,SAAS,CAAC,OAAO,EAAE;EACnC,EAAE,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;EAChC;;ECzGO,IAAI,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EAC7C,EAAE,OAAO,EAAE;EACX,IAAI,gBAAgB,EAAE,SAAS;EAC/B,IAAI,UAAU,EAAE,SAAS;EACzB,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE;EAChC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EAChC,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,IAAI;EACR,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;EAChE,MAAM,IAAI,MAAM,GAAG;EACnB,QAAQ,IAAI,EAAE,KAAK;EACnB,QAAQ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,eAAe,CAAC;EACzE,QAAQ,IAAI,EAAE,CAAC,CAAC,YAAY;EAC5B,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC;EAC3D,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC;EAC3D,SAAS;EACT,OAAO,CAAC;EACR,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;EACjC,KAAK,CAAC,OAAO,CAAC,EAAE;EAChB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EACtB,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;EAC3B,KAAK;EACL,GAAG;EACH,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAClD,IAAI,IAAI;EACR,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM;EACrD,QAAQ,QAAQ,CAAC,GAAG;EACpB,QAAQ,QAAQ,CAAC,GAAG;EACpB,QAAQ,IAAI,CAAC,OAAO,CAAC,UAAU;EAC/B,OAAO,CAAC;EACR,MAAM,IAAI,MAAM,GAAG;EACnB,QAAQ,IAAI,EAAE,IAAI;EAClB,QAAQ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC;EACpD,QAAQ,IAAI,EAAE,CAAC,CAAC,YAAY;EAC5B,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC;EAC9C,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC;EAC9C,SAAS;EACT,OAAO,CAAC;EACR,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;EACjC,KAAK,CAAC,OAAO,CAAC,EAAE;EAChB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EACtB,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;EAC3B,KAAK;EACL,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,gBAAgB,CAAC,OAAO,EAAE;EAC1C,EAAE,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;EACvC;;ECnDO,IAAI,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACrC,EAAE,OAAO,EAAE;EACX,IAAI,UAAU,EAAE,8CAA8C;EAC9D,IAAI,oBAAoB,EAAE,EAAE;EAC5B,IAAI,kBAAkB,EAAE,EAAE;EAC1B,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,OAAO,EAAE;EACxC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EAChC,IAAI,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;EAC/B,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,IAAI,MAAM,GAAG;EACjB,MAAM,GAAG,EAAE,IAAI,CAAC,YAAY;EAC5B,MAAM,CAAC,EAAE,KAAK;EACd,KAAK,CAAC;EACN,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;EACjE,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE;EAC5D,MAAM,IAAI,OAAO,GAAG,EAAE;EACtB,QAAQ,MAAM;EACd,QAAQ,YAAY;EACpB,QAAQ,GAAG,CAAC;EACZ,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;EAC/C,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACtD,UAAU,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EAChC,UAAU,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;EAC1C,UAAU,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE;EACzD,YAAY,YAAY,GAAG,CAAC,CAAC,YAAY;EACzC,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;EACxD,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;EACxD,aAAa,CAAC;EACd,WAAW,MAAM;EACjB,YAAY,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC1D,WAAW;EACX,UAAU,OAAO,CAAC,IAAI,CAAC;EACvB,YAAY,IAAI,EAAE,GAAG,CAAC,SAAS;EAC/B,YAAY,IAAI,EAAE,YAAY;EAC9B,YAAY,MAAM,EAAE,MAAM;EAC1B,WAAW,CAAC,CAAC;EACb,SAAS;EACT,OAAO;EACP,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAChC,KAAK,CAAC,CAAC;EACP,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;EAC5C,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAClD,IAAI,IAAI,MAAM,GAAG;EACjB,MAAM,GAAG,EAAE,IAAI,CAAC,YAAY;EAC5B,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;EAC/C,KAAK,CAAC;EACN,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;EAC/D,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE;EAC5D,MAAM,IAAI,OAAO,GAAG,EAAE;EACtB,QAAQ,MAAM;EACd,QAAQ,YAAY;EACpB,QAAQ,GAAG,CAAC;EACZ,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;EAC/C,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACtD,UAAU,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EAChC,UAAU,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;EAC1C,UAAU,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE;EACzD,YAAY,YAAY,GAAG,CAAC,CAAC,YAAY;EACzC,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;EACxD,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;EACxD,aAAa,CAAC;EACd,WAAW,MAAM;EACjB,YAAY,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC1D,WAAW;EACX,UAAU,OAAO,CAAC,IAAI,CAAC;EACvB,YAAY,IAAI,EAAE,GAAG,CAAC,SAAS;EAC/B,YAAY,IAAI,EAAE,YAAY;EAC9B,YAAY,MAAM,EAAE,MAAM;EAC1B,WAAW,CAAC,CAAC;EACb,SAAS;EACT,OAAO;EACP,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAChC,KAAK,CAAC,CAAC;EACP,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE;EAC1C,EAAE,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;EACvC;;ECvFO,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACnC,EAAE,OAAO,EAAE;EACX,IAAI,UAAU,EAAE,8BAA8B;EAC9C,IAAI,oBAAoB,EAAE,EAAE;EAC5B,IAAI,kBAAkB,EAAE,EAAE;EAC1B,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,OAAO,EAAE;EACxC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EACrC,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;EAC1B,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;EAC1B,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC;EACrB,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,SAAS;EACzC,MAAM,CAAC,CAAC,MAAM;EACd,QAAQ;EACR,UAAU,OAAO,EAAE,IAAI,CAAC,OAAO;EAC/B,UAAU,IAAI,EAAE,KAAK;EACrB,SAAS;EACT,QAAQ,IAAI,CAAC,OAAO,CAAC,oBAAoB;EACzC,OAAO;EACP,MAAM,SAAS,IAAI,EAAE;EACrB,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;EAC5D,OAAO;EACP,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC;EACrB,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,eAAe;EAC/C,MAAM,CAAC,CAAC,MAAM;EACd,QAAQ;EACR,UAAU,OAAO,EAAE,IAAI,CAAC,OAAO;EAC/B,UAAU,IAAI,EAAE,KAAK;EACrB,SAAS;EACT,QAAQ,IAAI,CAAC,OAAO,CAAC,oBAAoB;EACzC,OAAO;EACP,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;EAC5B,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;EAC1D,UAAU,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;EACvD,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;EAC9D,SAAS;EACT,OAAO,EAAE,IAAI,CAAC;EACd,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAClD,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC;EACrB,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,UAAU;EAC1C,MAAM,CAAC,CAAC,MAAM;EACd,QAAQ;EACR,UAAU,OAAO,EAAE,IAAI,CAAC,OAAO;EAC/B,UAAU,WAAW,EAAE,QAAQ,CAAC,GAAG;EACnC,UAAU,WAAW,EAAE,QAAQ,CAAC,GAAG;EACnC,SAAS;EACT,QAAQ,IAAI,CAAC,OAAO,CAAC,kBAAkB;EACvC,OAAO;EACP,MAAM,SAAS,IAAI,EAAE;EACrB,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;EAC9D,OAAO;EACP,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,aAAa,EAAE,SAAS,IAAI,EAAE,QAAQ,EAAE;EAC1C,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;EACrB,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE;EACpB,MAAM,YAAY,EAAE,SAAS,OAAO,EAAE,MAAM,EAAE;EAC9C,QAAQ,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;EACtC,OAAO;EACP,MAAM,aAAa,EAAE,SAAS,OAAO,EAAE,KAAK,EAAE;EAC9C,QAAQ,IAAI,MAAM,GAAG,EAAE;EACvB,UAAU,IAAI;EACd,UAAU,MAAM,CAAC;AACjB;EACA,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE;EAC7B,UAAU,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;EACnC,UAAU,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;EACpC,SAAS,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;EACvC,UAAU,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;EACrC,UAAU,IAAI,GAAG,CAAC,CAAC,YAAY;EAC/B,YAAY,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACpE,YAAY,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACpE,WAAW,CAAC;EACZ,SAAS,MAAM;EACf,UAAU,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;EACrC,UAAU,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAChD,SAAS;AACT;EACA,QAAQ,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;EACrD,QAAQ,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;EAC/B,QAAQ,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;EAChC,QAAQ,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;EACrD,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EAC7B,OAAO;EACP,KAAK,CAAC,CAAC;EACP,IAAI,OAAO,OAAO,CAAC;EACnB,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE;EACxC,EAAE,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;EACrC,CAAC;EACM,IAAI,YAAY,GAAG,MAAM,CAAC;EAC1B,IAAI,YAAY,GAAG,MAAM,CAAC;AACjC;EACO,IAAI,MAAM,GAAG,MAAM,CAAC;EACpB,IAAI,MAAM,GAAG,MAAM,CAAC;AAC3B;EACO,IAAI,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;EAC5C,EAAE,OAAO,EAAE;EACX,IAAI,UAAU,EAAE,0CAA0C;EAC1D,GAAG;EACH,CAAC,CAAC,CAAC;EACI,SAAS,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE;EAClD,EAAE,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;EAC/C;;ECxHO,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACnC,EAAE,OAAO,EAAE;EACX,IAAI,UAAU,EAAE,+BAA+B;EAC/C,IAAI,UAAU,EAAE,mCAAmC;EACnD,IAAI,cAAc,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;EAC9F,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE;EAChC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EAChC,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM;EACzB,MAAM;EACN,QAAQ,CAAC,EAAE,KAAK;EAChB,OAAO;EACP,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB;EACvC,KAAK,CAAC;AACN;EACA,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU;EAC7B,MAAM,MAAM;EACZ,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;EAC5B,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;EACrD,OAAO,EAAE,IAAI,CAAC;EACd,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;EAC5C,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAChD,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM;EACzB,MAAM;EACN,QAAQ,GAAG,EAAE,MAAM,CAAC,GAAG;EACvB,QAAQ,GAAG,EAAE,MAAM,CAAC,GAAG;EACvB,OAAO;EACP,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB;EACrC,KAAK,CAAC;AACN;EACA,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU;EAC7B,MAAM,MAAM;EACZ,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;EAC5B,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;EACrD,OAAO,EAAE,IAAI,CAAC;EACd,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,eAAe,EAAE,SAAS,IAAI,EAAE;EAClC,IAAI,IAAI,OAAO,GAAG,EAAE;EACpB,MAAM,CAAC;EACP,MAAM,CAAC;EACP,MAAM,CAAC;EACP,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,MAAM,IAAI,CAAC;AACX;EACA,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;EAC/B,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACjD,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC7B,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;EACnC,QAAQ,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACtC,QAAQ,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;AACrC;EACA,QAAQ,IAAI,MAAM,EAAE;EACpB,UAAU,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAChF,SAAS,MAAM;EACf,UAAU,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAChD,SAAS;AACT;EACA,QAAQ,OAAO,CAAC,IAAI,CAAC;EACrB,UAAU,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;EAC1C,UAAU,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS;EACpF,UAAU,MAAM,EAAE,MAAM;EACxB,UAAU,IAAI,EAAE,IAAI;EACpB,UAAU,UAAU,EAAE,CAAC,CAAC,UAAU;EAClC,SAAS,CAAC,CAAC;EACX,OAAO;EACP,KAAK;AACL;EACA,IAAI,OAAO,OAAO,CAAC;EACnB,GAAG;AACH;EACA,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE;EAClC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE;EAC7C,OAAO,GAAG,CAAC,SAAS,CAAC,EAAE;EACvB,QAAQ,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;EAC/B,OAAO,CAAC;EACR,OAAO,MAAM,CAAC,SAAS,CAAC,EAAE;EAC1B,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC;EACnB,OAAO,CAAC;EACR,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;EAClB,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,MAAM,CAAC,OAAO,EAAE;EAChC,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;EAC7B;;ECjGA,MAAM,UAAU,GAAG;EACnB,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,MAAM,EAAE,KAAK;EACjB,IAAI,QAAQ,EAAE,WAAW;EACzB,IAAI,YAAY,EAAE,SAAS;EAC3B,CAAC,CAAC;AACF;EACO,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EAClC,IAAI,OAAO,EAAE;EACb,QAAQ,UAAU,EAAE,iCAAiC;EACrD,QAAQ,KAAK,EAAE,CAAC;EAChB,QAAQ,YAAY,EAAE,UAAU,CAAC,EAAE;EACnC,YAAY,IAAI,KAAK,GAAG,EAAE,CAAC;AAC3B;EACA;EACA;EACA;EACA;EACA,YAAY,KAAK,CAAC,IAAI,CAAC,oFAAoF,GAAG,SAAS,CAAC,CAAC;EACzH,YAAY,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,yCAAyC,GAAG,EAAE,CAAC;EAC5G,gBAAgB,oBAAoB,CAAC,CAAC;AACtC;EACA,YAAY,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAO,CAAC,CAAC;EAC1D,SAAS;AACT;EACA,KAAK;AACL;EACA,IAAI,UAAU,EAAE,UAAU,OAAO,EAAE;EACnC,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EACpC,KAAK;AACL;EACA,IAAI,OAAO,EAAE,UAAU,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;AAC3C;EACA,QAAQ,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;EAC9B,YAAY,CAAC,EAAE,KAAK;EACpB,YAAY,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;EACrC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;EAC9C,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC;AACxB;EACA,QAAQ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE;EAC9E,YAAY,IAAI,OAAO,GAAG,EAAE;EAC5B,gBAAgB,CAAC;EACjB,gBAAgB,CAAC;EACjB,gBAAgB,CAAC;EACjB,gBAAgB,MAAM;EACtB,gBAAgB,MAAM;EACtB,gBAAgB,IAAI,CAAC;EACrB,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;EACvC,gBAAgB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC3D,oBAAoB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EACzC,oBAAoB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;EAC/C,oBAAoB,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAClD,oBAAoB,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;AACjD;EACA,oBAAoB,IAAI,MAAM,EAAE;EAChC,wBAAwB,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9F,qBAAqB,MAAM;EAC3B,wBAAwB,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC9D,qBAAqB;EACrB;EACA;EACA,oBAAoB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE;EAC3C,wBAAwB,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;EAC1E,qBAAqB;EACrB;EACA,oBAAoB,OAAO,CAAC,IAAI,CAAC;EACjC,wBAAwB,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI;EAC/C,wBAAwB,MAAM,EAAE,MAAM;EACtC,wBAAwB,IAAI,EAAE,IAAI;EAClC,wBAAwB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;EACvD,4BAA4B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;EACnE,8BAA8B,SAAS;EACvC,qBAAqB,CAAC,CAAC;EACvB,iBAAiB;EACjB,aAAa;AACb;EACA,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EACtC,SAAS,CAAC,CAAC;EACX,KAAK;AACL;EACA,IAAI,OAAO,EAAE,UAAU,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAC3C,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;EAChD,KAAK;AACL;EACA,IAAI,OAAO,EAAE,UAAU,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACrD,QAAQ,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;EAC9B,YAAY,GAAG,EAAE,QAAQ,CAAC,GAAG;EAC7B,YAAY,GAAG,EAAE,QAAQ,CAAC,GAAG;EAC7B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;EAC5C,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC;EACxB,QAAQ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,WAAW,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE;EAC/E,YAAY,IAAI,OAAO,GAAG,EAAE;EAC5B,gBAAgB,CAAC;EACjB,gBAAgB,CAAC;EACjB,gBAAgB,CAAC;EACjB,gBAAgB,MAAM;EACtB,gBAAgB,MAAM;EACtB,gBAAgB,IAAI,CAAC;EACrB,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;EACvC,gBAAgB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC3D,oBAAoB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EACzC,oBAAoB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;EAC/C,oBAAoB,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAClD,oBAAoB,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;AACjD;EACA,oBAAoB,IAAI,MAAM,EAAE;EAChC,wBAAwB,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9F,qBAAqB,MAAM;EAC3B,wBAAwB,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC9D,qBAAqB;AACrB;EACA,oBAAoB,OAAO,CAAC,IAAI,CAAC;EACjC,wBAAwB,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI;EAC/C,wBAAwB,MAAM,EAAE,MAAM;EACtC,wBAAwB,IAAI,EAAE,IAAI;EAClC,wBAAwB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;EACvD,4BAA4B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;EACnE,8BAA8B,SAAS;EACvC,qBAAqB,CAAC,CAAC;EACvB,iBAAiB;EACjB,aAAa;AACb;EACA,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EACtC,SAAS,CAAC,CAAC;EACX,KAAK;EACL,CAAC,CAAC,CAAC;AACH;AACA;EACO,SAAS,KAAK,CAAC,GAAG,EAAE;EAC3B,IAAI,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;EAC1B;;ECpIO,IAAI,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;EACvC,EAAE,OAAO,EAAE;EACX,IAAI,UAAU,EAAE,gCAAgC;EAChD,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,WAAW,EAAE;EACpC,IAAI,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;EACpC,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC;EACA,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,SAAS;EACzC,MAAM;EACN,QAAQ,GAAG,EAAE,IAAI,CAAC,YAAY;EAC9B,QAAQ,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;EAC1C,OAAO;EACP,MAAM,SAAS,IAAI,EAAE;EACrB,QAAQ,IAAI,OAAO,GAAG,EAAE;EACxB,UAAU,MAAM;EAChB,UAAU,YAAY,CAAC;EACvB,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;EAC3B,UAAU,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;EACxE,UAAU,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EACxD,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG;EACvB,YAAY,IAAI,EAAE,IAAI,CAAC,KAAK;EAC5B,YAAY,IAAI,EAAE,YAAY;EAC9B,YAAY,MAAM,EAAE,MAAM;EAC1B,WAAW,CAAC;EACZ,SAAS;AACT;EACA,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAClC,OAAO;EACP,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACxC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;EAC5C,GAAG;AACH;EACA,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EAClD,IAAI,OAAO;EACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,SAAS;EACzC,MAAM;EACN,QAAQ,GAAG,EAAE,IAAI,CAAC,YAAY;EAC9B,QAAQ,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;EACtD,OAAO;EACP,MAAM,SAAS,IAAI,EAAE;EACrB,QAAQ,IAAI,OAAO,GAAG,EAAE;EACxB,UAAU,MAAM;EAChB,UAAU,YAAY,CAAC;EACvB,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE;EACvC,UAAU,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;EACxE,UAAU,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EACxD,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG;EACvB,YAAY,IAAI,EAAE,IAAI,CAAC,KAAK;EAC5B,YAAY,IAAI,EAAE,YAAY;EAC9B,YAAY,MAAM,EAAE,MAAM;EAC1B,WAAW,CAAC;EACZ,SAAS;EACT,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAClC,OAAO;EACP,KAAK,CAAC;EACN,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACO,SAAS,UAAU,CAAC,WAAW,EAAE;EACxC,EAAE,OAAO,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;EACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpEU,MAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;EACvC,EAAE,OAAO,EAAE;EACX,IAAI,gBAAgB,EAAE,IAAI;EAC1B,IAAI,eAAe,EAAE,KAAK;EAC1B,IAAI,SAAS,EAAE,IAAI;EACnB,IAAI,MAAM,EAAE,OAAO;EACnB,IAAI,QAAQ,EAAE,UAAU;EACxB,IAAI,WAAW,EAAE,WAAW;EAC5B,IAAI,YAAY,EAAE,gBAAgB;EAClC,IAAI,SAAS,EAAE,uBAAuB;EACtC,IAAI,cAAc,EAAE,CAAC;EACrB,IAAI,gBAAgB,EAAE,CAAC;EACvB,IAAI,cAAc,EAAE,GAAG;EACvB,IAAI,kBAAkB,EAAE,IAAI;EAC5B,GAAG;AACH;EACA,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM;AACjD;EACA,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE;EAChC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EACrC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;EAChC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;EAC9C,KAAK;AACL;EACA,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,gBAAgB,EAAE,WAAW;EAC/B,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;EAC7E,GAAG;AACH;EACA,EAAE,mBAAmB,EAAE,WAAW;EAClC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;EAChF,GAAG;AACH;EACA,EAAE,KAAK,EAAE,SAAS,GAAG,EAAE;EACvB,IAAI,IAAI,SAAS,GAAG,0BAA0B;EAC9C,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,cAAc,CAAC;EACrE,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;EACvE,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC,CAAC;EACnF,MAAM,KAAK,CAAC;AACZ;EACA,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;EACpB,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAChC;EACA,IAAI,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;EAC9B,IAAI,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;EACzB,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC5D;EACA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;EAC9D,IAAI,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;EACxB,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;EAC3C,IAAI,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;EACjD,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAC9C;EACA,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,gBAAgB,EAAE,SAAS,CAAC,CAAC;EAC1F,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AAC7D;EACA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM;EACjC,MAAM,IAAI;EACV,MAAM,SAAS,GAAG,+DAA+D;EACjF,MAAM,SAAS;EACf,KAAK,CAAC;EACN,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnD;EACA,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;EAClE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE;EACvC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EACjE,KAAK;EACL,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW;EAC1B,MAAM,KAAK;EACX,MAAM,MAAM;EACZ,MAAM,WAAW;EACjB,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;EAClE,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;EAC3B,SAAS;EACT,QAAQ,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;EAC1C,OAAO;EACP,MAAM,IAAI;EACV,KAAK,CAAC;AACN;EACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;EAChC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;EAC3C,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW;EAC9B,UAAU,SAAS;EACnB,UAAU,OAAO;EACjB,UAAU,SAAS,CAAC,EAAE;EACtB,YAAY,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;EAClD,cAAc,IAAI,CAAC,OAAO,EAAE,CAAC;EAC7B,aAAa;EACb,WAAW;EACX,UAAU,IAAI;EACd,SAAS,CAAC;EACV,OAAO,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;EAClD,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW;EAC9B,UAAU,SAAS;EACnB,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,sBAAsB,GAAG,WAAW;EAChE,UAAU,SAAS,CAAC,EAAE;EACtB,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC;EAC3B,YAAY,CAAC,CAAC,cAAc,EAAE,CAAC;EAC/B,YAAY,CAAC,CAAC,eAAe,EAAE,CAAC;EAChC,WAAW;EACX,UAAU,IAAI;EACd,SAAS,CAAC;EACV,OAAO,MAAM;EACb,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EAC3E,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;EAC5E,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;EACxD,OAAO;EACP,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;EACrB,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE;EAC3B,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW;EAC9B,UAAU,SAAS;EACnB,UAAU,YAAY;EACtB,UAAU,WAAW;EACrB,YAAY,IAAI,CAAC,QAAQ,EAAE,CAAC;EAC5B,WAAW;EACX,UAAU,IAAI;EACd,SAAS,CAAC;EACV,OAAO,MAAM;EACb,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW;EAC9B,UAAU,SAAS;EACnB,UAAU,OAAO;EACjB,UAAU,WAAW;EACrB,YAAY,IAAI,CAAC,QAAQ,EAAE,CAAC;EAC5B,WAAW;EACX,UAAU,IAAI;EACd,SAAS,CAAC;EACV,OAAO;EACP,KAAK;AACL;EACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;EACzC,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;EACrD,KAAK;AACL;EACA,IAAI,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;EACzD,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;EAC7D,IAAI,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;EACzD,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;AAC7D;EACA,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAClD;EACA,IAAI,OAAO,SAAS,CAAC;EACrB,GAAG;AACH;EACA,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE;EAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;EAC/B,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;EACA,EAAE,cAAc,EAAE,SAAS,OAAO,EAAE,OAAO,EAAE;EAC7C,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;EAC3E,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9C,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;EACnC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;EAChC,MAAM,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;EAC9B,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,iDAAiD,CAAC,CAAC;EAC3F,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,uCAAuC,CAAC,CAAC;EACnF,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC/C,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EAC/D,OAAO;EACP,KAAK,MAAM;EACX,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,wCAAwC,CAAC,CAAC;EACpF,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,gCAAgC,CAAC,CAAC;EAC/E,KAAK;EACL,GAAG;AACH;EACA,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE;EAChC,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;AACtC;EACA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrC;EACA,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;EAC7B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;EACjD,KAAK;AACL;EACA,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;EACrD,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;EAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;EACvB,OAAO,SAAS,EAAE,CAAC;AACnB;EACA,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;EACA,EAAE,QAAQ,EAAE,SAAS,OAAO,EAAE;EAC9B,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;EAClC,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;EAChE,MAAM,OAAO;EACb,KAAK;AACL;EACA,IAAI,IAAI,YAAY,GAAG,EAAE,IAAI,CAAC,aAAa;EAC3C,MAAM,IAAI,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS;EAC5C,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACnC;EACA,IAAI,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;EAC9B,IAAI,IAAI,CAAC,OAAO,EAAE;EAClB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;EAC3B,KAAK;AACL;EACA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC;EACzC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;EAC/B,MAAM,KAAK;EACX,MAAM,SAAS,OAAO,EAAE;EACxB,QAAQ,IAAI,YAAY,KAAK,IAAI,CAAC,aAAa,EAAE;EACjD,UAAU,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;EACtC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC;EAChD,UAAU,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAChD,SAAS;EACT,OAAO;EACP,MAAM,IAAI;EACV,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,sBAAsB,EAAE,SAAS,MAAM,EAAE;EAC3C,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;EAClD,GAAG;AACH;EACA,EAAE,OAAO,EAAE,WAAW;EACtB,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,mCAAmC,CAAC,EAAE;EAClF,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;EACvB,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;EACrB,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,EAAE,WAAW;EACtB,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;EAC7E,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;EACzB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;EACxB,GAAG;AACH;EACA,EAAE,SAAS,EAAE,WAAW;EACxB,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;EAChF,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,iDAAiD,CAAC,CAAC;EACtF,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,gCAAgC,CAAC,CAAC;EAChF,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,uCAAuC,CAAC,CAAC;EACpF,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,wCAAwC,CAAC,CAAC;EACrF,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;EACvB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EAC1B,GAAG;AACH;EACA,EAAE,aAAa,EAAE,WAAW;EAC5B,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,iDAAiD,CAAC,CAAC;EACtF,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;EAC3B,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,gCAAgC,CAAC,CAAC;EAChF,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,uCAAuC,CAAC,CAAC;EACpF,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,wCAAwC,CAAC,CAAC;EACrF,GAAG;AACH;EACA,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,KAAK,EAAE;EACtC,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;EACvC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI;EAChG,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;EAC3E,MAAM,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,CAAC,EAAE;EACtD;EACA;EACA;EACA;EACA;EACA,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;EACzC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EAC3B,QAAQ,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;EAC5C,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE;EACrB,UAAU,EAAE;EACZ,UAAU,gBAAgB;EAC1B,UAAU,WAAW;EACrB,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;EACxC,cAAc,IAAI,CAAC,SAAS,EAAE,CAAC;EAC/B,aAAa,MAAM;EACnB,cAAc,IAAI,CAAC,aAAa,EAAE,CAAC;EACnC,aAAa;EACb,WAAW;EACX,UAAU,IAAI;EACd,SAAS,CAAC;EACV,OAAO,CAAC;AACR;EACA,IAAI,IAAI,IAAI,EAAE;EACd,MAAM,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;EAC7B,KAAK;AACL;EACA,IAAI,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;AAChD;EACA,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE;EACrB,MAAM,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;EAC9C,KAAK,MAAM;EACX,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;EAC1B,KAAK;AACL;EACA;EACA;EACA;EACA,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAC/E;EACA,IAAI,OAAO,EAAE,CAAC;EACd,GAAG;AACH;EACA,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE;EACxB,IAAI,IAAI,KAAK,GAAG,IAAI;EACpB,MAAM,MAAM,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE;EACpC,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE;EAC9B,UAAU,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;EACvF,UAAU,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,GAAG,aAAa,GAAG,iBAAiB,CAAC,CAAC;EAC3F,SAAS;EACT,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;EAC/B,UAAU,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC;EAC/E,SAAS;AACT;EACA,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE;EAC9B,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;EACpF,SAAS;EACT,OAAO,CAAC;AACR;EACA,IAAI,QAAQ,CAAC,CAAC,OAAO;EACrB;EACA,MAAM,KAAK,EAAE;EACb,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;EACpC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;EAC3B,SAAS,MAAM;EACf,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;EAC/B,SAAS;EACT,QAAQ,MAAM;EACd;EACA,MAAM,KAAK,EAAE;EACb,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EACnB,QAAQ,MAAM;EACd;EACA,MAAM,KAAK,EAAE;EACb,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC;EAClB,QAAQ,MAAM;EACd;EACA,MAAM,KAAK,EAAE;EACb,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;EAC7B,UAAU,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC,CAAC;EACtF,UAAU,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;EAC5D,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;EAC/B,SAAS,MAAM;EACf,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;EAC1B,SAAS;EACT,QAAQ,MAAM;EACd,MAAM;EACN,QAAQ,OAAO;EACf,KAAK;AACL;EACA,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;EACjC,GAAG;EACH,EAAE,OAAO,EAAE,WAAW;EACtB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;EAC9B,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE;EACjC,MAAM,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;EACzC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;EACrD,QAAQ,IAAI,CAAC,eAAe,GAAG,UAAU;EACzC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW;EAC5B,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;EAChC,WAAW,EAAE,IAAI,CAAC;EAClB,UAAU,IAAI,CAAC,OAAO,CAAC,cAAc;EACrC,SAAS,CAAC;EACV,OAAO,MAAM;EACb,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;EAC7B,OAAO;EACP,KAAK;EACL,GAAG;EACH,CAAC,EAAE;AACH;EACO,SAAS,QAAQ,CAAC,OAAO,EAAE;EAClC,EAAE,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;EAC/B;;EC9WA,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEnC;EACA,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE;EACzB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,QAAQ,EAAE,QAAQ;EACpB,CAAC,CAAC;;;;;;;;"}
\ No newline at end of file
sonar.sources = src
sonar.exclusions = build/**, node_modules/**, src/assets/resources/**
#sonar.tests = api/tests/
<template>
<div v-frag>
<script
type="application/javascript"
:src="
baseUrl +
'resources/leaflet-control-geocoder-1.13.0/Control.Geocoder.js'
"
></script>
<header class="header-menu">
<div class="menu container">
<div class="ui inverted icon menu">
<router-link to="/" class="header item">
<img class="ui mini right spaced image" :src="logo" />
<span class="desktop">
{{ APPLICATION_NAME }}
</span>
</router-link>
<div
v-if="width <= 560 || (width > 560 && project)"
id="menu-dropdown"
:class="['ui dropdown item', { 'active visible': menuIsOpen }]"
@click="menuIsOpen = !menuIsOpen"
>
<!-- empty span to occupy space for style if no project -->
<span>
<span v-if="project"> Projet : {{ project.title }} </span>
</span>
<i class="dropdown icon"></i>
<div
:class="[
'menu dropdown-list',
{ 'visible transition': menuIsOpen },
]"
style="z-index: 401"
>
<router-link
v-if="project"
:to="{
name: 'project_detail',
params: { slug: project.slug },
}"
class="item"
>
<i class="home icon"></i>Accueil
</router-link>
<router-link
v-if="project"
:to="{
name: 'liste-signalements',
params: { slug: project.slug },
}"
class="item"
>
<i class="list icon"></i>Liste & Carte
</router-link>
<router-link
v-if="
project &&
(user.is_administrator || user.is_superuser || isAdmin)
"
:to="{
name: 'project_mapping',
params: { slug: project.slug },
}"
class="item"
>
<i class="map icon"></i>Fonds cartographiques
</router-link>
<router-link
v-if="
project &&
(user.is_administrator || user.is_superuser || isAdmin)
"
:to="{
name: 'project_members',
params: { slug: project.slug },
}"
class="item"
>
<i class="users icon"></i>Membres
</router-link>
<div class="mobile">
<router-link v-if="user" to="/my_account/" class="item">
{{ userFullname || user.username || "Utilisateur inconnu" }}
</router-link>
<div
v-if="USER_LEVEL_PROJECTS && project"
class="item ui label vertical no-hover"
>
{{ USER_LEVEL_PROJECTS[project.slug] }}
<br />
</div>
<div
v-if="user && user.is_administrator"
class="item ui label vertical no-hover"
>
Gestionnaire métier
</div>
<div v-frag v-if="!DISABLE_LOGIN_BUTTON">
<a v-if="user" @click="logout" class="item"
><i class="ui logout icon"></i>
</a>
<router-link
v-else-if="!user && !SSO_LOGIN_URL"
to="/connexion/"
class="item"
>Se connecter</router-link
>
<a v-else class="item" :href="SSO_LOGIN_URL">Se connecter</a>
</div>
</div>
</div>
</div>
<div class="desktop flex push-right-desktop item title">
<span>
{{ APPLICATION_ABSTRACT }}
</span>
</div>
<div class="desktop flex push-right-desktop">
<router-link v-if="user" to="/my_account/" class="item">
{{ userFullname || user.username || "Utilisateur inconnu" }}
</router-link>
<div
v-if="USER_LEVEL_PROJECTS && project"
class="item ui label vertical no-hover"
>
{{ USER_LEVEL_PROJECTS[project.slug] }}
<br />
</div>
<div
v-if="user && user.is_administrator"
class="item ui label vertical no-hover"
>
Gestionnaire métier
</div>
<div v-frag v-if="!DISABLE_LOGIN_BUTTON">
<a v-if="user" @click="logout" class="item"
><i class="ui logout icon"></i>
</a>
<router-link
v-else-if="!user && !SSO_LOGIN_URL"
to="/connexion/"
class="item"
>Se Connecter</router-link
>
<a v-else class="item" :href="SSO_LOGIN_URL">Se connecter</a>
</div>
</div>
<div id="app">
<GeorchestraHeader
v-if="isGeorchestra"
:key="$route.fullPath"
/>
<AppHeader v-else />
<div id="app-content">
<span id="scroll-top-anchor" />
<div
:class="{ active: loader.isLoading }"
class="ui inverted dimmer"
>
<div class="ui text loader">
{{ loader.message }}
</div>
</div>
</header>
<main>
<div id="content" class="ui stackable grid centered container">
<transition name="fadeDownUp">
<div v-if="messages && messages.length > 0" class="row">
<div class="fourteen wide column">
<div
v-for="(message, index) in messages"
:key="'message-' + index"
class="ui info message"
>
<div class="header">
<i class="info circle icon"></i> Informations
</div>
<ul class="list">
{{
message.comment
}}
</ul>
</div>
</div>
</div>
</transition>
<div :class="{ active: loader.isLoading }" class="ui inverted dimmer">
<div class="ui text loader">
{{ loader.message }}
</div>
</div>
<router-view />
<!-- //* Les views sont injectées ici -->
</div>
</main>
<footer>
<div class="ui compact text menu">
<router-link to="/mentions/" class="item">Mentions légales</router-link>
<router-link to="/aide/" class="item">Aide</router-link>
<p class="item">Version {{ PACKAGE_VERSION }}</p>
</div>
</footer>
<!-- //* Les views sont injectées ici -->
<router-view class="page-content" />
</div>
<AppFooter />
</div>
</template>
<script>
import frag from "vue-frag";
import { mapState, mapGetters } from "vuex";
import { mapState } from 'vuex';
import AppHeader from '@/components/AppHeader';
import AppFooter from '@/components/AppFooter';
import GeorchestraHeader from '@/components/GeorchestraHeader.vue';
export default {
name: "App",
name: 'App',
directives: {
frag,
components: {
GeorchestraHeader,
AppHeader,
AppFooter,
},
data() {
......@@ -218,226 +53,24 @@ export default {
computed: {
...mapState([
"user",
"USER_LEVEL_PROJECTS",
"configuration",
"messages",
"loader",
'user',
'USER_LEVEL_PROJECTS',
'configuration',
'loader',
]),
...mapState('projects', [
'projects'
]),
...mapGetters( 'projects', [
'project'
'projects',
'project',
]),
APPLICATION_NAME() {
return this.configuration.VUE_APP_APPLICATION_NAME;
},
APPLICATION_ABSTRACT() {
return this.$store.state.configuration.VUE_APP_APPLICATION_ABSTRACT;
},
DISABLE_LOGIN_BUTTON() {
return this.configuration.VUE_APP_DISABLE_LOGIN_BUTTON;
},
SSO_LOGIN_URL() {
return this.configuration.VUE_APP_LOGIN_URL;
},
PACKAGE_VERSION: () => process.env.PACKAGE_VERSION || "0",
logo() {
return this.configuration.VUE_APP_LOGO_PATH;
},
userFullname() {
if (this.user.first_name || this.user.last_name)
return this.user.first_name + " " + this.user.last_name;
return null;
},
isAdmin() {
return this.USER_LEVEL_PROJECTS &&
this.USER_LEVEL_PROJECTS[this.project.slug] === "Administrateur projet"
? true
: false;
isGeorchestra() {
return this.configuration.GEORCHESTRA_INTEGRATION?.HEADER;
},
},
methods: {
logout() {
this.$store.dispatch("LOGOUT");
},
clickOutsideMenu(e) {
if (e.target.closest && !e.target.closest("#menu-dropdown"))
this.menuIsOpen = false;
},
},
created() {
window.addEventListener("mousedown", this.clickOutsideMenu);
},
beforeDestroy() {
window.removeEventListener("mousedown", this.clickOutsideMenu);
},
};
</script>
<style>
@import "./assets/styles/base.css";
@import "./assets/resources/semantic-ui-2.4.2/semantic.min.css";
body {
height: 100vh;
margin: 0;
}
header {
min-height: 61px;
}
footer {
min-height: 40px;
}
/* Trick */
body {
display: flex;
flex-direction: column;
}
/* to display loader between header and footer */
main {
position: relative;
<style scoped>
.ui.active.dimmer {
position: fixed;
}
footer {
margin-top: auto;
}
.vertical {
flex-direction: column;
justify-content: center;
}
.leaflet-container {
background: white !important;
}
.flex {
display: flex;
}
/* keep above loader */
#menu-dropdown {
z-index: 1001;
}
@media screen and (min-width: 560px) {
.mobile {
display: none !important;
}
.header-menu {
min-width: 560px;
}
.menu.container {
width: auto !important;
}
.push-right-desktop {
margin-left: auto;
}
}
@media screen and (max-width: 560px) {
.desktop {
display: none !important;
}
div.dropdown-list {
width: 100vw;
left: -70px !important; /* should be the same than belows */
}
.menu.container a.header {
width: 70px;
}
.menu.container a.header > img {
margin: 0;
}
#menu-dropdown {
width: calc(100vw - 70px);
justify-content: space-between;
}
#menu-dropdown > span {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
}
.ui.menu .ui.dropdown .menu > .item.no-hover:hover {
cursor: auto !important;
background: white !important;
}
/* copy style to apply inside nested div */
.ui.menu .ui.dropdown .menu .item {
margin: 0;
text-align: left;
font-size: 1em !important;
padding: 0.78571429em 1.14285714em !important;
background: 0 0 !important;
color: #252525 !important;
text-transform: none !important;
font-weight: 400 !important;
box-shadow: none !important;
transition: none !important;
}
.item.title::before {
background: none !important;
}
.bounce-enter-active {
animation: bounce-in .5s;
}
.bounce-leave-active {
animation: bounce-in .5s reverse;
}
@keyframes bounce-in {
0% {
transform: scale(0);
}
50% {
transform: scale(1.5);
}
100% {
transform: scale(1);
}
}
.fadeDownUp-enter-active {
animation: fadeInDown .5s;
}
.fadeDownUp-leave-active {
animation: fadeOutUp .5s;
}
@keyframes fadeOutUp {
0% {
opacity: 1;
}
100% {
opacity: 0;
transform: translate3d(0, -100%, 0);
}
}
@keyframes fadeInDown {
from {
opacity: 0;
transform: translate3d(0, -100%, 0);
}
to {
opacity: 1;
transform: translate3d(0, 0, 0);
}
}
</style>
\ No newline at end of file
src/assets/img/default.png

15.1 KiB | W: | H:

src/assets/img/default.png

2.7 KiB | W: | H:

src/assets/img/default.png
src/assets/img/default.png
src/assets/img/default.png
src/assets/img/default.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/img/geolocation-icon.png

12.3 KiB

src/assets/img/line.png

5.89 KiB | W: | H:

src/assets/img/line.png

3.28 KiB | W: | H:

src/assets/img/line.png
src/assets/img/line.png
src/assets/img/line.png
src/assets/img/line.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/img/logo-geocontrib-large.png

13.8 KiB

src/assets/img/logo-geocontrib.png

13.8 KiB

src/assets/img/logo-large.png

27.4 KiB

src/assets/img/logo-neogeo-circle-inverted.png

47.1 KiB

src/assets/img/logo-neogeo-circle.png

40.5 KiB

src/assets/img/logo-neogeo.png

11.4 KiB

src/assets/img/logo.png

9.98 KiB

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 744.09448819 1052.3622047"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="logo.svg">
<defs
id="defs4">
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter4343"
x="-0.0516"
width="1.1032"
y="-0.0516"
height="1.1032">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="11.51431"
id="feGaussianBlur4345" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="375"
inkscape:cy="520"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1">
<rect
inkscape:export-ydpi="74.43"
inkscape:export-xdpi="74.43"
transform="matrix(1.0337351,-0.17155069,0.17155069,1.0337351,-49.111849,56.004698)"
y="259.4512"
x="83.736664"
height="465.6055"
width="465.6055"
id="rect4293"
style="opacity:0.46200005;fill:#000000;fill-opacity:1;stroke:none;stroke-width:49.23444748;stroke-linejoin:miter;stroke-miterlimit:22;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4343)" />
<rect
style="fill:#8adcec;fill-opacity:1;stroke:#000000;stroke-width:49.23444748;stroke-linejoin:miter;stroke-miterlimit:22;stroke-dasharray:none;stroke-opacity:1"
id="rect3336"
width="440.76556"
height="440.76556"
x="56.281677"
y="327.0433"
transform="matrix(0.98650797,-0.16371323,0.16371323,0.98650797,0,0)"
inkscape:export-xdpi="74.43"
inkscape:export-ydpi="74.43" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:226.91236877px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="196.70358"
y="579.59528"
id="text4138"
sodipodi:linespacing="125%"
inkscape:export-xdpi="74.43"
inkscape:export-ydpi="74.43"><tspan
sodipodi:role="line"
id="tspan4140"
x="196.70358"
y="579.59528"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:226.91288757px;line-height:125%;font-family:Alegreya;-inkscape-font-specification:'Alegreya Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">Lab</tspan></text>
</g>
</svg>