@vertigis/arcgis-extensions 51.0.1 → 51.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data/convert.d.ts +48 -0
- package/data/convert.js +1 -1
- package/docs/html/assets/navigation.js +1 -1
- package/docs/html/assets/search.js +1 -1
- package/docs/html/functions/data_convert.getDefaultSymbol.html +5 -0
- package/docs/html/functions/data_convert.kmlHexToEsriColor.html +3 -0
- package/docs/html/functions/data_convert.kmlToLayerExtensions.html +4 -0
- package/docs/html/functions/data_convert.parseKMLCoordinates.html +3 -0
- package/docs/html/functions/data_convert.parseKMLSymbol.html +6 -0
- package/docs/html/modules/data_convert.html +5 -0
- package/docs/html/variables/version.version.html +1 -1
- package/forked-libs/shp-write/src/poly.js +1 -1
- package/forked-libs/shp-write/src/write.js +1 -1
- package/package.json +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
package/data/convert.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
+
import Color from "@arcgis/core/Color.js";
|
|
1
2
|
import SpatialReference from "@arcgis/core/geometry/SpatialReference";
|
|
3
|
+
import MeshSymbol3D from "@arcgis/core/symbols/MeshSymbol3D.js";
|
|
4
|
+
import PictureMarkerSymbol from "@arcgis/core/symbols/PictureMarkerSymbol.js";
|
|
5
|
+
import SimpleFillSymbol from "@arcgis/core/symbols/SimpleFillSymbol.js";
|
|
6
|
+
import SimpleLineSymbol from "@arcgis/core/symbols/SimpleLineSymbol.js";
|
|
7
|
+
import SimpleMarkerSymbol from "@arcgis/core/symbols/SimpleMarkerSymbol.js";
|
|
8
|
+
import type { LayerExtension } from "../mapping/_LayerExtension.js";
|
|
9
|
+
import type { GeometryType } from "../support/esri.js";
|
|
2
10
|
import { DateFormat, NumberFormat, TimeFormat } from "../utilities/format/formats.js";
|
|
3
11
|
import { FeatureSet } from "./FeatureSet.js";
|
|
4
12
|
export declare const FIELD_NAME_REGEX: RegExp;
|
|
@@ -346,6 +354,31 @@ export declare function xlsxToUploadData(xlsxData: Blob, options: FromXLSXOption
|
|
|
346
354
|
* @param options Options for the conversion.
|
|
347
355
|
*/
|
|
348
356
|
export declare function xlsxToFeatureSet(xlsxData: Blob, options?: FromXLSXOptions): Promise<FeatureSet>;
|
|
357
|
+
/**
|
|
358
|
+
* Creates an instance of Esri Color using a provided KML color hex code.
|
|
359
|
+
*
|
|
360
|
+
* @param kmlColor The hex code to use.
|
|
361
|
+
*/
|
|
362
|
+
export declare function kmlHexToEsriColor(kmlColor: string): Color;
|
|
363
|
+
/**
|
|
364
|
+
* Converts KML coordinates string to x,y, and z values.
|
|
365
|
+
*
|
|
366
|
+
* @param coordinates The string coordinates to convert.
|
|
367
|
+
*/
|
|
368
|
+
export declare function parseKMLCoordinates(coordinates: string): {
|
|
369
|
+
x: number;
|
|
370
|
+
y: number;
|
|
371
|
+
z: number;
|
|
372
|
+
}[];
|
|
373
|
+
/**
|
|
374
|
+
* Parses the style element to generate the appropriate symbol.
|
|
375
|
+
*
|
|
376
|
+
* @param style The style element to use for symbol construction.
|
|
377
|
+
* @param geometryType The feature geometry that will be used to determine a
|
|
378
|
+
* default symbol in case there is no style element.
|
|
379
|
+
* @param index The index used to alternate symbol colors between features.
|
|
380
|
+
*/
|
|
381
|
+
export declare function parseKMLSymbol(style: Element | undefined, geometryType: GeometryType, index: number): PictureMarkerSymbol | SimpleFillSymbol | SimpleLineSymbol | SimpleMarkerSymbol;
|
|
349
382
|
/**
|
|
350
383
|
* Converts a {@link data/FeatureSet!FeatureSet } to a zipped shapefile blob.
|
|
351
384
|
*
|
|
@@ -353,6 +386,13 @@ export declare function xlsxToFeatureSet(xlsxData: Blob, options?: FromXLSXOptio
|
|
|
353
386
|
* @param options Options for the conversion.
|
|
354
387
|
*/
|
|
355
388
|
export declare function toShapefile(featureSet: FeatureSet, options?: ToShapefileOptions): Promise<Blob>;
|
|
389
|
+
/**
|
|
390
|
+
* Converts a Blob that represents KML data to layer extensions.
|
|
391
|
+
*
|
|
392
|
+
* @param kmlBlob The KML blob to be used for parsing and generating layer
|
|
393
|
+
* extensions.
|
|
394
|
+
*/
|
|
395
|
+
export declare function kmlToLayerExtensions(kmlBlob: Blob): Promise<LayerExtension[]>;
|
|
356
396
|
/**
|
|
357
397
|
* Converts a Blob that represents zipped Shapefile data to a data table.
|
|
358
398
|
*
|
|
@@ -368,4 +408,12 @@ export declare function shapefileToUploadData(shapefileData: Blob, options: From
|
|
|
368
408
|
* @param options Options for the conversion.
|
|
369
409
|
*/
|
|
370
410
|
export declare function shapefileToFeatureSet(shapefileData: Blob, options?: FromShapefileOptions): Promise<FeatureSet>;
|
|
411
|
+
/**
|
|
412
|
+
* Uses geometry type to determine symbol type and uses the index to alternate
|
|
413
|
+
* between colors of generated symbols.
|
|
414
|
+
*
|
|
415
|
+
* @param colorIndex The index used to alternate symbol colors.
|
|
416
|
+
* @param geometryType The geometry type used to return the appropriate symbol.
|
|
417
|
+
*/
|
|
418
|
+
export declare function getDefaultSymbol(colorIndex: number, geometryType: GeometryType): SimpleMarkerSymbol | SimpleLineSymbol | SimpleFillSymbol | MeshSymbol3D | undefined;
|
|
371
419
|
export {};
|
package/data/convert.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"@arcgis/core/geometry/Point";import t from"@arcgis/core/geometry/SpatialReference";import{geometryTypeToJson as r}from"../json/GeometryJson.js";import{translate as a}from"../locale/language.js";import{INVARIANT as n}from"../locale.js";import{Time as o}from"../utilities/Time.js";import{checkArg as i,assertNever as s}from"../utilities/checkArg.js";import{isPoint as c,isMultipoint as m,isPolyline as l,isPolygon as u,isExtent as f}from"../utilities/esri.js";import{parse as d,format as y,DEFAULT_PARSING_FORMATS as p,INVALID_DATE as g}from"../utilities/format/date.js";import{DateFormat as w,NumberFormat as h,TimeFormat as F}from"../utilities/format/formats.js";import{parse as S,format as T}from"../utilities/format/number.js";import{parse as N,format as O,DEFAULT_PARSING_FORMATS as R}from"../utilities/format/time.js";import{project as D,esriToWKT as M,wktToEsri as A,esriWkidToWkt as E,esriWktToWkid as G,esriToGeoJSON as _,geoJSONToEsri as b}from"../utilities/geometry.js";import{getLogger as x}from"../utilities/log.js";import{isNumeric as I}from"../utilities/number.js";import{caseInsensitiveEquals as v}from"../utilities/string.js";import{Feature as L}from"./Feature.js";import{FeatureSet as P}from"./FeatureSet.js";const U=["=","-","+","@"],C='"',$="\r\n",j="\n",H=[...p.map(Se),"M/d/yy"],z=[...R.map(Ne).map((e=>e.replace("AM/PM","tt")))],J=/(\w+)_(point|multipoint|polyline|polygon)z?/;var W;function B(){return x("geocortex.api.data.convert")}!function(e){e.DATE="D",e.NUMBER="N",e.STRING="C",e.BOOLEAN="L"}(W||(W={}));export const FIELD_NAME_REGEX=/[^a-zA-Z\d_]/g;export var GeometryFormat;!function(e){e.NONE="NONE",e.WKT="WKT",e.XY="XY",e.XYZ="XYZ",e.LAT_LON="LAT_LONG",e.GEO_JSON="GEO_JSON",e.ARCGIS_JSON="ARCGIS_JSON"}(GeometryFormat||(GeometryFormat={}));export const geometryTypeHeaders={[GeometryFormat.XYZ]:[["x","y","z"]],[GeometryFormat.XY]:[["x","y"]],[GeometryFormat.LAT_LON]:[["latitude","longitude"],["lat","lon"],["lat","long"]],[GeometryFormat.ARCGIS_JSON]:[["geometry"]],[GeometryFormat.GEO_JSON]:[["geometry"]],[GeometryFormat.WKT]:[["geometry"]]};const X=[[GeometryFormat.ARCGIS_JSON,le],[GeometryFormat.GEO_JSON,ue],[GeometryFormat.WKT,fe]],Y=new Map(X);export async function uploadDataToFeatureSet(t){const n=await async function(t){const{data:r,includeHeaderRow:a,geometryFormat:n,geometryFields:o,locale:i,numberFormat:c,inSpatialReference:m}=t,l=a?r.slice(1):r;if(n===GeometryFormat.NONE)return{columnIndices:[]};const u=e=>pe(e,i,c),f=(t,r)=>{const a=r===GeometryFormat.XYZ,n=r===GeometryFormat.LAT_LON;return{columnIndices:t,geometries:l.map((r=>{if(r.length>=Math.max(...t)&&I(r[t[0]]?.raw,i)&&I(r[t[1]]?.raw,i)&&(!a||I(r[t[2]]?.raw,i)))return new e({x:u(n?r[t[1]].raw:r[t[0]].raw),y:u(n?r[t[0]].raw:r[t[1]].raw),z:a?u(r[t[2]].raw):0,spatialReference:m})}))}},d=async(e,t)=>({columnIndices:[e],geometries:await Promise.all(l.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),m)})))}),y=async(e,t)=>{switch(t){case GeometryFormat.NONE:return{columnIndices:[0]};case GeometryFormat.LAT_LON:case GeometryFormat.XYZ:case GeometryFormat.XY:return f(e,t);case GeometryFormat.ARCGIS_JSON:return d(e[0],le);case GeometryFormat.GEO_JSON:return d(e[0],ue);case GeometryFormat.WKT:return d(e[0],fe);default:return s(t,new Error(`Unknown geometry format "${t}".`))}};if(n){const e=de(a?r[0]:r[0].map(((e,t)=>({raw:t.toString()}))),n,a?o:o.map((e=>""+(parseInt(e.match(/\d+/g)[0])-1))));if(a&&void 0===e)throw new Error(`Error parsing file data: Expected geometry columns ${geometryTypeHeaders[n][0].join(",")} are missing for GeometryType.${n}`);return y(e??[0],n)}const[p,g]=await ge(r,m,a);if(p===GeometryFormat.NONE)return{columnIndices:[]};return g.length>1?f(g,p):d(g[0],Y.get(p))}(t),o=function(e,t){const{data:n,displayField:o,includeHeaderRow:i,inSpatialReference:s,outSpatialReference:c,generatePrimaryKey:m}=e,l={fields:[]},u=e=>!(!t.columnIndices||0===t.columnIndices.length)&&t.columnIndices.includes(e);let{primaryKeyField:f}=e,d=0;for(let t=0;t<n[0].length;t++){if(u(t))continue;const r=he(e,t,!m&&!f&&!l.fields.find((e=>"esriFieldTypeOID"===e.type)));let o=n[0][t]?.raw?.toString(),s=o?.replace(FIELD_NAME_REGEX,"_");i&&s||(s="field"+ ++d,o=a("gcx.api.data.convert.import-field-alias",d)),l.fields.push({alias:o,name:s,type:r}),"esriFieldTypeOID"===r&&(f=s)}if(l.spatialReference=c??t.geometries?.[0]?.spatialReference??s,t.geometries?.length){const e=t.geometries.filter((e=>void 0!==e)).map((e=>e.type)),a=e[0];l.geometryType=e.every((e=>e===a))?r(a):void 0}if(!l.fields.find((e=>"esriFieldTypeOID"===e.type))){const e=l.fields.length+1,t=!!l.fields.find((e=>"objectid"===e.name.toLowerCase()));f=t?`OBJECTID_${e}`:"OBJECTID",l.fields.push({name:f,alias:f,type:"esriFieldTypeOID"})}return l.displayField=o??l.fields.find((e=>!v(e.name,f)&&"esriFieldTypeString"===e.type))?.name??l.fields.find((e=>!v(e.name,f)))?.name??f,l.primaryKeyField=f,l}(t,n),i=await async function(e,t,r){const{data:a,includeHeaderRow:n,outFields:o,escapeFormulaChars:i,locale:s,numberFormat:c,dateFormat:m,timeFormat:l}=e,{spatialReference:u}=r,f=[],d=n?a.slice(1):a,y=(e,r)=>!t.columnIndices||0===t.columnIndices.length||!t.columnIndices.includes(r);return await Promise.all(d.map((async(e,a)=>{const n=new L;for(let t=0;t<r.fields.length;t++){const u=r.fields[t],f=e.filter(y);if(o.includes("*")||o.filter((e=>v(e,u.name))).length>0){let e=await Fe(f[t]?.raw,u,{escapeFormulaChars:i,dateFormat:m,numberFormat:c,timeFormat:l,locale:s});"esriFieldTypeOID"===u.type&&null===e&&(e=a),n.attributes.set(u.name,e)}}t.geometries&&(n.geometry=await re(t.geometries[a],u)),f.push(n)}))),f}(t,n,o);return new P({features:i,schema:o})}export async function toCsv(e,r){i("featureSet",e).isNotMissing();const a=Array.from(e),n={...{useFormattedValues:!1,alwaysQuote:!1,escapeFormulaChars:!0,delimiter:",",dateFormat:w.ROUND_TRIP,timeFormat:F.ROUND_TRIP,geometryFormat:a.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,includeByteOrderMark:!0,outSpatialReference:t.WGS84,includeHeaderRow:!0,outFields:ee(e.source),rowDelimiter:navigator.platform?.startsWith("Win")?$:"\n"},...r},{includeByteOrderMark:o,includeHeaderRow:s,delimiter:c,outFields:m,rowDelimiter:l}=n,u=[];o&&u.push("\ufeff");const f=q(a,n),d=Q(a,m,e.schema,!0),y=Q(a,m,e.schema,!1);if(s){const e=[];for(const t of f)e.push(ae(t,n));for(const t of d)e.push(ae(t,n));for(const t of y)e.push(ae(t,n));const t=e.join(c)+l;u.push(t)}await Promise.all(a.map((async e=>{const t=[],r=(t,r)=>{const a=oe(e,t,r),n=e.schema.findFieldByName(t)?.type;return ae(ne(a,{...r,isDateOnly:"date-only"===n}),r)};t.push(...await async function(e,t){let r=await te(e,t);t.geometryFormat!==GeometryFormat.XYZ&&t.geometryFormat!==GeometryFormat.XY&&t.geometryFormat!==GeometryFormat.LAT_LON||(r=r.map((e=>void 0===e?"":ne(e,t))));return r.map((e=>""===e?"":ae(e,t)))}(e.geometry,n)),t.push(...d.map((e=>r(e,n)))),t.push(...y.map((e=>r(e,n))));const a=`${t.join(c)}${l}`;u.push(a)})));return new Blob(u,{type:"text/plain",endings:"\n"===l||l===$?"transparent":"native"})}export async function csvToUploadData(e,t){let r;if(i("csvData",e).isNotMissing(),e instanceof Blob){const t=new Promise(((t,r)=>{const a=new FileReader;a.onload=()=>{t(a.result)},a.onerror=()=>{r(a.error)},a.readAsText(e)}));r=await t}else r=e;const o=Z(t),s=o.rowDelimiter||function(e){let t=j;return me(e,$,((r,a)=>(0===r&&a===e.length||(t=$),!1))),t}(r),c=o.delimiter??function(e,t,r){const a=",";if(0===e.length)return a;const o=[];if(me(e,t,((t,r)=>(r!==e.length||t!==r)&&(o.push(e.substring(t,r)),o.length<3))),0===o.length)return a;let i=[{delimiter:",",rowsDelimiterOccurrences:[],rowsNumberAdjacentOccurrences:[]},{delimiter:";",rowsDelimiterOccurrences:[]},{delimiter:"|",rowsDelimiterOccurrences:[]},{delimiter:"\t",rowsDelimiterOccurrences:[]},{delimiter:" ",rowsDelimiterOccurrences:[]}].filter((e=>o[0].includes(e.delimiter)));if(0===i.length)return a;for(const e of o)for(const t of i){let a=0,n=0;me(e,t.delimiter,((o,i)=>{if(i!==e.length&&a++,","===t.delimiter){const t=e.charAt(i-1),a=e.charAt(i+1);I(t,r)&&I(a,r)&&n++}return!0})),t.rowsDelimiterOccurrences.push(a),","===t.delimiter&&t.rowsNumberAdjacentOccurrences.push(n)}if(i=i.filter((e=>e.rowsDelimiterOccurrences.every((t=>e.rowsDelimiterOccurrences[0]===t)))).sort(((e,t)=>t.rowsDelimiterOccurrences[0]-e.rowsDelimiterOccurrences[0])),i.length>1&&","===i[0].delimiter&&null!=r&&r!==n){const e=i[0];if(null!=e&&","===e.delimiter&&","===Intl.NumberFormat(r).formatToParts(1.1).find((e=>"decimal"===e.type))?.value)for(let t=0;t<e.rowsDelimiterOccurrences.length;t++)if(e.rowsDelimiterOccurrences[t]<=e.rowsNumberAdjacentOccurrences[t]){i=i.filter((e=>","!==e.delimiter));break}}if(0===i.length)return a;return i[0].delimiter}(r,s,t.locale),m=function(e,t,r){const a=[],n=(e,t)=>{const a=[];return me(e,r,((r,n)=>{const o=e.substring(r,n);return a.push({raw:ce(o,t,a.length)}),!0})),a};if(me(e,t,((t,r)=>{const o=e.substring(t,r);return o.length>0&&a.push(n(o,a.length)),!0})),a.length){const e=a[0].length;a.forEach(((t,r)=>{if(t.length!==e)throw new Error(`Detected invalid CSV: Row ${r} does not have expected number of columns: ${e}`)}))}return a}(r,s,c);let{geometryFormat:l,geometryFields:u}=t;if(!l){const[e,t]=await ge(m,o.inSpatialReference,o.includeHeaderRow);l=e,u=t.map((e=>o.includeHeaderRow?m[0][e]?.raw??a("gcx.api.data.convert.import-field-alias",(e+1).toString()):a("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:m,...o,geometryFormat:l,geometryFields:u}}export async function csvToFeatureSet(e,t){const r=Z(t);return uploadDataToFeatureSet(await csvToUploadData(e,r))}export async function toXLSX(e,r){i("featureSet",e).isNotMissing();const a=Array.from(e),n={...{useFormattedValues:!1,includeHeaderRow:!0,escapeFormulaChars:!0,geometryFormat:a.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,outFields:ee(e.source),outSpatialReference:t.WGS84,dateFormat:w.DEFAULT,timeFormat:F.DEFAULT,numberFormat:h.DEFAULT,sheetName:"sheet1"},...r},{outFields:s,includeHeaderRow:c,dateFormat:m,timeFormat:l,numberFormat:u}=n,f=q(a,n),d=Q(a,s,e.schema,!0),y=Q(a,s,e.schema,!1),p=await import("xlsx"),g=p.utils.sheet_new();let S=!1;if(c){const t=f.concat(d).concat(function(e,t){const r=t?.schema?.fieldExtensions.initializedItems.map((e=>e.field));return e.map((e=>r?.find((t=>v(t.name,e)))?.alias??e))}(y,e.source));S=!0,p.utils.sheet_add_aoa(g,[t],{cellDates:!0})}await Promise.all(a.map((async e=>{const t=[],r=new Set,a=new Set;t.push(...await te(e.geometry,n));for(const r of d){const a=Re(e.attributes.get(r),n);t.push(a)}for(const i of y){const s=oe(e,i,n);if(s instanceof o){const a=e.schema.findFieldByName(i);"time-only"===a?.type&&r.add(t.length)}else if(s instanceof Date){const r=e.schema.findFieldByName(i);"date-only"===r?.type&&a.add(t.length)}const c=Re(s,n);t.push(c)}if(!t.every((e=>"string"!=typeof e||e.length<=32767)))return void B().warn(`toXLSX cell limit exceeded, feature (${e.primaryKey??e.id}) omitted.`);p.utils.sheet_add_aoa(g,[t],{cellDates:!0,origin:S?-1:void 0}),S=!0;const i=p.utils.decode_range(g["!ref"]);for(let e=i.s.c;e<=i.e.c;e++){const t=g[p.utils.encode_cell({r:i.e.r,c:e})];"d"===t.t?r.has(e)?t.z=Ne(l??F.ROUND_TRIP):a.has(e)?t.z=Te(m??w.ROUND_TRIP):t.z=Se(m??w.ROUND_TRIP):"n"===t.t&&(t.z=Oe(u))}})));const T={SheetNames:[],Sheets:{}};T.SheetNames.push(n.sheetName),T.Sheets[n.sheetName]=g;const N=p.write(T,{type:"binary",bookType:"xlsx",compression:!0,bookSST:!0,cellDates:!0}),O=new Uint8Array(N.length);for(let e=0;e<N.length;e++)O[e]=N.charCodeAt(e);return new Blob([O.buffer],{type:"text/plain"})}export async function xlsxToUploadData(e,t){i("xlsxData",e).isNotMissing();const r=K(t),n=await async function(e,t){const r=await import("xlsx"),a=new Promise(((a,n)=>{const o=new FileReader;o.onload=()=>{const e=new Uint8Array(o.result);let n="";for(const t of e)n+=String.fromCharCode(t);const i=r.read(n,{type:"binary",cellDates:!0}),s=t.sheetName||i.SheetNames[0],c=i.Sheets[s];a(c)},o.onerror=()=>{n(o.error)},o.readAsArrayBuffer(e)})),n=await a,o=r.utils.decode_range(n["!ref"]),i=[];for(let e=o.s.r;e<=o.e.r;e++){const t=[];for(let a=o.s.c;a<=o.e.c;a++){const o=n[`${r.utils.encode_cell({r:e,c:a})}`];o&&"d"===o.t&&o.v instanceof Date&&(o.v=new Date(o.v.getTime()+6e4*o.v.getTimezoneOffset())),t.push(o?{raw:o.v,formatted:"s"===o.t?void 0:o.w}:{raw:""})}i.push(t)}return i}(e,r);let{geometryFormat:o,geometryFields:s}=t;if(!o){const[e,t]=await ge(n,r.inSpatialReference,r.includeHeaderRow);o=e,s=t.map((e=>r.includeHeaderRow?n[0][e]?.raw.toString()??a("gcx.api.data.convert.import-field-alias",(e+1).toString()):a("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:n,...r,geometryFormat:o,geometryFields:s}}export async function xlsxToFeatureSet(e,t){i("xlsxData",e).isNotMissing();const r=K(t);return uploadDataToFeatureSet(await xlsxToUploadData(e,r))}export async function toShapefile(e,r){i("featureSet",e).isNotMissing();const[{default:a},n]=await Promise.all([import("jszip"),import("../forked-libs/shp-write/index.js")]),o=Array.from(e),s={...{useFormattedValues:!1,outFields:ee(e.source),fileName:e.title||"export"},...r},{outFields:d,outSpatialReference:y,fileName:p}=s,g=e=>e.geometry.hasZ||e.geometry.hasM,w=new Map,h=o.filter((e=>c(e.geometry)));w.set("POINTZ",h.filter(g)),w.set("POINT",h.filter((e=>!g(e))));const F=o.filter((e=>m(e.geometry)));w.set("MULTIPOINTZ",F.filter(g)),w.set("MULTIPOINT",F.filter((e=>!g(e))));const S=o.filter((e=>l(e.geometry)));w.set("POLYLINEZ",S.filter(g)),w.set("POLYLINE",S.filter((e=>!g(e))));const T=o.filter((e=>u(e.geometry)||f(e.geometry)));w.set("POLYGONZ",T.filter(g)),w.set("POLYGON",T.filter((e=>!g(e))));const N=Q(o,d,e.schema,!0);let O=Q(o,d,e.schema,!1);O=N.concat(O);const R=new a,D=Array.from(w.keys()).filter((e=>w.get(e).length>0));await Promise.all(D.map((async r=>{const a=w.get(r),o=await Promise.all(a.map((e=>re(e.geometry,y)))),i=await async function(e){const{wkid:r,wkt:a}=e[0].spatialReference;if(!e.every((e=>e.spatialReference.wkid===r&&e.spatialReference.wkt===a)))throw new Error("Cannot create shapefile that contains geometries with different spatial references.");return a??await E(r??t.WGS84.wkid)}(o),d=s.useFormattedValues?Object.assign({},...O.map((e=>({[e]:W.STRING})))):function(e,t,r,a){const n={};for(const o of t){if(e.some((e=>ie(e,o)))){n[o]=W.STRING;continue}const t=r?r.fields.find((e=>v(e.name,o))):void 0;if(t){switch(t.type){case"oid":case"double":case"integer":case"single":case"small-integer":case"big-integer":n[o]=W.NUMBER;break;case"date":case"timestamp-offset":n[o]=a?W.NUMBER:W.DATE;break;default:n[o]=W.STRING}continue}const i=(e,t)=>e.attributes.get(t)??e.presentableAttributes.get(t);e.every((e=>i(e,o)instanceof Date||void 0===i(e,o)))&&e.some((e=>i(e,o)instanceof Date))?n[o]=a?W.NUMBER:W.DATE:e.every((e=>"number"==typeof i(e,o)||void 0===i(e,o)))&&e.some((e=>"number"==typeof i(e,o)))?n[o]=W.NUMBER:e.every((e=>"boolean"==typeof i(e,o)||void 0===i(e,o)))&&e.some((e=>"boolean"==typeof i(e,o)))?n[o]=W.BOOLEAN:n[o]=W.STRING}return n}(a,O,e.schema,"timestamp"===s.dateFormat),g=function(e){return e.map((e=>{if(c(e)){const{x:t,y:r,z:a,m:n}=e,o=[t,r];return e.hasZ&&o.push(a),e.hasM&&o.push(n),De(o,e)}if(m(e))return Me(e.points,e);if(l(e))return Ae(e.paths,e);if(u(e))return Ae(e.rings,e);if(f(e)){const t=[e.xmin,e.ymax];return[[t,[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin],t]]}throw new Error("Unsupported geometry type.")}))}(o),h=function(e,t,r,a){const n=[];for(const o of e){const e={};for(const n of t){let t=oe(o,n,a);if(null==t&&(t=""),a.useFormattedValues)t=t.toString();else{t=Ee(t,r[n],{...a,isDateOnly:"date-only"===o.schema.findFieldByName(n)?.type})}e[n]=t}n.push(e)}return n}(a,O,d,s);n.write(h,r,g,((e,t)=>{const a=D.length>1?`${p}_${r.toLowerCase()}`:p;R.file(`${a}.shp`,t.shp.buffer,{binary:!0}),R.file(`${a}.shx`,t.shx.buffer,{binary:!0}),R.file(`${a}.dbf`,t.dbf.buffer,{binary:!0}),R.file(`${a}.prj`,i)}))})));const M=await R.generateAsync({type:"uint8array"});return new Blob([M.buffer],{type:"text/plain"})}export async function shapefileToUploadData(r,a){i("shapefileData",r).isNotMissing();const n=V(a),o=new Promise(((e,t)=>{const a=new FileReader;a.onload=()=>{e(a.result)},a.onerror=()=>{t(a.error)},a.readAsArrayBuffer(r)})),[{default:s},{default:m}]=await Promise.all([import("jszip"),import("shpjs")]),l=await o,u=await s.loadAsync(new Uint8Array(l)),f=u.filter((()=>!0)).map((e=>e.name));let d,y=f.filter((e=>e.endsWith(".shp"))).map((e=>e.substring(0,e.length-4)));if(y=function(e){if(!e.length)return[];let t=e[0];const r=t.match(J);return r?(t=r[1],e.filter((e=>{const r=e.match(J);return r&&r[1]===t}))):[t]}(y),f.some((e=>e.endsWith(".prj")))&&!y.every((e=>f.includes(`${e}.prj`))))throw new Error("Shapefile zip must contain the same prj file for each separate shapefile");await Promise.all(f.filter((e=>e.endsWith(".prj"))).map((async e=>{const t=await u.file(e).async("string");if(d){if(t!==d)throw new Error("Shapefile zip must contain the same prj file for each separate shapefile")}else d=t})));let p=[],g=[];for(const e of y){if(!f.includes(`${e}.shx`)||!f.includes(`${e}.dbf`))throw new Error("Shapefile must contain shp, shx, and dbf files.");const t=await u.file(`${e}.shp`).async("uint8array"),r=m.parseShp(t),a=await u.file(`${e}.dbf`).async("uint8array"),n=m.parseDbf(a);if(n.length!==r.length)throw new Error("Shapefile must contain shp, shx, and dbf files.");p=p.concat(n),g=g.concat(r)}const w=await Promise.all(g.map((r=>async function(r,a){const n=c(r)?function(r){i("geometry.coordinates",r.type).matches("Point"),i("geometry.coordinates",r.coordinates).satisfies((e=>"number"==typeof e||Array.isArray(e)));const[a,n,o]=r.coordinates,s=new e({x:a,y:n,spatialReference:t.WGS84});if(Array.isArray(o)){const[e,t]=o;!e&&!t||e?s.z=e:s.m=t}return s}(r):await b(r);if(a){let e;try{const r=await G(a);e=new t({wkid:S(r)})}catch{}e||(e=new t({wkt:a})),n.spatialReference=e}return n}(r,d)))),h=geometryTypeHeaders[GeometryFormat.ARCGIS_JSON][0][0];p.forEach(((e,t)=>e[h]=JSON.stringify(w[t].toJSON())));return{data:function(e){const t=e.map((e=>Object.keys(e))).reduce(((e,t)=>e.concat(t.filter((t=>!e.includes(t))))),[]);return[t.map((e=>({raw:e}))),...e.map((e=>t.map((t=>({raw:e[t]})))))]}(p),...n,includeHeaderRow:!0,geometryFormat:GeometryFormat.ARCGIS_JSON,geometryFields:[h],inSpatialReference:w[0]?.spatialReference??t.fromJSON({wkid:4326})}}export async function shapefileToFeatureSet(e,t){i("shapefileData",e).isNotMissing();const r=V(t);return uploadDataToFeatureSet(await shapefileToUploadData(e,r))}function k(e){return{escapeFormulaChars:!0,outFields:["*"],generatePrimaryKey:!1,locale:n,detectOid:!e?.primaryKeyField}}function Z(e){return{...{includeHeaderRow:!0,inSpatialReference:t.WGS84,...k(e)},...e}}function K(e){return{...{includeHeaderRow:!0,inSpatialReference:t.WGS84,...k(e)},...e}}function V(e){return{...{...k(e)},...e}}function q(e,t){return t.geometryFormat===GeometryFormat.XYZ?["x","y","z"]:t.geometryFormat===GeometryFormat.XY?["x","y"]:t.geometryFormat===GeometryFormat.LAT_LON?["latitude","longitude"]:t.geometryFormat===GeometryFormat.NONE?[]:["geometry"]}function Q(e,t,r,a){const n=r.fields.filter((e=>"oid"===e.type)).map((e=>e.name)).toArray();if(a)return n;if(t&&!t.includes("*"))return t.filter((e=>!n.includes(e)));{const t=r.fields.filter((e=>"oid"!==e.type)).map((e=>e.name)).toArray();let a=[];for(const r of e)for(const e of r.attributes.keys())t.includes(e)||n.includes(e)||a.includes(e)||a.push(e);return a=a.sort(),t.concat(a)}}function ee(e){if(!e)return["*"];const t=e.featureSettings.popupTemplate?.content;return(Array.isArray(t)?t.find((e=>"fields"===e.type))?.fieldInfos?.filter((e=>e.visible))?.map((e=>e.fieldName)):void 0)??e.featureSettings.popupTemplate?.fieldInfos?.filter((e=>e.visible))?.map((e=>e.fieldName))??["*"]}async function te(e,t){const r=await re(e,t.outSpatialReference);if(t.geometryFormat===GeometryFormat.XYZ){if(!r)return["","",""];if(!c(r))throw new Error("Cannot use geometry format XYZ with non-point geometry");return[r.x,r.y,r.z]}if(t.geometryFormat===GeometryFormat.XY){if(!r)return["",""];if(!c(r))throw new Error("Cannot use geometry format XY with non-point geometry");return[r.x,r.y]}if(t.geometryFormat===GeometryFormat.LAT_LON){if(!r)return["",""];if(!c(r))throw new Error("Cannot use geometry format LAT_LONG with non-point geometry");return[r.y,r.x]}return t.geometryFormat===GeometryFormat.ARCGIS_JSON?r?[JSON.stringify(r.toJSON())]:[""]:t.geometryFormat===GeometryFormat.WKT?r?[await M(r)]:[""]:t.geometryFormat===GeometryFormat.GEO_JSON?r?[JSON.stringify(await _(r))]:[""]:[]}async function re(e,t){return e?.spatialReference&&!e.spatialReference.equals(t)&&t?(await D([e],t))[0]:e}function ae(e,t){const r=[t.delimiter,C,"\r","\n",t.rowDelimiter];if(t.alwaysQuote||r.some((t=>e.includes(t)))){const t=e.replace(new RegExp(C,"g"),`${C}${C}`);return`${C}${t}${C}`}return e}function ne(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e){const r=t.numberFormat||h.ROUND_TRIP;return T(r,e)}if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime().toString():y({format:t.dateFormat,timeZone:"UTC",isDateOnly:t.isDateOnly},e);if(e instanceof o)return O({format:t.timeFormat},e)}let r=e.toString();return t.escapeFormulaChars&&(r=se(r)),r}function oe(e,t,r){if(r.useFormattedValues||ie(e,t))return e.presentableAttributes.get(t)??e.attributes.get(t);const a=e.schema.findFieldByName(t)?.type;if(null!=a)switch(a){case"date":case"date-only":case"timestamp-offset":{const r=d(e.attributes.get(t));if(!isNaN(r.getTime()))return r;break}case"time-only":{const r=N(e.attributes.get(t));if(r.isValid)return r;break}}return e.attributes.get(t)??e.presentableAttributes.get(t)}function ie(e,t){return!!v(t,e.schema.typeIdField)||("coded-value"===e.type?.domains?.[t]?.type||"coded-value"===e.schema.findFieldByName(t)?.domain?.type)}function se(e){for(const t of U)if(e.startsWith(t))return`\t${e}`;return e}function ce(e,t,r){const a=e.startsWith(C),n=e.endsWith(C);if(a&&!n||!a&&n)throw new Error(`Detected invalid CSV: Missing opening or closing quote for value at row:${t} column:${r}`);const o=a?e.substring(1,e.length-1):e;let i=-1;return me(o,C,((e,a)=>{if(a===o.length)return!0;if(i<0){if(a!==o.length)return i=a,!0}else if(a===i+1)return i=-1,!0;throw new Error(`Detected invalid CSV: Non-escaped quote for value at row:${t} column:${r}`)})),o.replace(new RegExp(`${C}${C}`,"g"),C)}function me(e,t,r){let a,n=!1,o=0,i=0;for(;a=e.indexOf(t,o),!(a<0);){for(let t=o;t<a;)e.substring(t).startsWith(C)?(n=!n,t+=1):t++;const s=a+t.length;if(!n){const e=r(i,a);if(i=s,!e)return}o=s}r(i,e.length)}async function le(e,t){const r=JSON.parse(e),a=(await import("@arcgis/core/geometry/support/jsonUtils")).fromJSON(r);return r.spatialReference||(a.spatialReference=t),a}async function ue(e,t){const r=await b(JSON.parse(e));return r.spatialReference=t,r}async function fe(e,t){const r=await A(e);return r.spatialReference=t,r}function de(e,t,r){const a=r?[r]:geometryTypeHeaders[t];for(const t of a){const r=t.map((t=>e.map((e=>e?.raw?.toString().trim().toLowerCase())).indexOf(t.trim().toLowerCase())));if(r.every((e=>e>=0)))return r}}async function ye(e,t){return(await Promise.all(e.map((async(e,r)=>{const a=e?.raw;if("string"==typeof a&&""!==a)try{return await t(a,void 0),r}catch{return}})))).find((e=>void 0!==e))}function pe(e,t,r){return"inv"===t?"string"==typeof e?parseFloat(e.replaceAll(",","")):e:S({locale:t,format:r},e)}async function ge(e,t,r){const a=r?e.slice(1):e;if(r){const r=de(e[0],GeometryFormat.ARCGIS_JSON);if(void 0!==r)for(const[e,n]of X){try{await we(r[0],n,t,a)}catch{continue}return[e,[r[0]]]}const n=[GeometryFormat.XYZ,GeometryFormat.XY,GeometryFormat.LAT_LON];for(const t of n){const r=de(e[0],t);if(void 0!==r)return[t,r]}}for(const[e,r]of X){const n=await ye(a[0],r);if(void 0!==n){try{await we(n,r,t,a)}catch{continue}return[e,[n]]}}return[GeometryFormat.NONE,[]]}async function we(e,t,r,a){return{columnIndices:[e],geometries:await Promise.all(a.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),r)})))}}function he(e,t,r){let a=!1,n=!0,i=!0,s=!0,c=!0,m=!0;const l=new Set,{data:u,includeHeaderRow:f,dateFormat:y,timeFormat:w,primaryKeyField:h,locale:F}=e,S=f?u[0]:[],T=f?u.slice(1):u;for(const e of T){const r=e[t];r?.raw&&(l.add(r.raw),a=!0,n&&(n=I(r.raw,F)||Number.isNaN(r.raw)),i&&(i=r.raw instanceof Date||d(y||p,r.raw)!==g),c&&(c=d(y||H,r.formatted)!==g),s&&(s=r.raw instanceof o||N(w||R,r.raw).isValid),m&&(m=N({format:w||z,locale:"en"},r.formatted).isValid))}const O=l.size===T.length;return h&&S[t]?.raw===h||r&&a&&O&&n?"esriFieldTypeOID":a&&m?"esriFieldTypeTimeOnly":a&&c?"esriFieldTypeDate":a&&n?"esriFieldTypeDouble":a&&s?"esriFieldTypeTimeOnly":a&&i?"esriFieldTypeDate":"esriFieldTypeString"}async function Fe(e,t,r){const{escapeFormulaChars:a,locale:n,numberFormat:i,dateFormat:s,timeFormat:c}=r;if("esriFieldTypeDouble"===t.type||"esriFieldTypeOID"===t.type)return"number"==typeof e?e:e?pe(e,n,i):null;if("esriFieldTypeDate"===t.type){if(e instanceof Date)return e.getTime();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new Date(t.y,t.m-1,t.d,t.H,t.M,t.S).getTime():void 0}return""===e?null:d({locale:n,format:s},e).getTime()}if("esriFieldTypeTimeOnly"===t.type){if(e instanceof o)return e.toString();if(e instanceof Date)return new o(e).toString();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new o(`${t.H.toString().padStart(2,"0")}:${t.M.toString().padStart(2,"0")}:${t.S.toString().padStart(2,"0")}`).toString():void 0}return""===e?null:N({locale:n,format:c},e).toString()}const m=e?.toString()??"";if(a&&m.startsWith("\t"))for(const e of U)if(m.length>1&&m.charAt(1)===e)return m.substring(1);return m}function Se(e){switch(e){case w.DATE_SHORT:return"dd/MM/yyyy";case w.DATE_LONG:return"MMMM d, yyyy";case w.TIME_SHORT:return"h:mm AM/PM";case w.TIME_LONG:return"h:mm:ss AM/PM";case w.DATE_TIME_SHORT:case w.DEFAULT:return"MMM d yyyy h:mm AM/PM";case w.DATE_TIME_LONG:return"MMMM d yyyy h:mm AM/PM";case w.FULL:return"dddd, MMMM d yyyy h:mm AM/PM";case w.ISO_8601:case w.ROUND_TRIP:return'yyyy-MM-dd"T"HH:mm:ss';default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("z")&&B().warn("Warning: Excel will not recognize timezone format 'z', 'zz', or 'zzz'"),t.includes("h")&&!t.includes("AM/PM")&&B().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function Te(e){switch(e){case w.DATE_SHORT:return"dd/MM/yyyy";case w.DATE_LONG:return"MMMM d, yyyy";case w.DATE_TIME_SHORT:case w.DEFAULT:return"MMM d yyyy";case w.DATE_TIME_LONG:return"MMMM d yyyy";case w.FULL:return"dddd, MMMM d yyyy";case w.ISO_8601:case w.ROUND_TRIP:return"yyyy-MM-dd";default:return e.replace(/TtZzHhmSsUua/g,"")}}function Ne(e){switch(e){case F.TIME_SHORT:return"h:mm AM/PM";case F.TIME_LONG:return"h:mm:ss AM/PM";case F.ISO_8601:case F.ROUND_TRIP:return"HH:mm:ss";default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("h")&&!t.includes("AM/PM")&&B().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function Oe(e){switch(e){case h.ACCOUNTING:return'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)';case h.CURRENCY:return'"$"#,##0.00';case h.FIXED_POINT:case h.DEFAULT:return"0.0000";case h.NUMBER:return"#,##0.0000";case h.PERCENT:return"0%";case h.ROUND_TRIP:return"0.00000";default:return e}}function Re(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e)return e;if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime():e;if(e instanceof o)return e.toDate()}let r=e.toString();return t.escapeFormulaChars&&(r=se(r)),r}function De(e,t){return 3===e.length&&!t.hasZ&&t.hasM?[e[0],e[1],void 0,e[2]]:e}function Me(e,t){return e.map((e=>De(e,t)))}function Ae(e,t){return e.map((e=>Me(e,t)))}function Ee(e,t,r){switch(t){case W.NUMBER:return e instanceof Date?e.getTime():S(e);case W.STRING:return e instanceof Date?y({format:r.dateFormat??w.ROUND_TRIP,timeZone:"UTC",isDateOnly:r.isDateOnly},e):e instanceof o?O({format:r.timeFormat??F.ROUND_TRIP},e):"number"==typeof e?T(r.numberFormat??h.DEFAULT,e):e.toString();case W.BOOLEAN:return!!e;case W.DATE:return d(e);default:return e.toString()}}
|
|
1
|
+
import e from"@arcgis/core/Color.js";import t from"@arcgis/core/Graphic.js";import r from"@arcgis/core/geometry/Point";import o from"@arcgis/core/geometry/Polygon.js";import n from"@arcgis/core/geometry/Polyline.js";import a from"@arcgis/core/geometry/SpatialReference";import i from"@arcgis/core/layers/FeatureLayer.js";import s from"@arcgis/core/layers/GroupLayer.js";import c from"@arcgis/core/layers/support/Field.js";import l from"@arcgis/core/renderers/SimpleRenderer.js";import m from"@arcgis/core/symbols/MeshSymbol3D.js";import u from"@arcgis/core/symbols/PictureMarkerSymbol.js";import f from"@arcgis/core/symbols/SimpleFillSymbol.js";import y from"@arcgis/core/symbols/SimpleLineSymbol.js";import d from"@arcgis/core/symbols/SimpleMarkerSymbol.js";import{geometryTypeToJson as p}from"../json/GeometryJson.js";import{translate as g}from"../locale/language.js";import{INVARIANT as w}from"../locale.js";import{FeatureCollectionLayerExtension as h}from"../mapping/FeatureCollectionLayerExtension.js";import{GroupLayerExtension as F}from"../mapping/GroupLayerExtension.js";import{Time as S}from"../utilities/Time.js";import{checkArg as T,assertNever as N}from"../utilities/checkArg.js";import{isPoint as O,isMultipoint as D,isPolyline as M,isPolygon as x,isExtent as E}from"../utilities/esri.js";import{parse as R,format as b,DEFAULT_PARSING_FORMATS as A,INVALID_DATE as G}from"../utilities/format/date.js";import{DateFormat as _,NumberFormat as I,TimeFormat as L}from"../utilities/format/formats.js";import{parse as C,format as v}from"../utilities/format/number.js";import{parse as P,format as j,DEFAULT_PARSING_FORMATS as U}from"../utilities/format/time.js";import{project as $,esriToWKT as H,wktToEsri as B,esriWkidToWkt as k,esriWktToWkid as z,esriToGeoJSON as J,geoJSONToEsri as W}from"../utilities/geometry.js";import{getLogger as X}from"../utilities/log.js";import{isNumeric as Y}from"../utilities/number.js";import{caseInsensitiveEquals as q}from"../utilities/string.js";import{Feature as K}from"./Feature.js";import{FeatureSet as Z}from"./FeatureSet.js";const V=["=","-","+","@"],Q='"',ee="\r\n",te="\n",re=[...A.map(Ce),"M/d/yy"],oe=[...U.map(Pe).map((e=>e.replace("AM/PM","tt")))],ne=/(\w+)_(point|multipoint|polyline|polygon)z?/;var ae;function ie(){return X("geocortex.api.data.convert")}!function(e){e.DATE="D",e.NUMBER="N",e.STRING="C",e.BOOLEAN="L"}(ae||(ae={}));export const FIELD_NAME_REGEX=/[^a-zA-Z\d_]/g;export var GeometryFormat;!function(e){e.NONE="NONE",e.WKT="WKT",e.XY="XY",e.XYZ="XYZ",e.LAT_LON="LAT_LONG",e.GEO_JSON="GEO_JSON",e.ARCGIS_JSON="ARCGIS_JSON"}(GeometryFormat||(GeometryFormat={}));export const geometryTypeHeaders={[GeometryFormat.XYZ]:[["x","y","z"]],[GeometryFormat.XY]:[["x","y"]],[GeometryFormat.LAT_LON]:[["latitude","longitude"],["lat","lon"],["lat","long"]],[GeometryFormat.ARCGIS_JSON]:[["geometry"]],[GeometryFormat.GEO_JSON]:[["geometry"]],[GeometryFormat.WKT]:[["geometry"]]};const se=[[GeometryFormat.ARCGIS_JSON,Me],[GeometryFormat.GEO_JSON,xe],[GeometryFormat.WKT,Ee]],ce=new Map(se);export async function uploadDataToFeatureSet(e){const t=await async function(e){const{data:t,includeHeaderRow:o,geometryFormat:n,geometryFields:a,locale:i,numberFormat:s,inSpatialReference:c}=e,l=o?t.slice(1):t;if(n===GeometryFormat.NONE)return{columnIndices:[]};const m=e=>Ae(e,i,s),u=(e,t)=>{const o=t===GeometryFormat.XYZ,n=t===GeometryFormat.LAT_LON;return{columnIndices:e,geometries:l.map((t=>{if(t.length>=Math.max(...e)&&Y(t[e[0]]?.raw,i)&&Y(t[e[1]]?.raw,i)&&(!o||Y(t[e[2]]?.raw,i)))return new r({x:m(n?t[e[1]].raw:t[e[0]].raw),y:m(n?t[e[0]].raw:t[e[1]].raw),z:o?m(t[e[2]].raw):0,spatialReference:c})}))}},f=async(e,t)=>({columnIndices:[e],geometries:await Promise.all(l.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),c)})))}),y=async(e,t)=>{switch(t){case GeometryFormat.NONE:return{columnIndices:[0]};case GeometryFormat.LAT_LON:case GeometryFormat.XYZ:case GeometryFormat.XY:return u(e,t);case GeometryFormat.ARCGIS_JSON:return f(e[0],Me);case GeometryFormat.GEO_JSON:return f(e[0],xe);case GeometryFormat.WKT:return f(e[0],Ee);default:return N(t,new Error(`Unknown geometry format "${t}".`))}};if(n){const e=Re(o?t[0]:t[0].map(((e,t)=>({raw:t.toString()}))),n,o?a:a.map((e=>""+(parseInt(e.match(/\d+/g)[0])-1))));if(o&&void 0===e)throw new Error(`Error parsing file data: Expected geometry columns ${geometryTypeHeaders[n][0].join(",")} are missing for GeometryType.${n}`);return y(e??[0],n)}const[d,p]=await Ge(t,c,o);if(d===GeometryFormat.NONE)return{columnIndices:[]};return p.length>1?u(p,d):f(p[0],ce.get(d))}(e),o=function(e,t){const{data:r,displayField:o,includeHeaderRow:n,inSpatialReference:a,outSpatialReference:i,generatePrimaryKey:s}=e,c={fields:[]},l=e=>!(!t.columnIndices||0===t.columnIndices.length)&&t.columnIndices.includes(e);let{primaryKeyField:m}=e,u=0;for(let t=0;t<r[0].length;t++){if(l(t))continue;const o=Ie(e,t,!s&&!m&&!c.fields.find((e=>"esriFieldTypeOID"===e.type)));let a=r[0][t]?.raw?.toString(),i=a?.replace(FIELD_NAME_REGEX,"_");n&&i||(i="field"+ ++u,a=g("gcx.api.data.convert.import-field-alias",u)),c.fields.push({alias:a,name:i,type:o}),"esriFieldTypeOID"===o&&(m=i)}if(c.spatialReference=i??t.geometries?.[0]?.spatialReference??a,t.geometries?.length){const e=t.geometries.filter((e=>void 0!==e)).map((e=>e.type)),r=e[0];c.geometryType=e.every((e=>e===r))?p(r):void 0}if(!c.fields.find((e=>"esriFieldTypeOID"===e.type))){const e=c.fields.length+1,t=!!c.fields.find((e=>"objectid"===e.name.toLowerCase()));m=t?`OBJECTID_${e}`:"OBJECTID",c.fields.push({name:m,alias:m,type:"esriFieldTypeOID"})}return c.displayField=o??c.fields.find((e=>!q(e.name,m)&&"esriFieldTypeString"===e.type))?.name??c.fields.find((e=>!q(e.name,m)))?.name??m,c.primaryKeyField=m,c}(e,t),n=await async function(e,t,r){const{data:o,includeHeaderRow:n,outFields:a,escapeFormulaChars:i,locale:s,numberFormat:c,dateFormat:l,timeFormat:m}=e,{spatialReference:u}=r,f=[],y=n?o.slice(1):o,d=(e,r)=>!t.columnIndices||0===t.columnIndices.length||!t.columnIndices.includes(r);return await Promise.all(y.map((async(e,o)=>{const n=new K;for(let t=0;t<r.fields.length;t++){const u=r.fields[t],f=e.filter(d);if(a.includes("*")||a.filter((e=>q(e,u.name))).length>0){let e=await Le(f[t]?.raw,u,{escapeFormulaChars:i,dateFormat:l,numberFormat:c,timeFormat:m,locale:s});"esriFieldTypeOID"===u.type&&null===e&&(e=o),n.attributes.set(u.name,e)}}t.geometries&&(n.geometry=await we(t.geometries[o],u)),f.push(n)}))),f}(e,t,o);return new Z({features:n,schema:o})}export async function toCsv(e,t){T("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,alwaysQuote:!1,escapeFormulaChars:!0,delimiter:",",dateFormat:_.ROUND_TRIP,timeFormat:L.ROUND_TRIP,geometryFormat:r.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,includeByteOrderMark:!0,outSpatialReference:a.WGS84,includeHeaderRow:!0,outFields:pe(e.source),rowDelimiter:navigator.platform?.startsWith("Win")?ee:"\n"},...t},{includeByteOrderMark:n,includeHeaderRow:i,delimiter:s,outFields:c,rowDelimiter:l}=o,m=[];n&&m.push("\ufeff");const u=ye(r,o),f=de(r,c,e.schema,!0),y=de(r,c,e.schema,!1);if(i){const e=[];for(const t of u)e.push(he(t,o));for(const t of f)e.push(he(t,o));for(const t of y)e.push(he(t,o));const t=e.join(s)+l;m.push(t)}await Promise.all(r.map((async e=>{const t=[],r=(t,r)=>{const o=Se(e,t,r),n=e.schema.findFieldByName(t)?.type;return he(Fe(o,{...r,isDateOnly:"date-only"===n}),r)};t.push(...await async function(e,t){let r=await ge(e,t);t.geometryFormat!==GeometryFormat.XYZ&&t.geometryFormat!==GeometryFormat.XY&&t.geometryFormat!==GeometryFormat.LAT_LON||(r=r.map((e=>void 0===e?"":Fe(e,t))));return r.map((e=>""===e?"":he(e,t)))}(e.geometry,o)),t.push(...f.map((e=>r(e,o)))),t.push(...y.map((e=>r(e,o))));const n=`${t.join(s)}${l}`;m.push(n)})));return new Blob(m,{type:"text/plain",endings:"\n"===l||l===ee?"transparent":"native"})}export async function csvToUploadData(e,t){let r;if(T("csvData",e).isNotMissing(),e instanceof Blob){const t=new Promise(((t,r)=>{const o=new FileReader;o.onload=()=>{t(o.result)},o.onerror=()=>{r(o.error)},o.readAsText(e)}));r=await t}else r=e;const o=me(t),n=o.rowDelimiter||function(e){let t=te;return De(e,ee,((r,o)=>(0===r&&o===e.length||(t=ee),!1))),t}(r),a=o.delimiter??function(e,t,r){const o=",";if(0===e.length)return o;const n=[];if(De(e,t,((t,r)=>(r!==e.length||t!==r)&&(n.push(e.substring(t,r)),n.length<3))),0===n.length)return o;let a=[{delimiter:",",rowsDelimiterOccurrences:[],rowsNumberAdjacentOccurrences:[]},{delimiter:";",rowsDelimiterOccurrences:[]},{delimiter:"|",rowsDelimiterOccurrences:[]},{delimiter:"\t",rowsDelimiterOccurrences:[]},{delimiter:" ",rowsDelimiterOccurrences:[]}].filter((e=>n[0].includes(e.delimiter)));if(0===a.length)return o;for(const e of n)for(const t of a){let o=0,n=0;De(e,t.delimiter,((a,i)=>{if(i!==e.length&&o++,","===t.delimiter){const t=e.charAt(i-1),o=e.charAt(i+1);Y(t,r)&&Y(o,r)&&n++}return!0})),t.rowsDelimiterOccurrences.push(o),","===t.delimiter&&t.rowsNumberAdjacentOccurrences.push(n)}if(a=a.filter((e=>e.rowsDelimiterOccurrences.every((t=>e.rowsDelimiterOccurrences[0]===t)))).sort(((e,t)=>t.rowsDelimiterOccurrences[0]-e.rowsDelimiterOccurrences[0])),a.length>1&&","===a[0].delimiter&&null!=r&&r!==w){const e=a[0];if(null!=e&&","===e.delimiter&&","===Intl.NumberFormat(r).formatToParts(1.1).find((e=>"decimal"===e.type))?.value)for(let t=0;t<e.rowsDelimiterOccurrences.length;t++)if(e.rowsDelimiterOccurrences[t]<=e.rowsNumberAdjacentOccurrences[t]){a=a.filter((e=>","!==e.delimiter));break}}if(0===a.length)return o;return a[0].delimiter}(r,n,t.locale),i=function(e,t,r){const o=[],n=(e,t)=>{const o=[];return De(e,r,((r,n)=>{const a=e.substring(r,n);return o.push({raw:Oe(a,t,o.length)}),!0})),o};if(De(e,t,((t,r)=>{const a=e.substring(t,r);return a.length>0&&o.push(n(a,o.length)),!0})),o.length){const e=o[0].length;o.forEach(((t,r)=>{if(t.length!==e)throw new Error(`Detected invalid CSV: Row ${r} does not have expected number of columns: ${e}`)}))}return o}(r,n,a);let{geometryFormat:s,geometryFields:c}=t;if(!s){const[e,t]=await Ge(i,o.inSpatialReference,o.includeHeaderRow);s=e,c=t.map((e=>o.includeHeaderRow?i[0][e]?.raw??g("gcx.api.data.convert.import-field-alias",(e+1).toString()):g("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:i,...o,geometryFormat:s,geometryFields:c}}export async function csvToFeatureSet(e,t){const r=me(t);return uploadDataToFeatureSet(await csvToUploadData(e,r))}export async function toXLSX(e,t){T("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,includeHeaderRow:!0,escapeFormulaChars:!0,geometryFormat:r.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,outFields:pe(e.source),outSpatialReference:a.WGS84,dateFormat:_.DEFAULT,timeFormat:L.DEFAULT,numberFormat:I.DEFAULT,sheetName:"sheet1"},...t},{outFields:n,includeHeaderRow:i,dateFormat:s,timeFormat:c,numberFormat:l}=o,m=ye(r,o),u=de(r,n,e.schema,!0),f=de(r,n,e.schema,!1),y=await import("xlsx"),d=y.utils.sheet_new();let p=!1;if(i){const t=m.concat(u).concat(function(e,t){const r=t?.schema?.fieldExtensions.initializedItems.map((e=>e.field));return e.map((e=>r?.find((t=>q(t.name,e)))?.alias??e))}(f,e.source));p=!0,y.utils.sheet_add_aoa(d,[t],{cellDates:!0})}await Promise.all(r.map((async e=>{const t=[],r=new Set,n=new Set;t.push(...await ge(e.geometry,o));for(const r of u){const n=Ue(e.attributes.get(r),o);t.push(n)}for(const a of f){const i=Se(e,a,o);if(i instanceof S){const o=e.schema.findFieldByName(a);"time-only"===o?.type&&r.add(t.length)}else if(i instanceof Date){const r=e.schema.findFieldByName(a);"date-only"===r?.type&&n.add(t.length)}const s=Ue(i,o);t.push(s)}if(!t.every((e=>"string"!=typeof e||e.length<=32767)))return void ie().warn(`toXLSX cell limit exceeded, feature (${e.primaryKey??e.id}) omitted.`);y.utils.sheet_add_aoa(d,[t],{cellDates:!0,origin:p?-1:void 0}),p=!0;const a=y.utils.decode_range(d["!ref"]);for(let e=a.s.c;e<=a.e.c;e++){const t=d[y.utils.encode_cell({r:a.e.r,c:e})];"d"===t.t?r.has(e)?t.z=Pe(c??L.ROUND_TRIP):n.has(e)?t.z=ve(s??_.ROUND_TRIP):t.z=Ce(s??_.ROUND_TRIP):"n"===t.t&&(t.z=je(l))}})));const g={SheetNames:[],Sheets:{}};g.SheetNames.push(o.sheetName),g.Sheets[o.sheetName]=d;const w=y.write(g,{type:"binary",bookType:"xlsx",compression:!0,bookSST:!0,cellDates:!0}),h=new Uint8Array(w.length);for(let e=0;e<w.length;e++)h[e]=w.charCodeAt(e);return new Blob([h.buffer],{type:"text/plain"})}export async function xlsxToUploadData(e,t){T("xlsxData",e).isNotMissing();const r=ue(t),o=await async function(e,t){const r=await import("xlsx"),o=new Promise(((o,n)=>{const a=new FileReader;a.onload=()=>{const e=new Uint8Array(a.result);let n="";for(const t of e)n+=String.fromCharCode(t);const i=r.read(n,{type:"binary",cellDates:!0}),s=t.sheetName||i.SheetNames[0],c=i.Sheets[s];o(c)},a.onerror=()=>{n(a.error)},a.readAsArrayBuffer(e)})),n=await o,a=r.utils.decode_range(n["!ref"]),i=[];for(let e=a.s.r;e<=a.e.r;e++){const t=[];for(let o=a.s.c;o<=a.e.c;o++){const a=n[`${r.utils.encode_cell({r:e,c:o})}`];a&&"d"===a.t&&a.v instanceof Date&&(a.v=new Date(a.v.getTime()+6e4*a.v.getTimezoneOffset())),t.push(a?{raw:a.v,formatted:"s"===a.t?void 0:a.w}:{raw:""})}i.push(t)}return i}(e,r);let{geometryFormat:n,geometryFields:a}=t;if(!n){const[e,t]=await Ge(o,r.inSpatialReference,r.includeHeaderRow);n=e,a=t.map((e=>r.includeHeaderRow?o[0][e]?.raw.toString()??g("gcx.api.data.convert.import-field-alias",(e+1).toString()):g("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:o,...r,geometryFormat:n,geometryFields:a}}export async function xlsxToFeatureSet(e,t){T("xlsxData",e).isNotMissing();const r=ue(t);return uploadDataToFeatureSet(await xlsxToUploadData(e,r))}export function kmlHexToEsriColor(t){return e.fromHex(`#${t.match(/.{2}/g).reverse().join("")}`)}export function parseKMLCoordinates(e){return e.trim().split(/\s+/).map((e=>{const[t,r,o]=e.split(",").map(Number);return{x:t,y:r,z:o}}))}export function parseKMLSymbol(t,r,o){if(t){const r=t.querySelector("IconStyle > Icon > href")?.textContent;if(r)return new u({url:r,width:32,height:32});const o=t.querySelector("PolyStyle");if(o){const t=o.querySelector("color")?.textContent,r=t?kmlHexToEsriColor(t):new e([0,0,0,1]);return new f({color:r,outline:{color:[0,0,0,.5],width:1}})}const n=t.querySelector("LineStyle");if(n){const t=n.querySelector("color")?.textContent,r=t?kmlHexToEsriColor(t):new e([0,0,0,1]),o=parseFloat(n.querySelector("width")?.textContent||"1");return new y({color:r,width:o})}}return getDefaultSymbol(o,"polygon"===r?"polygon":"point"===r?"point":"polyline")}export async function toShapefile(e,t){T("featureSet",e).isNotMissing();const[{default:r},o]=await Promise.all([import("jszip"),import("../forked-libs/shp-write/index.js")]),n=Array.from(e),i={...{useFormattedValues:!1,outFields:pe(e.source),fileName:e.title||"export"},...t},{outFields:s,outSpatialReference:c,fileName:l}=i,m=e=>e.geometry.hasZ||e.geometry.hasM,u=new Map,f=n.filter((e=>O(e.geometry)));u.set("POINTZ",f.filter(m)),u.set("POINT",f.filter((e=>!m(e))));const y=n.filter((e=>D(e.geometry)));u.set("MULTIPOINTZ",y.filter(m)),u.set("MULTIPOINT",y.filter((e=>!m(e))));const d=n.filter((e=>M(e.geometry)));u.set("POLYLINEZ",d.filter(m)),u.set("POLYLINE",d.filter((e=>!m(e))));const p=n.filter((e=>x(e.geometry)||E(e.geometry)));u.set("POLYGONZ",p.filter(m)),u.set("POLYGON",p.filter((e=>!m(e))));const g=de(n,s,e.schema,!0);let w=de(n,s,e.schema,!1);w=g.concat(w);const h=new r,F=Array.from(u.keys()).filter((e=>u.get(e).length>0));await Promise.all(F.map((async t=>{const r=u.get(t),n=await Promise.all(r.map((e=>we(e.geometry,c)))),s=await async function(e){const{wkid:t,wkt:r}=e[0].spatialReference;if(!e.every((e=>e.spatialReference.wkid===t&&e.spatialReference.wkt===r)))throw new Error("Cannot create shapefile that contains geometries with different spatial references.");return r??await k(t??a.WGS84.wkid)}(n),m=i.useFormattedValues?Object.assign({},...w.map((e=>({[e]:ae.STRING})))):function(e,t,r,o){const n={};for(const a of t){if(e.some((e=>Te(e,a)))){n[a]=ae.STRING;continue}const t=r?r.fields.find((e=>q(e.name,a))):void 0;if(t){switch(t.type){case"oid":case"double":case"integer":case"single":case"small-integer":case"big-integer":n[a]=ae.NUMBER;break;case"date":case"timestamp-offset":n[a]=o?ae.NUMBER:ae.DATE;break;default:n[a]=ae.STRING}continue}const i=(e,t)=>e.attributes.get(t)??e.presentableAttributes.get(t);e.every((e=>i(e,a)instanceof Date||void 0===i(e,a)))&&e.some((e=>i(e,a)instanceof Date))?n[a]=o?ae.NUMBER:ae.DATE:e.every((e=>"number"==typeof i(e,a)||void 0===i(e,a)))&&e.some((e=>"number"==typeof i(e,a)))?n[a]=ae.NUMBER:e.every((e=>"boolean"==typeof i(e,a)||void 0===i(e,a)))&&e.some((e=>"boolean"==typeof i(e,a)))?n[a]=ae.BOOLEAN:n[a]=ae.STRING}return n}(r,w,e.schema,"timestamp"===i.dateFormat),f=function(e){return e.map((e=>{if(O(e)){const{x:t,y:r,z:o,m:n}=e,a=[t,r];return e.hasZ&&a.push(o),e.hasM&&a.push(n),$e(a,e)}if(D(e))return He(e.points,e);if(M(e))return Be(e.paths,e);if(x(e))return Be(e.rings,e);if(E(e)){const t=[e.xmin,e.ymax];return[[t,[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin],t]]}throw new Error("Unsupported geometry type.")}))}(n),y=function(e,t,r,o){const n=[];for(const a of e){const e={};for(const n of t){let t=Se(a,n,o);if(null==t&&(t=""),o.useFormattedValues)t=t.toString();else{t=ke(t,r[n],{...o,isDateOnly:"date-only"===a.schema.findFieldByName(n)?.type})}e[n]=t}n.push(e)}return n}(r,w,m,i);o.write(y,t,f,((e,r)=>{const o=F.length>1?`${l}_${t.toLowerCase()}`:l;h.file(`${o}.shp`,r.shp.buffer,{binary:!0}),h.file(`${o}.shx`,r.shx.buffer,{binary:!0}),h.file(`${o}.dbf`,r.dbf.buffer,{binary:!0}),h.file(`${o}.prj`,s)}))})));const S=await h.generateAsync({type:"uint8array"});return new Blob([S.buffer],{type:"text/plain"})}export async function kmlToLayerExtensions(e){T("blob",e).isNotMissing();const a=await e.text(),m=(new DOMParser).parseFromString(a,"application/xml"),u=function(e,a){const f={};m.querySelectorAll("Style").forEach((e=>{f[`#${e.id}`]=e}));const y=e.querySelector(":scope > name")?.textContent??"Unnamed Container",d=new F({layer:new s({title:y})});e.querySelectorAll(":scope > Placemark").forEach(((e,s)=>{const m=e.querySelector("name")?.textContent??"",u=e.querySelector("description")?.textContent??"",p=function(e){const t=e.querySelector("Point > coordinates"),a=e.querySelector("LineString > coordinates"),i=e.querySelector("Polygon");if(t?.textContent){const[e]=parseKMLCoordinates(t.textContent);return new r(e)}if(a?.textContent)return new n({paths:[parseKMLCoordinates(a.textContent).map((({x:e,y:t})=>[e,t]))]});if(i?.textContent){const e=i.querySelector("outerBoundaryIs > LinearRing > coordinates");if(e?.textContent){const t=[parseKMLCoordinates(e.textContent).map((({x:e,y:t})=>[e,t]))];return new o({rings:t})}}return}(e);if(p){const r=e.querySelector("styleUrl")?.textContent,o=parseKMLSymbol(r?f[r]:void 0,p.type,a),n=new i({displayField:"name",title:m,source:[new t({geometry:p,attributes:{name:m,description:u,OBJECTID:y+s}})],renderer:new l({symbol:o}),fields:[new c({name:"OBJECTID",type:"oid",alias:"OBJECTID"}),new c({name:"name",type:"string",alias:"name"})]});u&&n.fields.push(new c({name:"description",type:"string",alias:"description",defaultValue:""}));const g=new h({layer:n});d.layerExtensions.add(g)}}));return e.querySelectorAll(":scope > Folder, :scope > Document").forEach(((e,t)=>{const r=u(e,t);d.layerExtensions.add(r)})),d},f=[];return m.querySelectorAll("kml > Document, kml > Folder").forEach(((e,t)=>{const r=u(e,t);r.layerExtensions.length&&f.push(r)})),f}export async function shapefileToUploadData(e,t){T("shapefileData",e).isNotMissing();const o=fe(t),n=new Promise(((t,r)=>{const o=new FileReader;o.onload=()=>{t(o.result)},o.onerror=()=>{r(o.error)},o.readAsArrayBuffer(e)})),[{default:i},{default:s}]=await Promise.all([import("jszip"),import("shpjs")]),c=await n,l=await i.loadAsync(new Uint8Array(c)),m=l.filter((()=>!0)).map((e=>e.name));let u,f=m.filter((e=>e.endsWith(".shp"))).map((e=>e.substring(0,e.length-4)));if(f=function(e){if(!e.length)return[];let t=e[0];const r=t.match(ne);return r?(t=r[1],e.filter((e=>{const r=e.match(ne);return r&&r[1]===t}))):[t]}(f),m.some((e=>e.endsWith(".prj")))&&!f.every((e=>m.includes(`${e}.prj`))))throw new Error("Shapefile zip must contain the same prj file for each separate shapefile");await Promise.all(m.filter((e=>e.endsWith(".prj"))).map((async e=>{const t=await l.file(e).async("string");if(u){if(t!==u)throw new Error("Shapefile zip must contain the same prj file for each separate shapefile")}else u=t})));let y=[],d=[];for(const e of f){if(!m.includes(`${e}.shx`)||!m.includes(`${e}.dbf`))throw new Error("Shapefile must contain shp, shx, and dbf files.");const t=await l.file(`${e}.shp`).async("uint8array"),r=s.parseShp(t),o=await l.file(`${e}.dbf`).async("uint8array"),n=s.parseDbf(o);if(n.length!==r.length)throw new Error("Shapefile must contain shp, shx, and dbf files.");y=y.concat(n),d=d.concat(r)}const p=await Promise.all(d.map((e=>async function(e,t){const o=O(e)?function(e){T("geometry.coordinates",e.type).matches("Point"),T("geometry.coordinates",e.coordinates).satisfies((e=>"number"==typeof e||Array.isArray(e)));const[t,o,n]=e.coordinates,i=new r({x:t,y:o,spatialReference:a.WGS84});if(Array.isArray(n)){const[e,t]=n;!e&&!t||e?i.z=e:i.m=t}return i}(e):await W(e);if(t){let e;try{const r=await z(t);e=new a({wkid:C(r)})}catch{}e||(e=new a({wkt:t})),o.spatialReference=e}return o}(e,u)))),g=geometryTypeHeaders[GeometryFormat.ARCGIS_JSON][0][0];y.forEach(((e,t)=>e[g]=JSON.stringify(p[t].toJSON())));return{data:function(e){const t=e.map((e=>Object.keys(e))).reduce(((e,t)=>e.concat(t.filter((t=>!e.includes(t))))),[]);return[t.map((e=>({raw:e}))),...e.map((e=>t.map((t=>({raw:e[t]})))))]}(y),...o,includeHeaderRow:!0,geometryFormat:GeometryFormat.ARCGIS_JSON,geometryFields:[g],inSpatialReference:p[0]?.spatialReference??a.fromJSON({wkid:4326})}}export async function shapefileToFeatureSet(e,t){T("shapefileData",e).isNotMissing();const r=fe(t);return uploadDataToFeatureSet(await shapefileToUploadData(e,r))}export function getDefaultSymbol(e,t){const r=e%8;let o=["#FFDBFF","#88D6FF","#7F9FC3","#FF8200","#F34A53","#76E3B9","#E7BFFF","#FFC467"][r],n=["#EF3786","#005A99","#2D5070","#790C00","#4C0000","#006543","#6244A9","#904200"][r];if(Math.floor(e/8)%2!=0){const e=o;o=n,n=e}switch(t){case"point":case"multipoint":return new d({color:o,outline:{color:n}});case"polyline":return new y({color:o,width:"2"});case"polygon":return new f({color:o,outline:{color:n}});case"mesh":return new m({symbolLayers:[{type:"fill",material:{color:o},outline:{color:n}}]})}}function le(e){return{escapeFormulaChars:!0,outFields:["*"],generatePrimaryKey:!1,locale:w,detectOid:!e?.primaryKeyField}}function me(e){return{...{includeHeaderRow:!0,inSpatialReference:a.WGS84,...le(e)},...e}}function ue(e){return{...{includeHeaderRow:!0,inSpatialReference:a.WGS84,...le(e)},...e}}function fe(e){return{...{...le(e)},...e}}function ye(e,t){return t.geometryFormat===GeometryFormat.XYZ?["x","y","z"]:t.geometryFormat===GeometryFormat.XY?["x","y"]:t.geometryFormat===GeometryFormat.LAT_LON?["latitude","longitude"]:t.geometryFormat===GeometryFormat.NONE?[]:["geometry"]}function de(e,t,r,o){const n=r.fields.filter((e=>"oid"===e.type)).map((e=>e.name)).toArray();if(o)return n;if(t&&!t.includes("*"))return t.filter((e=>!n.includes(e)));{const t=r.fields.filter((e=>"oid"!==e.type)).map((e=>e.name)).toArray();let o=[];for(const r of e)for(const e of r.attributes.keys())t.includes(e)||n.includes(e)||o.includes(e)||o.push(e);return o=o.sort(),t.concat(o)}}function pe(e){if(!e)return["*"];const t=e.featureSettings.popupTemplate?.content;return(Array.isArray(t)?t.find((e=>"fields"===e.type))?.fieldInfos?.filter((e=>e.visible))?.map((e=>e.fieldName)):void 0)??e.featureSettings.popupTemplate?.fieldInfos?.filter((e=>e.visible))?.map((e=>e.fieldName))??["*"]}async function ge(e,t){const r=await we(e,t.outSpatialReference);if(t.geometryFormat===GeometryFormat.XYZ){if(!r)return["","",""];if(!O(r))throw new Error("Cannot use geometry format XYZ with non-point geometry");return[r.x,r.y,r.z]}if(t.geometryFormat===GeometryFormat.XY){if(!r)return["",""];if(!O(r))throw new Error("Cannot use geometry format XY with non-point geometry");return[r.x,r.y]}if(t.geometryFormat===GeometryFormat.LAT_LON){if(!r)return["",""];if(!O(r))throw new Error("Cannot use geometry format LAT_LONG with non-point geometry");return[r.y,r.x]}return t.geometryFormat===GeometryFormat.ARCGIS_JSON?r?[JSON.stringify(r.toJSON())]:[""]:t.geometryFormat===GeometryFormat.WKT?r?[await H(r)]:[""]:t.geometryFormat===GeometryFormat.GEO_JSON?r?[JSON.stringify(await J(r))]:[""]:[]}async function we(e,t){return e?.spatialReference&&!e.spatialReference.equals(t)&&t?(await $([e],t))[0]:e}function he(e,t){const r=[t.delimiter,Q,"\r","\n",t.rowDelimiter];if(t.alwaysQuote||r.some((t=>e.includes(t)))){const t=e.replace(new RegExp(Q,"g"),`${Q}${Q}`);return`${Q}${t}${Q}`}return e}function Fe(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e){const r=t.numberFormat||I.ROUND_TRIP;return v(r,e)}if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime().toString():b({format:t.dateFormat,timeZone:"UTC",isDateOnly:t.isDateOnly},e);if(e instanceof S)return j({format:t.timeFormat},e)}let r=e.toString();return t.escapeFormulaChars&&(r=Ne(r)),r}function Se(e,t,r){if(r.useFormattedValues||Te(e,t))return e.presentableAttributes.get(t)??e.attributes.get(t);const o=e.schema.findFieldByName(t)?.type;if(null!=o)switch(o){case"date":case"date-only":case"timestamp-offset":{const r=R(e.attributes.get(t));if(!isNaN(r.getTime()))return r;break}case"time-only":{const r=P(e.attributes.get(t));if(r.isValid)return r;break}}return e.attributes.get(t)??e.presentableAttributes.get(t)}function Te(e,t){return!!q(t,e.schema.typeIdField)||("coded-value"===e.type?.domains?.[t]?.type||"coded-value"===e.schema.findFieldByName(t)?.domain?.type)}function Ne(e){for(const t of V)if(e.startsWith(t))return`\t${e}`;return e}function Oe(e,t,r){const o=e.startsWith(Q),n=e.endsWith(Q);if(o&&!n||!o&&n)throw new Error(`Detected invalid CSV: Missing opening or closing quote for value at row:${t} column:${r}`);const a=o?e.substring(1,e.length-1):e;let i=-1;return De(a,Q,((e,o)=>{if(o===a.length)return!0;if(i<0){if(o!==a.length)return i=o,!0}else if(o===i+1)return i=-1,!0;throw new Error(`Detected invalid CSV: Non-escaped quote for value at row:${t} column:${r}`)})),a.replace(new RegExp(`${Q}${Q}`,"g"),Q)}function De(e,t,r){let o,n=!1,a=0,i=0;for(;o=e.indexOf(t,a),!(o<0);){for(let t=a;t<o;)e.substring(t).startsWith(Q)?(n=!n,t+=1):t++;const s=o+t.length;if(!n){const e=r(i,o);if(i=s,!e)return}a=s}r(i,e.length)}async function Me(e,t){const r=JSON.parse(e),o=(await import("@arcgis/core/geometry/support/jsonUtils")).fromJSON(r);return r.spatialReference||(o.spatialReference=t),o}async function xe(e,t){const r=await W(JSON.parse(e));return r.spatialReference=t,r}async function Ee(e,t){const r=await B(e);return r.spatialReference=t,r}function Re(e,t,r){const o=r?[r]:geometryTypeHeaders[t];for(const t of o){const r=t.map((t=>e.map((e=>e?.raw?.toString().trim().toLowerCase())).indexOf(t.trim().toLowerCase())));if(r.every((e=>e>=0)))return r}}async function be(e,t){return(await Promise.all(e.map((async(e,r)=>{const o=e?.raw;if("string"==typeof o&&""!==o)try{return await t(o,void 0),r}catch{return}})))).find((e=>void 0!==e))}function Ae(e,t,r){return"inv"===t?"string"==typeof e?parseFloat(e.replaceAll(",","")):e:C({locale:t,format:r},e)}async function Ge(e,t,r){const o=r?e.slice(1):e;if(r){const r=Re(e[0],GeometryFormat.ARCGIS_JSON);if(void 0!==r)for(const[e,n]of se){try{await _e(r[0],n,t,o)}catch{continue}return[e,[r[0]]]}const n=[GeometryFormat.XYZ,GeometryFormat.XY,GeometryFormat.LAT_LON];for(const t of n){const r=Re(e[0],t);if(void 0!==r)return[t,r]}}for(const[e,r]of se){const n=await be(o[0],r);if(void 0!==n){try{await _e(n,r,t,o)}catch{continue}return[e,[n]]}}return[GeometryFormat.NONE,[]]}async function _e(e,t,r,o){return{columnIndices:[e],geometries:await Promise.all(o.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),r)})))}}function Ie(e,t,r){let o=!1,n=!0,a=!0,i=!0,s=!0,c=!0;const l=new Set,{data:m,includeHeaderRow:u,dateFormat:f,timeFormat:y,primaryKeyField:d,locale:p}=e,g=u?m[0]:[],w=u?m.slice(1):m;for(const e of w){const r=e[t];r?.raw&&(l.add(r.raw),o=!0,n&&(n=Y(r.raw,p)||Number.isNaN(r.raw)),a&&(a=r.raw instanceof Date||R(f||A,r.raw)!==G),s&&(s=R(f||re,r.formatted)!==G),i&&(i=r.raw instanceof S||P(y||U,r.raw).isValid),c&&(c=P({format:y||oe,locale:"en"},r.formatted).isValid))}const h=l.size===w.length;return d&&g[t]?.raw===d||r&&o&&h&&n?"esriFieldTypeOID":o&&c?"esriFieldTypeTimeOnly":o&&s?"esriFieldTypeDate":o&&n?"esriFieldTypeDouble":o&&i?"esriFieldTypeTimeOnly":o&&a?"esriFieldTypeDate":"esriFieldTypeString"}async function Le(e,t,r){const{escapeFormulaChars:o,locale:n,numberFormat:a,dateFormat:i,timeFormat:s}=r;if("esriFieldTypeDouble"===t.type||"esriFieldTypeOID"===t.type)return"number"==typeof e?e:e?Ae(e,n,a):null;if("esriFieldTypeDate"===t.type){if(e instanceof Date)return e.getTime();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new Date(t.y,t.m-1,t.d,t.H,t.M,t.S).getTime():void 0}return""===e?null:R({locale:n,format:i},e).getTime()}if("esriFieldTypeTimeOnly"===t.type){if(e instanceof S)return e.toString();if(e instanceof Date)return new S(e).toString();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new S(`${t.H.toString().padStart(2,"0")}:${t.M.toString().padStart(2,"0")}:${t.S.toString().padStart(2,"0")}`).toString():void 0}return""===e?null:P({locale:n,format:s},e).toString()}const c=e?.toString()??"";if(o&&c.startsWith("\t"))for(const e of V)if(c.length>1&&c.charAt(1)===e)return c.substring(1);return c}function Ce(e){switch(e){case _.DATE_SHORT:return"dd/MM/yyyy";case _.DATE_LONG:return"MMMM d, yyyy";case _.TIME_SHORT:return"h:mm AM/PM";case _.TIME_LONG:return"h:mm:ss AM/PM";case _.DATE_TIME_SHORT:case _.DEFAULT:return"MMM d yyyy h:mm AM/PM";case _.DATE_TIME_LONG:return"MMMM d yyyy h:mm AM/PM";case _.FULL:return"dddd, MMMM d yyyy h:mm AM/PM";case _.ISO_8601:case _.ROUND_TRIP:return'yyyy-MM-dd"T"HH:mm:ss';default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("z")&&ie().warn("Warning: Excel will not recognize timezone format 'z', 'zz', or 'zzz'"),t.includes("h")&&!t.includes("AM/PM")&&ie().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function ve(e){switch(e){case _.DATE_SHORT:return"dd/MM/yyyy";case _.DATE_LONG:return"MMMM d, yyyy";case _.DATE_TIME_SHORT:case _.DEFAULT:return"MMM d yyyy";case _.DATE_TIME_LONG:return"MMMM d yyyy";case _.FULL:return"dddd, MMMM d yyyy";case _.ISO_8601:case _.ROUND_TRIP:return"yyyy-MM-dd";default:return e.replace(/TtZzHhmSsUua/g,"")}}function Pe(e){switch(e){case L.TIME_SHORT:return"h:mm AM/PM";case L.TIME_LONG:return"h:mm:ss AM/PM";case L.ISO_8601:case L.ROUND_TRIP:return"HH:mm:ss";default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("h")&&!t.includes("AM/PM")&&ie().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function je(e){switch(e){case I.ACCOUNTING:return'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)';case I.CURRENCY:return'"$"#,##0.00';case I.FIXED_POINT:case I.DEFAULT:return"0.0000";case I.NUMBER:return"#,##0.0000";case I.PERCENT:return"0%";case I.ROUND_TRIP:return"0.00000";default:return e}}function Ue(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e)return e;if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime():e;if(e instanceof S)return e.toDate()}let r=e.toString();return t.escapeFormulaChars&&(r=Ne(r)),r}function $e(e,t){return 3===e.length&&!t.hasZ&&t.hasM?[e[0],e[1],void 0,e[2]]:e}function He(e,t){return e.map((e=>$e(e,t)))}function Be(e,t){return e.map((e=>He(e,t)))}function ke(e,t,r){switch(t){case ae.NUMBER:return e instanceof Date?e.getTime():C(e);case ae.STRING:return e instanceof Date?b({format:r.dateFormat??_.ROUND_TRIP,timeZone:"UTC",isDateOnly:r.isDateOnly},e):e instanceof S?j({format:r.timeFormat??L.ROUND_TRIP},e):"number"==typeof e?v(r.numberFormat??I.DEFAULT,e):e.toString();case ae.BOOLEAN:return!!e;case ae.DATE:return R(e);default:return e.toString()}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA7V9a3MbyZHtf5G+jn13Zrx7vf5G8SHRQ4oyAEmzu+FgFIEi2MNGN6a7QYm+sf/9RvWzHlmZpxqYD46xiDznZGU9ut71P//vTaO/N2/+9uZsvdZ1faGLTG8uq6qs3vzwZq+apzd/e7MrN4dc1/8nMPnzU7PL3/zw5jkrNm/+9tMPb9ZPWb6pdPHmb/+DEK9zVdcksSD1409//d9//u8Pk0a1Pex00cQct3/GnKYJR4cdQoY+5uhtVtdZsRX8ta2S3Kbpfe8delkzlpa7Q3P3uFDFVgvJ8QyTUhQV8RPli0DiftLWZfGYbcOUdH+HHD/3KLKi0dWjWk8s5xTZv/8H48aLqjL1YDnS/edPP7okP//kJGajGvWGdvJ+oXPVZGVRP2X7MLkGee/YQElPJo0r/IVWeFTrpqxeqchI9D00iJgV9UqrRk/cj4di3cJF7g7pUv/HX5zMoGNjFQ5Bw89rt8DYlp+qcq+rJtP1HJ0Jzemdq2qTFSrPGisvmtc9zW9Ze6T/9p//98d/t/PgvS4NwYOqdZoGDZTkbIrV614DQj5Eknisyt1lXWVn+4xMEVvKaHBQ0Ca1ppytRUHZIn2/MjXv8nujizori1iNd62ghiRGPLT5JDGnY9r5H1z6K62aQ6WXummyYluniHhQUWq5ftI7laLQIUTiEQXVeTZeWL1vMbPFEjQW+lFXuljrRIkRFyq4XZj1++vlUlcv2VpDxZhBgP0ZQNEpGJwi7I1baBgYkqkzPeKy3cmUplHrJ9Nni+XBaICFnOBzIzzxxai9+I1W18VjyQSKIjYQrtxPllBeUBJYBWtKKjLet8Hit+3ZD8K52quHLM9cz50stE2w7jTJ6UfDoWU0vBK3LosXXcWKW/8r5OZ7Xe50U71eldVOWYS6OOw8OtfUZbcL27nO84uuCx9J9cA4WHKZflWVu/P65W7f5rHM6dpLzMsntdePWa6T+H2UpPLrzfLXJAELwH5xypTI2NY8a3pUQgyvkBQRx5zj/bzPS7UxJQrmDiBsXl5f3lzcfzy7vbxfXL6//DU6nBvz0gMwg7htX7tM1/yDVhtd1SI9geGGifXLqpy6gNEWdGD37JnOe2s5RRJjnuwZ5nooVUmekyhMJSEVJIod4pzXLyJra8WyjDUN4BptWUZTvQAyY8bwHMYgJGUWDWN0vuf19yQFHyByJxQCH8D2M3oXIp/t/lfosx0wOf3DgYlkdHuGvQnSc/NYsT7blW7WT+1wXW96YC02zpNSFMxqth0UXMU253g/VbrWRWMa4rOmqbKHQ4PEi4RxOsvzu8XlffvtiH4CBnLLlmn6K12X+Yv2Qhkt3AM5DWObkqBgRqhHS5btfaX2T9kaYOstkep3k9WxnrNlkVINXUaqKraMUXayShqzhGrpK4DVM8sbXZ3n6lAzMxaOhIVgC3FZNSm8kz3fnLSI83K3V5W+6ksDOftJxMWDSTOgY0OnN9namWHnZUaAJGDSfJFVGkuEY01TE6V9qV5iy1y2wmiWUu4JbqrwT9y8mL+oRX3iSd/9T7rgtRYqq+GLUZNVdalTaqpLj04yRad9IxEhZnjFsHATyj5zwlyyZ5oWKlINa9w+lfvD/rwsGrPUPUzqnZd57lc4SV0gwjKuPFRroevX2aRk2kKrTdDRYahDGLR8eXF5dfb5ZrWUuiNxlYGB6aSYNaNIsOjPflwtoEL6BWQsY0UjJs0vd0aSB4mQhSPOnlLLCB20d99CvlZZI88VkWo2NKEevVM1VJeMXVIjSLCTzeDELui5TaG9cEm1RIIWDUfa3pEjuVzQiUz9bDWVVjshx1qbpNzyWMnodayMBh2w1jAlWIQOHKRM5xtpIc81wsIU4XXj5PJyMl6kHEsoVJwUOmDR+WauFpof5Pc+ki2kLZQ7goqTSbQKoO1mWW+LxI/mDgjYzTad8UI/zpRZ6Mfk/t38tAl0fJH5x0FXr13zCKwmRqyhYiMq+amNiWFOeOkEtsolb78jt/zwlG9dTN95/fE///Lzv/3lSG/feiCEmyp0CSoOHNFzt3wlKPVAVyOWv0wnyzdL3mbJdLECbl7MnzXwNy05flP7kyLePpovxteseTqr1mqjf13orf4u076N4WL5OtrbyUwWo8AxRXZbV88ub+Rqv6jIaLqn8uzFj3zSiN3WgEbofjSQz4YTGvTDUB/2+7LdqkEVMjVuUIm1HD3+3rLENhFtNtPuF3FsRqlQDNg+oMvCTA1sbtSrrhI1SQ5WdbU6O/9we/lxdb/6r0+X95eLxd1CWJ4nleM8zJyFsmMUna+g9Bwkswiy0blu9BlVTgCVAM0oZfVkZ74T3swuoEYycOvuHYeFutxkZsotSTXKkqScFlcCzy5kTXZX3MI9JeWD2amsC/2oDnljfw2u/KMHZPMSB0KtDaLrfGYAXdQlvwPQ49y9nElRIKEpcRC0uUjQ2rhjfjTSi8LcMsAqxRp/Skx2wPvGzsnq+XksqMVSSgsibrSpjac3ktATHl+QeN8GwFjXU967nagFDZ2iu/8xMVyD2P2PSdjA+OBspepnYQHQNgHznOJ0WiiHMy7gn/OY7JDOdVSE72jb4bksGnIKofs7FI2tLnSlGn29YWneOnaxItEB6JFuTzaZcLH0E2bFzuHh+smTkpAbgWfYZF9nn8KNjqDaXiQ9FzH+BGUuQTRmx0gUofzxp7/+0Fm3ffJ9pc0Gj80bdx5fZfmh0rflhvDV+hGbvKfIuq0hNlWcltgT8uF1r6s8K55D98afIOcIoiGUE1GE0i3bo5FQdAhatABdFy8qzzZ3e1Nls7KIbIchzaBoCAJDZGgBQNbv0103ekdPAQ6/YG4HNN2pj5GEZvtrZMxIjWpGBtuQHYOaqrdTe6IXQrL65jx3WT7vVPUscfZmLBez0dGikjc5jjbuJkKOLdxASDNG9kaHhPye6MnMW25lKYmFVp81sjpJ0zLLkh7ve12uy40mpy4sxsGM56rKQwE76VmzzDeq2B7UVi903S7BkPMPFndgL7C/6gp12zWWedsNzVLRsixZxlu8rt+i9fxWFweJSxcHkcPYAzzmnyyXsNJLEgNru54KvdhFkseX6DzO5eEhTylKgT3LHhtvktTceNabBfutbtnIafGiKJs27W0B/XtNjXMN/p6wxCbeOQWrQxMVkYW9/k3/DWTSYllAaSAZfd9t0riAM0hQ+33+aoxWZY+gMj1gD2FMsfotmf43lpmItFR0fLOUmI8gd6ASCf4kQcG5rIgnpRtjYCrykONdVmzFeNk2WLBo1iBKDjEn41epQ5ZvsmK7XOtCi+6TxlhjcWieyiortuaQfXe04l1erp+FZNGCHBm7hBbiTJt7Kh8GLrY0CvEG1aGcIA7AOF6fP+n180P5fZYHAp/syvzsT8jxzvQIFUzATEosyzzbHKHkcGCSX7NKX1VqN68ER3gw6XhLKomBralNM3S20KbJtsdaWVmNDaojiLritcTnyy9S+2ubYBvOSE4/KQ4to+EUhZty3XbdTMVPoPdhfEwu9GNWZO1k0SZrSi42lCm6kslo+IkhZQBtJ3bXxf7QzNAZcexmUWVqstjqkQIOVsiacqeygsuQ0QArquVGb76o/KAp5sD7iZwC8pt1B/sZEhL5BOJ7tRa5C+GLzZM2p0g2iREicJxMexVnooSHwUJEfj/IyNDfC4qTuiMwzhu/HtAp6pX61ndxuPLuWmFtT4w5CLVHzou5DbV60PksER/Jb1HPiuY8Lw+bd1nTbtZEul6+IseCqS90c6iK47R9Dky5bR+OE/YoMF1K0i73UbWoEFEFLnP9Ak0mhYbYiiXDbyWGYBcFqdQUL1lVFmaJhkuKa4V9xUxgX79q1TxJxcCnD6D8Ryw3i7fr5207E5+oFIL5Be9ItCQdPoDeTSbb7byw+Uj+y5YV81R8JLvPuii/zVPxkazKobjJtk9m50iiiAsUNGbGy0dyKl+yqjmofF5qCDA/GUhXGbuN8RTYihL0ROhUMPSM5wE5mRUMdzwD4tdoTGcJmKaRtMU2e/AqfnbTQog8fTxXTlNqSiD/ba+lIrrtLvhZeZ01b1rfJnMQ4oIBc9VQwOwg2AWDYcVe6B74ZimRBmYyAnpBL3r1iJyE3iglAQFvxP2BmlWiTlZzXg+/Yw6HbIGvI2GMOjzpxA7QCEJseGauNRPGZrYJFoCy2lnHLHIt934cjSie7wRVu3eqMps1lmtVFLoCJooC2QiDJHxe7h7Kd+X3OZIBVhK7UI1eZTv9KVs/z0tlhEESvvy+r3RdQ/OWgWYIluS6zTyzSo8PlaTMlpz9PCkfKknNCB0asIXaZOW7Q9OURT2nWJB4UdTaJDIvghEGSXj5LWvWT3PS6SEloZX+3pxVWs2RCrCI2MyGxIfy37z3uvz78u6j1OfwzaAPQJzbT0RAL+iFiWivNuYTMJpgsylm85AQe4d0AnCZa0P46W2H3IdxEreHvMn2ZooqwXsXJM6aJTB/wkjz1600kPFoR4REnGeFMMQImAcImpVkbyyag9IY1baN9vWi7Mh7PfZl4MIoydEJcfJYyYJgIiGOHTa91+ViuQRaMNsKbcBoZqL8OOS8mN96EXMpruuxmZOI18B0pkUZZY9txusA8ayc+AIQn4+mCyVmo2MEx4PipWJiUbNK/qGRndrq/lkYKQWkLZQQQcVPDy2EyHuvrhUbbbYnLQ650IzS3AEBHssv2hxxTYmoh0iOa1SRS6svijsUHD5q9NYcFdzc6vpJTDdtjaVZUgrSGxHDnPDT2egdl7D+ZywlAVfg+kAX4fWc++X2Roq8bQI5SXP6jjq0jIbncGs27UVh/CYssTV21aju8i+530pphHh2d8NroXbZ2oCAoJF6BAOgeEtucU4QvI3vdnaXA4cFV3kagFIL4OxwspsBTZm1oTSjNID2Qm8ObRfhPD/U4to+o04RpegvNbRignjgUImztncvuqoyf8snpOvDOa2/l1nRHn1xK1yaYoSE3x/DtECIptwwhXpm6nJeWQ7gnNZdtdHVu9fuuYF0rQDOabW3LB6dgTEWccPavGg6UF7D1NljUkYxcIpHhzIxikOZuvxubnHpr0GboRqjYb9hkWRaUwbyp1maNxi/PMMu9Oj0BPvdstGSpN/wJqWOAkuCpv1LTpoNkgRWercvK5V/LrImWYgCy+t7Uoc28UBVXpa7y8dHvW6G51GAQt7SR6DsfpP8UM0Vo5CsVmW2khS6rmcqMnh+L1rRVKpu5qnG0WyDUZX75ZPalN/mqXJ4dt60Uq/1WuV6niwD51Q/HPTCnJSdqcrA+e3m5uG3eZIxrNgxAsdoU1cIGZTd7dU6a17nJSUKZnfOmaZ7dobF0aymKVgXem+mrIo+9rBiBMvq6X2mZiaQhrLDTkbI/+x0H2yJPuwgECFjqBFKfjszUZRhQv7D65IiH/YbvVXrV//YM6ISBWKS431AKk+XjYElaWt2v8VFVwQmQR/CLB5tdRNJSpTdh4hLU6jbv0Eet2cUhcW0idOyZldFbtUeXFggLKHeHKvgtz+UiCzsTVje6k1GTe25yXGM0PW6argbUUiGS+4D2eX1iPOCBJscPz5lrbJ1uN7ixscxwnI6whu47lKzSp7rd3tdmOucdENPpjpJoI2hpEg6fpIiUpAHYRKD9jKewMAUTV4A5Lt0pFSMhu/occmzviOwojw8nQ5USRElLKGAsgp+LCkRWZh6F0jYU+vY4LuK5Xk6l9gBSVvPlNDh9ahHhNhmpnrtgIAZ2jaVwmybqxAA+Z1Ee3BzqCvi42SNhJUaSipphSZSSgEdaMa3ewx6oddltalTZWg0pwccSXclsAPpqtFTOY/2q13mECT1p9vynqDg2EvkXRe2vyIu2j11BRwM20md5uXhQ64cBGoJMU0/+1nZBJ+Cl67MHhc+wZYJlEDnXiAhVTZ3gGMnHs11s+8qrZ4TVUIgJlPToQK1aiaK4eHe+Ymj0aLgHBmYfKF2wiV7IfmAEcmXTZlMPmBE8s9F9vtBt22tSa3wjQ6FKDw716tVs1P7GSWNQIp7odtO4XEFXOTBnLjKvuvNMvuXPsu3ZZU1T8LGqIgPNA3mgk3JD1gi4j4BKPv+3VFh9/CY6HKfq+a4UIcUoHRT6Wb9dFSaCQ5M3KqORzkQ4WGdqPSm3GWFKtaztCNwef9rcolOKceL/grXxM+HD2MXGrLdPp8TshDIy/wL2EXiCfwL2j1i7BJpEcrED58NYXeC9Mv0MyJOQVmpShX1XpnJy9fE2FNQVCoxcBSUk7Iah/abmCBFQUGpq6rcLZvXWTVFogFdaM8dzJMdoaBUYmkhkKDQcdFEg9httW9nc2YIRtCsYFYfVP6lfy8y8QNBgzm5YGAXnSjgx4PIfEFbcbLHrLtp8lY3TyV/9UA4YIugxWkQtS2y5rDR4vYoR5KESVp0t1MWo3GSWprGXGYsXD5CVOj7GgkKHkJSCOuDrBFi0lWw1NA4eWUDuhN8xl3g6N3XHrV017Xj+l41memGkCuqbgIIUywZrEaQGEoG0PYT1j43I2aKa4UlJ8YcpMQj58V8/+WrnJNvb8YubHZo+WuZyX0iAyQ6Ae1wEkBxS0eawm8oed2bCNs7HHIXw86fLw8PpuGBTsCStmgecypEZhNCiLx3AV4LOKU46AMRYazq+JYp0YUrUiAiC/tpet09lDmXlNEA29ZdmvVQwfGJcjJnJ4BVnpfSJSYWq2XP0l7fUsnniG0Eu0vye1MdNroz/vkCKawTbwzMrrpneT5PjUTyC/zS4rXNXsor1tfrspjnO4nk9zY/6DG1sEyAYiWyQqcreCBUIC1cJJLdc6EaXWUKryA2gN/MUT8lB8kHsfs5Hn7T62ZemCJYVu7QyDfE2BKTPTtVrZqneWkgkaxUtjannKbWAJeikIDUraqedTVPzMeKiw7JhS1A8RLtRUIzRAIcv4zQPcU4NXuwEg1FxOzakCzng+XlhRkFkALKQlNjmCjkAmWhWeWchrJiz2Yl7nKz1cI8t63iYlh68yRSIrsDYcnNPHeHRIfxlkwEzApaNY6fb7WFPBAiAO68JVTgzbYTNlEDITc3Ac77ApFITGqGhkT+xbzbvVb53eNjLV3/azGGMHGjisttzQXa44jBUJpqJCoczRirZgFjh/npAiG1bTFe/9vH8ZLfuygvv4+cqz/JCtHZXE4FmZ6mSjdHj3uf5jbvrz09sArn0Z3ZgVVkzpyeHCDY/Lo3EcaoY/OCrX10Vm1i8yHidCBK/BvE2ZjfhSnAidOyZif/zHq/2ejMZZVlguUWyRlkmE3LaHjzTqss15txhyx4Oo0HYYkCdYNk8tJJnlGhSLn9Lw7AQ5B4DyAjCXtDJRs/mRgzx5OcdEYxKgf64Sc2eN7WTRz9Ym0kMeJTuSNd/CXcfzp9I7NrwSRMygTCEnKZVfC9p0RkYT9Nmf5G3F/spsa2gdJxrna6UoL7DuuE4DeBkN7y1Jz7XjS+6odb9r32yQA7VrDf5/3GjE9VuTedZGlcaClE0VyI3pXl805VwkvFlooNYKez1TrLs+a1LVjybiZLgUSyUnlpdgfJT9PZIi6GnUc3V/yofNmIH22L3wexM8/6RefpcQph/Jzzvk1zkoQPEgTAm8pcAfiOsk+VrnUx7VyBBHwQOzVnPIGZR2t+qqrR6TkboFiJXLy80KbOgbsKzSVnrSFen1yIsFF1rc/L4jHbHqq0zKSh7EbHpm1KPurmW5nQyIUwToT6DDDk0Y9ChJSffiKJpemnr9lmqxv802LZg8PGDhwdilncAYgZ5X1rDYRhnsVt27MDva/6od1/xX/LRxPoa/5BmwvHzH16OVT7J3YCKRQVwnlWgUkMk6MthIv7xEkA+XxtTeScnRRcjJS7SDfcN4PHQFD2utQ2TMhbsH8fSAjJcWVuV8sZqbBhQlf5SnwGwjaBQv/1CvHZZrUQbDRIZyVmcAj19VaOxG1qJEjOwGGbltEIHQb2ZnlWqNvYniyfnBdr/Xev2Cy2B7XVw/JpHaYhMIESwBCvzT57kliQ+vGnv3KuT0M7MlyA3MTA53sb3j+ZGyu0uZaATv+rrj4NFl5IW/x9h7+3LMHIEsxDTKPMURU/qKOZEE5EiYsnqemW9W5FAREiinrsPtkOsNSNeXuXKO4xuQGRmkc9Ds+qUSj8G5hzvfXMDGT0sfwc2p/0LB2lQ4pY7jrVsjSXWRJZ2v4dy7jWdKHrQ97QUeu4bDt2huTjl7PF9dnH1UT20h/HGLlGG5foZ3vRbaMbvW5uvAROncCeyjZjOpVbTd6m0pNs/SbCx77TdXOrmvWT6E9o7DP/0NWHNon7Sq/N3TlvXLkWnRXbjqDm5TxjPiELvc3M5Sl6A3EH5qmJyeqJgpGyzVIl8lJx1ObnVMq9qmotZrVlxR1JYEte8HHyRis7td93bSlVd7uWpH3R0FwkFbYDPfzeM8RbdIJ7aM1j3JwU0YCPlgutNndF/rpcP+mdmqvnsuDqx6mmqgkfKkw0oa/hOdojX99lxSYrtv3LBUe4wtGKzo07ytIdGKFHRsD/XB+RamkzSf/xD/MfUI7meLipabG4X55/uLw9u19cnl3c3328+S/qgxyTo/DBx9puqDyC8zLv39253u1zuGFyYTOaqZiuUJ09XdwpU8mdMAz9OKRRDmyhBDMKQSpDBUHTbbQGY7FxjOvILePy8BDAp5CnijJUSEqTW2ggwqljiGOF0/TA1jcuB7XBgzG1gQ7QwN7KbWiVqdPFKHlotlN2Vq3fXy8TanoEgO0DkMT8ehETg5xwa4ULsV9+Ryoo5gjNinvFthlESU4MT8wl78oPGgzW5USXsPrtgk/qCTpp2D+UAFQQ3xKqGXF6vyQG9LyeW9x8WzCUoiaWjT3qSFFMa6Mf1SFvfJIrZTaGvXLdx0CXp2J7ksOmIqa09BZYKQnogtIx0NG8XmnobdAM8bnBXO+tuxffYh/MgLwzl6eF3x2y3IxVzsvdvix00SR8y2Qsli0JLgQZJruQ6qWXyTG01BE+xjO5pyyzo6XyFAGEvwI9U3sNxIyCRuOSCpkkHcvGiHSKZ3QOOki0UKV4gxcmmjWxIM0KVGoBmi5FSig9BCip6LCisZyiRGGH6GyaYOg8aZoz+Lwpw5tYahLDBH46A4I/xKtEZ2YOViCfUoYsZL1Kb5OPa45ntMTxtmVW+zuA+ndnw7Xx+X54lCnewDVadCKhFh/Z8idkzLwqc3J/0M/Oumwf9oxXht4AKvrvdbnTTfXaPTWCcb4NQJ3EX378z7/8/G/2GuOqPK9fglUcltuDxJmXT2qvH7Ncp/ITwLjKrzfLX1MFXEyMe12/rMq+UlKtbjg7OMjQSG6pd0jxTEEOz8g2JisR/taQJRrzDKMbzVlSk08Yn7FkqL7n9feZoY1A2Wne8+UXtLcZmEKNAiPgN/2hgCDptvaBMdiqArJoc+o+1QPENAKAIiuK+fGNiUFOuLGOQMCIJzqCRj8o+WguCEAoN2BxP1ck8STn3Fy6ujxbfV5c3p/f3dxcnq+u7z7e35z91+XifvVfny65qU7RJ46YnfjsmRNzZn5+JOYCHfuEiFMAsFYkuID1Mm3oyXxIrIwuk3uyC8ps4mRXQoa7glCmt4KgK/HMRycwMBfwiQsbdRrtNE0DP6asBfIuIVrcHb6T+hNh5ivDe13+fXn3EW31SHN0CMYJ+SWAFgLk3QJAAsCoJ7iQEO3FcpkQ7MAajTUjQ4Q6lJG1g0AH9nicMX2ssl1cXp19vlndv7+8u18sl/efV9c31yt2+x3pQYSH7UO8r9T+KVvXcA6T9lgeC1JBLtNSiAdeTpMINK9TvMDy+/3i7NOH6/Ml2IGMeRCyCDldHooNlMWOIZi3EfIwU11yVszPRscUzj9WEMyxFnSUYorQTfYcXcOn2Q1C2u/Wb7HwCIDNGr4kSySWwT3e1ATGcFmMilDl0RcRhcNy6Zkju91AZWyLGwFMKK2AG2h/ob10rHpF85g0h3JZEPKjTQsB8m6cSQAY6QQXEqM9nqvHIx5CUqLOCUYiTwiCrpA5EILSciHFHazp9uHykQ3cFekch1MmikZvK3NCzdzNDxcLBoWVDEg2KBycLO6TV0QYHFpK5vqF1txfbm/QrAlMofxgBPxMCAUESTfcgTEYY0A2bfz0y+0NMnYKdQkCthvzy+1Nwh4IyhrNwoSdD6SMrB3k5dytJ7A+tkOeQuIFC/MEraxoTZ1RTc+qSr1+rdR+rzdUoAGJt1GO2BL3Eel5G2AxESrr0uUcFkzYn7hNFx0ZUgSj50Xn6oeErDtHxRsPM3EYDFaxsa6IXfdu1f68LOqmUlnRMIlx7aC6F6P2W1aPmlNyW1PXEmy9WDXsg2huoV2+FmsydbIkAefbx1vozM5t6nkdmpbInYk2rhHkTOpXJaqD5Ul7f3zqN9XRjDEA6zjdOY9Pld6YO36jc0uOHA2VJplu6aNHjM4tc9qIeOZXfzNXG0LMg7FE2t35yE26ObSTOUDcbcRNoB4B8kjvVu3bgSL6Oaft0arIShGVkpJCPAgqKoHAqyzuBVaNHSxU0kUPUgb3AzBh+BGFJGV8wkAkLgi6QpeAuaOBGe6kFYXEjce4P+jw5FbtP5aNhtfwaHu0OLBSRFmgpBAPglJAIPCQ416AmX/26f7j3eoSXcSLuUDQsFMPA09aA0BDknI8rQGICIKu0FkfgKQ9OTP8kDfoRKF4ly7VKayrF4UnVpIEx+AGSm8yBbdOoTFWUDmRoGgQIqKwVxBCczTSmDga3bu9LpZNpc3NfvDiKgOCog2J+lHnRGGH3FxgYGBuzHQKzZ32zdrzvDxs0KyJIaB8keX8TInKYX642RHDgHmR7Av2sfbQJ3YGLQmL8tDAYzXCGMp/VsTPekpEFHYznDCXPsugqvwpJkBg1oIuYKVrcfd5dQl2A0lhD8/2/5LOtM89y550hp0SSTyzPv9kOCiOVlHT1qsdHF7CGosvKxMEmJKRtb0QT/ZS/ZT0gBv6CAY0Q9HEwlmKD5TmDZCi18hh9G9DfGzF5eikvKUYYDVkSQnVhVaYuImVROEkPWBRS5CLL22FatICpSAlrk4eVTjxkgmNh3FVni6+XLg8PJgZ2KSNpnEM1poDkkEbG5dEvQnuI3VRqZcvpniUfgVjQCF+hBLcga6MjbChn6U5+ZXwiTIMac07iUgprwkTelE5zA8yL+ZeEor6MruMoperoI7ApXPujGJy7mDziTF0Wo3BvYJvIbbRJ3YGrbH1Yb8vq9jDRvfPLTRSd3vsvbHyVCyF6H3jAHEMCrUOMTB/+lfW5ni5yiHHgcjv+e7w+R52WJIyBq+J4E3uydnDeSCwCy3YrKbrWL/43ErdWzl4Q+NOsp0zljERScQT/65rCgE2k7O8mXu5c3DwLJYd0J3AkfxAbyieo/1WJI8Nl0R3mLyJeYRFycuTiy4FbmMIB4dDQ7mDycfqDCuP++a/yNEjg1YnNSwxgpTIyE4IwYk6keSkH6LH4crC6iXjZkkGZ1x7rCE1TwBfbrLmk6rUDmu2PBmPgutVqsGUfN5M0JnAroR3O5h07jYWPOSYLd/6/QHKbyXqWNMn+cJkb8QdKD7sgQ44IPNbOkGQSTWtiXhCpfkmq5mHPUltGwKldXTLfJIY1VjTFaryjOLo4Vj54xSpvtcR2rHuluvFY1XuRqi7YTreroXqAQ3bwrVfEqBYdXbxsW+5Xcsk5XYNlcZvj3VwA9t4sSPU3BslnoWNyqdyf9iv9G6fq0ZH7w+OJZNDxyM4v/NyVK9FlmUauqgy6FLwcHfKqfiZx+FTzsETEmkn32cfeYeUwVMs+Ol2TjVly7sBJUyNk+ZwZiZMitNCgHyYq3PnWBNcwLM3cWpV9gGdIPhc9E2BhrfKRSFQhgOCfqbHBUFX/KHUF23aspSmKoaAkizL+SmOymF+uIU9hgHLWrIvaNH7qh9SsoA0h+IvCPnBp4UAeTfsJACMeYILcLSv4AsFA1MsynGBIMKBgCDpRdY3RqMqy8LRvMWj6Zti0YwLBNEMBARJL5q+MRpNWTYhmgmdDcoajWlCV4OUkbWD4M5dpoH1sZVlConnNOYJ1t+xkCdyAC9nq4Rq69uCZSwuEZawQEJS9UuXbw0HFFDmo2rHdaeLQx1Zl7/VxYGIskHcm9/AY0Y2yRjHiSRk8s8NFQcpNi4bfsyqOFw3esel0fwOp9MlC9PaktGsYZqNDZxuhzk1/cvGueOADkJrlBQJjzbqd8fM6STtJjFE8embVnmYQrFM4ZSxUzRR9rhSJE8SUmCZJ+VPWkpsFV61b2PsVH0sm6t21aGqyipMk/MzlIYI4VDlXEKG3h9efiqrRuWfqyx0cvwJPFcWEA3OTUQRSrctyOqrQ56//uOg8uwx0xuCeZqLnRijsGDy1ZaCyRG6ppzleRTGThsLW8y6B7alzZNDXo/7bDgYuMEF0R2KBqaLO+UX73tdV5m5jrEqFLHlbpS3zZg9d/3CrlnLZcgsK4Zr29/a/Y+Dppq9kc2xY/h+F3h+J/B0Fq6Ha51ayVW26y4ValaluTCHKsueCE/Alur7Sv9+0HVzrtZPxCd6FLLNsETlWlUeK5EAh3fCMJV+q31nJdoBIQWibs722d9rtr5aVtjxz87+vNzozReVH+j+CkkfQNkzj77xRblTGT2KxNQ6AkDzVu37nRem5F0Xj2WyakgB6C5UsZ2bTAsLKB2bvPS09dug05U6HKDgB65bK+K4yXAR60NnwjfvDP+4vTO9Kp+PCEVPaZlzEfAJ3aT3eJImuFCss/qodsF1YiSdMZQo2/fa66zRkJuetUS+zHb7HGO2TYFM77sMbbP7Qed7TXTDp+2sgXHKJjxWy+/pUFpxHn4nLyNLFUqCXk65W1JD84Wu92VR800DKD1wwS4ED7zO0e5J+GHquSrWOs/NYf14ObKMoPJDkvoFxiaNCniPc/ZmfJ+bIpZ2j3d2q/JZR6trSNuaSy3BujXNHl+5fpTNPQKYvtlo8zVrns4eyqpZZltnJABqeHi252bGEvEyYn4FVwLz/Jei/Fb0G7cnSl0cdh6hb+wqODn4ZLoaly+6aNhq09JaxlydbOdiTYiGSW6+RrbUIYZT8G5UabvPGzNzltVNtgbkBIIjtK/avn3RtJ3U4z1x6Y7w60NWN+W2UrujXRqZjvDmRj3o/GhPWpZjvTg+jzqaI/ww/+94N1oWzouharnXy8bUbGuO9d0hy80N421Xr9DFeEbgXO3VQ5Zn1KYvRwlikD4YEMmFatTxrhgW1J32chn6SgVGPkCJvfKpZT5Xef6g1s+sEGEPSFRNe+2cO8ik2S1Tkfj69iYr9PJ191DmPK9tCdC2FQbjtUwh4vx1WxYotWUMkHeGxKUiNL1nLo/fhqnSs8dGV2ebTVsKPqhik9sjBkqMhSYKdyWwnitOwBMd8Po8siTV75FEzCpRstAIShRb6F35oudGNETj8u/0Y1npeWWJxKZKzy9NUXyqC7OjH4PjDpCdeFYz3pPHZNJSGAJx0ZRUJaYntXLC9fLCnL0oq53imSczkTCrGzP2/FxkAqVlKJKyU6wdHTOn6hOJnZvJTCSs1Les2K5K4eNq2UmUZvVNb/oDMQtdH3I+kIT9DAnnT3wnWEQj8leZzje12D9zTRHiGgxZDYYq1y/t5JJwNsTlj4BgMeohEFoBeQXksq4yb/sFRTlYwXQXulFZLoTCMxbJ4YFB0pAA/hSkNP1X03I5UOgC62R6OQ9pCCh0vdFFY/ZxQBqTNUjf1oUz4jh6XMODzBOaq3aEZDC7D4vSU/qsrHs/jqAUXnfDk8MzIzFQitjYqImfhSgqRQ5szGkIKBRcJBEXoO+QEIhnFHMamSa70HX7eFb97mBaygRZDynKmm8/mlGuLUQtdgVHK4nuvS53uqleRUbbUCTttlB9EPrSk5lEaL/JDYaVhohC4UvCqB6HFGUbvYN6D7YhRFru9qrSOLdrj0iYtwpRessWoV7ozWGNO++aIwKrdo8YSG8bS+TtisWnXK31Thr+uqYy8auuzK6+80qrBpiSoACwyIWum6p8TVCxEaKMLrbNkzjknsxEwqzQqjKWfF217EjKH7q1+/bCnn2lzTOLmzeOjn+HBylC3dBBOF2qdo3pIPg8mkmEeblWTWlmjyttNiCsyhvzF9NB8+9uInREdJr8MeJzpZeH7VbXzQxhGinJgk8QOoJJDw46Us7LT5KGYwyQmyps/id9ul1TkdisVIk9jNFKpCtrla1vdfNUyj0h3xgjv9vrqi0CIL9jL0l8VC/ZtrWeHvQVdWIgSSx8MQksoRxQFD00+0PzKfuuczFhnq1EDTwdRIigLwQRctZ1P7AYiZGlzDGU2Kk8UicE4CJixrimInGla100Kna7KSVAQiShhaobXV31+8hAqRgIExMH9pOZSGgdqmlPa6AJiONSJBelMOz1jWVyemMoSc1s/4wRh9td48yR7azhJujxPSIw+BQAEjHfR3AwTNjDEh+yZtWlX5rNpSGiUDcJgq5ThObYtvSrLM+7zRbL5lUopyRClMmzjf6S1dlDf1OKkO2BuSgwvYuEFi0KIcq0SRYb8MlMIgRuEXOY4XvDbAlz+KXR1YvK5RFaYC3RexcOgemIokS5TH/76WLqiQkyvjVCLzUYYN/bmO1N70cka61kujprJ8lfxQGwayoRf9UPt2oP5ptvjJGbQtXW6eru4Te95iNCQzChr9lmq5saVnHsAYm2FcdD5ZkDAqn1iIaIQldLeKHGswWo+wl8sZV0TQHiNpVil9A2xHfMTJTTU5WRzTIu6c/ipFU7Jac3okJvl0r/zTsRscqa3M7TiBoN88Wd8x7djp74ja0Dv2sHnQGJUftHeTxqTsk9z+NaCrevQGroXSzXRdZkKs/+ZTLBXXz1AxeYQrFjBPzwhQKCpBtEx5iNnCDE7boPoGBmAWnDrsIaYdYNx8j5O8aBkAlz4KuqiqzYyoeYOG2bJF1WWqVBldEFnIyI2aQdnmIL9SkGV9U7x+ZQOM+5fGfumeBQ6fU2KstWYV8W94mp2MJVeMc4AraUOnKbUCCt8XuFouTRAPfkrJh/DcvdQ22GTuzh2ckGcpyi9H22KGPsP/70V6kncX0x/pkSJcqAJUaCg/yWXJj++l43fXP9+snoM02ApRfF+w0A7sjHsskeX7uN3sle2OD5Lix1k6y81M18wa+qWaeHvEUdKTrk2TzxAZ3qxHYqLO9SiluAw4TtFqMc2T43zuZYv9nwDBPbjtvse8YckffJPSD77eh2v7LthE/fY7jeSJufl2r9hHS9fH4fLArNFgEEqLbU7UPFoy+u942WdGOJ6sSbSmJCUVVb3S6BXlXlLkUvRIqzXuZw+BypACjOLzzpsJfPa1gQiX3d7gEKqkrYuPgaDjDoxU4CBfiV8vkL5gNFtlIp5NO///QjR+6cBQVog8OgHp34+QoZyW+XPcuSSvkNITRNVDKpAYnE7ogRZQ6HiC71k2bHYgHpk38dSkB3l5j3A4Yd0C202twV+as4rPG/sQIQ+ubC4v43WBJPcs4fmCx1Rczc+Om3raDE2gB+6smh9mFc/2L4NF3oR/bz7AhYIO7TTEdFImei5N6NMTkR/abEvJb3k0y2A4fmVoZiQg4YWI+eSl7bsUXUAhQqgycoKRWqrrMtuYElbH8cFR/ItG2+6Vn9WqxnC7VoRu0xyxtd/X1593FGqigwo7XVTX+NG6wwQSBe3HULwzPbqBkhijIwqlmdGqYRwbLSbZZIHW+0HP56DrsNYnt69VN5yDeX39f5YaOTc5tEM2pNSX47BBUHxXYz5JWwpDUwefVrpIuveNn+HZpggdd3cDSBPMxq+sK9MKITr4sh4ml73Kj6OfZmxXl5KIKdVkN6WuC9ZQKlh6S0vv4ha1zBm8ve6nJdmguPIqnpLmZ831pRN3Z20iPLvWsPpe7s4mJxuVzeX11f3lzMUnjrU3R64VvGy/O7xeUxQi5BTCYWtKGeCEpcDKkbRwdLYQEySRVdNcZLRlKZ6I2DiQ6R3AW6Wn+JXBp7eXX2+Wa1pLYioDoDR7Avwer7VOVuODPaHhWl2iVULyBjPwB4SfT12NIXyySmzEXS43+M3fHJAKL3AiWocSe4ScXEGhXoYQv5/Wkm91LAbhARVbAw0jAi0r4ChdxBsltumE+4z576KY81pvFKY3/UubY0+Kxn3d0Pr7EnPMRUDgT30VQGjfdw9qq/d8Js23/JmAZ1lODh2JcX9MBtLVAPUhz0u4Qutj3PcGSASI4ZURJ8gUJF+5Lsrx+0+NWZeWb+lW10chBncEJBPcrXSJDn+Hp0+uBM6A9UnC4HIoTHhV/0MjX2MS+PS5Yf9SNK+JEF+YjyyiinlD4mCu0HPvaipN3DmOUTwS5uZCY5mIdVT+Ok9OQr8V7F+fJLm7SfL+ZWXJEBK1+4H7FiJvqR6GlQ+Xr4FPt5H2yQJylssE9C8CSfZvnuB3LTzRUOxnI30wectNeXovlWJOXnSo7r6SEuxZhjfv0RnSnaz3lKyX7PbcYSnY7LxDw+vqWlXUR4JZ+ObdJ4z2T2mH/25W2njhvKjfh28soCkyPenTJPEd6YT+91aZY1/5DcRLkR3/6Y2pCmwPi5WPYn6k7mF8MY9aN/HfTkBQwijnllX3Z3In8Eypgnv9zenDw0EmfMF//+o1P6hHLHfPMupDltowCTx7xblIfm9G2ozBpd2Bsv4Dj5Fweklj07bRYivLJPp8w9mTXqz3THxR/ziUkSiHrZPZ36h40DUvhBH08aQ4w65tlw3P3kYYOIJa9OGSiJM+rLbYcbLiIvHstTeQQxM36deLKAZ3T9+OfJRz0QCzSTkuhPZIoJ82eG1/700okGZhhNcgCPmEgHPZrjOBfDeY2GyJAcuXkzm7IfiZ76oTrNqBZiQfcUpfgTCRvmzwyvufAd2ytK4EoO5bEz7Cm+zU4HEdzZswUMFg2erB0PVlQb9isIxvFTFjIFFpoET2IRkj1JddaP19ym7JjGa25zFdOEm6Qg2UnLyYI8snjs3LzR80Tu3fDEHWsoyhH+SGxdfkbNL0CDqbC9NRCiD/HySZmrwWrO3kkLy512Qy0sm7avNhrjYI8o6gC1EZZShNucWY1NXEVO2CgkKAsJoy8gEzTxq8hYNaG6O2qyC7HKHzyhJCSSfkeJT1+gISRt0GA13a9CVvfGWewolqDlEvD17ZhVDA6MBRVSj0WYU8dd8wvTcaspLBqKCagfCQqvn+CdH5bTLOxALFCYEv2JhAvzZ4bXfvhOtPaE0UABTPUoEkHQozmO+zE8doVMwENRg32IhEvyIcnH4KaHUyzZISTYodYkbyLxgrxJdzkeubk1U2RIjNnc+ij7kehpPFTzaqGATwzTvFoo+ZDkYxCg0y294lRY2GZ4Fosg7tncRDBxPTqaJ4mh4EV0oC76keaod27wdGvqMBMWuHS/YmUP9mtmCoKSd4otAAjJnEDOrL+IN+ku+5E7wRYFmQKKWoonkZgBnqQ6G4vXvCLGopOiNK9Q8foJ3gVhOcE+DoADC1GKL7FAAb4k+0sEbfYmEwaLBmn2GWhOG/arC4Ydjt9NsWOvZLHfYYtFqGW5D+0TjgnRMm4wojKSMnWZiW0NXb+QoI5eatKfHOomKFemWzS8qMcWSNuTKDjliJbsQDwj4g4kOQgczE8KCwWcewo/KRykMOzUjKP2CbFJZTvVCfuEKCa7eFya4ue7E8J6TPRmBSkmCCc5mmD0HHeSH8cc3x4JwLPbyY4dcWR7XmHhwcccOgYLj+BAkoNzTxZ3rhxzrHjeR5M9wctQJpwqPoEjEbojjhAf7dkMjcQzr8d4J1PCxzSPcYMjm3Hu8RhXMFrgkOMpPIlxIacIj9bnyKDDg8eIx4iSTgoe44BECB68O8aFOFXKKbuj3UBIwYNsp3EDFo8uFRzlB8KacvzrKGd4PuhU1TH6MSLsiFCCfBQ27zAG1uOLi4LuJBwZwMIAEBx7PgALDeJIsrPMIYC0GJGo1L3/adGgJTFf5P3+YMqjuJmb+8HUx2VRj4I9mPM6MlFY8v7BhOTHRUF32D2DWMJJSPoGQSzBtBjgArQLEEswC52/5Q8LAC+e4JofkNbU7FDe4KsHNAYKgSRHpT0ih3jhTqDRiIQVhSRP0JWFFs2eXrHE8XMrFG00uh1tTIEsM8IhEos85YjKTOq4zuxjKZLKaU+jSGpph1DoKHKFmhKVDp4ktJ3pbWWEnEvDyM+pcWngDpgQOvDREkYkWiMdEUGWrJ/CWRJLKuUUCU0dTcVAHdchWugL/di+gx55xJsXmcB8xs+aNImA5my8xj77MUHIEWR3dULiRfjsTdUJAZGdSHRT2B2cGppjAjIrDLHEpyT5yEkrGX/k5l4wJrIbqZ4i+yjBGDHI2Zsmwbhw0rhf7E4/LAgkJH1bH5ZsWgxwIdx5VWtVtY/dznsBpIMnvP8xPE2ybIFSbHt6DpqwWCtpu6FGtHHH5q5Q914csUQ9K+LcunCUkFnGO5UHydp9L+poYZonPjE/K81HlPBZZTuiN6c8p8eZQKR00xOSSSmJ6uFLzcaWncvo5SxL7PNHMZMJsZmjKrTjwryDI5AyqTGfndGaPbEBCJ12bgMQTJveiMQzGCPKwtIUR1JlnVFPY/x8UqbeG6fIJoWb6iC14MkOToepsI6OJE1XX2HGw5FLmfOIsDOJGdgZLf/GjM6Uvy+D1LChQK1ZHrZbXbuTK1ycRvOUUBEafIm2ZARdv1QT45e0SisSzB6eJX1/AT9SXfVrSf/A8f/pBkgu8nOT5dKnaXggOYqHInX5fa+KTYc+q7QS3zCG1WlmqvyQUanGOTU+GIMfnn18ULdS9TP/+PNkAYWQIgzCZnFG6YNg2GNZcrC71eXfa6rtGJH3g03SrpCs0Mum6t6cDlNEkAfAMGnBJpjbQ95ks6U8NKrXXhwyR6oF4ir56zbS3oo6LRRQmpMUNBXzEoD77h9BiHNKBx50XWWrMqCdPtYEtYMJvtIT97azWJWXdZWB3A6G7QHcb9vfmJq7y7Fau8u53rfHOFlz+dSHyPaQTvYu//Noy4Vyl2Nh3OV/Hm358LWf3T/tK11roim3OFvD+84QCui60qrRV7lqGl3o7oqhX2+yuhGcd4SiJEyUOsxCP6YLLfQjW5Kbd2r9nBXb1o8Ueg/KiGT1daOrWKc5xj+hWOpWfKEfL38/KKlQevwOlBUZOnPzdHw0I9WUt2pPHMiSZVwkUEOIrpPPjXUV2zB+zZqnG73VxeayMHm26ffVvEpNTy/Ek3At0irb6bNvqt9zC8q5II7+QdV6p/b1WaUvfz9kLyrXBVTf6z+TUL4yjnbr19XrXl+V1Y2XV5wgQ8DLdv3jCirXrcwAYGifVH27U3u4Xan/bCPY6vguK7a3al8ncHsgnj52MguWihFAsu+r8rCfK+mAIblpMTpVa0KyQsNRMpR+sGdJL3P90u7hS6J2UayAvZEfpbcxMLk794YLhPNtnoi9yx4VsDES+aJOq4AWhKe2t4bD5DZIoC8PKa2SjeA7OdambpTaxiDkqyxPK5I+jhcpGr2tVKM3t7p+StMJoazUsCkc5R/sJdLUdtOCyN1MlFT2FO0zATpgp8lz4Fbt26KRlC4HBNGnZoePk0Ta/fSpaZhAEP2MNDg4XkRvMpWWgBHBEt/tdWE2UunmNqkTRiFZIe/KXVTFg7ES0z5KlH1C8OO65L4P2OextrDBzBMEGovCvEgx7Bct0r+NARCRmZEEG8ZKmC/dpmtDuqW3pOTQaFnwVu1ny3lYUSxZAaGlx9ASd3wQ7Ql80eumrJK992CsxFf9kMxvY3jyfkMiTNzb86S3iaS3GGlq9bIgAvUq1eEV5PFqhssrxOfOfsbUDQHkp9SKw+6BWsW2qDsTaEotqz8edrrK1tdFuy9IdLvnDnG81+V2zbpcbteQv3fb9Ue10/Ve2VsvdHHYBXS2qctt77R4v8u/6Iq6lMqjmwylBaGvjzVGORlKlN/0w62u1qopq7M8U7W9uXjaz+XRhyBm/5aZ0dvX2/NyI80RGGrLmp/ve7/LPy4xwtaUq7/Fo66o7IqSegh+sL7LiYIVp3YADHO5XS+rultNWkqtjmF2AXyt2lflb3rNrz31NlDtCvhILwdGktl3caEfdaWLtT4vD0WjNx9UscmJPVkWPw2BEtDvQw731sj0PZTfMnP/4hc+wv8Xsk7TDptyv3nAivTA62D46H975gvHt2esYHQLrF9/WQkuGr7RlqkVxubrc7ZZlV+fpeI2cI72Im9jzLINzNvbM7zfjA2weGw4R1s2a1S1Vhu2HnQWUPYsDsVZa3353SzSmXLxSVVqJy3H9xJROLdcldUdZrmusn1zVr8Waz44vRiBYwJfha5BKgROUDGOzJaiwEL2V+qVz/1K+auRkRsly91eVRrbgNHRuhAul9dPh+JZCoOhbA25jQWdJETVmcpkUKGzGKXCtjYfBIzvwK6vPnZ7LhCq3pTrRZkZj3fCVG1H1ptyJV0VWygTWkOOSO/KF4ypteRrg8mYcOsGUStsQ6h2tHn+j4M+EDu1Y7wThtuj3ZqbJN9VznZev6vvcrsoqd+/Lou1koqkw98huE/kbi/N+7uMLYAjfOnuoccJDYCrPVneSAN0l7FDsJSF0B3wCQuuO/CYVdJWLJ+vYrddYQ2GSyk2HI9ldanac6o4aQfhSKtyl8RYlTuBbpkV21xfNzqZeEIyEju1T+HdqT1DVpc7qdFz2Iw9twtLPSfRGXt2U9eZ268AGDsI2zwP24u4lnmwgRplYauTwP42Bu80w/Os3f7EZaOKjao27zo0H6RRkMTycx6e8bXQ8oxSFFRY+5mTogDH5v25qvV1UZvNfk32ou8eal29mJJzq4hbwSY5Dod1ayHh8FPOCuNe+SP/9ZNeP59VWy7Ngw3WMam2h50umnMDErcTjtQejOu7m8hUzUfzueWLxkhuIbhuchAKlpSOilfM1mWe6zV9DM3iHK2wIvRkOrGXL0Lj4rG+dWGxRiU27AL4fWRM4uyx0ZX5upEJocvJpEWhueJyTmQBNbdsSZxH8uNnkyGmZrZTcvtKr81+nTepw0FL6ZRjwpCWHhj+kwzOp6r8zo7cPVNwDB+hJ9o3j56VC95IKfevd8XXKms0ld1UYggAmCRWikoYJQU4EFwTohp2EGl+h5JwYY5PlNVOsc3HSPfWsY9V6smo4ZfxKN6GvbfDsaOusYRFHDAnt9RNkxXbBA0LESXurhu4/3S2WF5/fH9/dbe4PbOvMGA1ouCY3OVicb+6vr28/++7j5f31x+/nN1cX2BiMWhMysw3d0FuT3+ty6rR31OKGE8Qk31MUHiUyDo14Ls3cfqQGHUfwPuLs9UlxuwhYsRZ/UXl9ooAxzkZC3RmW8p/lwXW2LwNQTH6vaqo2xgo0sE0RvXJ/J6UVx6C9fFzw67qe2521jHCOqklqeVWZKub27JonswqLd8haGltc35891Xr5416xXktANvJMNsYuOSb38FdHV5xp7xr2XpL3i1n3YtwK1jrii92nuX5VabzjXn9Uzhr1NL6ED5nzvJ8XN3dtKB2iR7WocDsCPysadT6yYzH6vOyaMRdP60WBWNVzDaLzReVH/RFuVOZME3Ya/ggQSEvhUHiSJv7lyf5XIe6KXcp4XAQLLdZVr17kPco9MSTOc86rtmleB2gBI0EYpFtuBtJY4yTOcJqjvOl0Bp7ntdUJozRWMpcSZXNQfB7gHS50420mNHTDsY8Y3dYCCPsbFm+dsNwuy/ftIYQrQth2VurlNDaAIG5FtYhRsaaW33I6vaKir178QTHN5qzrJ9gQuL+ioDLu7mCZSPuqyD48qzAquRgLDDuD/uUfLYBMvNK7/a5MwaXqAeEwF01KpeXiUbiwZxltV9oSAkJgePn6veqydTUw4BEfBCrsNLfm5QUWPYs75dMf8Mr3GjNcOalQj4HxozdgaA2SFPd2vEd3OEyA3bwMVmBffDwaVLwvgVLiWVhsy16NHyOEzIZ5ItzZvwYP2giyIfpXNUxDhAsfKe4P2o+RzPAIp24abJ0tq7AhHhxrHaCon2gfI4iiZcUh2PmMwUDuNCZHI6+zZIL0XJXsz8wPkePxLOKw8nrOWoBlu9E2seL58jRBJDmMc1flEPu1s9PaoiWu9LTcds5kjEKvoN1VLue2p5bZ2hnyRFwXs8//TpLNUqCaB9TcGMUfId2ODA5RzEEs1rDMco5UgGWV7o9QsnHSkrH5BkFF/RWxyTNB7Nd9kd3SinsrT+GM0mRjnprae626Dbw/7rQW/2d3wLRkZNAfyOE77Oxt8eO6WoBmpE009resYQrc7W6PCHXiXJ4fire9jJVksTy8/C+k6haBMqK9SdfW0N5rnTQ8VHwrERCWgIYX4eGld7oMzbseLiDd8/YMLcdS7sxepoZmzKc/RPhfhKb2AFxm/rFLRTkrquoFPfmp7SRAlIaYBx9ZMFe5HdwnAC9yCzy2zA2PNJ2ELLRtANFEzDtJr0RQdKxUQx5uNItEddkLjukwiYWstWwFEg400RBG1kkUYaEP9aQpPIoEUKr5TZjbNEc2CACUg9ARsLbJCIRt+YSnbOfA2L83PD7JjsA8h3pLWdvzPPvgPBoJ4irYDf+H9u7LRKJbVCc2mRoIvEE8Wn/GTTuyDa8nt4FQOGOaXAtvCfDqjqtfVLr6NFG20k7YvIFKj15wjUqdiHAuiU9uQfkuiYzPuO9CPwh97xJ7f/QacL6QB0orYw5ekjZSu+o9BJoVyWp8PbcwMc94ZPXk4ofPfzz0TPSHxDn5RTvFY1oxaqpBzPoioXsCgxZke2B3asdKVW2F/CAJ66yvQhcZROKRk8dKRp2TjbZDhmzGTMoF6dPGRbpltgBnTjKrcAfOL5p+dFGw0loapsbhgprbw0krbUdlZCW9pgxWyuUPmZLantbDaDlPXac0+r84eOcVuWETX7LF2vw5/U+T9jthMjfBuhjNp5TAtFvjB2gbbClMCTfkjsJ+QeyYL63EyAWAObNLZDcgQoy0Ue3QK0Qjwh6G/xStAYoJuPt/UsTGsCC1LzEgOmYmwTAe+KVKJHcxsSIw93VEq2FiJOG24FlWgsTJ3Z3w8qkvT1DSGyKBWhtVJw8sbRNAI4ysYzZEJ7W3SmL8faYGPGqUkXdfRmF07IueYCLCZyXZbXJCjOd/1o3eveuPBSbmusnj0I0lOstv9fltttp7vrnPuNIdgRHVY6D6xXGcMtG70+hP/CwPlzevV+cffpwfX7/7u7zxwuhTzpp+jim1/j18t397eXi/Gx1t0hTIZCMzsPh8VG63GGk7oyZ/mF31cl5Vda1WaD8XIgr+CM3BWWUNrowWZZn/9LIuZhRJsAJKxTgs4wjP/osI/g2oc/Lvk8IXrHpcZ7smk2H98RXbXrc8nWbCc9ejtz8s5fO3gS/fRV4G6pRDS79WVdaF0ml2UNx/NjblRNz9P1KazSI3PU7Msbu+rW345tr/v67PXGIxtbBMNzg9asjL3YF69BX6/fWX1ZVyS4LUPbomI0RCr/upJCs7t+DkQEXKmYpdykGl7YIfG8nQLzrg96i4zLDd+ggNyhm+OWJ8l2H2SmvOcxOeMNhdrrLDbOT3muYnfhKwyztNkP0+sEs+ebBXBfbBnW2M2bYxBveMuwKw0pvDtL5s5GqM2bY5AsRM/YuRLvBQt9TnvmcsvOqMcD61obF2pfou8aIQAiOD26R63FDBQcXJ4+8bYwp+OC4TPx1Y0yJwMfEYu8bI0IBNj6/Kz9wnPC+Mfk+Lsv41oXEgkG/kMsze5h4pgKP2PJKPIUsHHnGFhX14bIg9ZgbquZg41LhU7aSgIVg5kkjj9lK5AEuLkE/ZysJeCiM3n3QNkWiR7Jzv8STtpKEh2Lpw0dtAXYLxJDTz9qK9B6MEwgf75PZLQzzlSOftpXIPZRITzzfBkrYSEaGe95WVCLBcbHwgVtJwUKwtOltqgsS+hs4rewt+swtpMTxMIsw9EO3kqIPkwXSs4VAxmW491wlIRIrLC1RL7pKOiGQ6XTO+FqDX2ny8VWR2wHJneUEZiR7mQdYAf4AKgrNSoYHjItIj7BKWlG8IBl9hhUSDNG83AwNmTj6UqpEHwLjIvRbqZKCh2Log4dNReoJwdKmF1sXxJEHj5vK1CvIa+p5U4Qb8Jt94JTXoKHMmLpkdwXlJbZ1+Kbc3ugXbQ2l/QMXhmmwcintBfPzsqjLXN+U2y2/edXQOcbcMnxn4Y5gaMrJUuC7VYUCXJwsBb7Lwtn8Qi7J94StKbfq7kePIws8C6hudV2rLbgld0izg8EEFrouD9V6lpCHlYNzpUyzagXcf0hqCk9v6nEGr0fdlNvA8wgp7WXAaKabvJykpnwN6WjKTkXX0g2WhoqY6HXnoAepIIQxRh8hknstCc9LNCjeTPdO7ffC5sfeBJ04NF2KpCvmBn4aywQkq6H3Zgb+0ZylNH1KaQFrYuysWcJb3L/g7Rf/Xgv9kMDWWUuE7QAjgbK1Z4vUrdqPm6Gwtx1oBFTgJLHwyxMRQ3zw17V3qmG3T5rfoVSoF10p6TnElq23ZLc0bSut61W5UJtMFcIOiJbUh3ANZWexKi86DMDuQ7gmrn8P6kK/ZN4exyh9gOH4D8LSasfoX27uFXD53GbCgU35RQSL7IRvItis6KsI9LFkntvDINTCcyQxdv5JEuBEaZIU9DBJ7CwpogQcGBGfZ7BZT/VAg80JPtGAHGyxaYFDk+M1Nnx97llHa7Zelw/SG/YlcYV7pF53t717Ixe/z9vzWbZSv3ej9f6srrOt0DT2zJM5+8XQ+/NcvB3ComytBcalVtX66azYjJ9VmD6EJmsBr2+xgtILzcieqV5A3DG11c0wr3+h6/Y1cukNhJ6aRLI9vkv50d2eu7dl2T7lKiuQZxBGTgtxzA6jno/vzJdjtcqkjkrP5yBE5l/0awqtMWc4G2B/eM/X0NvC7bYMfh4z/T1M+AFMl1p44tIZP+DPDLqsLjSc6aAjtOQ3eTmGiRFyqLkIGWpGyB95TKZftXqGE9AbJyYikOASMkgIoj/+9Ff6ZUY7lfv25nwuaZ0FlJ7pGn77HVz/i9wT2sbSJ3myvcnsR5RFamOOkzt7sUTuz5UfFWoKbbL/0OxyR4FqfnoVCsh/JsjQMwouBOR2ow+yh3kQ5UfD42HYGb0qa88QoS9K9AoEjv2wJNLbAPYjs6/KXcaPQHoTbBbE9LmuctWIk1wDq41gu4i59Bb5wNiaMlRa3PQ9MGl+w7fYxRl4+D7OXlUqz3Uub0Yf+GwER1yVe6F3MzIa0yP3eQ9c4jZvcyNEeRC6mwNbb8wW4t8Pmj9Z3Rpgu7vLg3TmqiNrDZlEej7FiQjf3Bamm02/AkYrHZUDYOO20GpzV+Sv2BRvaA1FlBMJeyGEiKTrd6wGe6HXbJklpUPoMdu0UQnf5cq6a5edYnEMIbez+h+mVJh1k419pS9fklydGAdbuCpdbHQlbGgfjcC0nJt4v6u0eq4XPVRKyCBAgtl+w0XW0qnqNV0rxPJSZXNhTgg0c6QCLCv1Qbff2nQdD8iKLLPdPtfpGi6OlfhcZL8fdHvcM12HAAst5e8HXTcfdL7nZ7YdQ6hQX+hHdcibiALVwNgKFJobmUdkyIG5S8qlzBuX12uV64UZxLOV3zKDIrUc7QXHbeIJxO2aaK24QWVAKQ8qv+k8/6UovxVLKhzUzQ22CIV2Fd27xb7vVbHpDn+vyhbD1wZbiwDzc50f9fcmUcNG8eRUNgPssYz2L5bkJ1rQU4Cb7BHaGWH4JtsjZ6MN2QkO73Y0/J4HU61qv7sWI7OtGdKDfAmIYTuQF36kXQ6acCuovHprXwZ6utVbmxVdvUVW4U51dSnPHMJiAmu10/mq/EU/qIdzJV0a2Gv4IKZUrVWtr4u67QFlL/rcv1eAVaGguFZ7blQYYdNSHZKbpKjXaq8Xenv5Xeiq9wI2gOF9NhFdlecmvnBu+CC+cr7uHkp2xrezQHv817ftBX0eK+ltx+th2E7k+fVte/wjld4CyfztZWPpChaM18h2aeSDvc9Kz+Z7yUlNR2f/px/5Jc3vTXXY9Bn284W3o52VoKCs1lWW53OEAhyrcr0e8i5NJcCxKjfqQY9OgQoOhmcf6xBObkFg7pT4BDh+46aun8a7blIKbggUdRIjZUNY7m6lfU6sCCS/TqKapzk6AY5Xydbm6PRUnVAVH4eo3KrqWVdzdGyksLqUFc2sQkYgZaXEYuZgBPb2gzMzJQQWUUtOjYMSFcxlnLMTFIKBKa/kYu3DAI3k/pAPAzRmVJwQyOskcaN8cFGCypB51j7JzwnA8n4p84MpV9Lex5F3ArC8ZnN/85qnlQ4XxPbtV8JbDquURxy4Sc7V8D4Av27SwLfpupaYjxFycsrR419xct5s6cG+ijD0/ODfPBhx97NNE0bU0Hz2qdy5YbXZtOs8n1SldlqcjTKMAYQtnmcPdZkfGv1ZunzRUDvmQr9l/ay2KOtkzZJ261wvKKtlzi6jmzsqU4NModjNIklxdszZ2n84ZOwzueZ3qKhudaHNpSSfD9Jtry2lbc46+E01a/Y0T2sAufjVWJ6rPH9Q6+f4skBH6BiTywLS0LosptXtYTtwtw2Sj0+nH0dzG2ALecPJQC9sNCmLO3EifKC646fBW7MwNairDDx1tqOlStLFVdyHT150Rd8r1/8AFdiAZFpgGmhIuvZBu3/+f4YdtGkwCwMA"
|
|
1
|
+
window.navigationData = "data:application/octet-stream;base64,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"
|