@vertigis/arcgis-extensions 53.18.1 → 54.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/data/Feature.d.ts +7 -3
  2. package/data/Feature.js +1 -1
  3. package/data/FeatureSettings.js +1 -1
  4. package/data/Schema.d.ts +19 -2
  5. package/data/Schema.js +1 -1
  6. package/docs/html/assets/navigation.js +1 -1
  7. package/docs/html/assets/search.js +1 -1
  8. package/docs/html/classes/data_Feature.Feature.html +4 -2
  9. package/docs/html/classes/data_Schema.Schema.html +8 -4
  10. package/docs/html/classes/data__TableExtension.TableSchema.html +8 -4
  11. package/docs/html/classes/mapping_BuildingComponentSublayerExtension.BuildingComponentSublayerSchema.html +8 -4
  12. package/docs/html/classes/mapping_BuildingGroupSublayerExtension.BuildingGroupSublayerSchema.html +8 -4
  13. package/docs/html/classes/mapping_BuildingSceneLayerExtension.BuildingSceneLayerReadOnlySchema.html +8 -4
  14. package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerSchema.html +8 -4
  15. package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerReadOnlySchema.html +11 -5
  16. package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerSchema.html +11 -5
  17. package/docs/html/classes/mapping_MapNotesSublayerExtension.MapNotesSublayerExtensionSchema.html +8 -4
  18. package/docs/html/classes/mapping_RouteLayerExtension.RouteLayerExtensionSchema.html +8 -4
  19. package/docs/html/classes/mapping_StreamLayerExtension.StreamLayerSchema.html +8 -4
  20. package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerExtension.html +4 -4
  21. package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerSchema.html +21 -9
  22. package/docs/html/classes/mapping_SubtypeSublayerExtension.SubtypeSublayerSchema.html +20 -7
  23. package/docs/html/classes/mapping__LayerExtension.LayerExtensionReadOnlySchema.html +8 -4
  24. package/docs/html/classes/mapping__LayerExtension.LayerExtensionSchema.html +8 -4
  25. package/docs/html/classes/mapping__SublayerExtension.SublayerSchema.html +8 -4
  26. package/docs/html/functions/data_Schema.schemaHasSubtypes.html +4 -0
  27. package/docs/html/modules/data_Schema.html +1 -0
  28. package/docs/html/variables/version.version.html +1 -1
  29. package/mapping/FeatureLayerExtension.d.ts +0 -1
  30. package/mapping/FeatureLayerExtension.js +1 -1
  31. package/mapping/FeatureLayerExtensionBase.d.ts +7 -0
  32. package/mapping/FeatureLayerExtensionBase.js +1 -1
  33. package/mapping/SubtypeGroupLayerExtension.d.ts +33 -4
  34. package/mapping/SubtypeGroupLayerExtension.js +1 -1
  35. package/mapping/SubtypeSublayerExtension.d.ts +27 -4
  36. package/mapping/SubtypeSublayerExtension.js +1 -1
  37. package/package.json +1 -1
  38. package/tasks/search/_utilities.js +1 -1
  39. package/tasks/search/support/_querySearchProviderUtils.js +1 -1
  40. package/version.d.ts +1 -1
  41. package/version.js +1 -1
package/data/Feature.d.ts CHANGED
@@ -2,6 +2,7 @@ import Graphic from "@arcgis/core/Graphic";
2
2
  import Collection from "@arcgis/core/core/Collection";
3
3
  import type { GeometryUnion } from "@arcgis/core/geometry/types.js";
4
4
  import type FeatureType from "@arcgis/core/layers/support/FeatureType";
5
+ import type Subtype from "@arcgis/core/layers/support/Subtype.js";
5
6
  import type { EntityBaseProperties } from "../Entity.js";
6
7
  import { EntityBase } from "../Entity.js";
7
8
  import { Hyperlink } from "../Hyperlink.js";
@@ -18,8 +19,7 @@ import type { FeatureSet } from "./FeatureSet.js";
18
19
  import type { FeatureSettingsProperties } from "./FeatureSettings.js";
19
20
  import { FeatureSettings } from "./FeatureSettings.js";
20
21
  import type { FeatureSource } from "./FeatureSource.js";
21
- import type { SchemaProperties } from "./Schema.js";
22
- import { Schema } from "./Schema.js";
22
+ import { type SchemaProperties, Schema } from "./Schema.js";
23
23
  import type { Relationship } from "./_Relationship.js";
24
24
  /**
25
25
  * The name of a special attribute that will be added to search or geocode
@@ -166,7 +166,11 @@ export declare class Feature extends EntityBase<FeatureProperties> {
166
166
  /**
167
167
  * The Esri API FeatureType object that is associated with this feature.
168
168
  */
169
- get type(): FeatureType;
169
+ get type(): FeatureType | undefined;
170
+ /**
171
+ * The Esri API Subtype object that is associated with this feature.
172
+ */
173
+ get subtype(): Subtype | undefined;
170
174
  /**
171
175
  * Indicates whether attachments have been fetched at least once.
172
176
  */
package/data/Feature.js CHANGED
@@ -1 +1 @@
1
- import{__decorate as e}from"tslib";import t from"@arcgis/core/Graphic";import s from"@arcgis/core/core/Collection";import{fromJSON as i}from"@arcgis/core/geometry/support/jsonUtils";import{EntityBase as r}from"../Entity.js";import{Hyperlink as a}from"../Hyperlink.js";import{InvalidOperationError as o}from"../InvalidOperationError.js";import{isLayerExtension as n,isSublayerExtension as l,isTableExtension as h,ItemType as u}from"../ItemType.js";import{handles as p}from"../support/HandlesMixin.js";import{serializable as c}from"../support/Serializable.js";import{createIHandle as m,notifyChange as f,onWatch as d,watch as g,watchEvent as y}from"../support/observableUtils.js";import{CaseInsensitiveObservableMap as _}from"../utilities/CaseInsensitiveObservableMap.js";import{MapTransformCollection as b}from"../utilities/MapTransformCollection.js";import{ObservableMap as x}from"../utilities/ObservableMap.js";import{ReadOnlyMap as F}from"../utilities/ReadOnlyMap.js";import{Time as w}from"../utilities/Time.js";import{flatten as v,groupBy as I}from"../utilities/array.js";import{checkArg as S}from"../utilities/checkArg.js";import{compare as z}from"../utilities/collection.js";import{isCodedValueDomain as A,isGeometry as E}from"../utilities/esri.js";import{getArcadeExpressionFromField as j,getRelationshipFromField as T,isArcadeExpressionField as k}from"../utilities/field.js";import{esriFormatToGeocortexFormat as R,parse as O}from"../utilities/format/date.js";import{NumberFormat as M}from"../utilities/format/formats.js";import{parse as N}from"../utilities/format/number.js";import{format as D}from"../utilities/format/string.js";import{esriFormatToGeocortexFormat as V,parse as U}from"../utilities/format/time.js";import{find as P,map as C}from"../utilities/iterable.js";import{getLogger as G}from"../utilities/log.js";import{map as H}from"../utilities/promise.js";import{caseInsensitiveEquals as L}from"../utilities/string.js";import{FeatureSettings as Z}from"./FeatureSettings.js";import{Schema as $}from"./Schema.js";const K=G("geocortex.api.data.Feature");export const SCORE_FIELD="_score";export const SCORE_FIELD_ORIGINAL="_score_original";let J=class extends r{attributes;get geometry(){return this._geometry}set geometry(e){this._geometry=E(e)||!e?e:i(e),this.schema.spatialReference=this._geometry?.spatialReference,f(this,"geometryType")}settings;schema;attachments;expressionFieldValues;_itemType=u.FEATURE;get geometryType(){return this.geometry?this.geometry.type:void 0}get source(){return this._source}set source(e){this._source===e||null==this._source&&null==e||(this._source&&this.settings.parent===this._source.featureSettings&&(this.settings.parent=void 0),this._source&&this.schema.parent===this._source.schema&&(this.schema.parent=void 0),this._source=e,this.settings.parent||(this.settings.parent=e?e.featureSettings:void 0),this.schema.parent||(this.schema.parent=e?e.schema:void 0),f(this,"attachmentsInitialized"),f(this,"relatedFeaturesInitialized"))}get primaryKey(){const e=this.attributes.get(this.schema.primaryKeyField);return null!=e?`${e}`:void 0}get hasGlobalId(){return!!this.schema.fields.find((e=>"global-id"===e.type))}get globalId(){const e=this.schema.fields.find((e=>"global-id"===e.type));return e?this.attributes.get(e.name):void 0}set globalId(e){const t=this.schema.fields.find((e=>"global-id"===e.type));if(!t)throw new o("Cannot set global ID on feature -- no global ID field.");this.attributes.set(t.name,e)}get presentableAttributes(){return null==this._presentableAttributes&&(this._presentableAttributes=new q(this)),this._presentableAttributes}get title(){return this.format(this._title||"")}get description(){return this.format(this._description)}get hyperlinks(){return this._hyperlinks||(this._hyperlinks=new re(this))}get relatedFeatures(){return this._relatedFeatures}get type(){if(this.schema.typeIdField&&this.attributes.has(this.schema.typeIdField)){const e=this.attributes.get(this.schema.typeIdField);return this.schema.types.find((t=>t.id===e))}}get attachmentsInitialized(){return!this.source||this._attachmentsInitialized}get relatedFeaturesInitialized(){return!this.source||this.source.relationships.every((e=>this._initializedRelationships.has(e)))}get expressionsInitialized(){return!this.settings.popupTemplate?.expressionInfos?.length||this._expressionsInitialized}get _hydrationStatus(){return this._featureHydrationStatus?this._featureHydrationStatus:this.source?.capabilities?.supportsQuery&&1===this.attributes.size&&void 0!==this.primaryKey?"dehydrated":"hydrated"}set _hydrationStatus(e){this._featureHydrationStatus=e}get _key(){return`${this.source?.id}//${this.primaryKey??this.globalId??this.id}`}get _title(){let e;return this.settings.popupTemplate&&(e="function"==typeof this.settings.popupTemplate.title?this.settings.popupTemplate.title():this.settings.popupTemplate.title),e||this.schema.displayField&&this.presentableAttributes.get(this.schema.displayField)||""}get _description(){if(this.settings.popupTemplate?.content){if("string"==typeof this.settings.popupTemplate.content)return this.settings.popupTemplate.content;if(Array.isArray(this.settings.popupTemplate.content)){const e=this.settings.popupTemplate.content.find((e=>"text"===e.type));if(e)return e.text}}return""}_geometry;_source;_presentableAttributes;_hyperlinks;_featureHydrationStatus;_relatedFeatures;_expressionFieldValues=new x;_expressionValuesUpdatePending=!1;_attachmentsInitialized=!1;_expressionsInitialized=!1;_initializedRelationships=new WeakSet;constructor(e){super(e),this.settings=new Z,this.settings._setFeature(this),this.schema=new $,this.schema._featureSettings=this.settings,this.attachments=new s,this.attributes=new _,this._relatedFeatures=new x,this.expressionFieldValues=new W(this._expressionFieldValues,this),this._handles.add([g(this.settings,"popupTemplate",(()=>{this._expressionsInitialized=!1,f(this,"expressionsInitialized")}),{sync:!0}),d(this,"title",(()=>{const e=g(this.settings,"popupTemplate.title",(()=>f(this,"title")),{sync:!0}),t=this.presentableAttributes.on("change",(()=>f(this,"title")));return m([e,t])})),d(this,"description",(()=>{const e=g(this.settings,"popupTemplate.content",(()=>f(this,"description")),{sync:!0}),t=this.presentableAttributes.on("change",(()=>f(this,"description")));return m([e,t])})),d(this,"relatedFeaturesInitialized",(()=>y(this,"source.relationships",["after-changes",()=>{f(this,"relatedFeaturesInitialized")}])))])}format(e,...t){let s="string"==typeof e?{format:e}:e;S("options",s).isNotMissing();const{format:i}=s;S("format",i).isNotMissing();let r=s.format.replace(ee,te);return r=r.replace(X,((e,t,i,r,a)=>oe(this,t||i,r,{...s,format:a?`{0:${a}}`:"{0}"}))),r=r.replace(se,"{{"),s={...s},s.format=r,D(s,...t)}clearExpressionInfos(){this._expressionFieldValues.clear()}toGraphic(){return toGraphic(this)}async fetchExpressionInfos(e=!1){const{expressionInfos:t}=this.settings.popupTemplate??{};if(!t)return;const{runAsyncArcadeExpression:s}=await import("../utilities/arcade.js");if(await Promise.all(t.map((async e=>{try{const t=this.source?.layer??this.source?.sublayer;let i=this.source?.mapExtension;if(!i){const e=this.source?.layerExtension;i=e?.mapExtension}this._expressionFieldValues.set(e.name,await s(e.expression,{layer:t,map:i?.map,feature:this,spatialReference:this.schema.spatialReference}))}catch(t){t instanceof Error&&K.error({message:"Error evaluating expression '{0}': {1}.",error:t},e.name,t.message),this._expressionFieldValues.set(e.name,ie)}}))),e)return this.attributes.on("change",(async e=>{this._expressionValuesUpdatePending||(this._expressionValuesUpdatePending=!0,setTimeout((async()=>{this._expressionValuesUpdatePending=!1,await this.fetchExpressionInfos()}),0))}));this._expressionsInitialized=!0,f(this,"expressionsInitialized")}async fetchRelatedFeatures(e,t){if(!this.source)return;let s=[];if(e){const t=new Set(Array.isArray(e)?e:[e]);for(const e of t){const t="string"==typeof e?this.source.relationships.find((t=>t.id===e)):e;if(!t||!this.source.relationships.includes(t))throw new o("Relationship not found in feature source.");s.push(t)}}else s=this.source.relationships.toArray();const i=await H(s,(async e=>[e,await(async()=>{const s=await e.getRelatedFeatures(this,t);return this._initializedRelationships.add(e),s})()]));for(const e of i)this._relatedFeatures.set(e[0],e[1]);f(this,"relatedFeaturesInitialized")}async fetchAttachments(){if(this.source){const e=await this.source.getAttachments(this);z(this.attachments,e,{equals:(e,t)=>e.id===t.id,onMissing:(e,t)=>{this.attachments.remove(e)},onNew:(e,t)=>{this.attachments.add(e)},onMatch:(e,t,s,i)=>{this.attachments.splice(s,1,t)}}),this._attachmentsInitialized=!0,f(this,"attachmentsInitialized")}}async addAttachment(e){return this.source?.addAttachment(this,e)}async deleteAttachments(e){return this.source?.deleteAttachments(this,e)}_getSerializableProperties(){return{...super._getSerializableProperties(),attributes:{serializeModes:["project"],serialize:e=>{const t={};if("project"===e&&this.primaryKey&&(this.source?.capabilities).supportsQuery)t[this.schema.primaryKeyField]=this.primaryKey;else for(const[e,s]of this.attributes.entries())t[e]=s;return t},deserialize:e=>{if(this.attributes.clear(),e instanceof Map||e instanceof x)e.forEach(((e,t)=>{this.attributes.set(t,e)}));else for(const[t,s]of Object.entries(e))this.attributes.set(t,s)}},geometry:{serializeModes:["project"],serialize:e=>"project"===e&&(this.source?.capabilities).supportsQuery?this.getDefault("geometry"):this.geometry?.toJSON(),deserialize:e=>{E(e)?this.geometry=e:this.geometry=e?i(e):void 0}},settings:{serializeModes:["project"],serialize:e=>"project"===e&&(this.source?.capabilities).supportsQuery?this.getDefault("settings"):this.settings.toJSON(e)},schema:{serializeModes:["project"],serialize:e=>"project"===e&&(this.source?.capabilities).supportsQuery?this.getDefault("schema"):this.schema.toJSON(e)},source:["project"]}}async _onInitialize(){const e=this._findRelationshipIds(this._title,this._description),t=this.source?this.source.relationships.map((e=>e.id)).toArray():[],s=[];for(const i of e)t.includes(i)?s.push(this.fetchRelatedFeatures(i)):K.error("Could not find relationship '{0}' referenced in feature title or description.",i);await Promise.all(s)}_findRelationshipIds(...e){const t=[];for(const s of e){let e;const i=s.replace(ee,te);for(;e=Y.exec(i),null!==e;){const s=e[0];t.includes(s)||t.push(e[1])}}return t}};J=e([c],J);export{J as Feature};export function toFeature(e,t){const s=new J(t);if(e.attributes){const t=e.attributes;for(const[e,i]of Object.entries(t))s.attributes.set(e,i)}return s.geometry=e.geometry,e.popupTemplate&&(s.settings.popupTemplate=e.popupTemplate),s}export function toGraphic(e){const s=new t;s.attributes={};for(const t of e.attributes.keys())s.attributes[t]=e.attributes.get(t);return n(e.source)&&e.source.layer?s.layer=e.source.layer:l(e.source)&&e.source.sublayer&&(s.layer=e.source.sublayer),h(e.source)&&e.source.table&&(s.layer=e.source.table),s.geometry=e.geometry,e.settings.popupTemplate&&(s.popupTemplate=e.settings.popupTemplate),s}const Q="Presentable attributes are read-only.",B="Feature hyperlinks are read-only. Modify the feature's hyperlink templates instead.";class W extends F{_feature;_pending=new Set;constructor(e,t){super(e),this._feature=t}get(e){return super.has(e)||this._calcExpressionValue(e),super.get(e)}async _calcExpressionValue(e){if(!this._pending.has(e)){this._pending.add(e);try{const{spatialReference:t}=this._feature.schema,s=this._feature.settings.popupTemplate?.expressionInfos?.find((t=>t.name===e));if(!s)return;const{isArcadeScriptAsync:i,runAsyncArcadeExpression:r,arcadeScriptUsesGeometry:a,runArcadeExpression:o}=await import("../utilities/arcade.js");try{if(i(s.expression,t)){const i=this._feature.source?.layer??this._feature.source?.sublayer;let a=this._feature.source?.mapExtension;if(!a){const e=this._feature.source?.layerExtension;a=e?.mapExtension}this._originalMap.set(e,await r(s.expression,{feature:this._feature,layer:i,map:a?.map,spatialReference:t}))}else{if(a(s.expression,t)){const{enableGeometrySupport:e}=await import("@arcgis/core/arcade/arcade");await e()}this._originalMap.set(e,o(s.expression,{feature:this._feature,spatialReference:t}))}}catch(t){t instanceof Error&&K.error({message:"Error evaluating expression '{0}': {1}.",error:t},e,t.message),this._originalMap.set(e,ie)}}finally{this._pending.delete(e)}}}}class q extends F{get size(){return this._feature.attributes.size+this._feature.schema.fields._expressionFieldsLength}_feature;_numObservers;_onAllObserversRemoved;constructor(e){super(new _),this._feature=e,this._handles.add([d(this,"size",(()=>g(this._feature.attributes,"size",(()=>f(this,"size")),{sync:!0}))),d(this,"size",(()=>g(this._feature.schema.fields,"_expressionFieldsLength",(()=>f(this,"size")),{sync:!0})))])}destroy(){this._onAllObserversRemoved?.(),this._numObservers=0,super.destroy()}clear(){throw new o(Q)}delete(e){throw new o(Q)}forEach(e,t){S("callback",e).isNotMissing();for(const s of this.keys())e.call(t,this.get(s),s,this)}get(e){const t=this._getFieldExtensionFormat(e);return this._formatAttribute(e,t)}has(e){for(const t of this.keys())if(L(t,e))return!0;return!1}set(...e){throw new o(Q)}*entries(){yield*C(this.keys(),(e=>[e,this.get(e)]))}*keys(){yield*this._feature.attributes.keys();for(const e of this._feature.schema.fields.expressionFields)yield e.name;if(null!=this._feature.source?.relationships)for(const e of this._feature.source.relationships)if("one-to-one"===e.cardinality||"many-to-one"===e.cardinality)for(const t of e.relatedSource.schema.fields)yield`relationships/${e.id}/${t.name}`}*values(){yield*C(this.keys(),(e=>this.get(e)))}[Symbol.iterator](){return this.entries()}toJSON(){return Array.from(this.entries())}on(e,t){if(S("callback",t).isNotMissing(),!this._numObservers){const e=new Map,t=new Set,s=()=>{for(const e of t)e.remove();t.clear()};let i;const r=()=>{const t=()=>{i&&(window.clearTimeout(i),i=void 0)};t(),i=window.setTimeout((()=>{const s=[],i=[];for(const[t,i]of this.entries())i!==e.get(t)&&s.push([t,i]);for(const[t,s]of e.entries())this.has(t)&&s===this.get(t)||i.push([t,s]);if(s.length||i.length){const e={added:s,removed:i,target:this};if(this.hasEventListener("after-add"))for(const e of s)this.emit("after-add",{target:this,item:e});if(this.hasEventListener("after-remove"))for(const e of i)this.emit("after-remove",{target:this,item:e});this.emit("change",e),a()}t()}))},a=()=>{e.clear(),s();for(const s of this.keys()){const i=this._getFieldExtension(s);let a="{0}";if(i){const e=g(i,"format",r);t.add(e),i.format&&(a=i.format)}e.set(s,this._formatAttribute(s,a))}};a();const o=this._feature.attributes.on("change",r),n=this._feature.schema.fieldExtensions.on("change",r),l=[g(this._feature.settings.formatSettings,"numberFormat",r),g(this._feature.settings.formatSettings,"dateFormat",r),g(this._feature.settings.formatSettings,"timeFormat",r),g(this._feature.settings.formatSettings,"locale",r)],h=this._feature.expressionFieldValues.on("change",r),u=this._feature.schema.fields.on("change",(e=>{(e.added?.some((e=>k(e.name)))||e.removed?.some((e=>k(e.name))))&&r()})),p=g(this._feature.settings,"popupTemplate",r);this._onAllObserversRemoved=()=>{h.remove(),o.remove(),n.remove(),u.remove();for(const e of l)e.remove();p.remove(),e.clear(),s()}}const s=super.on(e,t);return this._numObservers++,{remove:()=>{s.remove(),this._numObservers--,this._numObservers||this._onAllObserversRemoved()}}}_getFieldExtension(e){const t=this._feature.schema.findFieldByName(e);if(t)return this._feature.schema.fieldExtensions.forField(t)}_getFieldExtensionFormat(e){const t=this._getFieldExtension(e);return t?t.format:"{0}"}_formatAttribute(e,t){const s=j(e);if(null!=s)return oe(this._feature,"expression",s,{format:t});const[i,r]=T(e);return null!=i?oe(this._feature,i,r,{format:t}):oe(this._feature,void 0,e,{format:t})}}const X=/\{(?:relationships[\\/]([\w-]*)[\\/])?(?:(expression)[\\/])?([_a-zA-ZÀ-ÖØ-öø-ÿ][._a-zA-ZÀ-ÖØ-öø-ÿ0-9()]*)(?::([^}]*))?\}/gi,Y=/\{relationships\/([\w-]*)[\\/]([^}]*)\}/gi,ee=/{{/g,te="\0MAGIC\0",se=new RegExp(te,"g"),ie="#INVALID";class re extends b{_feature;_hyperlinks;constructor(e){super(e.settings.hyperlinkTemplates,(e=>this._getHyperlink(e))),this._feature=e}destroy(){for(const e of this)e.destroy();super.destroy()}_getHyperlink(e){return null==this._hyperlinks&&(this._hyperlinks=new WeakMap),this._hyperlinks.has(e)||this._hyperlinks.set(e,new ae(this._feature,e)),this._hyperlinks.get(e)}}let ae=class extends(p(a)){get url(){return this._template.url?this._feature.format(this._template.url):this._template.url}set url(e){throw new o(B)}get text(){return this._template.text?this._feature.format(this._template.text):this._template.text}set text(e){throw new o(B)}get iconUrl(){return this._template.iconUrl?this._feature.format(this._template.iconUrl):this._template.iconUrl}set iconUrl(e){throw new o(B)}get target(){return this._template.target?this._feature.format(this._template.target):this._template.target}set target(e){throw new o(B)}get tooltip(){return this._template.tooltip?this._feature.format(this._template.tooltip):this._template.tooltip}set tooltip(e){throw new o(B)}_feature;_template;constructor(e,t){super(t.toJSON()),this._feature=e,this._template=t,this._handles.add(d(this,(e=>{const t=g(this._template,e,(()=>f(this,e)),{sync:!0}),s=this._feature.presentableAttributes.on("change",(()=>{f(this,e)})),i=this._feature.relatedFeatures.on("change",(()=>{f(this,e)}));return m([t,s,i])})))}_getSerializableProperties(){return{}}};function oe(e,t,s,i={format:"{0}"}){if(!L(t,"expression")){if(t){const r=P(e.relatedFeatures.keys(),(e=>L(e.id,t)));if(!r)return K.debug("Could not resolve related field '{0}/{1}",t,s),ie;const a=Array.from(e.relatedFeatures.get(r));return"many-to-one"===r.cardinality||"one-to-one"===r.cardinality?a.length<1?(K.debug("Could not resolve related field '{0}/{1}",t,s),ie):ne(a[0],s,i):a.map((e=>ne(e,s,i))).filter((e=>""!==e)).join(",")}return ne(e,s,i)}if(!e.settings.popupTemplate?.expressionInfos?.find((e=>L(e.name,s))))return K.debug("Could not find expression '{0}'.",s),ie;try{const t=e.expressionFieldValues.get(s)??i.defaultExpressionValue??"",r=e.schema.findFieldByName(`expression/${s}`),a=null==r?void 0:e.schema.fieldExtensions.forField(r);return le(e,t,s,a?.formatSettings,i)}catch(e){if(e instanceof Error)return K.error({message:"Error evaluating expression '{0}': {1}.",error:e},s,e.message),ie;throw e}}function ne(e,t,s){let i;if(i=e.attributes.get(t),null==i)return"";const r=e.schema.findFieldByName(t),a=e.type?.domains?.[r?.name??t],o=e=>e.codedValues?.find((e=>e.code.toString()===i.toString()))?.name??i;let n;if(L(t,e.schema.typeIdField)){const t=a&&"inherited"!==a.type?a:r?.domain;i="coded-value"===t?.type?o(t):e.type?.name??i}else if(a&&A(a))i=o(a);else if(r?.domain&&A(r.domain))i=o(r.domain);else if(r){switch(r.type){case"integer":case"small-integer":case"big-integer":case"single":case"double":i=N(i);break;case"date":i=O({timeZone:e.schema.timeZone},i);break;case"timestamp-offset":case"date-only":i=O({},i),"date-only"===r.type&&(s.isDateOnly=!0);break;case"time-only":i=U(i);break;default:i=`${i.toString()}`}const t=e.schema.fieldExtensions.forField(r);t&&(n=t.formatSettings)}return le(e,i,t,n,s)}function le(e,t,s,i,r){if("string"==typeof t&&(null==r.format||"{0}"===r.format))return t;const a={...r};if("number"==typeof t||t instanceof Date||t instanceof w){null==a.locale&&(a.locale=i?.locale??e.settings.formatSettings.locale);const r=e.settings.popupTemplate?.fieldInfos?.find((e=>L(e.fieldName,s)))?.format;"number"==typeof t?function(e,t,s,i){null==e.currency&&(e.currency=t?.currency??i.settings.formatSettings.currency);null==e.numberFormat&&(e.numberFormat=t?.numberFormat,null==e.numberFormat&&(e.numberFormat=null==s?i.settings.formatSettings.numberFormat:s.digitSeparator?M.NUMBER:M.FIXED_POINT));null==e.fractionalDigits&&(e.fractionalDigits=t?.fractionalDigits,null==e.fractionalDigits&&(e.fractionalDigits=null==s?i.settings.formatSettings.fractionalDigits:s.places))}(a,i,r,e):t instanceof Date?function(e,t,s,i){null==e.dateFormat&&(e.dateFormat=t?.dateFormat,null==e.dateFormat&&(e.dateFormat=null==s?i.settings.formatSettings.dateFormat:R(s.dateFormat)));null==e.timeZone&&(e.timeZone=t?.timeZone??i.settings.formatSettings.timeZone)}(a,i,r,e):function(e,t,s,i){null==e.timeFormat&&(e.timeFormat=t?.timeFormat,null==e.timeFormat&&(e.timeFormat=null==s?i.settings.formatSettings.timeFormat:V(s.dateFormat)))}(a,i,r,e)}return D(a,t)}ae=e([c],ae);export async function resolveRelatedFeatures(e){const t=I(e,(e=>e.source));await Promise.all(v([...t.keys()].map((e=>e.relationships.toArray()))).map((e=>(async e=>{[...(await e.getAllRelatedFeatures(t.get(e.source))).entries()].forEach((([t,s])=>{t.relatedFeatures.set(e,s)}))})(e))))}
1
+ import{__decorate as e}from"tslib";import t from"@arcgis/core/Graphic";import s from"@arcgis/core/core/Collection";import{fromJSON as i}from"@arcgis/core/geometry/support/jsonUtils";import{EntityBase as r}from"../Entity.js";import{Hyperlink as a}from"../Hyperlink.js";import{InvalidOperationError as o}from"../InvalidOperationError.js";import{isLayerExtension as n,isSublayerExtension as l,isTableExtension as h,ItemType as u}from"../ItemType.js";import{handles as c}from"../support/HandlesMixin.js";import{serializable as p}from"../support/Serializable.js";import{createIHandle as m,notifyChange as f,onWatch as d,watch as g,watchEvent as y}from"../support/observableUtils.js";import{CaseInsensitiveObservableMap as _}from"../utilities/CaseInsensitiveObservableMap.js";import{MapTransformCollection as b}from"../utilities/MapTransformCollection.js";import{ObservableMap as F}from"../utilities/ObservableMap.js";import{ReadOnlyMap as x}from"../utilities/ReadOnlyMap.js";import{Time as w}from"../utilities/Time.js";import{flatten as v,groupBy as I}from"../utilities/array.js";import{checkArg as S}from"../utilities/checkArg.js";import{compare as A}from"../utilities/collection.js";import{isCodedValueDomain as z,isGeometry as E}from"../utilities/esri.js";import{getArcadeExpressionFromField as j,getRelationshipFromField as T,isArcadeExpressionField as k}from"../utilities/field.js";import{esriFormatToGeocortexFormat as R,parse as O}from"../utilities/format/date.js";import{NumberFormat as M}from"../utilities/format/formats.js";import{parse as N}from"../utilities/format/number.js";import{format as D}from"../utilities/format/string.js";import{esriFormatToGeocortexFormat as V,parse as U}from"../utilities/format/time.js";import{find as P,map as C}from"../utilities/iterable.js";import{getLogger as G}from"../utilities/log.js";import{map as H}from"../utilities/promise.js";import{caseInsensitiveEquals as L}from"../utilities/string.js";import{FeatureSettings as Z}from"./FeatureSettings.js";import{Schema as $}from"./Schema.js";const K=G("geocortex.api.data.Feature");export const SCORE_FIELD="_score";export const SCORE_FIELD_ORIGINAL="_score_original";let J=class extends r{attributes;get geometry(){return this._geometry}set geometry(e){this._geometry=E(e)||!e?e:i(e),this.schema.spatialReference=this._geometry?.spatialReference,f(this,"geometryType")}settings;schema;attachments;expressionFieldValues;_itemType=u.FEATURE;get geometryType(){return this.geometry?this.geometry.type:void 0}get source(){return this._source}set source(e){this._source===e||null==this._source&&null==e||(this._source&&this.settings.parent===this._source.featureSettings&&(this.settings.parent=void 0),this._source&&this.schema.parent===this._source.schema&&(this.schema.parent=void 0),this._source=e,this.settings.parent||(this.settings.parent=e?e.featureSettings:void 0),this.schema.parent||(this.schema.parent=e?e.schema:void 0),f(this,"attachmentsInitialized"),f(this,"relatedFeaturesInitialized"))}get primaryKey(){const e=this.attributes.get(this.schema.primaryKeyField);return null!=e?`${e}`:void 0}get hasGlobalId(){return!!this.schema.fields.find((e=>"global-id"===e.type))}get globalId(){const e=this.schema.fields.find((e=>"global-id"===e.type));return e?this.attributes.get(e.name):void 0}set globalId(e){const t=this.schema.fields.find((e=>"global-id"===e.type));if(!t)throw new o("Cannot set global ID on feature -- no global ID field.");this.attributes.set(t.name,e)}get presentableAttributes(){return null==this._presentableAttributes&&(this._presentableAttributes=new q(this)),this._presentableAttributes}get title(){return this.format(this._title||"")}get description(){return this.format(this._description)}get hyperlinks(){return this._hyperlinks||(this._hyperlinks=new re(this))}get relatedFeatures(){return this._relatedFeatures}get type(){if(this.schema.typeIdField&&this.attributes.has(this.schema.typeIdField)){const e=this.attributes.get(this.schema.typeIdField);return this.schema.types.find((t=>t.id===e))}}get subtype(){if(this.schema.subtypeField&&this.attributes.has(this.schema.subtypeField)){const e=this.attributes.get(this.schema.subtypeField);return this.schema.subtypes.find((t=>t.code===e))}}get attachmentsInitialized(){return!this.source||this._attachmentsInitialized}get relatedFeaturesInitialized(){return!this.source||this.source.relationships.every((e=>this._initializedRelationships.has(e)))}get expressionsInitialized(){return!this.settings.popupTemplate?.expressionInfos?.length||this._expressionsInitialized}get _hydrationStatus(){return this._featureHydrationStatus?this._featureHydrationStatus:this.source?.capabilities?.supportsQuery&&1===this.attributes.size&&void 0!==this.primaryKey?"dehydrated":"hydrated"}set _hydrationStatus(e){this._featureHydrationStatus=e}get _key(){return`${this.source?.id}//${this.primaryKey??this.globalId??this.id}`}get _title(){let e;return this.settings.popupTemplate&&(e="function"==typeof this.settings.popupTemplate.title?this.settings.popupTemplate.title():this.settings.popupTemplate.title),e||this.schema.displayField&&this.presentableAttributes.get(this.schema.displayField)||""}get _description(){if(this.settings.popupTemplate?.content){if("string"==typeof this.settings.popupTemplate.content)return this.settings.popupTemplate.content;if(Array.isArray(this.settings.popupTemplate.content)){const e=this.settings.popupTemplate.content.find((e=>"text"===e.type));if(e)return e.text}}return""}_geometry;_source;_presentableAttributes;_hyperlinks;_featureHydrationStatus;_relatedFeatures;_expressionFieldValues=new F;_expressionValuesUpdatePending=!1;_attachmentsInitialized=!1;_expressionsInitialized=!1;_initializedRelationships=new WeakSet;constructor(e){super(e),this.settings=new Z,this.settings._setFeature(this),this.schema=new $,this.schema._featureSettings=this.settings,this.attachments=new s,this.attributes=new _,this._relatedFeatures=new F,this.expressionFieldValues=new W(this._expressionFieldValues,this),this._handles.add([g(this.settings,"popupTemplate",(()=>{this._expressionsInitialized=!1,f(this,"expressionsInitialized")}),{sync:!0}),d(this,"title",(()=>{const e=g(this.settings,"popupTemplate.title",(()=>f(this,"title")),{sync:!0}),t=this.presentableAttributes.on("change",(()=>f(this,"title")));return m([e,t])})),d(this,"description",(()=>{const e=g(this.settings,"popupTemplate.content",(()=>f(this,"description")),{sync:!0}),t=this.presentableAttributes.on("change",(()=>f(this,"description")));return m([e,t])})),d(this,"relatedFeaturesInitialized",(()=>y(this,"source.relationships",["after-changes",()=>{f(this,"relatedFeaturesInitialized")}])))])}format(e,...t){let s="string"==typeof e?{format:e}:e;S("options",s).isNotMissing();const{format:i}=s;S("format",i).isNotMissing();let r=s.format.replace(ee,te);return r=r.replace(X,((e,t,i,r,a)=>oe(this,t||i,r,{...s,format:a?`{0:${a}}`:"{0}"}))),r=r.replace(se,"{{"),s={...s},s.format=r,D(s,...t)}clearExpressionInfos(){this._expressionFieldValues.clear()}toGraphic(){return toGraphic(this)}async fetchExpressionInfos(e=!1){const{expressionInfos:t}=this.settings.popupTemplate??{};if(!t)return;const{runAsyncArcadeExpression:s}=await import("../utilities/arcade.js");if(await Promise.all(t.map((async e=>{try{const t=this.source?.layer??this.source?.sublayer;let i=this.source?.mapExtension;if(!i){const e=this.source?.layerExtension;i=e?.mapExtension}this._expressionFieldValues.set(e.name,await s(e.expression,{layer:t,map:i?.map,feature:this,spatialReference:this.schema.spatialReference}))}catch(t){t instanceof Error&&K.error({message:"Error evaluating expression '{0}': {1}.",error:t},e.name,t.message),this._expressionFieldValues.set(e.name,ie)}}))),e)return this.attributes.on("change",(async e=>{this._expressionValuesUpdatePending||(this._expressionValuesUpdatePending=!0,setTimeout((async()=>{this._expressionValuesUpdatePending=!1,await this.fetchExpressionInfos()}),0))}));this._expressionsInitialized=!0,f(this,"expressionsInitialized")}async fetchRelatedFeatures(e,t){if(!this.source)return;let s=[];if(e){const t=new Set(Array.isArray(e)?e:[e]);for(const e of t){const t="string"==typeof e?this.source.relationships.find((t=>t.id===e)):e;if(!t||!this.source.relationships.includes(t))throw new o("Relationship not found in feature source.");s.push(t)}}else s=this.source.relationships.toArray();const i=await H(s,(async e=>[e,await(async()=>{const s=await e.getRelatedFeatures(this,t);return this._initializedRelationships.add(e),s})()]));for(const e of i)this._relatedFeatures.set(e[0],e[1]);f(this,"relatedFeaturesInitialized")}async fetchAttachments(){if(this.source){const e=await this.source.getAttachments(this);A(this.attachments,e,{equals:(e,t)=>e.id===t.id,onMissing:(e,t)=>{this.attachments.remove(e)},onNew:(e,t)=>{this.attachments.add(e)},onMatch:(e,t,s,i)=>{this.attachments.splice(s,1,t)}}),this._attachmentsInitialized=!0,f(this,"attachmentsInitialized")}}async addAttachment(e){return this.source?.addAttachment(this,e)}async deleteAttachments(e){return this.source?.deleteAttachments(this,e)}_getSerializableProperties(){return{...super._getSerializableProperties(),attributes:{serializeModes:["project"],serialize:e=>{const t={};if("project"===e&&this.primaryKey&&(this.source?.capabilities).supportsQuery)t[this.schema.primaryKeyField]=this.primaryKey;else for(const[e,s]of this.attributes.entries())t[e]=s;return t},deserialize:e=>{if(this.attributes.clear(),e instanceof Map||e instanceof F)e.forEach(((e,t)=>{this.attributes.set(t,e)}));else for(const[t,s]of Object.entries(e))this.attributes.set(t,s)}},geometry:{serializeModes:["project"],serialize:e=>"project"===e&&(this.source?.capabilities).supportsQuery?this.getDefault("geometry"):this.geometry?.toJSON(),deserialize:e=>{E(e)?this.geometry=e:this.geometry=e?i(e):void 0}},settings:{serializeModes:["project"],serialize:e=>"project"===e&&(this.source?.capabilities).supportsQuery?this.getDefault("settings"):this.settings.toJSON(e)},schema:{serializeModes:["project"],serialize:e=>"project"===e&&(this.source?.capabilities).supportsQuery?this.getDefault("schema"):this.schema.toJSON(e)},source:["project"]}}async _onInitialize(){const e=this._findRelationshipIds(this._title,this._description),t=this.source?this.source.relationships.map((e=>e.id)).toArray():[],s=[];for(const i of e)t.includes(i)?s.push(this.fetchRelatedFeatures(i)):K.error("Could not find relationship '{0}' referenced in feature title or description.",i);await Promise.all(s)}_findRelationshipIds(...e){const t=[];for(const s of e){let e;const i=s.replace(ee,te);for(;e=Y.exec(i),null!==e;){const s=e[0];t.includes(s)||t.push(e[1])}}return t}};J=e([p],J);export{J as Feature};export function toFeature(e,t){const s=new J(t);if(e.attributes){const t=e.attributes;for(const[e,i]of Object.entries(t))s.attributes.set(e,i)}return s.geometry=e.geometry,e.popupTemplate&&(s.settings.popupTemplate=e.popupTemplate),s}export function toGraphic(e){const s=new t;s.attributes={};for(const t of e.attributes.keys())s.attributes[t]=e.attributes.get(t);return n(e.source)&&e.source.layer?s.layer=e.source.layer:l(e.source)&&e.source.sublayer&&(s.layer=e.source.sublayer),h(e.source)&&e.source.table&&(s.layer=e.source.table),s.geometry=e.geometry,e.settings.popupTemplate&&(s.popupTemplate=e.settings.popupTemplate),s}const Q="Presentable attributes are read-only.",B="Feature hyperlinks are read-only. Modify the feature's hyperlink templates instead.";class W extends x{_feature;_pending=new Set;constructor(e,t){super(e),this._feature=t}get(e){return super.has(e)||this._calcExpressionValue(e),super.get(e)}async _calcExpressionValue(e){if(!this._pending.has(e)){this._pending.add(e);try{const{spatialReference:t}=this._feature.schema,s=this._feature.settings.popupTemplate?.expressionInfos?.find((t=>t.name===e));if(!s)return;const{isArcadeScriptAsync:i,runAsyncArcadeExpression:r,arcadeScriptUsesGeometry:a,runArcadeExpression:o}=await import("../utilities/arcade.js");try{if(i(s.expression,t)){const i=this._feature.source?.layer??this._feature.source?.sublayer;let a=this._feature.source?.mapExtension;if(!a){const e=this._feature.source?.layerExtension;a=e?.mapExtension}this._originalMap.set(e,await r(s.expression,{feature:this._feature,layer:i,map:a?.map,spatialReference:t}))}else{if(a(s.expression,t)){const{enableGeometrySupport:e}=await import("@arcgis/core/arcade/arcade");await e()}this._originalMap.set(e,o(s.expression,{feature:this._feature,spatialReference:t}))}}catch(t){t instanceof Error&&K.error({message:"Error evaluating expression '{0}': {1}.",error:t},e,t.message),this._originalMap.set(e,ie)}}finally{this._pending.delete(e)}}}}class q extends x{get size(){return this._feature.attributes.size+this._feature.schema.fields._expressionFieldsLength}_feature;_numObservers;_onAllObserversRemoved;constructor(e){super(new _),this._feature=e,this._handles.add([d(this,"size",(()=>g(this._feature.attributes,"size",(()=>f(this,"size")),{sync:!0}))),d(this,"size",(()=>g(this._feature.schema.fields,"_expressionFieldsLength",(()=>f(this,"size")),{sync:!0})))])}destroy(){this._onAllObserversRemoved?.(),this._numObservers=0,super.destroy()}clear(){throw new o(Q)}delete(e){throw new o(Q)}forEach(e,t){S("callback",e).isNotMissing();for(const s of this.keys())e.call(t,this.get(s),s,this)}get(e){const t=this._getFieldExtensionFormat(e);return this._formatAttribute(e,t)}has(e){for(const t of this.keys())if(L(t,e))return!0;return!1}set(...e){throw new o(Q)}*entries(){yield*C(this.keys(),(e=>[e,this.get(e)]))}*keys(){yield*this._feature.attributes.keys();for(const e of this._feature.schema.fields.expressionFields)yield e.name;if(null!=this._feature.source?.relationships)for(const e of this._feature.source.relationships)if("one-to-one"===e.cardinality||"many-to-one"===e.cardinality)for(const t of e.relatedSource.schema.fields)yield`relationships/${e.id}/${t.name}`}*values(){yield*C(this.keys(),(e=>this.get(e)))}[Symbol.iterator](){return this.entries()}toJSON(){return Array.from(this.entries())}on(e,t){if(S("callback",t).isNotMissing(),!this._numObservers){const e=new Map,t=new Set,s=()=>{for(const e of t)e.remove();t.clear()};let i;const r=()=>{const t=()=>{i&&(window.clearTimeout(i),i=void 0)};t(),i=window.setTimeout((()=>{const s=[],i=[];for(const[t,i]of this.entries())i!==e.get(t)&&s.push([t,i]);for(const[t,s]of e.entries())this.has(t)&&s===this.get(t)||i.push([t,s]);if(s.length||i.length){const e={added:s,removed:i,target:this};if(this.hasEventListener("after-add"))for(const e of s)this.emit("after-add",{target:this,item:e});if(this.hasEventListener("after-remove"))for(const e of i)this.emit("after-remove",{target:this,item:e});this.emit("change",e),a()}t()}))},a=()=>{e.clear(),s();for(const s of this.keys()){const i=this._getFieldExtension(s);let a="{0}";if(i){const e=g(i,"format",r);t.add(e),i.format&&(a=i.format)}e.set(s,this._formatAttribute(s,a))}};a();const o=this._feature.attributes.on("change",r),n=this._feature.schema.fieldExtensions.on("change",r),l=[g(this._feature.settings.formatSettings,"numberFormat",r),g(this._feature.settings.formatSettings,"dateFormat",r),g(this._feature.settings.formatSettings,"timeFormat",r),g(this._feature.settings.formatSettings,"locale",r)],h=this._feature.expressionFieldValues.on("change",r),u=this._feature.schema.fields.on("change",(e=>{(e.added?.some((e=>k(e.name)))||e.removed?.some((e=>k(e.name))))&&r()})),c=g(this._feature.settings,"popupTemplate",r);this._onAllObserversRemoved=()=>{h.remove(),o.remove(),n.remove(),u.remove();for(const e of l)e.remove();c.remove(),e.clear(),s()}}const s=super.on(e,t);return this._numObservers++,{remove:()=>{s.remove(),this._numObservers--,this._numObservers||this._onAllObserversRemoved()}}}_getFieldExtension(e){const t=this._feature.schema.findFieldByName(e);if(t)return this._feature.schema.fieldExtensions.forField(t)}_getFieldExtensionFormat(e){const t=this._getFieldExtension(e);return t?t.format:"{0}"}_formatAttribute(e,t){const s=j(e);if(null!=s)return oe(this._feature,"expression",s,{format:t});const[i,r]=T(e);return null!=i?oe(this._feature,i,r,{format:t}):oe(this._feature,void 0,e,{format:t})}}const X=/\{(?:relationships[\\/]([\w-]*)[\\/])?(?:(expression)[\\/])?([_a-zA-ZÀ-ÖØ-öø-ÿ][._a-zA-ZÀ-ÖØ-öø-ÿ0-9()]*)(?::([^}]*))?\}/gi,Y=/\{relationships\/([\w-]*)[\\/]([^}]*)\}/gi,ee=/{{/g,te="\0MAGIC\0",se=new RegExp(te,"g"),ie="#INVALID";class re extends b{_feature;_hyperlinks;constructor(e){super(e.settings.hyperlinkTemplates,(e=>this._getHyperlink(e))),this._feature=e}destroy(){for(const e of this)e.destroy();super.destroy()}_getHyperlink(e){return null==this._hyperlinks&&(this._hyperlinks=new WeakMap),this._hyperlinks.has(e)||this._hyperlinks.set(e,new ae(this._feature,e)),this._hyperlinks.get(e)}}let ae=class extends(c(a)){get url(){return this._template.url?this._feature.format(this._template.url):this._template.url}set url(e){throw new o(B)}get text(){return this._template.text?this._feature.format(this._template.text):this._template.text}set text(e){throw new o(B)}get iconUrl(){return this._template.iconUrl?this._feature.format(this._template.iconUrl):this._template.iconUrl}set iconUrl(e){throw new o(B)}get target(){return this._template.target?this._feature.format(this._template.target):this._template.target}set target(e){throw new o(B)}get tooltip(){return this._template.tooltip?this._feature.format(this._template.tooltip):this._template.tooltip}set tooltip(e){throw new o(B)}_feature;_template;constructor(e,t){super(t.toJSON()),this._feature=e,this._template=t,this._handles.add(d(this,(e=>{const t=g(this._template,e,(()=>f(this,e)),{sync:!0}),s=this._feature.presentableAttributes.on("change",(()=>{f(this,e)})),i=this._feature.relatedFeatures.on("change",(()=>{f(this,e)}));return m([t,s,i])})))}_getSerializableProperties(){return{}}};function oe(e,t,s,i={format:"{0}"}){if(!L(t,"expression")){if(t){const r=P(e.relatedFeatures.keys(),(e=>L(e.id,t)));if(!r)return K.debug("Could not resolve related field '{0}/{1}",t,s),ie;const a=Array.from(e.relatedFeatures.get(r));return"many-to-one"===r.cardinality||"one-to-one"===r.cardinality?a.length<1?(K.debug("Could not resolve related field '{0}/{1}",t,s),ie):ne(a[0],s,i):a.map((e=>ne(e,s,i))).filter((e=>""!==e)).join(",")}return ne(e,s,i)}if(!e.settings.popupTemplate?.expressionInfos?.find((e=>L(e.name,s))))return K.debug("Could not find expression '{0}'.",s),ie;try{const t=e.expressionFieldValues.get(s)??i.defaultExpressionValue??"",r=e.schema.findFieldByName(`expression/${s}`),a=null==r?void 0:e.schema.fieldExtensions.forField(r);return le(e,t,s,a?.formatSettings,i)}catch(e){if(e instanceof Error)return K.error({message:"Error evaluating expression '{0}': {1}.",error:e},s,e.message),ie;throw e}}function ne(e,t,s){let i;if(i=e.attributes.get(t),null==i)return"";const r=e.schema.findFieldByName(t);let a,o;if(void 0===e.schema.subtypeField){a=e.schema.typeIdField;const t=e.schema.types;o=t.filter((t=>t?.id?.toString()===e.type?.id?.toString()))?.getItemAt(0)}else{a=e.schema.subtypeField;const t=e.schema.subtypes;o=t.filter((t=>t?.code?.toString()===e.subtype?.code?.toString()))?.getItemAt(0)}const n=o?.domains?.[r?.name??t],l=e=>e.codedValues?.find((e=>e.code.toString()===i.toString()))?.name??i;let h;if(L(t,a)){const e=n&&"inherited"!==n.type?n:r?.domain;i="coded-value"===e?.type?l(e):o?.name??i}else if(n&&z(n))i=l(n);else if(r?.domain&&z(r.domain))i=l(r.domain);else if(r){switch(r.type){case"integer":case"small-integer":case"big-integer":case"single":case"double":i=N(i);break;case"date":i=O({timeZone:e.schema.timeZone},i);break;case"timestamp-offset":case"date-only":i=O({},i),"date-only"===r.type&&(s.isDateOnly=!0);break;case"time-only":i=U(i);break;default:i=`${i.toString()}`}const t=e.schema.fieldExtensions.forField(r);t&&(h=t.formatSettings)}return le(e,i,t,h,s)}function le(e,t,s,i,r){if("string"==typeof t&&(null==r.format||"{0}"===r.format))return t;const a={...r};if("number"==typeof t||t instanceof Date||t instanceof w){null==a.locale&&(a.locale=i?.locale??e.settings.formatSettings.locale);const r=e.settings.popupTemplate?.fieldInfos?.find((e=>L(e.fieldName,s)))?.format;"number"==typeof t?function(e,t,s,i){null==e.currency&&(e.currency=t?.currency??i.settings.formatSettings.currency);null==e.numberFormat&&(e.numberFormat=t?.numberFormat,null==e.numberFormat&&(e.numberFormat=null==s?i.settings.formatSettings.numberFormat:s.digitSeparator?M.NUMBER:M.FIXED_POINT));null==e.fractionalDigits&&(e.fractionalDigits=t?.fractionalDigits,null==e.fractionalDigits&&(e.fractionalDigits=null==s?i.settings.formatSettings.fractionalDigits:s.places))}(a,i,r,e):t instanceof Date?function(e,t,s,i){null==e.dateFormat&&(e.dateFormat=t?.dateFormat,null==e.dateFormat&&(e.dateFormat=null==s?i.settings.formatSettings.dateFormat:R(s.dateFormat)));null==e.timeZone&&(e.timeZone=t?.timeZone??i.settings.formatSettings.timeZone)}(a,i,r,e):function(e,t,s,i){null==e.timeFormat&&(e.timeFormat=t?.timeFormat,null==e.timeFormat&&(e.timeFormat=null==s?i.settings.formatSettings.timeFormat:V(s.dateFormat)))}(a,i,r,e)}return D(a,t)}ae=e([p],ae);export async function resolveRelatedFeatures(e){const t=I(e,(e=>e.source));await Promise.all(v([...t.keys()].map((e=>e.relationships.toArray()))).map((e=>(async e=>{[...(await e.getAllRelatedFeatures(t.get(e.source))).entries()].forEach((([t,s])=>{t.relatedFeatures.set(e,s)}))})(e))))}
@@ -1 +1 @@
1
- import{__decorate as e}from"tslib";import t from"@arcgis/core/PopupTemplate";import{Hyperlink as n}from"../Hyperlink.js";import{isPopupContentExtension as o}from"../ItemType.js";import{ArrayWrappedCollection as i}from"../mapping/support/ArrayWrappedCollection.js";import{FormatSettings as s}from"../support/FormatSettings.js";import{InitializableCollectionProxy as r}from"../support/InitializableCollectionProxy.js";import{filterJSONProperties as p,isDefault as a,serializable as u,shouldExcludeDefaults as h}from"../support/Serializable.js";import{Settings as l}from"../support/Settings.js";import{createIHandle as d,notifyChange as f,onWatch as m,watch as c}from"../support/observableUtils.js";import _ from"../utilities/_ReferenceCountedHandle.js";import{compare as g}from"../utilities/array.js";import{checkArg as C}from"../utilities/checkArg.js";import{getAllFieldInfos as S,getAllReferencedFieldNames as y,isPopupTemplate as v}from"../utilities/esri.js";import{isArcadeExpressionField as P,isRelationshipField as A}from"../utilities/field.js";import{objectKeys as x}from"../utilities/object.js";import{isQueryBasedRelationship as E}from"../utilities/relationships.js";import{PopupContentExtension as T,_popupContentExtensionMap as z}from"./PopupContentExtension.js";let w=class extends l{popupContentExtensions;_isDefaultPopupTemplate=!1;_popupContentCollection;get _popupContent(){return null==this._popupContentCollection&&(this._popupContentCollection=this._createPopupContentCollection()),this._popupContentCollection}get hyperlinkTemplates(){return this._getCollectionSetting("hyperlinkTemplates")}get popupTemplate(){return this._getSetting("popupTemplate")}set popupTemplate(e){let n;n=e instanceof Object&&!v(e)?t.fromJSON(e):e;const o=this?._feature?.schema?.createPopupTemplate()??this?._featureSource?.schema?.createPopupTemplate();n&&o&&(n.content=n.content??o.content,n.fieldInfos=n.fieldInfos??o.fieldInfos),this._setSetting("popupTemplate",n),this._isDefaultPopupTemplate=!1,this.featureSource?.schema?.fieldExtensions.toArray().forEach((e=>{e._clearFieldInfoCache()}))}get showRelatedRecordsWhenUnconfigured(){return this._getSetting("showRelatedRecordsWhenUnconfigured",!0)}set showRelatedRecordsWhenUnconfigured(e){this._setSetting("showRelatedRecordsWhenUnconfigured",e)}get formatSettings(){return this._getNestedSettings("formatSettings",(()=>new s))}get returnGeometry(){return this._getSetting("returnGeometry",!0)}set returnGeometry(e){this._setSetting("returnGeometry",e)}get outFields(){return this._getSetting("outFields",this._defaultOutFields)}set outFields(e){this._setSetting("outFields",e)}get outSpatialReference(){return this._getSetting("outSpatialReference")}set outSpatialReference(e){this._setSetting("outSpatialReference",e)}get maxAllowableOffset(){return this._getSetting("maxAllowableOffset")}set maxAllowableOffset(e){this._setSetting("maxAllowableOffset",e)}get zoomScale(){return this._getSetting("zoomScale")}set zoomScale(e){this._setSetting("zoomScale",e)}get zoomFactor(){const e=this._feature?this._feature.schema:this._featureSource?.schema,t=e&&"point"===e.geometryType?void 0:1.5;return this._getSetting("zoomFactor",t)}set zoomFactor(e){this._setSetting("zoomFactor",e)}get featureSource(){return this._featureSource}get feature(){return this._feature}_featureSource;_feature;constructor(e){super(e),this.popupContentExtensions=new b(this)}destroy(){this.parent=void 0,this.popupContentExtensions.destroy(),this._popupContentCollection?.destroy(),super.destroy()}get _defaultOutFields(){if(null==this.popupTemplate)return["*"];const e=S(this.popupTemplate),t=this.featureSource?.schema?.primaryKeyField;if(!e||!t)return["*"];const n=new Set([t]),o=new Map;this.featureSource.schema.fields.forEach((e=>{o.set(e.name.toLowerCase(),e.name)}));const i=new Set([...y(this.popupTemplate),...this.hyperlinkTemplates.toArray().flatMap((e=>e.getReferencedFields()))]);this._featureSource.relationships.forEach((e=>{E(e)&&i.add(e.keyField)}));const s=this.featureSource?.schema?.typeIdField;s&&i.add(s);const r=e.reduce(((e,t)=>((t.visible||t.isEditable&&this.featureSource.capabilities.supportsEditing)&&e.push(t.fieldName),e)),[]),p=new Set([...r,...i]);for(const e of p){if(P(e)||A(e))continue;const t=o.get(e.toLowerCase());t&&n.add(t)}return Array.from(n)}_setFeatureSource(e){this._featureSource=e,f(this,"featureSource")}_setFeature(e){this._feature=e,f(this,"feature")}toJSON(e="all"){const t=p(this._getSerializableProperties(),this,e)||{},n=t.popupContentExtensions?.filter((e=>{const t=this.parent;return!t?.popupContentExtensions?.some((t=>t.id===e.id))}));if(t)for(const e of x(t))this.isModified(e)||delete t[e];if(n?.length&&(t.popupContentExtensions=n),!h(e)||!a(t))return t}_hasSettingIncludingAncestor(e){return"outFields"===e||super._hasSettingIncludingAncestor(e)}_createPopupContentCollection(){return new i({parent:this,targetProperty:"popupTemplate",arrayProperty:"content"})}_getSerializableProperties(){return{hyperlinkTemplates:{serializeModes:["initial"],deserialize:e=>{e.forEach((e=>{this.hyperlinkTemplates.find((t=>this._hyperlinksAreEquivalent(t,e)))||this.hyperlinkTemplates.add(e instanceof n?e:new n(e))})),this.hyperlinkTemplates.toArray().forEach((t=>{const n=this.hyperlinkTemplates.indexOf(t),o=e.findIndex((e=>this._hyperlinksAreEquivalent(e,t)));o<0?this.hyperlinkTemplates.removeAt(n):o!==n&&this.hyperlinkTemplates.reorder(t,o)}))}},popupTemplate:{serializeModes:["project"],isDefault:()=>!this._isDefaultPopupTemplate},showRelatedRecordsWhenUnconfigured:{serializeModes:["initial"],default:!0},formatSettings:"initial",outFields:{serializeModes:["initial"],serialize:()=>this.isModified("outFields")?this.outFields:void 0},returnGeometry:{serializeModes:["initial"],default:!0},outSpatialReference:"initial",maxAllowableOffset:"initial",zoomScale:"initial",zoomFactor:{serializeModes:["initial"],isDefault:e=>{const t=this._feature?this._feature.schema:this._featureSource?.schema;return e===(t&&"point"===t.geometryType?void 0:1.5)}},popupContentExtensions:{serializeModes:["initial"],serialize:e=>this.popupContentExtensions.map((t=>t.toJSON(e))).filter((e=>!(e&&2===Object.keys(e).length&&e.id&&e.content))).toArray(),deserialize:e=>{e&&g(this.popupContentExtensions,e,{onNew:(e,t)=>{this.popupContentExtensions.add(o(e)?e:new T(e),t)},onMatch:(e,t,n,i)=>{o(t)||e.assignProperties(t),n!==i&&this.popupContentExtensions.reorder(e,i)},onMissing:e=>{this.popupContentExtensions.remove(e)},equals:(e,t)=>{if(!t)return!1;if(o(t))return t===e||t.id===e.id;const n=this.popupContentExtensions.indexOf(e);if(t.content&&n>-1){const e=this.popupContentExtensions.toArray();return T.matchesRef(e,n,t.content)}return e.id===t.id}})}}}}_hyperlinksAreEquivalent(e,t){if(e===t)return!0;const n=e=>e||"";return n(e.text)===n(t.text)&&n(e.url)===n(t.url)&&n(e.iconUrl)===n(t.iconUrl)&&n(e.target)===n(t.target)&&n(e.tooltip)===n(t.tooltip)}};w=e([u],w);export{w as FeatureSettings};class b extends r{get _collection(){return this._featureSettings._popupContent.map((e=>this._forContent(e))).concat(Array.from(this._uninitializedPopupContentExtensions))}get _popupTemplateIsInherited(){return this._featureSettings.parent&&this._featureSettings.popupTemplate===this._featureSettings.parent.popupTemplate}_featureSettings;_uninitializedPopupContentExtensions=new Set;_onChangePopupContentHandle=new _((()=>{const e=new WeakMap;return d([this._featureSettings._popupContent.on("before-remove",(t=>{e.set(t.item,this._forContent(t.item))})),this._featureSettings._popupContent.on("change",(t=>{const n={added:(t.added||[]).map((e=>this._forContent(e))),moved:(t.moved||[]).map((e=>this._forContent(e))),removed:(t.removed||[]).map((t=>{const n=e.get(t);return e.delete(t),n??this._forContent(t)})),target:this};this.emit("change",n)}))])}));_onBeforeAddPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("before-add",(e=>{this.emit("before-add",{...e,item:this._forContent(e.item)})}))));_onBeforeRemovePopupContentHandle=new _((()=>this._featureSettings._popupContent.on("before-remove",(e=>{this.emit("before-remove",{...e,item:this._forContent(e.item)})}))));_onBeforeChangesPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("before-changes",(e=>{this.emit("before-changes",{...e,item:this._forContent(e.item)})}))));_onAfterAddPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("after-add",(e=>{this.emit("after-add",{...e,item:this._forContent(e.item)})}))));_onAfterRemovePopupContentHandle=new _((()=>this._featureSettings._popupContent.on("after-remove",(e=>{this.emit("after-remove",{...e,item:this._forContent(e.item)})}))));_onAfterChangesPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("after-changes",(e=>{this.emit("after-changes",{...e})}))));constructor(e){super(),this._featureSettings=e,this._handles.add(m(this,"length",(()=>c(this._featureSettings,"_popupContent.length",(()=>f(this,"length")),{sync:!0}))))}forContent(e){if(C("content",e).isNotMissing(),this._featureSettings._popupContent.includes(e))return this._forContent(e)}add(e,n){if(C("contentX",e).isNotMissing(),this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),e.featureSettings&&e.featureSettings.popupContentExtensions.remove(e),e._setFeatureSettings(this._featureSettings),e.content){const t=z.get(e.content);if(z.set(e.content,e),t&&t!==e&&this._onRemoved(t),this._featureSettings._popupContent.includes(e.content))if(void 0===n){const n={added:[e],moved:[],removed:t?[t]:[],target:this};this.emit("change",n),this.emit("after-add",{item:e}),this.emit("after-changes",{target:this}),f(this,"length")}else this._featureSettings._popupContent.reorder(e.content,n);else this._featureSettings._popupContent.add(e.content,n)}else{this._uninitializedPopupContentExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("change",t),this.emit("after-add",{item:e}),this.emit("after-changes",{target:this}),f(this,"length")}return this._onAdded(e),this}removeAt(e){const n=this.getItemAt(e);if(void 0!==n){if(this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),this._uninitializedPopupContentExtensions.has(n)){this._uninitializedPopupContentExtensions.delete(n);const e={added:[],moved:[],removed:[n],target:this};this.emit("change",e),this.emit("after-remove",{item:n}),this.emit("after-changes",{target:this}),f(this,"length")}else this._featureSettings._popupContent.remove(n.content);return this._onRemoved(n),n}}reorder(e,n){if(e&&this._featureSettings._popupContent.includes(e.content))return this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),this._featureSettings._popupContent.reorder(e.content,n),e}sort(e){return this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),this._featureSettings._popupContent.sort(((t,n)=>e(this._forContent(t),this._forContent(n)))),this}on(e,t){const n=[];return"change"===e?n.push(this._onChangePopupContentHandle.add()):"before-add"===e?n.push(this._onBeforeAddPopupContentHandle.add()):"before-remove"===e?n.push(this._onBeforeRemovePopupContentHandle.add()):"before-changes"===e?n.push(this._onBeforeChangesPopupContentHandle.add()):"after-add"===e?n.push(this._onAfterAddPopupContentHandle.add()):"after-remove"===e?n.push(this._onAfterRemovePopupContentHandle.add()):"after-changes"===e&&n.push(this._onAfterChangesPopupContentHandle.add()),n.push(super.on(e,t)),d(n)}destroy(){if(this.destroyed)return;this._onChangePopupContentHandle.destroy(),this._onBeforeAddPopupContentHandle.destroy(),this._onBeforeRemovePopupContentHandle.destroy(),this._onBeforeChangesPopupContentHandle.destroy(),this._onAfterAddPopupContentHandle.destroy(),this._onAfterRemovePopupContentHandle.destroy(),this._onAfterChangesPopupContentHandle.destroy();const e=new Set;this._featureSettings._popupContent.forEach((t=>{const n=z.get(t);n&&e.add(n)})),this._uninitializedPopupContentExtensions.forEach((t=>{e.add(t)})),e.forEach((e=>{e.featureSettings===this._featureSettings&&(this._onRemoved(e),e.destroy())})),this._uninitializedPopupContentExtensions.clear(),super.destroy()}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.content}_onAdded(e){}_onRemoved(e){e.featureSettings===this._featureSettings&&e._setFeatureSettings(void 0),e.content&&z.get(e.content)===e&&z.delete(e.content)}_forContent(e){if(this._uninitializedPopupContentExtensions.size)for(const e of this._uninitializedPopupContentExtensions)e._resolveContent(),e.content&&(z.set(e.content,e),this._uninitializedPopupContentExtensions.delete(e));if(!z.has(e)){const t=new T({content:e});z.set(e,t),t._setFeatureSettings(this._featureSettings),this._onAdded(t)}return z.get(e)}}
1
+ import{__decorate as e}from"tslib";import t from"@arcgis/core/PopupTemplate";import{Hyperlink as n}from"../Hyperlink.js";import{isPopupContentExtension as o}from"../ItemType.js";import{ArrayWrappedCollection as i}from"../mapping/support/ArrayWrappedCollection.js";import{FormatSettings as s}from"../support/FormatSettings.js";import{InitializableCollectionProxy as r}from"../support/InitializableCollectionProxy.js";import{filterJSONProperties as p,isDefault as a,serializable as u,shouldExcludeDefaults as h}from"../support/Serializable.js";import{Settings as l}from"../support/Settings.js";import{createIHandle as d,notifyChange as f,onWatch as m,watch as c}from"../support/observableUtils.js";import _ from"../utilities/_ReferenceCountedHandle.js";import{compare as g}from"../utilities/array.js";import{checkArg as C}from"../utilities/checkArg.js";import{getAllFieldInfos as S,getAllReferencedFieldNames as y,isPopupTemplate as v}from"../utilities/esri.js";import{isArcadeExpressionField as P,isRelationshipField as A}from"../utilities/field.js";import{objectKeys as x}from"../utilities/object.js";import{isQueryBasedRelationship as E}from"../utilities/relationships.js";import{PopupContentExtension as T,_popupContentExtensionMap as z}from"./PopupContentExtension.js";let w=class extends l{popupContentExtensions;_isDefaultPopupTemplate=!1;_popupContentCollection;get _popupContent(){return null==this._popupContentCollection&&(this._popupContentCollection=this._createPopupContentCollection()),this._popupContentCollection}get hyperlinkTemplates(){return this._getCollectionSetting("hyperlinkTemplates")}get popupTemplate(){return this._getSetting("popupTemplate")}set popupTemplate(e){let n;n=e instanceof Object&&!v(e)?t.fromJSON(e):e;const o=this?._feature?.schema?.createPopupTemplate()??this?._featureSource?.schema?.createPopupTemplate();n&&o&&(n.content=n.content??o.content,n.fieldInfos=n.fieldInfos??o.fieldInfos),this._setSetting("popupTemplate",n),this._isDefaultPopupTemplate=!1,this.featureSource?.schema?.fieldExtensions.toArray().forEach((e=>{e._clearFieldInfoCache()}))}get showRelatedRecordsWhenUnconfigured(){return this._getSetting("showRelatedRecordsWhenUnconfigured",!0)}set showRelatedRecordsWhenUnconfigured(e){this._setSetting("showRelatedRecordsWhenUnconfigured",e)}get formatSettings(){return this._getNestedSettings("formatSettings",(()=>new s))}get returnGeometry(){return this._getSetting("returnGeometry",!0)}set returnGeometry(e){this._setSetting("returnGeometry",e)}get outFields(){return this._getSetting("outFields",this._defaultOutFields)}set outFields(e){this._setSetting("outFields",e)}get outSpatialReference(){return this._getSetting("outSpatialReference")}set outSpatialReference(e){this._setSetting("outSpatialReference",e)}get maxAllowableOffset(){return this._getSetting("maxAllowableOffset")}set maxAllowableOffset(e){this._setSetting("maxAllowableOffset",e)}get zoomScale(){return this._getSetting("zoomScale")}set zoomScale(e){this._setSetting("zoomScale",e)}get zoomFactor(){const e=this._feature?this._feature.schema:this._featureSource?.schema,t=e&&"point"===e.geometryType?void 0:1.5;return this._getSetting("zoomFactor",t)}set zoomFactor(e){this._setSetting("zoomFactor",e)}get featureSource(){return this._featureSource}get feature(){return this._feature}_featureSource;_feature;constructor(e){super(e),this.popupContentExtensions=new b(this)}destroy(){this.parent=void 0,this.popupContentExtensions.destroy(),this._popupContentCollection?.destroy(),super.destroy()}get _defaultOutFields(){if(null==this.popupTemplate)return["*"];const e=S(this.popupTemplate),t=this.featureSource?.schema?.primaryKeyField;if(!e||!t)return["*"];const n=new Set([t]),o=new Map;this.featureSource.schema.fields.forEach((e=>{o.set(e.name.toLowerCase(),e.name)}));const i=new Set([...y(this.popupTemplate),...this.hyperlinkTemplates.toArray().flatMap((e=>e.getReferencedFields()))]);this._featureSource.relationships.forEach((e=>{E(e)&&i.add(e.keyField)}));const s=e.reduce(((e,t)=>((t.visible||t.isEditable&&this.featureSource.capabilities.supportsEditing)&&e.push(t.fieldName),e)),[]),r=new Set([...s,...i]);for(const e of r){if(P(e)||A(e))continue;const t=o.get(e.toLowerCase());t&&n.add(t)}return Array.from(n)}_setFeatureSource(e){this._featureSource=e,f(this,"featureSource")}_setFeature(e){this._feature=e,f(this,"feature")}toJSON(e="all"){const t=p(this._getSerializableProperties(),this,e)||{},n=t.popupContentExtensions?.filter((e=>{const t=this.parent;return!t?.popupContentExtensions?.some((t=>t.id===e.id))}));if(t)for(const e of x(t))this.isModified(e)||delete t[e];if(n?.length&&(t.popupContentExtensions=n),!h(e)||!a(t))return t}_hasSettingIncludingAncestor(e){return"outFields"===e||super._hasSettingIncludingAncestor(e)}_createPopupContentCollection(){return new i({parent:this,targetProperty:"popupTemplate",arrayProperty:"content"})}_getSerializableProperties(){return{hyperlinkTemplates:{serializeModes:["initial"],deserialize:e=>{e.forEach((e=>{this.hyperlinkTemplates.find((t=>this._hyperlinksAreEquivalent(t,e)))||this.hyperlinkTemplates.add(e instanceof n?e:new n(e))})),this.hyperlinkTemplates.toArray().forEach((t=>{const n=this.hyperlinkTemplates.indexOf(t),o=e.findIndex((e=>this._hyperlinksAreEquivalent(e,t)));o<0?this.hyperlinkTemplates.removeAt(n):o!==n&&this.hyperlinkTemplates.reorder(t,o)}))}},popupTemplate:{serializeModes:["project"],isDefault:()=>!this._isDefaultPopupTemplate},showRelatedRecordsWhenUnconfigured:{serializeModes:["initial"],default:!0},formatSettings:"initial",outFields:{serializeModes:["initial"],serialize:()=>this.isModified("outFields")?this.outFields:void 0},returnGeometry:{serializeModes:["initial"],default:!0},outSpatialReference:"initial",maxAllowableOffset:"initial",zoomScale:"initial",zoomFactor:{serializeModes:["initial"],isDefault:e=>{const t=this._feature?this._feature.schema:this._featureSource?.schema;return e===(t&&"point"===t.geometryType?void 0:1.5)}},popupContentExtensions:{serializeModes:["initial"],serialize:e=>this.popupContentExtensions.map((t=>t.toJSON(e))).filter((e=>!(e&&2===Object.keys(e).length&&e.id&&e.content))).toArray(),deserialize:e=>{e&&g(this.popupContentExtensions,e,{onNew:(e,t)=>{this.popupContentExtensions.add(o(e)?e:new T(e),t)},onMatch:(e,t,n,i)=>{o(t)||e.assignProperties(t),n!==i&&this.popupContentExtensions.reorder(e,i)},onMissing:e=>{this.popupContentExtensions.remove(e)},equals:(e,t)=>{if(!t)return!1;if(o(t))return t===e||t.id===e.id;const n=this.popupContentExtensions.indexOf(e);if(t.content&&n>-1){const e=this.popupContentExtensions.toArray();return T.matchesRef(e,n,t.content)}return e.id===t.id}})}}}}_hyperlinksAreEquivalent(e,t){if(e===t)return!0;const n=e=>e||"";return n(e.text)===n(t.text)&&n(e.url)===n(t.url)&&n(e.iconUrl)===n(t.iconUrl)&&n(e.target)===n(t.target)&&n(e.tooltip)===n(t.tooltip)}};w=e([u],w);export{w as FeatureSettings};class b extends r{get _collection(){return this._featureSettings._popupContent.map((e=>this._forContent(e))).concat(Array.from(this._uninitializedPopupContentExtensions))}get _popupTemplateIsInherited(){return this._featureSettings.parent&&this._featureSettings.popupTemplate===this._featureSettings.parent.popupTemplate}_featureSettings;_uninitializedPopupContentExtensions=new Set;_onChangePopupContentHandle=new _((()=>{const e=new WeakMap;return d([this._featureSettings._popupContent.on("before-remove",(t=>{e.set(t.item,this._forContent(t.item))})),this._featureSettings._popupContent.on("change",(t=>{const n={added:(t.added||[]).map((e=>this._forContent(e))),moved:(t.moved||[]).map((e=>this._forContent(e))),removed:(t.removed||[]).map((t=>{const n=e.get(t);return e.delete(t),n??this._forContent(t)})),target:this};this.emit("change",n)}))])}));_onBeforeAddPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("before-add",(e=>{this.emit("before-add",{...e,item:this._forContent(e.item)})}))));_onBeforeRemovePopupContentHandle=new _((()=>this._featureSettings._popupContent.on("before-remove",(e=>{this.emit("before-remove",{...e,item:this._forContent(e.item)})}))));_onBeforeChangesPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("before-changes",(e=>{this.emit("before-changes",{...e,item:this._forContent(e.item)})}))));_onAfterAddPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("after-add",(e=>{this.emit("after-add",{...e,item:this._forContent(e.item)})}))));_onAfterRemovePopupContentHandle=new _((()=>this._featureSettings._popupContent.on("after-remove",(e=>{this.emit("after-remove",{...e,item:this._forContent(e.item)})}))));_onAfterChangesPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("after-changes",(e=>{this.emit("after-changes",{...e})}))));constructor(e){super(),this._featureSettings=e,this._handles.add(m(this,"length",(()=>c(this._featureSettings,"_popupContent.length",(()=>f(this,"length")),{sync:!0}))))}forContent(e){if(C("content",e).isNotMissing(),this._featureSettings._popupContent.includes(e))return this._forContent(e)}add(e,n){if(C("contentX",e).isNotMissing(),this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),e.featureSettings&&e.featureSettings.popupContentExtensions.remove(e),e._setFeatureSettings(this._featureSettings),e.content){const t=z.get(e.content);if(z.set(e.content,e),t&&t!==e&&this._onRemoved(t),this._featureSettings._popupContent.includes(e.content))if(void 0===n){const n={added:[e],moved:[],removed:t?[t]:[],target:this};this.emit("change",n),this.emit("after-add",{item:e}),this.emit("after-changes",{target:this}),f(this,"length")}else this._featureSettings._popupContent.reorder(e.content,n);else this._featureSettings._popupContent.add(e.content,n)}else{this._uninitializedPopupContentExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("change",t),this.emit("after-add",{item:e}),this.emit("after-changes",{target:this}),f(this,"length")}return this._onAdded(e),this}removeAt(e){const n=this.getItemAt(e);if(void 0!==n){if(this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),this._uninitializedPopupContentExtensions.has(n)){this._uninitializedPopupContentExtensions.delete(n);const e={added:[],moved:[],removed:[n],target:this};this.emit("change",e),this.emit("after-remove",{item:n}),this.emit("after-changes",{target:this}),f(this,"length")}else this._featureSettings._popupContent.remove(n.content);return this._onRemoved(n),n}}reorder(e,n){if(e&&this._featureSettings._popupContent.includes(e.content))return this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),this._featureSettings._popupContent.reorder(e.content,n),e}sort(e){return this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),this._featureSettings._popupContent.sort(((t,n)=>e(this._forContent(t),this._forContent(n)))),this}on(e,t){const n=[];return"change"===e?n.push(this._onChangePopupContentHandle.add()):"before-add"===e?n.push(this._onBeforeAddPopupContentHandle.add()):"before-remove"===e?n.push(this._onBeforeRemovePopupContentHandle.add()):"before-changes"===e?n.push(this._onBeforeChangesPopupContentHandle.add()):"after-add"===e?n.push(this._onAfterAddPopupContentHandle.add()):"after-remove"===e?n.push(this._onAfterRemovePopupContentHandle.add()):"after-changes"===e&&n.push(this._onAfterChangesPopupContentHandle.add()),n.push(super.on(e,t)),d(n)}destroy(){if(this.destroyed)return;this._onChangePopupContentHandle.destroy(),this._onBeforeAddPopupContentHandle.destroy(),this._onBeforeRemovePopupContentHandle.destroy(),this._onBeforeChangesPopupContentHandle.destroy(),this._onAfterAddPopupContentHandle.destroy(),this._onAfterRemovePopupContentHandle.destroy(),this._onAfterChangesPopupContentHandle.destroy();const e=new Set;this._featureSettings._popupContent.forEach((t=>{const n=z.get(t);n&&e.add(n)})),this._uninitializedPopupContentExtensions.forEach((t=>{e.add(t)})),e.forEach((e=>{e.featureSettings===this._featureSettings&&(this._onRemoved(e),e.destroy())})),this._uninitializedPopupContentExtensions.clear(),super.destroy()}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.content}_onAdded(e){}_onRemoved(e){e.featureSettings===this._featureSettings&&e._setFeatureSettings(void 0),e.content&&z.get(e.content)===e&&z.delete(e.content)}_forContent(e){if(this._uninitializedPopupContentExtensions.size)for(const e of this._uninitializedPopupContentExtensions)e._resolveContent(),e.content&&(z.set(e.content,e),this._uninitializedPopupContentExtensions.delete(e));if(!z.has(e)){const t=new T({content:e});z.set(e,t),t._setFeatureSettings(this._featureSettings),this._onAdded(t)}return z.get(e)}}
package/data/Schema.d.ts CHANGED
@@ -4,6 +4,7 @@ import type { ResourceHandle } from "@arcgis/core/core/Handles.js";
4
4
  import type SpatialReference from "@arcgis/core/geometry/SpatialReference";
5
5
  import FeatureType from "@arcgis/core/layers/support/FeatureType";
6
6
  import Field from "@arcgis/core/layers/support/Field";
7
+ import type Subtype from "@arcgis/core/layers/support/Subtype.js";
7
8
  import FieldInfo from "@arcgis/core/popup/FieldInfo";
8
9
  import type { FieldJson } from "../json/FieldJson.js";
9
10
  import { type GeometryJsonType } from "../json/GeometryJson.js";
@@ -162,12 +163,21 @@ export declare class Schema extends Settings<SchemaProperties> {
162
163
  get timeZone(): string;
163
164
  set timeZone(value: string);
164
165
  /**
165
- * The name of the field holding the type ID or subtypes for the features.
166
+ * The name of the field holding the type ID for the features.
166
167
  */
167
168
  get typeIdField(): string;
168
169
  set typeIdField(value: string);
169
170
  /**
170
- * A collection of types or subtypes for the features.
171
+ * A collection of subtypes for the features.
172
+ */
173
+ get subtypes(): Collection<Subtype>;
174
+ /**
175
+ * The name of the field holding the subtype for the features.
176
+ */
177
+ get subtypeField(): string;
178
+ set subtypeField(value: string);
179
+ /**
180
+ * A collection of types for the features.
171
181
  */
172
182
  get types(): Collection<FeatureType>;
173
183
  constructor(properties?: SchemaProperties);
@@ -200,3 +210,10 @@ export declare class Schema extends Settings<SchemaProperties> {
200
210
  createAllFieldInfos(): FieldInfo[];
201
211
  protected _getSerializableProperties(): PropertyDefs<SchemaProperties>;
202
212
  }
213
+ /**
214
+ * Function that checks if the schema has any subtypes. Subtypes will be used
215
+ * ahead of types in determining field domains when present.
216
+ *
217
+ * @param schema The schema to check for subtypes.
218
+ */
219
+ export declare function schemaHasSubtypes(schema: Schema): boolean;
package/data/Schema.js CHANGED
@@ -1 +1 @@
1
- var e;import{__decorate as i}from"tslib";import t from"@arcgis/core/PopupTemplate";import s from"@arcgis/core/core/Collection";import o from"@arcgis/core/layers/support/FeatureType";import l from"@arcgis/core/layers/support/Field";import d from"@arcgis/core/popup/FieldInfo";import{InvalidOperationError as n}from"../InvalidOperationError.js";import{isFieldExtension as r}from"../ItemType.js";import{jsonToGeometryType as a}from"../json/GeometryJson.js";import{InitializableCollectionProxy as h}from"../support/InitializableCollectionProxy.js";import{filterJSONProperties as m,isDefault as f,serializable as p,shouldExcludeDefaults as c}from"../support/Serializable.js";import{Settings as _}from"../support/Settings.js";import{createIHandle as u,notifyChange as g,onWatch as F,watch as y}from"../support/observableUtils.js";import{CaseInsensitiveObservableMap as x}from"../utilities/CaseInsensitiveObservableMap.js";import{CollectionProxy as v}from"../utilities/CollectionProxy.js";import{ReadOnlyCollection as b}from"../utilities/ReadOnlyCollection.js";import S from"../utilities/_ReferenceCountedHandle.js";import{checkArg as T}from"../utilities/checkArg.js";import{compare as w}from"../utilities/collection.js";import{isFeatureType as z,isField as I}from"../utilities/esri.js";import{fieldWithArcadeXRegex as N,fieldWithRelationshipRegex as E,getArcadeExpressionFromField as A}from"../utilities/field.js";import{ERR_TIME_ZONE_INVALID as j,isValidTimeZone as H}from"../utilities/format/date.js";import{objectKeys as C}from"../utilities/object.js";import{caseInsensitiveEquals as R}from"../utilities/string.js";import{_fieldExtensionMap as M,FieldExtension as K}from"./FieldExtension.js";const O=new Map;O.set("objectid","oid"),O.set("oid","oid"),O.set("fid","oid"),O.set("shape","geometry"),O.set("shape__length","double"),O.set("shape_length","double"),O.set("shape__area","double"),O.set("shape_area","double"),O.set("area","double"),O.set("perimeter","double"),O.set("length","double"),O.set("fnode_","double"),O.set("tnode_","double"),O.set("lpoly_","double"),O.set("rpoly_","double"),O.set("cover_","integer"),O.set("cover_id","integer"),O.set("idtic","integer"),O.set("xtic","double"),O.set("ytic","double"),O.set("xmin","double"),O.set("ymin","double"),O.set("xmax","double"),O.set("ymax","double"),O.set("arc_","double"),O.set("subclass_","integer"),O.set("subclass_id","integer"),O.set("routelink","integer"),O.set("arclink","integer"),O.set("f_meas","double"),O.set("t_meas","double"),O.set("f_pos","double"),O.set("t_pos","double"),O.set("f_meas","double"),O.set("globalid","global-id"),O.set("guid","guid");export{N as fieldWithArcadeXRegex,E as fieldWithRelationshipRegex};const B=new WeakMap;let P=e=class extends _{fieldExtensions;fields;_featureSettings;_alwaysSerializeFieldExtensions;_watchHandles=[];_primaryKeyField;get spatialReference(){return this._getSetting("spatialReference")}set spatialReference(e){this._setSetting("spatialReference",e)}get primaryKeyField(){if(!this._primaryKeyField){const e=this._getSetting("primaryKeyField");if(e)this._primaryKeyField=e;else{const e=this.fields.filter((e=>"oid"===e.type));1===e.length&&(this._primaryKeyField=e.getItemAt(0).name)}}return this._primaryKeyField}set primaryKeyField(e){this._primaryKeyField=e,this._setSetting("primaryKeyField",e)}get displayField(){return this._getSetting("displayField",this.primaryKeyField)}set displayField(e){!this._featureSettings?.popupTemplate||this._featureSettings.popupTemplate.title&&this._featureSettings.popupTemplate.title!==`{${this.displayField}}`||(this._featureSettings.popupTemplate.title=`{${e}}`),this._setSetting("displayField",e)}get geometryType(){return this._getSetting("geometryType")}set geometryType(e){this._setSetting("geometryType",e)}get hasGeometry(){return void 0!==this.geometryType&&null!==this.geometryType}get timeZone(){return this._getSetting("timeZone","UTC")}set timeZone(e){T("timeZone",e).satisfies((e=>H(e)),j(e)),this._setSetting("timeZone",e)}get typeIdField(){return this._getSetting("typeIdField")}set typeIdField(e){this._setSetting("typeIdField",e)}get types(){return this._getCollectionSetting("types")}get _fields(){return this._getCollectionSetting("_fields")}constructor(e){super(e),this.fieldExtensions=new J(this),this.fields=new Z(this),this._primaryKeyField=void 0,this._handles.add(this.fields.on("before-changes",(()=>{this._primaryKeyField=void 0})))}static createFieldInfoFromField(e){let i=!0;const t=e.name.toLowerCase();return("oid"===e.type||"geometry"===e.type||O.has(t)&&O.get(t)===e.type)&&(i=!1),new d({visible:i,fieldName:e.name,format:void 0,label:e.alias,stringFieldOption:void 0,tooltip:void 0,isEditable:e.editable})}destroy(){this.parent=void 0,this.fieldExtensions?.destroy(),this.fields?.destroy(),super.destroy()}findFieldByName(e){return this.fields.findFieldByName(e)}toJSON(e="all"){const i=m(this._getSerializableProperties(),this,e)||{};let t=i.fieldExtensions;this.parent&&(t=t?.filter((e=>{const i=this.parent;return!i?.fieldExtensions?.some((i=>i.id===e.id))})));const{fields:s}=i;if(i)for(const e of C(i))this.isModified(e)||delete i[e];if(s&&(i.fields=s),t?.length&&(i.fieldExtensions=t),!c(e)||!f(i))return i}createPopupTemplate(){const e=this.createAllFieldInfos();return new t({fieldInfos:e,content:[{type:"fields"},{type:"attachments"}]})}createAllFieldInfos(){return this.fields.toArray().filter((e=>!!e.name)).map((i=>e.createFieldInfoFromField(i)))}_getSerializableProperties(){return{geometryType:{serialize:!1,deserialize:e=>{this.geometryType=e?a(e):void 0}},spatialReference:{serialize:!1},primaryKeyField:{serialize:!1},displayField:{serialize:!1},typeIdField:{serialize:!1},fields:{serializeModes:["initial","project"],serialize:()=>this.isModified("_fields")?this.fields.toArray().map((e=>e.toJSON())):void 0,deserialize:e=>{if(!e)return;const i=e.map((e=>I(e)?e:l.fromJSON(e)));w(this.fields,i,{onNew:(e,i)=>{this.fields.add(e,i)},onMatch:(e,i,t,s)=>{e!==i&&(e.alias=i.alias,e.editable=i.editable,e.length=i.length,e.nullable=i.nullable,e.type=i.type),t!==s&&this.fields.reorder(e,s)},onMissing:e=>{this.fields.remove(e)},equals:(e,i)=>R(e.name,i.name)})}},fieldExtensions:{serializeModes:["initial"],serialize:e=>this.fieldExtensions.toArray().map((i=>i.toJSON(e))).filter((e=>this._alwaysSerializeFieldExtensions||!(e&&2===Object.keys(e).length&&e.id&&e.field))),deserialize:e=>{e&&w(this.fieldExtensions,e,{onNew:(e,i)=>{this.fieldExtensions.add(r(e)?e:new K(e),i)},onMatch:(e,i,t,s)=>{r(i)||e.assignProperties(i),t!==s&&this.fieldExtensions.reorder(e,s)},onMissing:e=>{this._alwaysSerializeFieldExtensions&&this.fieldExtensions.remove(e)},equals:(e,i)=>r(i)?i===e:!(!i?.field||!K.matchesRef(e,i.field))||e.id===i.id})}},types:{serialize:!1,deserialize:e=>{if(!e)return;const i=e.map((e=>z(e)||!e?e:o.fromJSON(e)));w(this.types,i,{onNew:(e,i)=>{this.types.add(e,i)},onMatch:(e,i,t,s)=>{e!==i&&(e.name=i.name,e.templates=i.templates?[...i.templates]:[],e.domains=i.domains),t!==s&&this.types.reorder(e,s)},onMissing:e=>{this.types.remove(e)},equals:(e,i)=>e.id===i.id})}},timeZone:{serialize:!1,deserialize:e=>{e&&(this.timeZone=e)}}}}};P=e=i([p],P);export{P as Schema};class Z extends v{_schema;_fieldNameToField=new x;_expressionFields=new s;_expressionFieldsReadOnly=new b(this._expressionFields);get _expressionFieldsLength(){return this.expressionFields.length}get expressionFields(){return this._expressionFieldsReadOnly}get _popupTemplate(){return this._schema._featureSettings?this._schema._featureSettings.popupTemplate:void 0}constructor(e){super(new s),this._schema=e,this._handles.add(F(this,"length",(()=>y(this._schema,"_fields.length",(()=>g(this,"length")),{sync:!0})))),this._handles.add(y(this._schema,"_fields",(e=>{if(this._handles.remove("schema-field-collection-schema-fields"),null!=e){this._handles.add([e.on("after-add",(i=>{this._collection.add(i.item,e.indexOf(i.item)),this._fieldNameToField.set(i.item.name,i.item)})),e.on("after-remove",(e=>{this._collection.remove(e.item),this._fieldNameToField.delete(e.item.name)}))],"schema-field-collection-schema-fields");for(const i of this._collection)e.includes(i)||(this._collection.remove(i),this._fieldNameToField.delete(i.name));for(const i of e)this._collection.includes(i)||(this._collection.add(i),this._fieldNameToField.set(i.name,i))}else for(const e of this._collection.filter((e=>!this._expressionFields.includes(e))))this._collection.remove(e),this._fieldNameToField.delete(e.name)}),{sync:!0,initial:!0})),this._generateExpressionFields(),this._handles.add([y(this._schema,"_featureSettings.popupTemplate.fieldInfos",(()=>{this._generateExpressionFields()}),{sync:!0}),y(this._schema,"_featureSettings.popupTemplate.expressionInfos",(()=>{this._generateExpressionFields()}),{sync:!0})])}clone(){return new Z(this._schema)}add(e,i){T("field",e).isNotMissing();const t=A(e.name);if(t){if(!this._popupTemplate)throw new n("Cannot create a field that references an arcade expression without a feature source and popup template.");const i=this._popupTemplate.expressionInfos.find((e=>R(e.name,t)));if(!i)throw new n("Cannot create a field that references a non-existent arcade expression.");this._popupTemplate.fieldInfos||(this._popupTemplate.fieldInfos=[]);let s=this._popupTemplate.fieldInfos.find((i=>R(i.fieldName,e.name)));s||(s=new d({fieldName:e.name,label:i.title}),this._popupTemplate.fieldInfos.push(s));const o=B.get(s);B.set(s,e),null!=this._expressionFields&&(this._expressionFields.remove(o),this._expressionFields.includes(e)||(this._expressionFields.add(e),this._collection.add(e),this._fieldNameToField.set(e.name,e))),g(this,"_expressionFieldsLength")}else this._schema._fields.add(e,i);return this}destroy(){this._fieldNameToField.clear(),this._expressionFields.removeAll(),this._collection.removeAll(),super.destroy()}removeAt(e){T("index",e).isNotMissing();const i=this.getItemAt(e);if(!i)return;if(A(i.name)){const e=this._popupTemplate.fieldInfos.findIndex((e=>R(e.fieldName,i.name)));this._popupTemplate.fieldInfos.splice(e,1),this._expressionFields.remove(i),this._collection.remove(i),this._fieldNameToField.delete(i.name),g(this,"_expressionFieldsLength")}else this._schema._fields.remove(i);return i}reorder(e,i){if(e&&this._schema._fields.includes(e))return this._schema._fields.reorder(e,i),this._collection.reorder(e,i),e}sort(e){return this._schema._fields.sort(e),this._collection.sort(((i,t)=>this._expressionFields.includes(i)&&this._expressionFields.includes(t)?0:this._expressionFields.includes(i)?1:this._expressionFields.includes(t)?-1:e(i,t))),this}findFieldByName(e){return this._fieldNameToField.get(e)}_generateExpressionFields(){if(!this._popupTemplate?.fieldInfos||!this._popupTemplate?.expressionInfos){for(const e of this._expressionFields)this._collection.remove(e),this._fieldNameToField.delete(e.name);return void this._expressionFields.removeAll()}const e=this._expressionFields.slice();for(const i of this._popupTemplate.fieldInfos){const t=A(i.fieldName);if(null==t)continue;const s=this._popupTemplate.expressionInfos.find((e=>R(e.name,t)));if(null==s)continue;let o=B.get(i);null==o&&(o=new l({name:i.fieldName,alias:i.label||s.title||i.fieldName,type:"number"===s.returnType?"double":"string",editable:!1})),this._expressionFields.includes(o)?e.remove(o):(B.set(i,o),this._expressionFields.add(o),this._collection.add(o),this._fieldNameToField.set(o.name,o),e.remove(o))}for(const i of e)this._expressionFields.remove(i),this._collection.remove(i),this._fieldNameToField.delete(i.name)}}class J extends h{get _collection(){return this._schema.fields.map((e=>this._forField(e))).concat(Array.from(this._uninitializedFieldExtensions))}_schema;_uninitializedFieldExtensions=new Set;_onChangeSchemaFieldsHandle=new S((()=>this._schema.fields.on("change",(e=>{const i={added:(e.added||[]).map((e=>this._forField(e))),moved:(e.moved||[]).map((e=>this._forField(e))),removed:(e.removed||[]).map((e=>this._forField(e))),target:this};this.emit("change",i)}))));_onBeforeAddSchemaFieldsHandle=new S((()=>this._schema.fields.on("before-add",(e=>{this.emit("before-add",{...e,item:this._forField(e.item)})}))));_onBeforeRemoveSchemaFieldsHandle=new S((()=>this._schema.fields.on("before-remove",(e=>{this.emit("before-remove",{...e,item:this._forField(e.item)})}))));_onBeforeChangesSchemaFieldsHandle=new S((()=>this._schema.fields.on("before-changes",(e=>{this.emit("before-changes",{...e,item:this._forField(e.item)})}))));_onAfterAddSchemaFieldsHandle=new S((()=>this._schema.fields.on("after-add",(e=>{this.emit("after-add",{...e,item:this._forField(e.item)})}))));_onAfterRemoveSchemaFieldsHandle=new S((()=>this._schema.fields.on("after-remove",(e=>{this.emit("after-remove",{...e,item:this._forField(e.item)})}))));_onAfterChangesSchemaFieldsHandle=new S((()=>this._schema.fields.on("after-changes",(e=>{this.emit("after-changes",{...e,target:this})}))));constructor(e){super(),this._schema=e,this._handles.add(F(this,"length",(()=>y(this._schema.fields,"length",(()=>g(this,"length")),{sync:!0}))))}async destroy(){this._onChangeSchemaFieldsHandle.destroy(),this._onBeforeAddSchemaFieldsHandle.destroy(),this._onBeforeRemoveSchemaFieldsHandle.destroy(),this._onBeforeChangesSchemaFieldsHandle.destroy(),this._onAfterAddSchemaFieldsHandle.destroy(),this._onAfterRemoveSchemaFieldsHandle.destroy(),this._onAfterChangesSchemaFieldsHandle.destroy();const e=[];for(const i of this._schema.fields){const t=M.get(i);t&&t.schema===this._schema&&(M.delete(i),this._onRemoved(t),e.push(t.destroy()))}this._uninitializedFieldExtensions.forEach((i=>{this._onRemoved(i),e.push(i.destroy())})),this._uninitializedFieldExtensions.clear(),await Promise.all(e),super.destroy()}forField(e){if(T("field",e).isNotMissing(),this._schema.fields.includes(e))return this._forField(e)}add(e,i){if(T("fieldX",e).isNotMissing(),e.schema&&e.schema.fieldExtensions.remove(e),e._setSchema(this._schema),e.field){const t=M.get(e.field);if(M.set(e.field,e),t&&t!==e&&this._onRemoved(t),this._schema.fields.includes(e.field))if(void 0===i){const i={added:[e],moved:[],removed:t?[t]:[],target:this};this.emit("change",i),this.emit("after-add",{item:e}),this.emit("after-changes",{})}else this._schema.fields.reorder(e.field,i);else this._schema.fields.add(e.field,i)}else{this._uninitializedFieldExtensions.add(e);const i={added:[e],moved:[],removed:[],target:this};this.emit("change",i),this.emit("after-add",{item:e}),this.emit("after-changes",{})}return this._onAdded(e),this}removeAt(e){const i=this.getItemAt(e);if(void 0!==i){if(this._uninitializedFieldExtensions.has(i)){this._uninitializedFieldExtensions.delete(i);const e={added:[],moved:[],removed:[i],target:this};this.emit("change",e),this.emit("after-remove",{item:i}),this.emit("after-changes",{})}else this._schema.fields.remove(i.field);return this._onRemoved(i),i}}reorder(e,i){if(e&&this._schema.fields.includes(e.field))return this._schema.fields.reorder(e.field,i),e}sort(e){return this._schema.fields.sort(((i,t)=>e(this._forField(i),this._forField(t)))),this}on(e,i){const t=[];return"change"===e?t.push(this._onChangeSchemaFieldsHandle.add()):"before-add"===e?t.push(this._onBeforeAddSchemaFieldsHandle.add()):"before-remove"===e?t.push(this._onBeforeRemoveSchemaFieldsHandle.add()):"before-changes"===e?t.push(this._onBeforeChangesSchemaFieldsHandle.add()):"after-add"===e?t.push(this._onAfterAddSchemaFieldsHandle.add()):"after-remove"===e?t.push(this._onAfterRemoveSchemaFieldsHandle.add()):"after-changes"===e&&t.push(this._onAfterChangesSchemaFieldsHandle.add()),t.push(super.on(e,i)),u(t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.field}_onAdded(e){}_onRemoved(e){e.schema===this._schema&&e._setSchema(void 0)}_forField(e){if(this._uninitializedFieldExtensions.size)for(const e of this._uninitializedFieldExtensions)e._resolveField(),e.field&&(M.set(e.field,e),this._uninitializedFieldExtensions.delete(e));if(!M.has(e)){const i=new K({field:e});M.set(e,i),i._setSchema(this._schema),this._onAdded(i),i.initialize()}return M.get(e)}}
1
+ var e;import{__decorate as i}from"tslib";import t from"@arcgis/core/PopupTemplate";import s from"@arcgis/core/core/Collection";import o from"@arcgis/core/layers/support/FeatureType";import l from"@arcgis/core/layers/support/Field";import d from"@arcgis/core/popup/FieldInfo";import{InvalidOperationError as n}from"../InvalidOperationError.js";import{isFieldExtension as r}from"../ItemType.js";import{jsonToGeometryType as a}from"../json/GeometryJson.js";import{InitializableCollectionProxy as h}from"../support/InitializableCollectionProxy.js";import{filterJSONProperties as m,isDefault as f,serializable as p,shouldExcludeDefaults as c}from"../support/Serializable.js";import{Settings as _}from"../support/Settings.js";import{createIHandle as u,notifyChange as g,onWatch as F,watch as y}from"../support/observableUtils.js";import{CaseInsensitiveObservableMap as x}from"../utilities/CaseInsensitiveObservableMap.js";import{CollectionProxy as v}from"../utilities/CollectionProxy.js";import{ReadOnlyCollection as b}from"../utilities/ReadOnlyCollection.js";import S from"../utilities/_ReferenceCountedHandle.js";import{checkArg as T}from"../utilities/checkArg.js";import{compare as w}from"../utilities/collection.js";import{isFeatureType as z,isField as I}from"../utilities/esri.js";import{fieldWithArcadeXRegex as N,fieldWithRelationshipRegex as E,getArcadeExpressionFromField as A}from"../utilities/field.js";import{ERR_TIME_ZONE_INVALID as j,isValidTimeZone as H}from"../utilities/format/date.js";import{objectKeys as C}from"../utilities/object.js";import{caseInsensitiveEquals as R}from"../utilities/string.js";import{_fieldExtensionMap as M,FieldExtension as K}from"./FieldExtension.js";const O=new Map;O.set("objectid","oid"),O.set("oid","oid"),O.set("fid","oid"),O.set("shape","geometry"),O.set("shape__length","double"),O.set("shape_length","double"),O.set("shape__area","double"),O.set("shape_area","double"),O.set("area","double"),O.set("perimeter","double"),O.set("length","double"),O.set("fnode_","double"),O.set("tnode_","double"),O.set("lpoly_","double"),O.set("rpoly_","double"),O.set("cover_","integer"),O.set("cover_id","integer"),O.set("idtic","integer"),O.set("xtic","double"),O.set("ytic","double"),O.set("xmin","double"),O.set("ymin","double"),O.set("xmax","double"),O.set("ymax","double"),O.set("arc_","double"),O.set("subclass_","integer"),O.set("subclass_id","integer"),O.set("routelink","integer"),O.set("arclink","integer"),O.set("f_meas","double"),O.set("t_meas","double"),O.set("f_pos","double"),O.set("t_pos","double"),O.set("f_meas","double"),O.set("globalid","global-id"),O.set("guid","guid");export{N as fieldWithArcadeXRegex,E as fieldWithRelationshipRegex};const B=new WeakMap;let P=e=class extends _{fieldExtensions;fields;_featureSettings;_alwaysSerializeFieldExtensions;_watchHandles=[];_primaryKeyField;get spatialReference(){return this._getSetting("spatialReference")}set spatialReference(e){this._setSetting("spatialReference",e)}get primaryKeyField(){if(!this._primaryKeyField){const e=this._getSetting("primaryKeyField");if(e)this._primaryKeyField=e;else{const e=this.fields.filter((e=>"oid"===e.type));1===e.length&&(this._primaryKeyField=e.getItemAt(0).name)}}return this._primaryKeyField}set primaryKeyField(e){this._primaryKeyField=e,this._setSetting("primaryKeyField",e)}get displayField(){return this._getSetting("displayField",this.primaryKeyField)}set displayField(e){!this._featureSettings?.popupTemplate||this._featureSettings.popupTemplate.title&&this._featureSettings.popupTemplate.title!==`{${this.displayField}}`||(this._featureSettings.popupTemplate.title=`{${e}}`),this._setSetting("displayField",e)}get geometryType(){return this._getSetting("geometryType")}set geometryType(e){this._setSetting("geometryType",e)}get hasGeometry(){return void 0!==this.geometryType&&null!==this.geometryType}get timeZone(){return this._getSetting("timeZone","UTC")}set timeZone(e){T("timeZone",e).satisfies((e=>H(e)),j(e)),this._setSetting("timeZone",e)}get typeIdField(){return this._getSetting("typeIdField")}set typeIdField(e){this._setSetting("typeIdField",e)}get subtypes(){return this._getCollectionSetting("subtypes")}get subtypeField(){return this._getSetting("subtypeField")}set subtypeField(e){this._setSetting("subtypeField",e)}get types(){return this._getCollectionSetting("types")}get _fields(){return this._getCollectionSetting("_fields")}constructor(e){super(e),this.fieldExtensions=new J(this),this.fields=new Z(this),this._primaryKeyField=void 0,this._handles.add(this.fields.on("before-changes",(()=>{this._primaryKeyField=void 0})))}static createFieldInfoFromField(e){let i=!0;const t=e.name.toLowerCase();return("oid"===e.type||"geometry"===e.type||O.has(t)&&O.get(t)===e.type)&&(i=!1),new d({visible:i,fieldName:e.name,format:void 0,label:e.alias,stringFieldOption:void 0,tooltip:void 0,isEditable:e.editable})}destroy(){this.parent=void 0,this.fieldExtensions?.destroy(),this.fields?.destroy(),super.destroy()}findFieldByName(e){return this.fields.findFieldByName(e)}toJSON(e="all"){const i=m(this._getSerializableProperties(),this,e)||{};let t=i.fieldExtensions;this.parent&&(t=t?.filter((e=>{const i=this.parent;return!i?.fieldExtensions?.some((i=>i.id===e.id))})));const{fields:s}=i;if(i)for(const e of C(i))this.isModified(e)||delete i[e];if(s&&(i.fields=s),t?.length&&(i.fieldExtensions=t),!c(e)||!f(i))return i}createPopupTemplate(){const e=this.createAllFieldInfos();return new t({fieldInfos:e,content:[{type:"fields"},{type:"attachments"}]})}createAllFieldInfos(){return this.fields.toArray().filter((e=>!!e.name)).map((i=>e.createFieldInfoFromField(i)))}_getSerializableProperties(){return{geometryType:{serialize:!1,deserialize:e=>{this.geometryType=e?a(e):void 0}},spatialReference:{serialize:!1},primaryKeyField:{serialize:!1},displayField:{serialize:!1},typeIdField:{serialize:!1},fields:{serializeModes:["initial","project"],serialize:()=>this.isModified("_fields")?this.fields.toArray().map((e=>e.toJSON())):void 0,deserialize:e=>{if(!e)return;const i=e.map((e=>I(e)?e:l.fromJSON(e)));w(this.fields,i,{onNew:(e,i)=>{this.fields.add(e,i)},onMatch:(e,i,t,s)=>{e!==i&&(e.alias=i.alias,e.editable=i.editable,e.length=i.length,e.nullable=i.nullable,e.type=i.type),t!==s&&this.fields.reorder(e,s)},onMissing:e=>{this.fields.remove(e)},equals:(e,i)=>R(e.name,i.name)})}},fieldExtensions:{serializeModes:["initial"],serialize:e=>this.fieldExtensions.toArray().map((i=>i.toJSON(e))).filter((e=>this._alwaysSerializeFieldExtensions||!(e&&2===Object.keys(e).length&&e.id&&e.field))),deserialize:e=>{e&&w(this.fieldExtensions,e,{onNew:(e,i)=>{this.fieldExtensions.add(r(e)?e:new K(e),i)},onMatch:(e,i,t,s)=>{r(i)||e.assignProperties(i),t!==s&&this.fieldExtensions.reorder(e,s)},onMissing:e=>{this._alwaysSerializeFieldExtensions&&this.fieldExtensions.remove(e)},equals:(e,i)=>r(i)?i===e:!(!i?.field||!K.matchesRef(e,i.field))||e.id===i.id})}},types:{serialize:!1,deserialize:e=>{if(!e)return;const i=e.map((e=>z(e)||!e?e:o.fromJSON(e)));w(this.types,i,{onNew:(e,i)=>{this.types.add(e,i)},onMatch:(e,i,t,s)=>{e!==i&&(e.name=i.name,e.templates=i.templates?[...i.templates]:[],e.domains=i.domains),t!==s&&this.types.reorder(e,s)},onMissing:e=>{this.types.remove(e)},equals:(e,i)=>e.id===i.id})}},timeZone:{serialize:!1,deserialize:e=>{e&&(this.timeZone=e)}}}}};P=e=i([p],P);export{P as Schema};export function schemaHasSubtypes(e){return!(!e.subtypeField||!e.subtypes?.length)}class Z extends v{_schema;_fieldNameToField=new x;_expressionFields=new s;_expressionFieldsReadOnly=new b(this._expressionFields);get _expressionFieldsLength(){return this.expressionFields.length}get expressionFields(){return this._expressionFieldsReadOnly}get _popupTemplate(){return this._schema._featureSettings?this._schema._featureSettings.popupTemplate:void 0}constructor(e){super(new s),this._schema=e,this._handles.add(F(this,"length",(()=>y(this._schema,"_fields.length",(()=>g(this,"length")),{sync:!0})))),this._handles.add(y(this._schema,"_fields",(e=>{if(this._handles.remove("schema-field-collection-schema-fields"),null!=e){this._handles.add([e.on("after-add",(i=>{this._collection.add(i.item,e.indexOf(i.item)),this._fieldNameToField.set(i.item.name,i.item)})),e.on("after-remove",(e=>{this._collection.remove(e.item),this._fieldNameToField.delete(e.item.name)}))],"schema-field-collection-schema-fields");for(const i of this._collection)e.includes(i)||(this._collection.remove(i),this._fieldNameToField.delete(i.name));for(const i of e)this._collection.includes(i)||(this._collection.add(i),this._fieldNameToField.set(i.name,i))}else for(const e of this._collection.filter((e=>!this._expressionFields.includes(e))))this._collection.remove(e),this._fieldNameToField.delete(e.name)}),{sync:!0,initial:!0})),this._generateExpressionFields(),this._handles.add([y(this._schema,"_featureSettings.popupTemplate.fieldInfos",(()=>{this._generateExpressionFields()}),{sync:!0}),y(this._schema,"_featureSettings.popupTemplate.expressionInfos",(()=>{this._generateExpressionFields()}),{sync:!0})])}clone(){return new Z(this._schema)}add(e,i){T("field",e).isNotMissing();const t=A(e.name);if(t){if(!this._popupTemplate)throw new n("Cannot create a field that references an arcade expression without a feature source and popup template.");const i=this._popupTemplate.expressionInfos.find((e=>R(e.name,t)));if(!i)throw new n("Cannot create a field that references a non-existent arcade expression.");this._popupTemplate.fieldInfos||(this._popupTemplate.fieldInfos=[]);let s=this._popupTemplate.fieldInfos.find((i=>R(i.fieldName,e.name)));s||(s=new d({fieldName:e.name,label:i.title}),this._popupTemplate.fieldInfos.push(s));const o=B.get(s);B.set(s,e),null!=this._expressionFields&&(this._expressionFields.remove(o),this._expressionFields.includes(e)||(this._expressionFields.add(e),this._collection.add(e),this._fieldNameToField.set(e.name,e))),g(this,"_expressionFieldsLength")}else this._schema._fields.add(e,i);return this}destroy(){this._fieldNameToField.clear(),this._expressionFields.removeAll(),this._collection.removeAll(),super.destroy()}removeAt(e){T("index",e).isNotMissing();const i=this.getItemAt(e);if(!i)return;if(A(i.name)){const e=this._popupTemplate.fieldInfos.findIndex((e=>R(e.fieldName,i.name)));this._popupTemplate.fieldInfos.splice(e,1),this._expressionFields.remove(i),this._collection.remove(i),this._fieldNameToField.delete(i.name),g(this,"_expressionFieldsLength")}else this._schema._fields.remove(i);return i}reorder(e,i){if(e&&this._schema._fields.includes(e))return this._schema._fields.reorder(e,i),this._collection.reorder(e,i),e}sort(e){return this._schema._fields.sort(e),this._collection.sort(((i,t)=>this._expressionFields.includes(i)&&this._expressionFields.includes(t)?0:this._expressionFields.includes(i)?1:this._expressionFields.includes(t)?-1:e(i,t))),this}findFieldByName(e){return this._fieldNameToField.get(e)}_generateExpressionFields(){if(!this._popupTemplate?.fieldInfos||!this._popupTemplate?.expressionInfos){for(const e of this._expressionFields)this._collection.remove(e),this._fieldNameToField.delete(e.name);return void this._expressionFields.removeAll()}const e=this._expressionFields.slice();for(const i of this._popupTemplate.fieldInfos){const t=A(i.fieldName);if(null==t)continue;const s=this._popupTemplate.expressionInfos.find((e=>R(e.name,t)));if(null==s)continue;let o=B.get(i);null==o&&(o=new l({name:i.fieldName,alias:i.label||s.title||i.fieldName,type:"number"===s.returnType?"double":"string",editable:!1})),this._expressionFields.includes(o)?e.remove(o):(B.set(i,o),this._expressionFields.add(o),this._collection.add(o),this._fieldNameToField.set(o.name,o),e.remove(o))}for(const i of e)this._expressionFields.remove(i),this._collection.remove(i),this._fieldNameToField.delete(i.name)}}class J extends h{get _collection(){return this._schema.fields.map((e=>this._forField(e))).concat(Array.from(this._uninitializedFieldExtensions))}_schema;_uninitializedFieldExtensions=new Set;_onChangeSchemaFieldsHandle=new S((()=>this._schema.fields.on("change",(e=>{const i={added:(e.added||[]).map((e=>this._forField(e))),moved:(e.moved||[]).map((e=>this._forField(e))),removed:(e.removed||[]).map((e=>this._forField(e))),target:this};this.emit("change",i)}))));_onBeforeAddSchemaFieldsHandle=new S((()=>this._schema.fields.on("before-add",(e=>{this.emit("before-add",{...e,item:this._forField(e.item)})}))));_onBeforeRemoveSchemaFieldsHandle=new S((()=>this._schema.fields.on("before-remove",(e=>{this.emit("before-remove",{...e,item:this._forField(e.item)})}))));_onBeforeChangesSchemaFieldsHandle=new S((()=>this._schema.fields.on("before-changes",(e=>{this.emit("before-changes",{...e,item:this._forField(e.item)})}))));_onAfterAddSchemaFieldsHandle=new S((()=>this._schema.fields.on("after-add",(e=>{this.emit("after-add",{...e,item:this._forField(e.item)})}))));_onAfterRemoveSchemaFieldsHandle=new S((()=>this._schema.fields.on("after-remove",(e=>{this.emit("after-remove",{...e,item:this._forField(e.item)})}))));_onAfterChangesSchemaFieldsHandle=new S((()=>this._schema.fields.on("after-changes",(e=>{this.emit("after-changes",{...e,target:this})}))));constructor(e){super(),this._schema=e,this._handles.add(F(this,"length",(()=>y(this._schema.fields,"length",(()=>g(this,"length")),{sync:!0}))))}async destroy(){this._onChangeSchemaFieldsHandle.destroy(),this._onBeforeAddSchemaFieldsHandle.destroy(),this._onBeforeRemoveSchemaFieldsHandle.destroy(),this._onBeforeChangesSchemaFieldsHandle.destroy(),this._onAfterAddSchemaFieldsHandle.destroy(),this._onAfterRemoveSchemaFieldsHandle.destroy(),this._onAfterChangesSchemaFieldsHandle.destroy();const e=[];for(const i of this._schema.fields){const t=M.get(i);t&&t.schema===this._schema&&(M.delete(i),this._onRemoved(t),e.push(t.destroy()))}this._uninitializedFieldExtensions.forEach((i=>{this._onRemoved(i),e.push(i.destroy())})),this._uninitializedFieldExtensions.clear(),await Promise.all(e),super.destroy()}forField(e){if(T("field",e).isNotMissing(),this._schema.fields.includes(e))return this._forField(e)}add(e,i){if(T("fieldX",e).isNotMissing(),e.schema&&e.schema.fieldExtensions.remove(e),e._setSchema(this._schema),e.field){const t=M.get(e.field);if(M.set(e.field,e),t&&t!==e&&this._onRemoved(t),this._schema.fields.includes(e.field))if(void 0===i){const i={added:[e],moved:[],removed:t?[t]:[],target:this};this.emit("change",i),this.emit("after-add",{item:e}),this.emit("after-changes",{})}else this._schema.fields.reorder(e.field,i);else this._schema.fields.add(e.field,i)}else{this._uninitializedFieldExtensions.add(e);const i={added:[e],moved:[],removed:[],target:this};this.emit("change",i),this.emit("after-add",{item:e}),this.emit("after-changes",{})}return this._onAdded(e),this}removeAt(e){const i=this.getItemAt(e);if(void 0!==i){if(this._uninitializedFieldExtensions.has(i)){this._uninitializedFieldExtensions.delete(i);const e={added:[],moved:[],removed:[i],target:this};this.emit("change",e),this.emit("after-remove",{item:i}),this.emit("after-changes",{})}else this._schema.fields.remove(i.field);return this._onRemoved(i),i}}reorder(e,i){if(e&&this._schema.fields.includes(e.field))return this._schema.fields.reorder(e.field,i),e}sort(e){return this._schema.fields.sort(((i,t)=>e(this._forField(i),this._forField(t)))),this}on(e,i){const t=[];return"change"===e?t.push(this._onChangeSchemaFieldsHandle.add()):"before-add"===e?t.push(this._onBeforeAddSchemaFieldsHandle.add()):"before-remove"===e?t.push(this._onBeforeRemoveSchemaFieldsHandle.add()):"before-changes"===e?t.push(this._onBeforeChangesSchemaFieldsHandle.add()):"after-add"===e?t.push(this._onAfterAddSchemaFieldsHandle.add()):"after-remove"===e?t.push(this._onAfterRemoveSchemaFieldsHandle.add()):"after-changes"===e&&t.push(this._onAfterChangesSchemaFieldsHandle.add()),t.push(super.on(e,i)),u(t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.field}_onAdded(e){}_onRemoved(e){e.schema===this._schema&&e._setSchema(void 0)}_forField(e){if(this._uninitializedFieldExtensions.size)for(const e of this._uninitializedFieldExtensions)e._resolveField(),e.field&&(M.set(e.field,e),this._uninitializedFieldExtensions.delete(e));if(!M.has(e)){const i=new K({field:e});M.set(e,i),i._setSchema(this._schema),this._onAdded(i),i.initialize()}return M.get(e)}}
@@ -1 +1 @@
1
- window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA7V9a3fcuLHtf7G/JrknmdzHyTdZD1sZtaWo2/bk3JWlRXVDLY7ZZA/JlqXcdf77XeATj0LVBrrnQ9bE6tp7FwogCAIF4P/+v3etem3f/e3d2XqtmuZClbnaXNZ1Vb/7w7t91j6/+9u7XbU5FKr5H57Jn57bXfHuD+++5+Xm3d/+8od36+e82NSqfPe3/4sQr4usaUhiQerPf/k///2v//7DrFFvDztVtiHHzZ8xp2nCyWGLkKEPObrImyYvt4K/plWU2zS9671FL2uGynJ7aG+f7rNyq4TiOIZRJQqKuIVyRSBxt2jrqnzKt35J+r9Djp87FHnZqvopW88s5xTZ//xfjBsvWZ1nj4Yj/X/++Geb5Ke/WIXZZG32jnby4V4VWZtXZfOc7/3iauSDZQMVPZo0rPBXWuEpW7dV/UZFRqIfoF7EjKjXKmvVzP10KNcdXOTukTb1//qrVRl0bIzGIWi4dW03GNPyrq72qm5z1aTozGhO7zyrN3mZFXlr1EX7tqf5DWuH9D/+83//+X+adfBRVZrgMWtUnAYNlORMitXbXgFCLkSSeKqr3WVT52f7nCwR28posNfQZrW2StaioGyTfljpJ+/ytVVlk1dl6Im3raCOJEQ89vkkMaej+/k/2PRXKmsPtVqqts3LbRMj4kBFqeX6We2yGIUeIRJPKOiZZ+OFPfcdJlksQuNePalalWsVKTHhfAV7CLP+eL1cqvolXyuoGTMIcDwDKFoNg1OEvbEbDQNDKjXRI67arUpp22z9rMdsoTqYDLCQE3x2hGe+ELUTv8nqunyqmEBRxBrCtfvZEqoLSgJ7wNqKiozzbjD4TXv2hXCe7bPHvMhtz60qNE2w4TTJ6UbDomU0nBa3rsoXVYea2/Ar5OZHVd3Vlf52VZur7ebxoh97S7TvA7hhEPzn//zrT//xV3t4tFNt/XZV1bvM8FuVh51Db5vahTDb9LkqCttbN7gj42jJta2L16dVdZO9qXp6/JvbfdeuZAEGzGnquKWLcmhWta52580LrmPZS8zL52yvnvJCRfG7KEnll5vlL1ECBoDjvtl/f02vEQ7NDhyqmPowrXnW+LrwMbxCVD1Y5hzvl31RZRv9xMLcHoTjX+a7faGWb7vHqiA/nEZW01D6XLq6vry5ePh8trh8uL/8ePlL8FN/apYOgPnA3w5dov5s+6SyjaobkZ7AcFMIzcuqmj8Pgm/Xkd2xZz7sOsu5ejDm2Z5h3hC9rkhPgRiNJ6qTFUVIFKOyVe2FesoORes2yoCAC2C4v++KT+p11X0jn1eFORMZIPcQPHt8eCgQo1FQ3aooQqIYlX1WN+rnxc15VXWzCK2SNQgMoADWsW3O8DZjlx31BJMoTCXiaSZR7DTQefMisnZWLMvH/SvA8nH/yrJML0OAa7JlGfUbECDTZgzPYQplVJXTMEbntWheoxRcgMgd0ZRcAPtFN7gQ+JIZfoU+kDwm60t8ZCIZ7W/wwQT5RnZYsa/jK9Wun7uJUbUZgPLQdVYKglnN7hsNVzHNOd67WjWqbPWw5qxt6/zx0CLxImHsSPD89v7yoRuJBQdUI7lhywykatVUxYtyQhls3CM5DWO7Eq9hBqgnS77DrLP9c74G2AZL5PG7yZvQHIVhEfMY2ozUo9gxBtnJR1KbRTyWrgL4eOZFq+rzIjs0zNywJWEg2EZc1W0M72zPdycd4rza7bNaXQ2tgfxcIuLiwMSPp7GjU5t8ba1l8jITQBLQZb7Ia4UVwrKmqYnWvsxeQgkFpsJkFtPuCW6q8c/cvJibPkC94knf3Ve64LUSHlbNF6ImH9Wlai9fVNnKT6lN3YOA9r5UMV2BLYKuFwRX8AIhJxbrxLhza4Muc8SyoGMaFypSDes976r9YX9ela3OWho/586ronCfaEldIMIqrjrUa2Fs2dvEVNq9yjbeSIqh9mFQJsrF5dXZl5vVUhrvhFVGBmYUpJf/A8GixxVhNY8KGXiQsQw1jZA0n7kSKB4kQjaOMHvMU0booJ8PHeRbnbfyfDGpZkIjnqMPWQM9S9ouqhMk2MlucGYX9Oyu0MxBoXoiQYuGI33vxBHdLuhCxr622lplO6HGOpuo2nJYyej1rIwGHbDOMCZYhA4cpFwVGyknwzbCwhTgteNk83IyTqQsSyhUnBT6RaSKTaoWWh/k+z5QLaQtVDuCilVJtAqgbVfZYIvEj+b2CNi8yd74Xj0lytyrp+jxXXrZBDq+yfzjoOq3vnsEEkMC1lCzEZXc0obEMCeccgJZz9GZ1GT2Jk/53saEMkhSvH3vgBBuqtFFqFhwRM/O3o1QGoC2Rqh+mUGWaxadMc8MsTxuXsydlnDzTy2/qVTTgLdP+o3xLW+fz+p1tlG/3KutepVp34dwoXqd7M1iRotR4JAim6E7sMs5ud0bFfmaHqgce/ElH/XFbmpAX+huNKQJIiss8sRQb4e8iyxi9G3THPb7qkvlI/e7bF6fzvsFMCvpw2pFA8WDbQw9GRevT5dlm7dvQzJfcIIxoOHjuXbW5cmNE616Zf6uKt62VbnI9nsVr8xwiV58VNXfm6q8LhtVtx+Kav092YkQFerDTV6qY8VnDlR1pV7bY1VnDk51l+0vfrnSHupXVp9XEpwPCqhSHOxEkMaPqw/IczPZQo9Nnxh2lRfFsn0r6OUKmt1BSusWX89uri8erq5vbh6Wq3/eXIan7Wg5D89M2m1Unb+os7Ks2u79s8jL5Tpjkh9oyRANs/yYl+2quv/4IVJphDHMu0wPM/L12HIiFVw4r5TWyi01uZFbitdNdZe1raqZhKiglgHmVUaPBut4JYeAUSt1hkCR/5t6tiA1nwBR0w7eHtoiL5P1DAouiyor8zb/95BT+i3ftM+RggSD2BFeTwMVoCecjdERRPfOCw+LAuQjUMjK74cXKew9UqDXrzG9WF2V4GRKWC9AJThwV+XmbhZcrgMK5E7/jZMTPbZNfn3W6hTUxNqx0KyM/kjsdmXFa0xQVuDi9YnfRRKiH4ASudUquimp1/jqDhGx4t2oOF6qg8nETWKtGGBZRL80jhKaCXixvFR9Y+y+ODdqk6DncYiS9ogkRojYwO3Q/9hXxVtxinIFmFj5hf40SO0cDDArcneiEtI8rHTXpOLfEgOOp54Kn14in4OV/JqrH3dVndAvjUiIPvFBtuCckH4wnDEjqDEhOfp7Hch6mmi4LNs6vnFTJOzs0/y92A34/r68/RwtSpHIoous/q7qHnHxy1WiqsPCyepWO2SX6vTdaEEHj9Tl7eOvat3eWOP+wDc8UYkzWvqOtxHOmC9WkBr5iYpdcztGsyOQkyEf9OanaeZG+t6wjLHvjbcy2+Xr7u2+UG2m+e5Vs69KLv81IMiRcc2H3zUNilMknGh/WI+2dEZ2oe9GW86BMx+p6rWts3XbD6DyFvkGt6U8AkZsq9p5rugme1RFXm7tUwow0SARKq67j27V4SjliYWXHbbvdX7eFdlasYcahIVJHl563GB/UWc/7uq8qrmjdsLKFA0v3LWHI1U9Dn7yY7t/vXzdV8GjEiahyRDqhD7uX4elBzFVjlDw0GxXc/fLw2dg2teg7xDMRO/XSMKvPJ1eACjHpMlVdVmAbXkWoBmYxvR4yIvNx/3rqs7MmSdZyQKiAs7rOlKFeFuTUt+yt32q0IhlZPru/+P+9aJaH2IryAMLPYwGijt1CR0XK8p0Eb5QzbrO9/ayMirmMmCS18BLglS6Ft4Lo93nbAe8dkkJDcVEVnmyiIZy89yqzrtp8cQGR+H5nl7v94aHnZYx1OP3T4A+4QMcfNkSDpwtSjYdWiRN1xuWUCHONpv5RCT4zWWqUAzc22s2viz1S2YDTkpamiQHq7panZ1/Wlx+Xj2s/nl3+XB5f397LxzLQSqHebj3oRkjsaGYehaSebo2qlCtOqPaCaDiobmV2Wa203OOzh40QI1k4HqOnsNAXW5yvXcnSjXIEqUcF1cCz6iZh5NdcUcMUFIumO1Phk8EM63syj2OluxewkDsSx3QJTNOGF3UJTeTcMDZ5/tFRYGExsRB0OYiQWvjjrnR2PZnzsLLwp49lgvcv/3uVXMogKllX8Qi4LPo9NsWLo5tjJXleqGnT2/y78Akk8NvYPkU+6IaJtviJWYsOm2lxyLYtJWjRZHwH7Bfs+IQH7YBx0746zFWvjsmcj4FINjNtpzrBzZVb2YA5MaZ2FSxER8hdVThLJII0Y91dWDOGMdEOxJAtF+RAI7r5WUdGlb4re5H/xfqKddJPFwWdEjV55Ak0f6XUAr1vH8w+8Vu7ayLgt07EisMfsdog6U1jfPrRTebkiznoCG9bt3jCEUHD2guqyLf+K8bSM/ColrLtq6+q1S1GY3odYHQ2VGN3usQPLue0fQZAF09Ld8j7e0qkKQNFtX0u+SsrjP6+H/uFd6hIP7rcn/glxAp/g4F8Xfv3iZaoIdJCjqxddmzqA1zDmdAiYAnKHYt6EjZjkPSNocYMXomLkYjvup8NKhn9W4JihYe1Jx6uAS9CRuj1fdvqWo9GtVLDWRUBOfuLEFpBktqd/lar3GZCSDJ/b7EJfniZsAkO8ISYV7MY54jvQgQYV6cpFoEKsmTuS0lexCgkPNU4qfDUufBWKXQaJwSkx1wZkVSprvS57kEtVBJaUHEja604fIGCnrCa30k3vcesJfx9/HKd5pEakH70IO34mBiuAbxmY1JmEBbwa735rtwmpppAtY5xWnN0lqcYQH3/qPZDtlvEhThNxib4XHzsMfAkCnWdDS2qlR11ipz3ZugeW/ZhZpED6CPDRjIZhMulkyCucXDzWDMSkJteJ5hW3ym7dEwN3zUUJYXekxUbYjHyvgRqmCSrH/9mlRhWuIV++ltr+oiL7/77k0/Qc4RRGN7mYkClHaLmYyECiFo0Wq5Ll+yIt/c7vWDkFdl4EhQ0gyKhiAwRoYWAGTd1aLrVu3oU0rGXzC3PZr+8p+JhGYza89cS6bWSycG05Bd3dbP8S7bE+92ktU157mr6vsuq8n8NJNzMGO5mMOeDSr5oOfJxj5ImWPzD1GmGQPnw/uE/Lnws5lzIhxLSZwF57IGDlCjaZmT0xzej6paVxs6I8hgHM14rro6lLCTjjXLfJOV20O2Vfeq6U6JIjMbDG7PXmA3b9kQqU1jmbc71F1qWoYly7jAn/UF+pwvVHmQuFR5EDm0PcCj/8lyCYfRkcTA8XOOCn0eF0kePkXM4VweHouYpuTZs+yhrziSmvtKdPJrfm06NjLhztiQ8KbqvzfU16PGPxCWWEofp2AMaIIisrAzvhnegUxZDAuoDCSj67tJGhawht7Zfl+8defUVAOCqnSP3Ydx2du9xaqyvWfoLQTD/Gu047+yPhN1KDVK1yymNieQ/Z0XqNZZgoJzlRwuSv/1gqnIHzMf8nIrxsu0wYJFs3pRsog5Gfdh1RsE8nK7XKtSie6Txlg3dGifq3rYcNVfXNEd7iEUixbkyNi0Xx+ne/NT+TBysa1RiDeoDtUEcb2I5fX5s1p/f6xekzwQ+GRX0qs/osZ70yNUMAE93dEt5h2hZHFgkt/yWl3V2S6tBQd4MOlwTyqJgb2pSTMO49CuybTHellZjQ2qJYi64vTE58uvUv9rmmBZqSSnWxSLltGwM8eqdTco1A9+BL0L42MyJ7Hp7PyKiw1limZfMxpuYUgZQNs+8EJn2SToTDiO/C7TT7LY65ECFlaommqX5SVXIZMBmAy+UZsut4Ri9ryfySkgn0Y92idISOQziB/VGuQ2hG82z0pfobGJjBCB42Tus3IbWwkOBgsR+f4gIyPlCcyWVHpAmBfLBNC7yYchDtfebSus7wkxe6F2yHkxu6M2TjqIE3GRbK+jE2fPi+qw+ZC33UnVyNDLVeRYMPV71R7q8jhtlwNT7vqH44QdCkyXkjTbfVAtKEQ8ApeFeoGmqXxD6EHg+I3CEOyiIFWa8iWvq1Iv/nBFsa2wt5gO7Ns3lbXPUjNw6T0o/xIrqvpDtv6+7eb4I5V8ML9AHYiWpMMH0LkndrtNC5uL5N9seZmm4iI5lWVZ/UhTcZGsyqG8ybfPOtMjUsQGChqJ8XKRnMrXvG4PWZFWGgLMTwbSj4zZxzgK7IPiZ9CSpWDoGc89crIqGO5wBYQvKZ0vUmC6RtIWSyPhVdzqpoUQefpuMrlMsSWB/De9lprotj+gTlgwMMkshLhgwFzk7DFbCHbBwLxoQQ5y3OAgzB0ItzHtxOsF712VizAYxRTA4w24P1KzStS1cpzX4++Ywz6b5+tEGKL2r3lhP9AIQuzzTF8aL3ybmSZYAKp6ZxwN0Z83JQTE1Aji+UFQvfuQ1ToNZLnOylLVwESRJxtgkITPq91j9aF6TZH0sJLYRdYqfUDQXb7+nlbKAIMkfPm6r1XTQPOWnqYPluT6NKGk1uNCJaluW3OalAuVpBJChwbsPtvk1YdD21Zlk9IsSLwoaqSfpEUwwCAJL3/k7fo5pZwOUhLSm2DOapWlSHlYRCyxI3Gh/DtPXzK0vP0sjTlcM+gFEOZ2C+HRC3p+IbpTMvkCTCbYbIpOSxJib5HOAK5yTQg/vW2RuzBOYnEo2rw7qTDCexskzppFMN9hpN0e1SjaCSER62PnI5lHCFqV5GgsWIPSN6ppGxzrBdmRTYHbwb6/A4n9SrJ0fJz8rWRAMBEfx342fVTV/XIJ9GCmFdqB0cxE+7HIeTG39yLmUmzXQzMnAa+B6UyDMsgeSvPrAeGqnPk8EF+PegglVqNlBMeD4qViYlCzSu52lF22VUtVv+Rr8fOdtIUKIqi45aGFEHniFP+83N4fCqEbpbk9AjyWX5XekhoTUQcRHdegIldWVxR3yNvW1Kqt3tq3WajmWSw3bY2VWVLyyhsQw5xwy9mqHVew4WesJB6X5/pIF+B1nPt5cSNF3jSBnKQ5XUctWkbDcdg5q4rxm7DE1tizNutvPpfHrZSGj2ezG/oLIzQICBqpRzAAigsyxTlCcBHOdraXA8cFV3kagFLz4OznZD8DGjNrQ2kGaQDte7U5dEOE8+LQiGv7jDpFFKO/VNCKCeKBRSXO2t6+qLrO3ZRPSNeFc1p/r/Ky21RjP3BxigESPj+G6YEQTblj8vX01GVaW/bgnNZtvVH1h7fzIjs0CdH04JzWPw6qfju6AkMsYsJaWjQtKK+hn9ljSkYxcIpHhzIyimOb6g/YH45uT1AN0bDvsEAxjSkD+dUszRtMb54xCz04PcG+t0y0JOl2vFGlo8CSoO7/ootmgiSBldrtqzorvpR5Gy1EgeX1PWlAG7mhqqiq3eXTk1q3453JQCPv6ANQNt+kONSpYhSS1ap1KkmpmiZRkcHzuWhlW2dNm6YaRrMdRl3tl8/ZpvqRpsrh2XnTOntr9NXHabIMnFP9dFD3eg9uoioD59PN9eHqaZIhrDgwAr/R5qEQ8lF2u8/W+qrTpKIEwWzmnO66kyssjGY1dcO6UPqmLJ1z0GFhxQCW1VP7PEssIA1lPzsZIfe107+wJXp/gECEjKFGKPl0ZqIpw4T8i9cmRV7sN2qbrd/cbc+IShCISU4nDWVFvGwILEkbs/sdLrgiMAu6EGbxaLyG0C9KkN2FiEtTqNu/Qh53exSFxbSZ07BmV0UW2R5cWCAsodEcq+D2P5SILOxMWC7UJqem9uziWEboel09nmUoFMMmd4Hs8nrAeUGCLY4bn6rJ8rW/3mLHxzLCajrA67luU7NKjuu3e1Xqg6JUS0+mWkWgjaGiSDpukQJSkAd+Eb3+MlxAzxQtngfkh3SkVIiGH+hxxTPeI7Ci/Hk6b6iSIkpYQgFlFdxYUiKysNNMutOehJxaywbPKpbn6WxiCySlnmXCgNehnhBinxnrtQUCZmi7UgqzbbaCB+QzifZgcqgt4uJkjYiVGkoqaoUm0EoBHWjGV+d0qs29Wlf1pomVodGcHrAl3ZbANqTrK92ndh4cV9vMPkgaT3ftPULBspfI+yHscPhccHhqC1gYdpA6z8vDm1w5CNQTYppu9bOyET45nf14MRZXYMMEKqB1LpBQKpPbw7ETj/og2w+1yr5HqvhATKahQwVqNUwU/c296YWj0aJgigxMfp/thOP7fPIRI5Iv2yqafMSI5F/K/LeD6vpaXVrhHe0LUXh2rldl7S7bJ7Q0AinmQneDwuMauMiDOXGVv6rNMv+3Oiu2VZ23z0JiVMAHmgZzwaTkP1gC4i4BKPvxw1Fhd/CY6HJfZO1xofYpQOm2Vu36+agyExyYuPE4HuVAgId1olabapeXWblO0g7A5fzX6BYd047vh8NhI18fLoxdaOguEUoImQ/kZf4NZJE4Av+Gske0XSQtQhn54jMhbCbIsEyfEHEKykrVWdnsMz15+RYZewqKSkUGjoJyUkbn0L0TI6QoKCh1VVe7ZfuW9KRINKAL3b6DNNkJCkpFthYCCQodF000iH2qfTebkyAYQLOCeXPIiq9Znes0scgXBA3m5LwPu+BEAf89CN3mqh+c/CnvT5pcqPa54o8e8D/YAmhxGiTblnl72CgxPcqSJGGSFj3slMVonKQWp5HKjIXLRYgKw1gjQsFBSAr+8yBr+Jh4Faw0NE5e2YDOBE84Cxw9+9qhls66tlzfZ22ezdeucwUgTLFisBpeYSgZQNstWHeRjVgpthVWnBCzVxKHnBdz/ZePco4+vRk7sNmi5Y9lJvNERkhwAtriJIBiSkecwq8oeTOYCOkdFrmNYefPl4dH3fFAO2BJW7SOORWisgkhRN45AK8DnFIc9IGIMPbouJYx0YUfJE9EFnbL1F3JyxVlMsDSuiu9Hio4PlPO5uwEcFYUlXSIicFq2LO01wuq+ByxifCo/9Bf6ffub+82al+rtV54fEfpoa8qQlh4RRlJlK9tfdgM107/dIE8LrNcCMyu+09XbceqkUg+xUBaPjfZK3nN/Ho93m0f6zuJ5LOrH9VUWljGQ7ES03XjMQoOCBWICxeJZLM+slbVeYY/oiaATydpnqOD5ILYjJLHX9W6TQtTAMvKHVr5jBpTYrZnJ8uz9jmtDCSSlcrXep/V3BvgUhQSkFpk9XdVp4m5WHHZI7qxeSheojvKKEHEw/ELGf01k3O3ByvRUETMfBqi5VywvMCR0AApoCw0d4aRQjZQFkpq5zSUFfuu1wIvN1slzLSbKjaGpdeXMkWyWxCWXM+0p47OQmBW0Hji+BlfU8gBIQJg7i+hAqf7zthIDYRcn0WY9gYikZhUgoZE/lXfSb7Oitunp0Y6gNhg9GFiqozNbcxGmh8Uo6E02Uk8cDRj6DHzGHvMXy4QUtMW43XffRwv+b4L8vKZ7NzzE60QnE/mVJAJcqp1c/S493Fu8/6aExQrfybfmp9YBWbt6ekJgs199mbCEHVoZrKzD87rzWwuRJyQRIl/hThb/bswCTlzGtbs9KPOONCp1lxVGSZYbZGcXoWZtIyGM/O1ygu1mXJ0wf1xPAgrFKjrFZOXjvKMCkXM+YNhAB6CyJMIGUnYG6rY+N7IkDle5KhdkkE50A+3sN4Fu3bh6DtzA4URL+ud6MJ38f7LGhvpvAldMKkSCEvIZVbB9Z4SkYXdMuXqB3GCsl0a0wYqx3m2U3UmuG+xzgg+DYX0lqfm3Hei8U09Lti76GcDbGPDfl8MqSF3dbXXg2Tpu9BQCKK5EH2oqu+7rBbuSjZUTAA7nZ2t8yJv37qGJedTGQokkpUqKp2fJF+OZ4rYGHYeXR8ylBXLVnxpG/wuiJ15Vi+qiI+TD+PnnPddmaMkXJAgAJ6VZgvAp6Td1apR5Zw7Awm4IHZqTnsCM0/W/FRVq+Jr1kOxEoV4fKJJXQCnJepj1jpD/HmyIUKq7FqdV+VTvj3UcZVJQ9lUy7brSj6r9kcV0cn5ME6Eeg0w5MGXQoCUn34iiaXpp2/5Zqta/NVi2IOfjT04+ClmcHsg5ivvR2cgfOYZ3KY9+6H3TT12GWD8u3wygd7mn5Q+8kyf6FdAT//MTiCFpkI4zyowhWFqtINwcZ85CSBfr52JXLOzgo2RahcZhrtm8DcQVL02tQkT6hYc33sSQnFsmcVqmVAKEyYMla/EiyhMEyj0364Qn01WA8FGg3RWYgY/ob4t5EgsYiNBcnoOm7SMhu8wkB3mWKFuY1lhLjkv1vlvH/JZbg/ZVo3Lp41fBs8EKgBD3GVNkcSC1J//8n841+dPOzJcgNzMwNd7F94/6jMzlD4YgS7/m6rvRgsnpB3+occ/GJZgZAnmMaZB5qCKG9TJTAgnosTFk9S023q/ooAIEU09dKJtD1iqVt/+SzT3kNyIiK2jAYdX1STk/w2sucE6sQIZfaw+x/4nvkonaZ8iVLvWY1np4zSJKu3+jlVcZ3qvmkPR0lHruUw7dobk89ez++uzz6uZ7GXYEDJxTTY20U/mottGtWrd3jgFnAeBA5Vpxgwqt4o8z2Ug2bpdhItdZO36OS+3vU7DUznGDPM+qxslFtGw4pLv2RJ6naAzKt5l+33/zFJtpG+x3d19+sgkv70N8AfHEO85CO6x1whxc1JERzFZ3qtsc1sWb8v1s9plqXo2C65+nGqsmtAhYqIR7zTH0QH59iEvN3m5Hc7oP8IVjlZ0bspcindggh4ZAfe1cESppaSF4SXj1z+gHKxxP3nm/v5hef7pcnH2cH95dvFw+/nmn1THH5Kj8N5LweyoHILzqhhumLne7Qu4Y7JhCd1USFd4nB1d3Cn9kFthGMcLSKfs2UIFZhS8UvoKgqbdaY3GYucY1pF7xuXh0YPPIY8VZaiQkkb30ECEY8eqxwrH6YG9b1gO6oNHYypRC9DAboVtaZV50MUoOWh2UHZWrz9eLyOe9AAAW2+WxNznIiQGOWE/FTbEvOMceUAxR2hW3Cu2zyBacmR4Qi45h1vQYPBZjnQJe75t8Ek9QSenhisBgAfEtYSejDC92xI9el7Pbm6uLRhKUROrxgF1pCimtVFP2aFoXZKrTCcgvXHDR0+Xp2JHkmPyCtNaBguslXh0XusY6WhepzUMNmiFuNxgrQ/W/d1moRemR96by9OPHw55ob9VzqvdvipV2Ua8y2QsVi0RLngVJrsQ66VTySG0NBA+xjN5pCyzo63yFAGE3wIDU3fgQUJDo3FRjUySDlVjQDrGM7oGLSTaqGK8wRsTzRrZkJICFduA5uN/IloPAYpqOqxoqKYoUdghuppmGDpPGucMPm/K8Ea2msgwga9Oj+B38SrSmcSPFcinmE8W8rmK75OP644TeuJw35LU/46g4YZVfw023Q+HMsYb+IkWnYh4io/s+SMqJu2RObk/6GtnXXVXWIYfhsEAavofVbVTbf3WX6qBcb73QL3EX//8n3/96T/MNcZVdd68eKs4LLcDCTMvn7O9esoLFctPAMMqv9wsf4kVsDEh7nXzsqqGh5Lqdf3ZwVGGRnJLvWOJEwU5PCPb6qpE+DtDlmiqM4xuMmdJdT1hfNqSoXotmtfE0Aag7DTv+fIrOtr0TLEtVWEBt+v3BQRJu7f3jMFeFZBFu1P7UhogpgEAFFlRzI1vSAxywo51AAJGPNIRNPpey0drQQBCtQGLu7UiiUc5Z9fS1eXZ6sv95cP57c3N5fnq+vbzw83ZPy/vH1b/vLvkpjpFnzhiduJzYI6smfT6iKwFOvYREacA4FMR4QI2yjShJ/Mh8mG0mewdRFBlEzuIIircFoQqvRMEXQlXPjqBgbmAT1yYqNNox2lq+DFtzZO3CdHmbvGd1J8AM/8wfFTV35e3n9FejzRHP8E4IbcF0EKAvN0ASAAY9QgXIqJ9v1xGBNuzRmPNyBCh9mVkbS/Qnj0eZ0wfe9guLq/OvtysHj5e3j7cL5cPX1bXN9crNv2O9CDAw44hPtbZ/jlfN3ANk/ZYHQtSXi3TUogHTk2TCLSuY7zA6vvj/dndp+vzJTiADHngswg1XR3KDVTFliFYtwFyv1JtclbMrUbLFK4/VhCssQ50lGKM0E3+PbiGT7NrhJTvNqRYOARAsoYryRKJbXCPdzWeMdwWgyJUe3RFRGG/XTrmSLYbqIyluBHAiNYKuIGOF7rDreo3tI5Jc6iWBSE32rQQIG/HmQSAkY5wITLa0/5tPOI+JCbqnGAg8oQg6ApZAz4orhZi3MG6bhcub9nAXZH2cVhtomzVttY3Ougz4OFmwaCwlgHJeo2Dk8V9cpoIg0NbSapf6JP78+IGrRrPFKoPRsCtBF9AkLTD7RmDMQZk476ffl7cIN9Ovi5BwA5jfl7cRORAUNZoFUZkPpAysrZXl6mpJ7A+liFPIfGGhXmCPqzok5rwmJ7Vdfb2rc72e7WhAg1IvA9yhJa4jyjPew+LiVBVFy9nsWDC7sRtvOjEECMY3C+aqu8Tsu4cFW88zMRmMFjFxNoi5rO3yPbnVdm0dZaXLVMY2w569kLUbs/qUHNKdm9qW4K9F6uGvRD1aafLt3JNlk6WJOB8/7iA9uwsYvfr0LRE7cy0YQ2vZia7yxcFBIjW6LFcXSzidwIF1bDa705Ej317W5ohBmDFqN9RclerjT61NjiLZcnRUGk6a0FvcmJ0Fsy+JuLqXPVDH9YHMY/GEml/iiE3vWfRzuYAcZ/yG0E9AeRvykW27z5J0YEDbY8+9KwU8fhTUogHXpdAIPBHFvcCe4wtLNTSRQ9iphFGYMSHThASVfERnzxhQdAVugWkfnckuBPXFCJTnHF/0A+hRbb/XLUKXi2k7dHmwEoRbYGSQjzwWgGBwEOOewFW/tndw+fb1SW6XBhygaBhJzlGnrgOgIZE1XhcBxAQBF2hq94DSdk/CX7IqUBBKD6ki3UKG+oF4ZEPSYRjcAelNnkG906+MdZQORGvaRAiorDTEHxzNNKYOBrd270ql22t9NF48DIuA4KiDYm6UedEYYfsWmBgYG0kOoXWTncL63lRHTZo1YQQUL3Icm6lBOUwP+zqCGHAuoj2BXtZO+gTO4O2hPvq0MLfaoQxVP+siFv1lIgobFc4YS69lkFV+VVMgMCqBV3AWtf97ZfVJTgMJIUdPDv+i9o9n7prPmq3PCUSuTs+fQ86KI4+orqvz3ZweAlrLL6sjBdgSkbWdkI820vPp6QHnAVIMKAVihYWrlL8QyntAyl4YB1G/97Hh9Z2ji7Ke4oBVkMWr1BdaC2Lm1iJFI7SA5bPBLnwIpqvJi2FClLiOuhRjRNvmdD3MK7K04UXJpeHRz0DG5XSGsZgvTkg6fWxYUnUG+/kUxsVe8xjjEfxhz16FOJLKMId6HDaABv6Wkqpr4hXlGaI695JREx7jZjQC8phfpB1kXocKepLchtFj3FBHYFbZ+qMYnTtYPOJIXTcE4N7BZ93bKJP7Az6xDaH/b6qQ1f1PHzvoIFnd8A+aCtHxVAInmwOEIegUO8QAvP7jGVtjpd7OOQ4EPWd7g5f7/6AJapi8CcRPDM+uno4DwR2oQdL6rqO9YuvrdgsztEbGneSxNFQxQQkEU/cU7UpBNhNJnmTeoy0t8UtVB3Q6cOB+kDPQk7Rfi+Shz6XRHeYugl5hEXJqZOLvgR2ZwgHh0NDtYPJh54ZVh73zb37Y0B6vU5sWEIEMZGRnRCCE3Qiykk3RE/j4Yj1S87NkozO2PZYR6ovtb3c5O1dVmc7rNtyZBwKblSZjabk3WOCzgy2JZxzyKQdvqHgIRt6+d7vd1B+L1GHuj7JF6Z6A+5A8WG3jsABSe/pBEGm1LQm4glV5pu8Ya6qJLVNCFTWyS39SmJUQ12Xr8ozil8Px8ofp0iNvY7QDg23bC+e6mo3Qe2E6XC/5qt7NGwP171JgGbV24W/favtWiaptmuoNf54aryz3qYjJKHuXivxLGxU7qr9Yb9Su32RtSp4UnGomBw6HMH0wctRoxZZlunogsqgS95V1DH77xM33sfsuCck4vbYJ2+uh5TBXSz4PnpONSblXYMipsZJc7gyIybFaSFA3q/V1DnWCBfw6o2cWpV9QCcIvpRDV6DgVLkgBKpwQNCt9LAg6Ir7KfVV6b4spqsKIaAiy3JuiYNymB92Yw9hwLYW7Qva9L6px5gqIM2h+AtCbvBpIUDeDjsJAGMe4QIc7Sv46ELPFItyWMCLsCcgSDqRdY3RqMqycDQXeDRdUyyaYQEvmp6AIOlE0zVGoynLRkQzYrBBWaMxjRhqkDKythfc1GUaWB9bWaaQeE1jnmDjHQN5IgfwdraKeGxdW7CNhSX8FuZJSKpu63Kt4YACynxUzbjuVHloAuvyC1UeiChrxIP+DdxmZJJMcZxJfCZ331B5kGJjs+HbrMrDdat2XBn173A5bTK/rB0ZzeqXWdvA5baYY8u/bK0zDuggdEZRkXBog373zJxOVDaJJgpP33TK4xSKYQqXjJ2iCbKHlQJ1ElECwzyqfuJKYqrwqkMfY5bqc9VedasOdV3Vfpmsn6EyBAjHR84mZOjdz8u7qm6z4kud+05OP4H7yjyi0bmZKEBp9wV5c3Uoird/HLIif8rVhmCe52JnxiDMm3w1pWByhK6tkjwPwthpYyHFrL/KW0qeHOt6yrPhYGCCC6I7Ng1MF3fKbd4PqqlzffBjXWZEyt0kb5oxOXfDwq5ey2XIDCuGazucD/6Pg6K6vYnNsmP4fhN4fiPwdBWuxwOkOslVvusPFWpXlT4wh2rLjghPwLbqh1r9dlBNe56tn4lX9CRkmmGFKlRWO6xEASzeGcM89FvlOivRjggpEE17ts//3rDPq2GFbf/s7c+rjdp8zYoDPV4h6T0ou+fRNb6odllOf0Viaj0BoLnI9kPmhW551+VTFa3qUwC691m5TS2mgQWUji1efNmGNOh4pR4HKLiB69eKOG4yXMT60JnwzjvDX24f9KjK5SNCMVAa5lwEXEK76AOepPEOFOutPmc77zgxkk4bSpTdzfBN3irITcdaIl/mu32BMZumQKUPQ4au2/2kir0ihuFzOqtnHJOEx2q5Ix1KK8zDZ/IyslSjJOjlktst1Te/V82+Khu+awClRy7YBe8q2RTtgYT/TD3PyrUqCr1ZP9yODCOo/ZCkboMxSYMCzjWggxk/5qaIpezx3m5VfVfBx9Wn7cylnmDdmeZPb9w4yuSeAMzYbLL5lrfPZ49V3S7zrfUlAGo4eHbkpr8lwm1E/wquBBbFz2X1oxwSt2dKVR52DqFrbCtYNfishxrdAajsY9PRGsbcM9nNxeoQjZPc/BPZUfsYTsE5UaUbPm/0zFnetPkakBMIjtC+6sb2ZdsNUo/3xKY7wq9PedNW2zrbHe3SxHSENzfZoyqO9qRjOdaL4+uopznCD/3/jnejY+G8GB8t+3jZkJppzbF+OOSFPsu8O0aFPjzAfiN07EGUOP6c+6DzrCges/V3VoiwByTqtjtgzf6cotkNU5H4enGTl2r5tnusCp7XtARou6aB8RqmEHHxtq1KlNowBsh7Q+L4DJreMZe/VEKTDRQ9P7FAkI8zjmdPrarPNpuuiX3Kyk1hDrxJKQ4aKey8uWU56u0tiei1jmihCRQpdq921YtKjaaPxuU/qKeqVmlVSWJjpZOLHoLjDpDjQFYzPBjEZOJK6ANx0ZhSRZYn9smAH4oLnb5f1buMZ57NRMK8afXny5cyFygNQ5FU7lix7rS3EkcNs5lIWGc/8nK7qoS3lmEnUeoFHLUZ9lTcq+ZQ8IEk7BMkrD95yfOSoI1G5K9yVWwaceBjmyLEDRiyBgxVoV66+Qlhe4HNHwDBYtRdErQCcpHEZVPnzgo+RTlawXQXqs3yQgiFYyySwyPuqLE2/CqI6fqv5hVXoNF51tH0ch3SEFDoeqPKVqcCQBqzNUjfPQtnxI7msIYDSRNKVTtC0psghkXpWWFW1j5iRVDyT0zhyc+zffaYF7nY5YVAMWJg70pDQCHvcICwAH0ugECc0O5oZJzsvWq6C5GaDwfddUXIOkhRVr+M0YqybSFqcWw2WUl0H1W1U239JjKahiJpnxbzSRjczmYSoXmjMxhWGiIKlc+q1qM0YDDt2MrU3hW3aFE4pCjbqh00UjANIdJqt89qhXPb9oiEvkQPpTdsEep7tTmscedtc0Rg1aUUgfSmsUTeTXDfFdla7aRPXdtUJn5TtU4CO69V1gLTDxQAFrlQTVtXbxEqJkKUUeW2fRY/r2czkTAvVVZrS/5ZNexIyj/0S73d+S77Wulb+TbvLB33yAdShDrQgXC6yroliYPg82QmERbVOmsrPUtaK71evapu9F/0YMw96ofQEdFx8seIp0ovD9utatoEYRopyYI31lmCUffTWVLWRUGShmUMkOtHWP9PGhXYpiKxXu4RBy+TlUhXNVm+Xqj2uZIHWa4xRn67V3XXBEB+y16S+Jy95NvOer5pVtQJgSQx/4IdsIVyQFH00O4P7V3+qgqxYI6tRA3cNEOIoBfKEHLG6TCwGImRpfSuhdAmLlLHB+AiYsXYpiJxrRpVtlnoMExKgIRIQmSWMMEezggmKJtW1VdDJhPofQiEiYnTxbOZSGhs6+j2C6AFCONiJO8r4SPdNZbJ6dREkppJQAwR+wmXYeZAQqWfhjvdiAMGnwJAIvqVC366E/awxKe8XfXllyaDaYgo1E/ZoMscvjmWGH2VF0WfBLFs34R2SiJEmSLfqK95kz8OZ3UI1e6ZiwLzzTxo06IQokxXZPGdMJtJhMA5VhYzfHKVKaG3X7SqfskK+aPPs5bonSNvwHIEUaJcrn785WIe3AkyrjVCL3UY4HBem+31gEok66xkuibv5tjfxG9q21Qi7q+RB+vNNcbIdaPqnun69vFXteYjQkMwoW/5ZqvaBlax7AGJrhfHQ+WYAwKxzxENEYWulvA6j2MLUA/LDWIvaZsCxF0pxSGhaYgn3MyU82WJgVwbm/QncR7sh5M0v8rbwgx6QJCGueLWloA+Yyd8qOfIb9tB2wRC1O5uD4eaU7K3fNiWwgEdkBp6XEe/+N8s8tec2b5nWkERo2ndeFm0YQ07Vs+93czqby+xqfp/2JTOdpLrMm/zrMj/rZuivcTshsIzheLBCLhB8QUESTs8ljHbfgQhLj3dg3aT+XxzBcrVs0QJg88KII4dVjXBjDOIkR1yjAM+E+bAt6wu83IrbzPitE2SeFlpYQxVRtfMciJmXEfg61MMeNdgXbjyypwEwaHiO4ygLNt3uLK4T0yPIhxWd4wj/ItqbjiB8348aYWf/BMkDwZ4IGfF3INSqsdGf1o+FupLa2USukVwDKEi3E4Y4aXrkjtAtiX0L1a25l36AcP1Ld+ydv18ma2fkY7U5XfBolCyCCDQdWarrN6q4AeYS21AxCWTCYqSzwice3gPvt1pgWgdEy1OznSl1t8/V3W1i9HzkeIMgt6FlCLlAcVvtWfljwh4DQMisa+7FA3vQfRffa6GBfTeeLNAWbX501u/MySG38Qx9BXRhmXy+d9//DNHbu13A2i9DW8OXffcxzF2EIb0RyzlD4RQd4DRpBokEtujS5TZH07a1M+KHbd5pM/u4QYe3W1k3Y8YdvB3r7LNbVm8iUMg9w0uAKE3OizuvuEl8Sjn3EHMUtXE56VbftMKKqwJ4L+PLWoXxo1exlfThXpiX/6WgAHiXvx0VCRyJkr2TvfZieA7JeS1vNw/244ciptlDwlZYGBtb2553QQiouahUBm8QFGlyJom35LJAH7/Y6m4QKZvc03PmrdynSzUoRm1p7xoVf335e3nhFJRYEZrq9rhUCZYYYZAvLjrBoZnNlEJIQoyMKp5ExumCcGy0n2WSB3utCz+JoXdBLEjvea5OhSby9d1cdio6Nom0YxaW5HvDkHFQrHDDHnRImq5Ql6omOiQxYnRBpjj9XhDM7pm6Q+ttxTnFn8ygcqfN/ThXH59zbw2hqgt0+M2a76Hzrc/rw6llxMzlqcDPhgmUHlISiP6PmtYwYn9VlXrSh8ZEyhNf4jbx86KOt2vl55YHmx7qHRnFxf3l8vlw9X15c1FksJ7l6LX8+89XZ7f3l8eI2QThGRCQRufQkGJiyF1OuFoKSyFRKmiy4d4y4hqE4OxN40ikttAW+uvgQMmL6/OvtysltSaNKozcngL1MbIqq52417Ebgsi1S+heh4Z+3rBW6Krx7a+UCUxbS5QHvdVb3/9jCA6ayNCjduqSypGPlGeHrakOGxlsQ8Q6z9RggoGRvpICfSvQCO3kGzuBfMKd9ljX+WhzjT80Jgvda4v9V7reb/J/y103L9YypHgIVhKr/MeN94MBwzoBOuXnOlQJwkejr15QQ/s3gL1IMZBd5LJxnaZ50cGiORIiJLgCxQq2pdof92gjaf/dcdDl6psR67zItf/yjcqOogJnFBQj/I1EOQUX48uH1wJQ+r76WogQHhc+EUvY2Mf8vK4YrlRP6KFH9mQj2ivjHJM62Oi0L3gQ7fPmSOMJJ8IdjHllORgLmE8jZPS9ZDE2fbny69d0X66SH1wRQasfeF+hJqZ6Eekp97DN8Dn2Ke9sEGeqLDBPgnBk3xK8t0N5KafiRyN5WGmCzjpqC9G871Iys+VHDfSQ1wKMYf8+j0GU7SfaUrRfqd2Y5FOh2VCHh/f09IuIryST8d2abxnMnvIP/NQsFPHDeVGfDv5wwKTI96dsk4R3pBPH1WlF01/l9pEuRHffp+nIU6B8fN+Oex9OplfDGPQj+EmwZM3MIg45JV5iNqJ/BEoQ578vLg5eWgkzpAv7uE3p/QJ5Q755pxGctpOASYPeXdfHdrT96Eya3Bhbzoq4eRvHJBa9uy0VYjwyj6dsvZk1qA/82kEv88rJkog6GV/zeLv9h0Qww/6eNIYYtQhz8aNyScPG0QseXXKQEmcQV8WPW48cbp8qk7lEcTM+HXiyQKe0fbjXyf/6oFYoJmUSH8CU0yYPwleu9NLJ/oww2iiA3jERDroUYrjXAzTOg2RITpyaTObsh+RnrqhOs1XLcSC5hTF+BMIG+ZPgtdc+I4dFUVwRYfy2Bn2GN+Sy0EEN3m2gMGiwZO1w8EKasN+ecE4fspCpsBCE+FJKEKyJ7HOuvFK7cqO6bxSu6uQJtwlecWOWk4W5JHFY+sMgIEncAKAI25ZQ1EO8Adia/Mzam4DGk2F9FZPiN4izBclVYPVTM6kheVOm1ALy8bl1QZj7OWIog5QibCUItznJHU2YRW5YJOQoCwUjD6DSdDET2Ni1YTH3VKTXQg9/N7VPEIh6ft5+PJ5GkLRRg1W034r5M1gnIc2eglaNgH/vB2zisGBsaBC6qEIc+q4a25jOm41hUVDMQH1A0Hh9SO8c8NymoUdiAUKU6Q/gXBh/iR47YbvRGtPGA0UwFiPAhEEPUpx3I3hsStkAh6KGuxDIFySD1E+eudInGLJDiHBtsxGeROIF+RNvMvhyKU+mSJDZMxSn0fZj0hPw6FKewoFfGSY0p5CyYcoH70AnW7pFafCwpbgWSiCuGephfDierLFYpgJi2q8X6Ggwn4llkAIaWIjBUhSApnYMBFv4l12I3eCtXeZAopajCeBmAGexDobildaE2PRUVFKa1S8foR3XlhOkKAAcGAhivElFCjAl2h/iaAlZ08wWDRIyZt7OW3Yrz4YZjh+082OPWvEvAoqFKGO5cG3j9j/QsvYwQjKSMrUKR2mNXSuQIQ6elrHsCWmn3lb6fm28VIvtkGangTBMXuPZAfCFRF2IMpBYMd5VFgoYOr28qhwkMKwUwl7yCNiE8t2qq3jEVGMdvG4MoU3LkeE9ZjoJQUpJAgXOVhgdINylB/H7EueCMBNydGOHbEXOa2x8OBjdtOCjUdwIMrB1C2zvSvH7JdNe2myW1MZyojtsidwJEB3xN7Yoz1L0IjczHmMdzIlvP/wGDc4soQNfce4gtECu/dO4UmIC9ked7Q+RwbtijtGPEQUtQXuGAckQnBH2TEuhKlito8d7QZCCu7QOo0bsHhwDvwoPxDWmH1NRznD80HbhY7RDxFhe18i5IOwtF0G2IgvLAq6E5ELj4UBIDg28R0LDeJItLNMdntcjEhUbFJ7XDRoScwXOZEdLHkQl5i1DpY+LIt65CUXpg1kgrDoxLiI4odFQXfYZDis4CQkPvMNKzAtBrgApbdhBWah6blsWAB48QjX3IB0pjr1doOvHtAYKASSHFX2gBzihT2BRiMiVhSiPEFXFjo0uy3DEMc3ZFC0wej2tCEFss0IuyMM8pi9F4nUYZ3k/RaSymm3WUhqcbsr6ChyjZoSlXZURPSd8X1lgJwrw8TPqXFl4HZOEDrwnglGJPhEWiKCLPl8CpskDKmY7RE0dbAUI3VYh+ihL9RTd9Vw4J5cXmQG8xWfNGkSAKVkFGOv/ZAg5AiSNhxReBGenC0cERDZiUg3hbTX2NAcE5CkMIQKH1PkIyetZPyRWatgTGQ3Yj1F8ijBGDHI5KRJMC6cNO4Xm+mHBYGExKf1YcWmxQAX/MyrRmV1d0ds2tUWPTziYovxzo1lB5RiO9Bz0IjFWknbDjWijTuWukI9eHHEEnVSxLl14SAhs4x3Kg+itYdR1NHCNE94Yj6pzEe08KS2HdBLac/xcSYQMcP0iGJSSqK6f8GxtmXnMgY5wxJ7/VHMZEFM5qAK7bgw72AJxExqpLMzWskTG4DQaec2AMG46Y1APL1vRFlYmuKIelgTntMQP1+UefTGKbJF4aY6SC14soPTYR5YS0eSph9fYcbDkouZ8wiwM4UZ2Rkt9yiI3pQ/CILUMKHAU7M8bLeqsSdXuDhN5jGhIjT4Fm3ICLpuqya+X+IeWpEg+fMs6v0L+BHrqvuUDDf3/o/+A8lGfmnzQno1jTf/BvFQpC5f91m56dFntcrEy3lhdZqZaj9kVOppTo0PxuiHYx/+qFtlzXf+VuPZAgohReiFzeAM0nvBML9lyY/drar+3lB9x4R8GG2iskLyUi3bur9M2S8RQe4B/aJ5STCLQ9HmyVIOGtXrTsRIkeqAuErxtg30t6JOBwWUUoqCliKtALjv7haEMKe04UE1db6qPNr5ZU1QWxjvLT1zb3uLVXXZ1DnIbWHYEcDDtvuNeXJ3BfbU7gpu9O0wztZcPQ0hMj2ki70r/jTZcqHcFVgYd8WfJls+fN1r94/7WjWK6MoNzs7woTeEArquVdaqqyJrW1Wq/uycX27yphWct4SCJEyUesy9eooXuldPbEtuP2Tr73m57fyIoXegjEjeXLeqDg2aQ/wziqXuxO/V0+Vvh0xqlA6/BWVFxsFcmo6LZqTaapHtiQ1ZsoyNBJ4QYujkcmNDxS6M3/L2+UZtVbm5LHWdbYa8mjep6xmEeBKuR1rlO3X2IxtybkE5G8TRP2aN2mX75qxWl78d8pesUCX0vDd/IqH8wzjZrd9Wb3t1VdU3Tl1xggwBL9uPj2uoXXcyI4CjratDuUmJG4VkhJ6zZrHL9nAH1vzJRLDP/Ye83C6yfRPB7YB4+tAWMFgqRADJfqyrwz5V0gJDcvOqd6zWjGSFxj1rKP1oz5JeFuqlSxaMorZRrIC5YwClNzEwuT3Jhwv4E3uOiJnOjwqYGIn8vol7AA0IT23moMPkJkigrw4xvZKJ4EdTRvY4Sm1iEPJVXsQ1SRfHi5St2tZZqzYL1TzH6fhQVmrMPkf5R3uJNLbfNCDyeBYllT1FB2eADjg6cxxYZPuuaUSVywJB9LHV4eIkkS5xP7YMMwiiTyiDheNF1CbP4gowIVji270qdcaWahdRgzAKyQo5h9aiKg6MlZgTNlH2GcF/QEaPfcAxj5ErBzPPEOijF+ZFmuGwOhL/bvSAiExCEUwYK6HfdJu+D+nX+KKKQ6NlwUW2T5ZzsKJYtAJCS3+sS9zhr3VH4Ktat1Ud7b0DYyW+qcdofhPDkw+ZjzDxYM+TLiJJFxhp7ONlQATqVazDK8jjVYLLK8Tn3j5hroMA8nN35WH3SC2XG9S9CTR3lzefDztV5+vrsktAEt0euH0c73W1XbMuV9s15O/tdv0526lmn5k5Hqo87Dw609TmNlM6Pu6Kr6qmTr9y6GZDaeXp21ODUc6GEuUP9bhQ9Tprq/qsyLPGzGKeE8cceh/EJIrpqcN9sz2vNtIcgaY2rPmJxY+74vMSI+xMuee3fFI1VV1BUgfBf6zvCqJhhaktAMNcbdfLuumXrZZSr6OZbQD/VO3r6le15he5Bhvo6fL4SC9HRpLZdfFePalalWt1Xh3KVm0+ZeWmIJK/DH4aAhVgSHj2k3hk+gHK5+Y8vLiNj/D/hXymaYd1u988Yk165LUwfPR/fOcbx4/vWMPoV3K//bwSXNR8ky3zVGibb9/zzar69l1qbiPnZC/yttos38C8gz3D+0PbAKvUmnOyZasmq9fZhn0Oeguoeu4P5VlnffmqVwN1u7jL6mwnrfsPEkE4ty6WNz1mua7zfXvWvJVrPjiDGIFjAl/7rkEqBE5Q0Y4kS1Fgofrr7I2v/Tpzlz0DR1dWu31WKyzTo6e1IVwtr58P5XcpDJqyM+QyGHpJiKo3lcmgRmcwSo1trV8IGN+BXZF86pM7EKrBVFhH3X8Qpmp7ssGUa+lZuYUqoTPkiNSuesGYOkv+adAV4+eIEE+FaQg9HV2d/+OgDkRKeIh3xnDJ4J25LvJtbeUNu0N9m9tGSeP+dVWuM6lJWvw9gntF7vbSvL/N2AE4wpf+wHucUAO4pycvWukD3WbsESxlKQwHXMKSGw485bWU8+Xy1Wx+F9Zh2JRix/FU1ZdZtyEWJ+0hHGld7aIY62on0C3zcluo61ZFE89IRmKX7WN4d9meIWuqndTpWWzankv3yr5H0Wl7NnvszB5XAIw9hO2exzwmrmcebaBOWcipEtjfh+C9pr9xdrD/lDU/XSDpVJOaDxRzNJdtVm6yevOhh4JCJJafWXGMr4X+bZKioFFKq+fD7rHM8kLMF2M0TRJhfSslnh4uRuMvF6kqf7lgn6PzrFHXZaMzNNv8Rd0+Nqp+0U/hIiOOcpsFORz2iQAJ+8MiVhj3yp1FWT+r9fezesuVebTBBnn19rBTZXuuQWIO6ETtwLjvIB2Zuv2shy5845jIDQTXaXihYEnpqDjNbF0VhVrTewcNzskKa0LP+oPg8kXoqB3W9zYs1EGHPmEBfhcZkjh7alWtRwpkQeh2MmtRaPazGfnaNfhP+cnr09LfvVbPNGHu6uqVnZhwTMEpigA90eU49Kycc/GKbYpNiAh6wSkSO3r7t9vyW5236hx69kgAGElWioonJQU44J3ykrXsp7n+HSrChd79UtW7jO1IJrr3ln3o8Z6NWn5xlOJt2WNXLDvqFFJYxAJzckvVtnm5jdAwEEHi/rSIh7uz++X1548PV7f3izPzBApWIwgOyV3e3z+srheXD/91+/ny4frz17Ob6wtMLAQNSelZ/D7I3ea9dVW36jWmifEEIdmnCIUniaxXA96AM6cLCVEPAXy4OFtdYswOIkScN1+zwlxn4ThnY4FOJ/v8V1Vinc17HxSi32c1dZgGRTqahqju9O9RdeUgWB+/tGyuhONmbx0ibKJ6kkbuRbaqXVRl+6zXvvlxSEdrmvNfmd+U+r7J3nBeA8CObXRyCFd8/TuYK+M0d8q7jm2w5N2yVhMJt7wVxPAS8llRXOWq2OjLW4W5jY7WhfA1c1YU05r5pgN1iQ+wDgVmv8fP2jZbP+svs+a8Klsxl6rTomCsik5e2XzNioO6qHZZLky+DhouSFAoKuFzcaIt3LOvXK5D01a7mHBYCJZbL1bfPsqZHwPxbM6zTiuhMV57KEEjglhkG4+2UhjjbI6w6t2YMbTanufVDxPGqC1lrqiHzULwmVWq2qlWWiIaaEdjnrHfgoUR9rYsX5eG3e120L0hRGtDWPbOKia0JkBgboTVnYmx4dZ08qY7YWRvnxvC8U3mLOsdTEgcP+JxOQePsGzEcSMEX5GX2CM5GguM+8M+pp5NgMy8Urt9YX2DS9QjQuCu26yQF98m4tGcZTUv2IgJCYHjZ+73WZtn8wgDEnFBrMJKvbYxJTDsWd6vufqBP3CTNcNZVBnyOtBmbF5HtkG66s6OH+COZ1GwHx+zFTgG92+WBY/LMJRYFrbaghvuU5yQySBfrJ34x/hBE0E+zLvVjnGAYOEHxcMG/hRND4sM4ubJ0mRdgQnx4ljtCEVzm36KIomXFMfN+4mCHlwYTI4bCpPkfLQ81By24afokXhWcdzPnqLmYflBpLlpO0WOJoA0j+n+ghzysD69qD5aHkrPm5hTJEMU/ADrqH49tj83diYnyRFwXs/dU5ykGiRBtI9puCEKfkA7bkNNUfTBrNa4OTVFysPySosjlFyspHRMnVFwQW91TNFcMDtkf7KnlPzR+pM/kxQYqHeW+sSQflvEL/dqq15namrTYk9OAm1J+4T70d78doxX89CMpJ7WdjZ7XOmT8eUJuV6Uw/NT8aaXsZIklp+Hd51E1QJQeQqSP17dl3FArMCwYbmDyJOxo4KLgqc9IoLlwfiHdFxKDl5zxH5w9/D+miPmNGwp3WOgScj6sBI0/IQVk9gCcak/Yo4GmfsTlOLuhJUyNSClEcbRBzICRH4LxwnQq9givwljwyPlm5C9shkomoDpmOlMB0nHRDHk/lK6RNyQtWyRClkyZK9hKJBwpouCMmUkUYaEkXazZSSVJ4kQWo43GUOr8kAGCkg9AhkJJwtFIu7MJTorYQRi/NLy+aA9AHmPDJbJmX/u0R0O7QyxFczO/3N3JEkksQkKU+sKjSSeIS7tv7zOHcnzG+htABTukAbXwzsyrKrV20f1jg5tsJ80IyafezOQR5x+YzYCbFgykDtAbmiS8BofROAXueNN7PiHLhM2BupBcW3M0kPaVvxAZZBAhypRjXfgBl7uEa+8gVR86eGvj4GRfoFYN+s4t6wEH6yGulCFfrCQtEOfFck/7G91iXlkBwEHeOJHdhCBH9mIpjFQB5qGWZNtvkO+2bQZVIvzqwyLdEdsgU4c5U7gd/y+6fjRTsMqaGyf64cK6281JK63nZSQnvaYb7ZOKP6bLarv7TSAnvfY75xO53f/zulUTtjld3yhDj9t9HnCYSdE/t5DH5PZTgkE3zFmgLZezqJPviVTFfkL1GC+9zMgFADmTjaQ3IIKMsFL2UAtH48IOhmEMVojFJNxkgvjhEawIJVWGLAcqUUAvCduERPJTUyI2E/flmgNRJjUzzeWaQ1MmNhOt5VJB3uGkMi6BWhNVJg8srXNAI4yso2ZEJ7WTsXFeAdMiHhVZ2XTvxmF7bg2uYcLCZxXVb3JSz2d/9a0avehu7WIGydPQjSUGy1/VNW2T2W3/bOv+SQHgpMqx8GNCkO4Zav2p9AfeVgfLm8/3p/dfbo+f/hw++XzhTAmnTVdHDNq/Hb54WFxeX9+trq9j1MhkIzO4+HpSTpHYqLujZnxYX92zHldNY1eoPxSiikCEzcFZZQ2qtRVVuT/VsjGm0nGwwkrFOC1nRM/em0neHely8veXwmejOpwnux0VIv3xCekOtzyKakR16JO3Py1qFbyg9u/Crwt1al6Zxuta6XKqNbsoDh+7G7TmTl4v6nxNYgc0Twxho5oNvP99emM/9VtaURja2EYbvDU3IkXOzl3HKsNyfuXdV2xywKUPfrNxgj5b3dSSFZ3D9rIgXMw85gjML3DaAS+9zMgPPRBD+yxmeHjepCDL3P8zEv5iMr8lKdT5ic8mDI/3ZmU+UmPo8xPfBJlHncIJXpqZB59YGShym2LOtsbM2zioXU5dvJkrTYHaYPbRNUbM2zyOZY5e4Sl2WGh920nXrdt3XoNsL43YaH+JXjvNSLgg8Mft8ipxr6ChQuTB+6+xhRccFgmfPs1pkTgQ2Kh+68RIQ8bnt+VL8COuP+avD+ZZXxvQ0LBoC825pkdTLhSgbuHeSWeQhYO3D6MirpwWZC6gw9Vs7BhKf8GYknAQDDzpIE7iCVyDxeWoG8hlgQcFEZv30McIzEg2blf4iZiScJBsfT+XcQAuwFiyOnbiEV6B8YJ+HcuyuwGhnnLkTcSS+QOSqQnbt0DJUwkI8PdSiwqkeCwmH8vsaRgIFja+D7VBgnjDZxW9ha9nRhS4niYRRj6fmJJ0YXJAvHVQiDDMtw1vJIQiRWWlqiLeCUdH8gMOhPe1uBbmrwzV+S2QPJgOYIZqV7m3lyA34OKQknFcIBhEenuXEkriBckg7fnQoI+mpdL0JCJgxfcSvQ+MCxCX3ErKTgoht67j1aknhEsbXyztUEcuXcnrUy9grymbqVFuAG/2XtpeQ0aynxTV2xWUFFhqcM31fZGvSjjU9rdcKGZRiub0j4NvGyqQt1U2y2fvKrpLGNuGb63sL9gaMrZUuBbZGUGuDhbCnyXpZX8Qi7JD4SdKbfq7kaPI/M886gWqmmyLZiSO5bZwmAC96qpDvU6ScjBysG5ynS3agTcvf9rDs9g6nB6l37dVFvP8wAp7aXHqKebnJqkpnw16WTKTkU30hGZmoqY6LXnoEcpL4QhRhchkjs9Cc9LdCjOTPcu2++F5MfBBJ041EOKqDPsRn4aywQkb6ArdEb+yZyl1GNKaQFrZuytWcIF7p93zYx7cIZ6jGDrrSXC7gMjgrKzZ5vUIttPyVDY5RE0Ampwkpj/5gmIIT6469q7rGXTJ/XvUCmyF1Vn0i2WHdtgyaY0bWulmlV1n23yrBQyIDpSF8J1lL3FqrroMQC7C+G6uOHyqQv1kjs5jkF6D8PxH4Sl1Z7RPT3daeDyvs2IDZvylQsG2QkvXTBZ0WsX6G3JPLeDQaiF+05C7PydJ8CO0igp6OaT0F5SRAnYMCLe/2CynuoGCJMTvAMC2dhi0gKbJqdjbPjneWCdrNnnunIOjPedrIgz4gPPdX+cvPPl4o55Bz7DVhr3bpTanzVNvhW6xoF5NmffGGp/XoinQxiUnbXA2J9hdFZuptcqTO9Do7WAW8VYQelibSRnahAQM6a2qh3n9S9U010iL12yMFCTSHbEdynflTxwD7Ys212R5SVyz8LEaSCOyTAa+PjBfDU9Vrk0UBn4LITI/LN6i6HV5gxnC+SHD3wtnRZu9mXwTZzxV2/Cd23a1MJtmtb3w3Q5IXKpoU3sobn5jkW2xy9P9HTAmxN1Co+2kWZtPP4e5VPT9bzkU9Usw8h6tqi5etbUjJBdz0vVJtazJvbQXBUsVZtSz4MOWM9L1UbW88CP1PO+u6WAq+DeAqrZ+coD845ld3AyEJrG0uhktr3JzWvARWptjpNbaWkit3cfMzmbONt/anfyRdCDCgXk35hk6BkFGwJy29EH2f06CPKj4XEw7ORmnXfbqdDbOwYFAse+YyPpTQD7vt3X1S7nP8YGE2xCSA8/r4qsFef7RlYTwY6Wi0wY/42MnSlDpcT895FJ8bnv4mhv5OGHe/uszopCFXJe/shnIjjiutoLA72JUZuy6wxyyvvIJWa868MxqoMw8h7ZBmO2Ef92UPwm884AasDr6iBtP+vJOkOmkI5PYSLCN7uH6RcWroAPt57KArBxu1fZ5rYs3rDZbt8aiign4o/JCBFJ153dHu2FDwjDLKocwseDSRuUcF2ujWOH2dkmyxByO2/+oVuFXkLamKcb8y3J1glxsI2rVuVG1UJu/2QEluVcx/tDrbLvzf0AlQoyCpBgdtxwkXd0Wf0Wr+VjeamqvdCbJdoUKQ/LSn1S3bs2XscBsiLx7BDtMt/tCxVPbuNYiS9l/ttBdRtq43UIsNAB/3ZQTftJFXt+7cAyhJ6VC/WUHYo2oED1W6YChea+iQMy5HekTcqVzPmWbNZZoe71Ny3bpxhmUKSWk73guEk8g9hPa23Ffat6lPK36g9VFD+X1Y9ySYWDOhvDFKHQtqJ9etvrPis3/fb6VdVh+KfB1CLA/GzyZ/XaRmqYKJ6cqmaAPVTR7tGd/CwWus9ykz9BuSeab7Y9cr5fk51ge3RPw2eV6MeqcUeBITLTmiE9yMesaLYDeaRK3PGrEeeuyuvj5nGrp1sfN1nR9XFknfNUh8PyzD4sJLDOdqpYVT+rx+zxPJOOZRw0XBDTqtZZo67LphtY5S/q3D25gVWhoLhWtzNX+HCnpXokN/fRrLO9ulfby1fhC2AQMAEM73cd0VV1ruML14YL4h/Ot91jxU4k9xboh8T1ojsC0WElve15HQw7iDy/XnQbbGLpDZDM3x3nFq9gwHiNfBdHPtq7rH/oR5vdJN6+Vmu9Me+dW5zYcvT2f/wzv2j82taHzVBhP104ewZYCQrKal3lRZEi5OFYlev1WHdxKh6OVbnJHtXkFKhgYXj26RnCyQ0IzB0THw/Hp8aq5nk6TSim4fpAUScyUiaE5e5zGVJiRSD55ZesfU7R8XC8Sr7Wm9PnxwlVcXGIyiKrv6s6RcdECotWedkmNTICKStFNjMLI7B3L5zEkhBYRC26NBZKVNDHnSYXyAcDU17RzdqFARrR4yEXBmgkPDg+kNeJ4kb54KYEtaGVnrGI8XMGsLxfq+Kg25WUXTrxzgCWV2+faN+KuNZhg9ix/Uq4LWMVc00GN8m5Gm9g4JdjWvi8YtsS8zFATk45OvwrTs6ZLT2Yhz36nh/csx0D7n4xafyIapovLpU9N5xtNt3y0V1WZzslzkZpRg/CNs+zx6YqDq36Ih1vqaktc2Hcsv6ebVHW2VpYGNHLZy8oq2HOrs7rU0Bjg0yh2ByUqDhb5uzTfzjk7E3H+neoqW5VqfSxL18O0nm6HaVpzjr4I2vX7H6pzgBysSrnVewxA7pP0+Md7hXCaC7nt5QTS0Z6IaGkKm/FmemR6paal7bvPnlRNX203PADFFGPZF4BGWlIuu5Ou3/9f1Zc7PR0PgMA"
1
+ window.navigationData = "data:application/octet-stream;base64,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"