{"version":3,"file":"wms-client.umd.cjs","sources":["../src/client/BaseRequestErrorHandler.ts","../src/utils/inheritLayerData.ts","../src/utils/inheritLayersData.ts","../src/utils/mergeSearchParams.ts","../src/utils/trim.ts","../src/utils/withNamespace.ts","../src/client/BaseWmsClient.ts","../src/client/BaseWmsClientFactory.ts","../src/error/WmsException.ts","../src/error/WmsExceptionReport.ts","../src/error/BaseExceptionXmlChecker.ts","../src/error/ExceptionReportExtractor_1_0.ts","../src/error/WmsExceptionCode.ts","../src/error/GenericExceptionReportExtractor.ts","../src/negotiator/BaseWmsNegotiator.ts","../src/query-params-serializer/BaseQueryParamsSerializer.ts","../src/version-adapter/capabilities-request-params-transformer/GenericCapabilitiesRequestParamsTransformer.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/AttributionExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/BoundingBoxesExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/CrsExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/dataUrlsExtractor_1_0.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/DimensionsExtractor_1_1.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/dimensionsExtractor_1_3.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/geographicBoundsExtractor_1_1.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/geographicBoundsExtractor_1_3.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/IdentifiersExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/LayersExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/MetadataUrlsExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/ResourceUrlsExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/StylesExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/styleUrlExtractor_1_0.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/StyleUrlExtractor_1_1.ts","../src/version-adapter/capabilities-response-data-extractor/CapabilitiesSectionExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/CapabilitiesSectionExtractor_1_0.ts","../src/version-adapter/capabilities-response-data-extractor/exceptionFormatExtractor_1_1.ts","../src/version-adapter/capabilities-response-data-extractor/exceptionFormatExtractor_1_3.ts","../src/version-adapter/capabilities-response-data-extractor/GenericCapabilitiesResponseDataExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/KeywordsExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/keywordsExtractor_1_0.ts","../src/version-adapter/capabilities-response-data-extractor/ServiceSectionExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/ServiceSectionExtractor_1_0.ts","../src/version-adapter/capabilities-response-data-extractor/undefinedExtractor.ts","../src/version-adapter/capabilities-response-data-extractor/wmsXmlNamespace.ts","../src/version-adapter/capabilities-response-data-extractor/xlinkXmlNamespace.ts","../src/version-adapter/feature-info-request-params-transformer/GenericFeatureInfoRequestParamsTransformer.ts","../src/version-adapter/map-request-params-transformer/GenericMapRequestParamsTransformer.ts","../src/version-adapter/version-adapter-resolver/BaseWmsVersionAdapterResolver.ts","../src/version-adapter/version-compatibility-checker/RangeVersionCompatibilityChecker.ts","../src/version-adapter/xml-response-version-extractor/BaseXmlResponseVersionExtractor.ts","../src/version-adapter/BaseWmsVersionAdapter.ts","../src/version-comparator/BaseVersionComparator.ts","../src/wms-xml-parser/BaseWmsXmlParser.ts","../src/version-adapter/capabilities-request-params-transformer/containerModule_1_0.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/containerModule_1_0.ts","../src/version-adapter/capabilities-response-data-extractor/containerModule_1_0.ts","../src/version-adapter/map-request-params-transformer/containerModule_1_0.ts","../src/version-adapter/feature-info-request-params-transformer/containerModule_1_0.ts","../src/version-adapter/version-compatibility-checker/containerModule_1_0.ts","../src/version-adapter/containerModule_1_0_0.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/containerModule_1_1.ts","../src/version-adapter/capabilities-response-data-extractor/containerModule_1_1.ts","../src/version-adapter/capabilities-request-params-transformer/containerModule_1_1.ts","../src/version-adapter/map-request-params-transformer/containerModule_1_1.ts","../src/version-adapter/version-compatibility-checker/containerModule_1_1.ts","../src/version-adapter/feature-info-request-params-transformer/containerModule_1_1.ts","../src/version-adapter/containerModule_1_1_1.ts","../src/version-adapter/capabilities-response-data-extractor/layers-data-extractor/containerModule_1_3.ts","../src/version-adapter/capabilities-response-data-extractor/containerModule_1_3.ts","../src/version-adapter/capabilities-request-params-transformer/containerModule_1_3.ts","../src/version-adapter/map-request-params-transformer/containerModule_1_3.ts","../src/version-adapter/version-compatibility-checker/containerModule_1_3.ts","../src/version-adapter/feature-info-request-params-transformer/containerModule_1_3.ts","../src/version-adapter/containerModule_1_3_0.ts","../src/error/containerModule_1_1_1.ts","../src/error/containerModule_1_3_0.ts","../src/error/containerModule_1_0_0.ts","../src/serviceContainer.ts","../src/createClient.ts","../src/negotiate.ts"],"sourcesContent":["import { type AxiosResponse, isAxiosError } from \"axios\";\nimport type { WmsXmlParser } from \"../wms-xml-parser\";\nimport type { RequestErrorHandler } from \"./RequestErrorHandler\";\n\n/**\n * Base request error handler class.\n */\nexport class BaseRequestErrorHandler implements RequestErrorHandler {\n  /**\n   * BaseRequestErrorHandler constructor.\n   *\n   * @param textDecoder\n   * @param wmsXmlParser\n   */\n  constructor(\n    private readonly textDecoder: TextDecoder,\n    private readonly wmsXmlParser: WmsXmlParser\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  handleRequestError(thrown: Error | unknown): never {\n    if (\n      isAxiosError(thrown) &&\n      thrown.response &&\n      this.isXmlResponse(thrown.response)\n    ) {\n      // If response xml contains exception report, xml parser will throw.\n      this.wmsXmlParser.parse(this.getResponseBodyString(thrown.response));\n    }\n    throw thrown;\n  }\n\n  /**\n   * Detects if response is xml, based on Content-Type header.\n   *\n   * @param response\n   * @private\n   */\n  private isXmlResponse(response: AxiosResponse): boolean {\n    return /(?:\\b|_)xml(?:\\b|_)/.test(response.headers[\"content-type\"]);\n  }\n\n  /**\n   * Returns http response body as string if response body is either string or ArrayBuffer.\n   *\n   * @param response\n   * @private\n   */\n  private getResponseBodyString(response: AxiosResponse): string {\n    if (typeof response.data === \"string\") {\n      return response.data;\n    }\n    if (response.data instanceof ArrayBuffer) {\n      return this.textDecoder.decode(response.data);\n    }\n    throw new TypeError(`Unexpected response type`);\n  }\n}\n","import type { Layer } from \"../version-adapter\";\n\n/**\n * Inherit single layer data, according to WMS specification.\n *\n * @param layer\n * @param parentLayer\n */\nexport function inheritLayerData(layer: Layer, parentLayer: Layer): Layer {\n  if (parentLayer.styles) {\n    if (layer.styles) {\n      layer.styles = [...structuredClone(parentLayer.styles), ...layer.styles];\n    } else {\n      layer.styles = structuredClone(parentLayer.styles);\n    }\n  }\n\n  if (parentLayer.crs) {\n    if (layer.crs) {\n      // Merges parent and current layer crs codes, removing duplicates\n      layer.crs = [...new Set([...parentLayer.crs, ...layer.crs])];\n    } else {\n      layer.crs = [...parentLayer.crs];\n    }\n  }\n\n  if (parentLayer.geographicBounds && !layer.geographicBounds) {\n    layer.geographicBounds = { ...parentLayer.geographicBounds };\n  }\n\n  if (parentLayer.boundingBoxes && !layer.boundingBoxes) {\n    layer.boundingBoxes = structuredClone(parentLayer.boundingBoxes);\n  }\n\n  if (parentLayer.dimensions && !layer.dimensions) {\n    layer.dimensions = structuredClone(parentLayer.dimensions);\n  }\n\n  if (parentLayer.attribution && !layer.attribution) {\n    layer.attribution = structuredClone(parentLayer.attribution);\n  }\n\n  if (\n    parentLayer.minScaleDenominator !== undefined &&\n    layer.minScaleDenominator === undefined\n  ) {\n    layer.minScaleDenominator = parentLayer.minScaleDenominator;\n  }\n\n  if (\n    parentLayer.maxScaleDenominator !== undefined &&\n    layer.maxScaleDenominator === undefined\n  ) {\n    layer.maxScaleDenominator = parentLayer.maxScaleDenominator;\n  }\n\n  if (parentLayer.scaleHint && !layer.scaleHint) {\n    layer.scaleHint = structuredClone(parentLayer.scaleHint);\n  }\n\n  if (parentLayer.queryable !== undefined && layer.queryable === undefined) {\n    layer.queryable = parentLayer.queryable;\n  }\n\n  if (parentLayer.cascaded !== undefined && layer.cascaded === undefined) {\n    layer.cascaded = parentLayer.cascaded;\n  }\n\n  if (parentLayer.opaque !== undefined && layer.opaque === undefined) {\n    layer.opaque = parentLayer.opaque;\n  }\n\n  if (parentLayer.noSubsets !== undefined && layer.noSubsets === undefined) {\n    layer.noSubsets = parentLayer.noSubsets;\n  }\n\n  if (parentLayer.fixedWidth !== undefined && layer.fixedWidth === undefined) {\n    layer.fixedWidth = parentLayer.fixedWidth;\n  }\n\n  if (\n    parentLayer.fixedHeight !== undefined &&\n    layer.fixedHeight === undefined\n  ) {\n    layer.fixedHeight = parentLayer.fixedHeight;\n  }\n\n  if (layer.layers) {\n    for (const childLayer of layer.layers) {\n      inheritLayerData(childLayer, layer);\n    }\n  }\n\n  return layer;\n}\n","import type { Layer } from \"../version-adapter\";\nimport { inheritLayerData } from \"./inheritLayerData\";\n\n/**\n * Recursively inherits layer data in Layer array, extracted from GetCapabilities response XML, according to WMS\n * specification.\n *\n * @param layers\n */\nexport function inheritLayersData(layers: Layer[]): Layer[] {\n  for (const layer of layers) {\n    if (layer.layers) {\n      for (const childLayer of layer.layers) {\n        inheritLayerData(childLayer, layer);\n      }\n    }\n  }\n  return layers;\n}\n","/**\n * Options of `mergeSearchParams()` function.\n */\nexport interface MergeSearchParamsOptions {\n  /**\n   * When set to `true` and given url has query string with params of same names as in given query string,\n   * corresponding params of url will be replaced by values from given query string.\n   */\n  replace?: boolean;\n}\n\n/**\n * Merges given url query string params with other query string params.\n *\n * @param url\n * @param queryString\n * @param options\n */\nexport function mergeSearchParams(\n  url: string,\n  queryString: string,\n  options: MergeSearchParamsOptions = {}\n): string {\n  const urlObj = new URL(url);\n  const searchParams = new URLSearchParams(queryString);\n  if (!options.replace) {\n    for (const [key, val] of urlObj.searchParams) {\n      searchParams.set(key, val);\n    }\n  }\n  for (const [key, val] of searchParams) {\n    urlObj.searchParams.set(key, val);\n  }\n\n  return urlObj.toString();\n}\n","/**\n * Trims string.\n *\n * @param str\n */\nexport function trim(str: string): string {\n  return str.trim();\n}\n","/**\n * Returns XML node name with namespace, if namespace is given and is not empty. Returns XML node name without\n * namespace otherwise.\n *\n * @param nodeName\n * @param namespace\n */\nexport function withNamespace(nodeName: string, namespace?: string): string {\n  return namespace && namespace.length ? `${namespace}:${nodeName}` : nodeName;\n}\n","import { type AxiosInstance, type AxiosResponse } from \"axios\";\nimport type { QueryParamsSerializer } from \"../query-params-serializer\";\nimport { mergeSearchParams, inheritLayersData } from \"../utils\";\nimport type {\n  UnifiedCapabilitiesResponse,\n  WmsVersionAdapter,\n} from \"../version-adapter\";\nimport type { WmsXmlParser } from \"../wms-xml-parser\";\nimport type { RequestErrorHandler } from \"./RequestErrorHandler\";\nimport type {\n  CapabilitiesRequestParams,\n  FeatureInfoRequestParamsWithCustom,\n  MapRequestParamsWithCustom,\n  WmsClient,\n  WmsClientOptions,\n} from \"./WmsClient\";\n\n/**\n * Base WmsClient class.\n */\nexport class BaseWmsClient implements WmsClient {\n  /**\n   * Base url for GetMap WMS request.\n   *\n   * @private\n   */\n  private mapRequestUrl: string;\n\n  /**\n   * Base url for GetFeatureInfo WMS request.\n   * @private\n   */\n  private featureInfoRequestUrl: string;\n\n  /**\n   * BaseWmsClient constructor.\n   *\n   * @param httpClient\n   * @param queryParamsSerializer\n   * @param wmsXmlParser\n   * @param versionAdapter\n   * @param requestErrorHandler\n   * @param textDecoder\n   * @param wmsUrl\n   * @param options\n   */\n  constructor(\n    private readonly httpClient: AxiosInstance,\n    private readonly queryParamsSerializer: QueryParamsSerializer,\n    private readonly wmsXmlParser: WmsXmlParser,\n    private readonly versionAdapter: WmsVersionAdapter,\n    private readonly requestErrorHandler: RequestErrorHandler,\n    private readonly textDecoder: TextDecoder,\n    private readonly wmsUrl: string,\n    private readonly options: WmsClientOptions = {}\n  ) {\n    this.mapRequestUrl = options.mapRequestUrl || wmsUrl;\n    this.featureInfoRequestUrl = options.featureInfoRequestUrl || wmsUrl;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  getVersion(): string {\n    return this.versionAdapter.version;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  getWmsUrl(): string {\n    return this.wmsUrl;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  async getCapabilities(\n    params: CapabilitiesRequestParams = {}\n  ): Promise<UnifiedCapabilitiesResponse> {\n    const requestParams = {\n      ...this.getCustomQueryParams(),\n      ...this.versionAdapter.transformCapabilitiesRequestParams(params),\n    };\n    const url = this.prepareUrl(this.wmsUrl, requestParams);\n    let response: AxiosResponse<string>;\n    try {\n      response = await this.httpClient.get(url.toString(), {\n        responseType: \"text\",\n      });\n    } catch (e) {\n      this.requestErrorHandler.handleRequestError(e);\n    }\n\n    const doc = this.wmsXmlParser.parse(response.data);\n    const capabilities =\n      this.versionAdapter.extractCapabilitiesResponseData(doc);\n\n    inheritLayersData(capabilities.capability.layers);\n\n    return capabilities;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  async getMap(params: MapRequestParamsWithCustom): Promise<ArrayBuffer> {\n    const url = this.getMapUrl(params);\n    let response: AxiosResponse<ArrayBuffer>;\n    try {\n      response = await this.httpClient.get<ArrayBuffer>(url, {\n        responseType: \"arraybuffer\",\n      });\n    } catch (e) {\n      this.requestErrorHandler.handleRequestError(e);\n    }\n\n    this.checkForErrorGetMapResponse(response);\n\n    return response.data;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  getMapRequestUrl(): string {\n    return this.mapRequestUrl;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  setMapRequestUrl(url: string) {\n    this.mapRequestUrl = url;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  getMapUrl(params: MapRequestParamsWithCustom): string {\n    const requestParams = {\n      ...this.getCustomQueryParams(),\n      ...this.versionAdapter.transformMapRequestParams(params),\n    };\n    return this.prepareUrl(this.mapRequestUrl, requestParams);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  async getFeatureInfo(\n    params: FeatureInfoRequestParamsWithCustom\n  ): Promise<string> {\n    const requestParams = {\n      ...this.getCustomQueryParams(),\n      ...this.versionAdapter.transformFeatureInfoRequestParams(params),\n    };\n    const url = this.prepareUrl(this.featureInfoRequestUrl, requestParams);\n    let response: AxiosResponse<string>;\n    try {\n      response = await this.httpClient.get<string>(url, {\n        responseType: \"text\",\n      });\n    } catch (e) {\n      this.requestErrorHandler.handleRequestError(e);\n    }\n\n    if (this.isXmlResponse(response)) {\n      // Parser will check error xml and throw if error xml is found\n      this.wmsXmlParser.parse(response.data);\n    }\n    return response.data;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  getFeatureInfoRequestUrl(): string {\n    return this.featureInfoRequestUrl;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  setFeatureInfoRequestUrl(url: string) {\n    this.featureInfoRequestUrl = url;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  getCustomQueryParams(): { [p: string]: unknown } {\n    const { query = {} } = this.options;\n    return { ...query };\n  }\n\n  /**\n   * @inheritdoc\n   */\n  getHttpClient(): AxiosInstance {\n    return this.httpClient;\n  }\n\n  /**\n   * Checks response of GetMap request for WMS exception XML.\n   *\n   * @param response\n   * @private\n   */\n  private checkForErrorGetMapResponse(response: AxiosResponse) {\n    if (!this.isXmlResponse(response)) {\n      return;\n    }\n    const responseString = this.getResponseString(response);\n    // Parser will throw, if xml contains WMS exception.\n    this.wmsXmlParser.parse(responseString);\n  }\n\n  /**\n   * Returns http response body as string if response body is either string or ArrayBuffer.\n   *\n   * @param response\n   * @private\n   */\n  private getResponseString(response: AxiosResponse): string {\n    if (typeof response.data === \"string\") {\n      return response.data;\n    }\n    if (response.data instanceof ArrayBuffer) {\n      return this.textDecoder.decode(response.data);\n    }\n    throw new TypeError(`Unexpected response type`);\n  }\n\n  /**\n   * Detects if response is xml, based on Content-Type header.\n   *\n   * @param response\n   * @private\n   */\n  private isXmlResponse(response: AxiosResponse): boolean {\n    return /(?:\\b|_)xml(?:\\b|_)/.test(response.headers[\"content-type\"]);\n  }\n\n  /**\n   * Prepares url for request, using base url and query string params.\n   *\n   * @param baseUrl\n   * @param query\n   * @private\n   */\n  private prepareUrl(baseUrl: string, query: object): string {\n    const serializedParams = this.queryParamsSerializer.serialize(query);\n    return mergeSearchParams(baseUrl, serializedParams);\n  }\n}\n","import axios from \"axios\";\nimport type { WmsXmlParser } from \"../wms-xml-parser\";\nimport { BaseWmsClient } from \"./BaseWmsClient\";\nimport type { QueryParamsSerializer } from \"../query-params-serializer\";\nimport type { WmsVersionAdapterResolver } from \"../version-adapter\";\nimport type { RequestErrorHandler } from \"./RequestErrorHandler\";\nimport type {\n  WmsClientFactory,\n  WmsClientFactoryOptions,\n} from \"./WmsClientFactory\";\n\n/**\n * Base WmsClientFactory class.\n */\nexport class BaseWmsClientFactory implements WmsClientFactory {\n  /**\n   * BaseWmsClientFactory constructor.\n   *\n   * @param versionAdapterResolver\n   * @param queryParamsSerializer\n   * @param wmsXmlParser\n   * @param requestErrorHandler\n   * @param textDecoder\n   */\n  constructor(\n    private readonly versionAdapterResolver: WmsVersionAdapterResolver,\n    private readonly queryParamsSerializer: QueryParamsSerializer,\n    private readonly wmsXmlParser: WmsXmlParser,\n    private readonly requestErrorHandler: RequestErrorHandler,\n    private readonly textDecoder: TextDecoder\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  create(\n    wmsUrl: string,\n    wmsVersion: string,\n    options: WmsClientFactoryOptions = {}\n  ): BaseWmsClient {\n    const versionAdapter = this.versionAdapterResolver.resolve(wmsVersion);\n    const { httpClient = axios.create() } = options;\n\n    return new BaseWmsClient(\n      httpClient,\n      this.queryParamsSerializer,\n      this.wmsXmlParser,\n      versionAdapter,\n      this.requestErrorHandler,\n      this.textDecoder,\n      wmsUrl,\n      options\n    );\n  }\n}\n","import type { WmsExceptionCode } from \"./WmsExceptionCode\";\n\n/**\n * WMS exception object. Represents single entry of WMS exception report XML.\n */\nexport class WmsException extends Error {\n  /**\n   * WmsException constructor.\n   *\n   * @param message\n   * @param code\n   * @param locator\n   */\n  constructor(\n    message: string,\n    readonly code: WmsExceptionCode | string = \"\",\n    readonly locator?: string\n  ) {\n    super(message);\n    this.name = \"WmsException\";\n  }\n}\n","import type { WmsException } from \"./WmsException\";\n\n/**\n * Exception class, thrown when WMS server returned exception XML with multiple exception entries. Each entry is\n * represented as single WmsException in `exceptions` property.\n */\nexport class WmsExceptionReport extends Error {\n  /**\n   * WmsExceptionReport constructor.\n   *\n   * @param exceptions\n   */\n  constructor(readonly exceptions: WmsException[]) {\n    super(\"WMS service exceptions occurred\");\n    this.name = \"WmsExceptionReport\";\n  }\n}\n","import xpath from \"xpath\";\nimport type {\n  ExceptionReportEntry,\n  ExceptionReportExtractor,\n} from \"./ExceptionReportExtractor\";\nimport type { ExceptionXmlChecker } from \"./ExceptionXmlChecker\";\nimport { WmsException } from \"./WmsException\";\nimport { WmsExceptionReport } from \"./WmsExceptionReport\";\nimport { XMLSerializer } from \"@xmldom/xmldom\";\n\n/**\n * Base ExceptionXmlChecker class.\n */\nexport class BaseExceptionXmlChecker implements ExceptionXmlChecker {\n  /**\n   * BaseExceptionXmlChecker constructor.\n   *\n   * @param exceptionReportExtractors\n   * @param xmlSerializer\n   */\n  constructor(\n    private readonly exceptionReportExtractors: ExceptionReportExtractor[],\n    private readonly xmlSerializer: XMLSerializer\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  check(responseDoc: Document) {\n    if (!this.isException(responseDoc)) {\n      return;\n    }\n    const exceptionReport = this.getExceptionReport(responseDoc);\n    const wmsExceptions = exceptionReport.map(\n      (entry) => new WmsException(entry.message, entry.code, entry.locator)\n    );\n    if (wmsExceptions.length === 1) {\n      throw wmsExceptions[0];\n    }\n    throw new WmsExceptionReport(wmsExceptions);\n  }\n\n  /**\n   * Checks if root node of document contains 'exception' in its name.\n   *\n   * @param xmlResponse\n   * @private\n   */\n  private isException(xmlResponse: Document): boolean {\n    const rootNode = xpath.select1(\"/*\", xmlResponse) as Node;\n    return /exception/i.test(rootNode.nodeName);\n  }\n\n  /**\n   * Extracts array of ExceptionReportEntry objects from document.\n   *\n   * @param exceptionResponseDoc\n   * @private\n   */\n  private getExceptionReport(\n    exceptionResponseDoc: Document\n  ): ExceptionReportEntry[] {\n    for (const extractor of this.exceptionReportExtractors) {\n      const report = extractor.extractExceptionReport(exceptionResponseDoc);\n      if (report) {\n        return report;\n      }\n    }\n\n    const errorXml = this.xmlSerializer.serializeToString(exceptionResponseDoc);\n    throw new WmsException(\n      `Could not find matching ExceptionReportExtractor. Response XML:\\n${errorXml}`\n    );\n  }\n}\n","import xpath, { select } from \"xpath\";\nimport type {\n  ExceptionReportEntry,\n  ExceptionReportExtractor,\n} from \"./ExceptionReportExtractor\";\n\n/**\n * ExceptionReportExtractor for WMS v1.0\n */\nexport class ExceptionReportExtractor_1_0 implements ExceptionReportExtractor {\n  /**\n   * @inheritdoc\n   */\n  extractExceptionReport(doc: Document): ExceptionReportEntry[] | undefined {\n    const exceptionNode = xpath.select(\n      \"/WMTException\",\n      doc,\n      true\n    ) as Node | null;\n    if (exceptionNode) {\n      const message = (select(\"string(.)\", exceptionNode) as string).trim();\n      return [{ message }];\n    }\n  }\n}\n","/**\n * WMS exception codes enum.\n */\nexport enum WmsExceptionCode {\n  InvalidFormat = \"InvalidFormat\",\n  InvalidCRS = \"InvalidCRS\",\n  LayerNotDefined = \"LayerNotDefined\",\n  StyleNotDefined = \"StyleNotDefined\",\n  LayerNotQueryable = \"LayerNotQueryable\",\n  InvalidPoint = \"InvalidPoint\",\n  CurrentUpdateSequence = \"CurrentUpdateSequence\",\n  InvalidUpdateSequence = \"InvalidUpdateSequence\",\n  MissingDimensionValue = \"MissingDimensionValue\",\n  InvalidDimensionValue = \"InvalidDimensionValue\",\n  OperationNotSupported = \"OperationNotSupported\",\n}\n","import { map, type SingleNodeDataExtractorFn } from \"@alxcube/xml-mapper\";\nimport xpath from \"xpath\";\nimport { trim, withNamespace } from \"../utils\";\nimport type { VersionComparator } from \"../version-comparator\";\nimport type { XmlResponseVersionExtractor } from \"../version-adapter\";\nimport type {\n  ExceptionReportEntry,\n  ExceptionReportExtractor,\n} from \"./ExceptionReportExtractor\";\nimport { WmsExceptionCode } from \"./WmsExceptionCode\";\n\n/**\n * Generic ExceptionReportExtractor, compatible with WMS v1.1.1, v1.3.0\n */\nexport class GenericExceptionReportExtractor\n  implements ExceptionReportExtractor\n{\n  /**\n   * GenericExceptionReportExtractor constructor.\n   *\n   * @param versionExtractor\n   * @param versionComparator\n   * @param fromVersion\n   * @param toVersion\n   * @param ns\n   */\n  constructor(\n    private readonly versionExtractor: XmlResponseVersionExtractor,\n    private readonly versionComparator: VersionComparator,\n    private readonly fromVersion: string,\n    private readonly toVersion: string,\n    private readonly ns: string\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  extractExceptionReport(doc: Document): ExceptionReportEntry[] | undefined {\n    let version;\n    try {\n      version = this.versionExtractor.extractVersion(doc);\n    } catch (e) {\n      return undefined;\n    }\n\n    if (\n      this.versionComparator.is(version, \">=\", this.fromVersion) &&\n      this.versionComparator.is(version, \"<\", this.toVersion)\n    ) {\n      const select = xpath.useNamespaces({ ogc: \"http://www.opengis.net/ogc\" });\n      return this.getDataExtractor()(doc, select);\n    }\n  }\n\n  /**\n   * Creates XML data extractor for ExceptionReportEntry objects array.\n   * @private\n   */\n  private getDataExtractor(): SingleNodeDataExtractorFn<\n    ExceptionReportEntry[] | undefined\n  > {\n    return map()\n      .toNodesArray(`//${withNamespace(\"ServiceException\", this.ns)}`)\n      .mandatory()\n      .asArray()\n      .ofObjects({\n        message: map().toNode(\".\").mandatory().asString().withConversion(trim),\n        code: map()\n          .toNode(\"@code\")\n          .asString()\n          .withConversion(\n            (code) =>\n              (code === \"InvalidSRS\"\n                ? WmsExceptionCode.InvalidCRS\n                : code) as WmsExceptionCode\n          ),\n        locator: map().toNode(\"@locator\").asString(),\n      })\n      .createNodeDataExtractor();\n  }\n}\n","import axios, { type AxiosInstance, type AxiosResponse } from \"axios\";\nimport type {\n  RequestErrorHandler,\n  WmsClient,\n  WmsClientFactory,\n} from \"../client\";\nimport { WmsException, WmsExceptionReport } from \"../error\";\nimport type { QueryParamsSerializer } from \"../query-params-serializer\";\nimport { mergeSearchParams } from \"../utils\";\nimport type {\n  WmsVersionAdapterResolver,\n  WmsVersionAdapter,\n  XmlResponseVersionExtractor,\n} from \"../version-adapter\";\nimport type { VersionComparator } from \"../version-comparator\";\nimport type { WmsXmlParser } from \"../wms-xml-parser\";\nimport type { WmsNegotiator, WmsNegotiatorOptions } from \"./WmsNegotiator\";\n\n/**\n * Negotiation outcome interface.\n * @internal\n */\ninterface NegotiationOutcome {\n  /**\n   * WMS adapter of negotiated version.\n   */\n  adapter: WmsVersionAdapter;\n\n  /**\n   * Response document of GetCapabilities request of negotiated version.\n   */\n  responseDoc: Document;\n}\n\n/**\n * Base WmsNegotiator class.\n */\nexport class BaseWmsNegotiator implements WmsNegotiator {\n  /**\n   * BaseWmsNegotiator constructor.\n   *\n   * @param wmsXmlParser\n   * @param xmlResponseVersionExtractor\n   * @param wmsClientFactory\n   * @param versionAdapterResolver\n   * @param requestErrorHandler\n   * @param versionComparator\n   * @param queryParamsSerializer\n   */\n  constructor(\n    private readonly wmsXmlParser: WmsXmlParser,\n    private readonly xmlResponseVersionExtractor: XmlResponseVersionExtractor,\n    private readonly wmsClientFactory: WmsClientFactory,\n    private readonly versionAdapterResolver: WmsVersionAdapterResolver,\n    private readonly requestErrorHandler: RequestErrorHandler,\n    private readonly versionComparator: VersionComparator,\n    private readonly queryParamsSerializer: QueryParamsSerializer\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  async negotiate(\n    wmsUrl: string,\n    options: WmsNegotiatorOptions = {}\n  ): Promise<WmsClient> {\n    const { httpClient = axios.create() } = options;\n    const { adapter, responseDoc } = await this.getNegotiationOutcome(\n      wmsUrl,\n      httpClient,\n      options.query\n    );\n    const capabilities = adapter.extractCapabilitiesResponseData(responseDoc);\n\n    const factoryOptions = {\n      ...options,\n      httpClient, // Use same http client in wms client\n      mapRequestUrl: capabilities?.capability?.request?.getMap?.httpGetUrl,\n      featureInfoRequestUrl:\n        capabilities?.capability?.request?.getFeatureInfo?.httpGetUrl,\n    };\n    return this.wmsClientFactory.create(\n      wmsUrl,\n      adapter.version,\n      factoryOptions\n    );\n  }\n\n  /**\n   * Performs version negotiation and returns promise of NegotiationOutcome.\n   *\n   * @param wmsUrl\n   * @param httpClient\n   * @param customQuery\n   * @private\n   */\n  private async getNegotiationOutcome(\n    wmsUrl: string,\n    httpClient: AxiosInstance,\n    customQuery: object = {}\n  ): Promise<NegotiationOutcome> {\n    let adapter: WmsVersionAdapter | undefined =\n      this.versionAdapterResolver.getHighest();\n    const serverVersions: string[] = [];\n\n    while (adapter) {\n      let responseDoc: Document;\n      try {\n        responseDoc = await this.getWmsServerCapabilities(\n          wmsUrl,\n          adapter,\n          httpClient,\n          customQuery\n        );\n      } catch (e) {\n        if (e instanceof WmsException || e instanceof WmsExceptionReport) {\n          adapter = this.versionAdapterResolver.findLower(adapter.version);\n          continue;\n        } else {\n          throw e;\n        }\n      }\n\n      const serverVersion =\n        this.xmlResponseVersionExtractor.extractVersion(responseDoc);\n      serverVersions.push(serverVersion);\n      if (serverVersion === adapter.version) {\n        return { adapter: adapter, responseDoc };\n      }\n      const compatibleAdapter = this.getCompatibleAdapter(serverVersion);\n      if (compatibleAdapter) {\n        return { adapter: compatibleAdapter, responseDoc };\n      }\n      adapter = this.versionAdapterResolver.findLower(\n        this.versionComparator.is(serverVersion, \"<\", adapter.version)\n          ? serverVersion\n          : adapter.version\n      );\n    }\n\n    throw new RangeError(\n      `Could not find compatible WMS version adapter for following versions: ${serverVersions.map((v) => `\"${v}\"`).join(\", \")}`\n    );\n  }\n\n  /**\n   * Performs GetCapabilities request to WMS server and returns promise of response document.\n   *\n   * @param wmsUrl\n   * @param wmsAdapter\n   * @param httpClient\n   * @param customQuery\n   * @private\n   */\n  private async getWmsServerCapabilities(\n    wmsUrl: string,\n    wmsAdapter: WmsVersionAdapter,\n    httpClient: AxiosInstance,\n    customQuery: object = {}\n  ): Promise<Document> {\n    const params = wmsAdapter.transformCapabilitiesRequestParams({\n      ...customQuery,\n    });\n    const serializedParams = this.queryParamsSerializer.serialize(params);\n    const url = mergeSearchParams(wmsUrl, serializedParams);\n    let response: AxiosResponse<string>;\n    try {\n      response = await httpClient.get<string>(url, {\n        responseType: \"text\",\n      });\n    } catch (e) {\n      this.requestErrorHandler.handleRequestError(e);\n    }\n\n    return this.wmsXmlParser.parse(response.data);\n  }\n\n  /**\n   * Returns WMS version adapter, compatible with given WMS version.\n   *\n   * @param wmsVersion\n   * @private\n   */\n  private getCompatibleAdapter(\n    wmsVersion: string\n  ): WmsVersionAdapter | undefined {\n    const adapter = this.versionAdapterResolver.find(wmsVersion);\n    return adapter || this.versionAdapterResolver.findCompatible(wmsVersion);\n  }\n}\n","import type { QueryParamsSerializer } from \"./QueryParamsSerializer\";\n\n/**\n * Base QueryParamsSerializer class.\n */\nexport class BaseQueryParamsSerializer implements QueryParamsSerializer {\n  /**\n   * @inheritdoc\n   */\n  serialize(queryParams: object, prefix = \"\"): string {\n    return Object.keys(queryParams)\n      .filter((key) => typeof key !== \"symbol\")\n      .map((key) => {\n        const paramName = prefix.length ? `${prefix}[${key}]` : key;\n        const paramValue = queryParams[\n          key as keyof typeof queryParams\n        ] as unknown;\n\n        if (typeof paramValue === \"object\" && paramValue !== null) {\n          return this.serialize(paramValue, paramName);\n        }\n        return (\n          this.encode(paramName) +\n          \"=\" +\n          this.encode(this.stringifyValue(paramValue))\n        );\n      })\n      .join(\"&\");\n  }\n\n  /**\n   * Converts value to string.\n   *\n   * @param val\n   * @private\n   */\n  private stringifyValue(val: unknown): string {\n    switch (typeof val) {\n      case \"number\":\n        return String(val);\n      case \"string\":\n        return val;\n      case \"object\":\n      case \"undefined\":\n        return \"\";\n      default:\n        return val ? \"1\" : \"0\";\n    }\n  }\n\n  /**\n   * Encodes string value for query string.\n   *\n   * @param str\n   * @private\n   */\n  private encode(str: string): string {\n    return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n      return \"%\" + c.charCodeAt(0).toString(16);\n    });\n  }\n}\n","import type { CapabilitiesRequestParams } from \"../../client\";\nimport type { VersionComparator } from \"../../version-comparator\";\n\nimport type { CapabilitiesRequestParamsTransformer } from \"./CapabilitiesRequestParamsTransformer\";\n\n/**\n * Generic CapabilitiesRequestParamsTransformer class. Compatible with WMS versions 1.0, 1.1, 1.3.\n */\nexport class GenericCapabilitiesRequestParamsTransformer\n  implements CapabilitiesRequestParamsTransformer\n{\n  /**\n   * GenericCapabilitiesRequestParamsTransformer constructor.\n   *\n   * @param versionComparator\n   * @param version\n   */\n  constructor(\n    private readonly versionComparator: VersionComparator,\n    private readonly version: string\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  transform(params: CapabilitiesRequestParams): object {\n    const transformedParams: { [key: string]: unknown } = {};\n    Object.keys(params).forEach((key: keyof CapabilitiesRequestParams) => {\n      switch (key) {\n        case \"updateSequence\":\n          transformedParams.updatesequence = params[key];\n          break;\n        default:\n          transformedParams[key] = params[key];\n          break;\n      }\n    });\n    transformedParams.service = \"WMS\";\n    transformedParams.request = this.getRequestName();\n    transformedParams[this.getVersionParamName()] = this.version;\n    return transformedParams;\n  }\n\n  /**\n   * Returns `request` param value.\n   *\n   * @private\n   */\n  private getRequestName(): string {\n    return this.isV_1_0() ? \"capabilities\" : \"GetCapabilities\";\n  }\n\n  /**\n   * Returns `version` param name.\n   * @private\n   */\n  private getVersionParamName(): string {\n    return this.isV_1_0() ? \"wmtver\" : \"version\";\n  }\n\n  /**\n   * Returns true, if using WMS version 1.0.x\n   * @private\n   */\n  private isV_1_0(): boolean {\n    return (\n      this.versionComparator.is(this.version, \">=\", \"1\") &&\n      this.versionComparator.is(this.version, \"<\", \"1.1\")\n    );\n  }\n}\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport { withNamespace } from \"../../../utils\";\nimport type { Attribution } from \"../data-types\";\n\n/**\n * Data extractor factory for `Attribution` interface extractor.\n */\nexport class AttributionExtractor\n  implements SingleNodeDataExtractorFnFactory<Attribution | undefined>\n{\n  /**\n   * AttributionExtractor constructor.\n   *\n   * @param ns\n   */\n  constructor(private readonly ns: string) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<\n    Attribution | undefined\n  > {\n    return map()\n      .toNode(withNamespace(\"Attribution\", this.ns))\n      .asObject({\n        title: map().toNode(withNamespace(\"Title\", this.ns)).asString(),\n        url: map()\n          .toNode(`${withNamespace(\"OnlineResource\", this.ns)}/@xlink:href`)\n          .asString(),\n        logo: map()\n          .toNode(withNamespace(\"LogoURL\", this.ns))\n          .asObject({\n            width: map().toNode(\"@width\").mandatory().asNumber(),\n            height: map().toNode(\"@height\").mandatory().asNumber(),\n            format: map()\n              .toNode(withNamespace(\"Format\", this.ns))\n              .mandatory()\n              .asString(),\n            url: map()\n              .toNode(`${withNamespace(\"OnlineResource\", this.ns)}/@xlink:href`)\n              .mandatory()\n              .asString(),\n          }),\n      })\n      .createNodeDataExtractor();\n  }\n}\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport { withNamespace } from \"../../../utils\";\nimport type { BoundingBox } from \"../data-types\";\n\n/**\n * Data extractor factory for `BoundingBox` objects array extractor.\n */\nexport class BoundingBoxesExtractor\n  implements SingleNodeDataExtractorFnFactory<BoundingBox[] | undefined>\n{\n  /**\n   * BoundingBoxesExtractor constructor.\n   *\n   * @param crsAttrName\n   * @param ns\n   */\n  constructor(\n    private readonly crsAttrName: string,\n    private readonly ns: string\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<\n    BoundingBox[] | undefined\n  > {\n    return map()\n      .toNodesArray(withNamespace(\"BoundingBox\", this.ns))\n      .asArray()\n      .ofObjects({\n        crs: map().toNode(`@${this.crsAttrName}`).mandatory().asString(),\n        minX: map().toNode(\"@minx\").mandatory().asNumber(),\n        minY: map().toNode(\"@miny\").mandatory().asNumber(),\n        maxX: map().toNode(\"@maxx\").mandatory().asNumber(),\n        maxY: map().toNode(\"@maxy\").mandatory().asNumber(),\n        resX: map().toNode(\"@resx\").asNumber(),\n        resY: map().toNode(\"@resy\").asNumber(),\n      })\n      .createNodeDataExtractor();\n  }\n}\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport type { Layer } from \"../data-types\";\n\n/**\n * Layer CRS data extractor.\n */\nexport class CrsExtractor\n  implements SingleNodeDataExtractorFnFactory<Layer[\"crs\"]>\n{\n  /**\n   * CrsExtractor constructor.\n   *\n   * @param crsNodeName\n   */\n  constructor(private readonly crsNodeName: string) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<string[] | undefined> {\n    return map()\n      .toNodesArray(this.crsNodeName)\n      .asArray()\n      .ofStrings()\n      .withConversion((crses) => {\n        // Handle case when multiple CRS defined in single node, delimited by whitespaces.\n        return crses.flatMap((crs) => crs.trim().split(/\\s+/));\n      })\n      .createNodeDataExtractor();\n  }\n}\n","import { map, type SingleNodeDataExtractorFn } from \"@alxcube/xml-mapper\";\nimport type { ResourceUrl } from \"../data-types\";\n\n/**\n * Layer DataUrl array extractor, compatible with WMS 1.0.\n */\nexport const dataUrlsExtractor_1_0: SingleNodeDataExtractorFn<\n  ResourceUrl[] | undefined\n> = map()\n  .toNodesArray(\"DataURL\")\n  .asArray()\n  .ofObjects({\n    format: () => \"\", // No Format node, just return empty string\n    url: map().toNode(\".\").mandatory().asString(),\n  })\n  .createNodeDataExtractor();\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport type { XPathSelect } from \"xpath\";\nimport type { Dimension, Layer } from \"../data-types\";\n\n/**\n * Data, extracted from <Extent/> node.\n * @internal\n */\ninterface ExtentElementData {\n  default?: string;\n  multipleValues?: boolean;\n  nearestValue?: boolean;\n  current?: boolean;\n  value?: string;\n}\n\n/**\n * `Dimension` objects array extractor, compatible with WMS 1.1.\n */\nexport class DimensionsExtractor_1_1\n  implements SingleNodeDataExtractorFnFactory<Layer[\"dimensions\"]>\n{\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<Layer[\"dimensions\"]> {\n    return (layerNode, select) => {\n      if (!this.hasExtentOrDimensionChild(layerNode, select)) {\n        // Do not parse dimensions, when Layer node has neither Dimension, nor Extent child elements.\n        return undefined;\n      }\n\n      const dimensions: Dimension[] = [];\n\n      // Create object for accessing dimension data by name\n      const dimensionsMap = this.getDimensionsMap(layerNode, select);\n\n      // Find all Extent child elements in current Layer node.\n      const extentElements = select(\"Extent\", layerNode) as Element[];\n      for (const extentEl of extentElements) {\n        const name = select(\"string(@name)\", extentEl) as string;\n\n        if (!(name in dimensionsMap)) {\n          continue;\n        }\n\n        // Get initial data from Dimension node\n        const dimension = { ...dimensionsMap[name] };\n\n        // Add info from Extent node to Dimension object\n        Object.assign(\n          dimension,\n          this.extractExtentElementData(extentEl, select)\n        );\n\n        dimensions.push(dimension);\n      }\n\n      return dimensions;\n    };\n  }\n\n  /**\n   * Checks if given <Layer/> node has <Dimension/> or <Extent/> child nodes.\n   *\n   * @param layerNode\n   * @param select\n   * @private\n   */\n  private hasExtentOrDimensionChild(\n    layerNode: Node,\n    select: XPathSelect\n  ): boolean {\n    return (\n      (select(\"boolean(Dimension)\", layerNode) as boolean) ||\n      (select(\"boolean(Extent)\", layerNode) as boolean)\n    );\n  }\n\n  /**\n   * Recursively collects all <Dimension/> nodes, which are children of given <Layer/> node or children of parent\n   * <Layer/> nodes.\n   *\n   * @param node\n   * @param select\n   * @private\n   */\n  private getDimensionElementsRecursive(\n    node: Node,\n    select: XPathSelect\n  ): Element[] {\n    const dimensionElements = select(\"Dimension\", node) as Element[];\n    if (node.parentNode && node.parentNode.nodeName === \"Layer\") {\n      dimensionElements.push(\n        ...this.getDimensionElementsRecursive(node.parentNode, select)\n      );\n    }\n    return dimensionElements;\n  }\n\n  /**\n   * Returns <Dimension/> nodes array, preceding to given <Layer/> node.\n   *\n   * @param layerNode\n   * @param select\n   * @private\n   */\n  private getPrecedingDimensionElements(\n    layerNode: Node,\n    select: XPathSelect\n  ): Element[] {\n    return select(\"preceding::Layer/Dimension\", layerNode) as Element[];\n  }\n\n  /**\n   * Returns object, whose keys are dimension names, taken from \"name\" attribute of <Dimension/> node, and whose values\n   * are `Dimension` objects.\n   *\n   * @param layerNode\n   * @param select\n   * @private\n   */\n  private getDimensionsMap(\n    layerNode: Node,\n    select: XPathSelect\n  ): {\n    [key: string]: NonNullable<Layer[\"dimensions\"]>[number];\n  } {\n    const dimensionElements = [\n      ...this.getDimensionElementsRecursive(layerNode, select),\n      ...this.getPrecedingDimensionElements(layerNode, select),\n    ];\n\n    const dimensionsMap: {\n      [key: string]: NonNullable<Layer[\"dimensions\"]>[number];\n    } = {};\n\n    for (const dimensionElement of dimensionElements) {\n      const name = select(\"string(@name)\", dimensionElement) as string;\n      if (name in dimensionsMap) {\n        continue;\n      }\n      dimensionsMap[name] = {\n        name,\n        units: select(\"string(@units)\", dimensionElement) as string,\n      };\n    }\n\n    return dimensionsMap;\n  }\n\n  /**\n   * Extracts needed data from <Extent/> node.\n   *\n   * @param extent\n   * @param select\n   * @private\n   */\n  private extractExtentElementData(\n    extent: Element,\n    select: XPathSelect\n  ): ExtentElementData {\n    return map()\n      .toNode(\".\")\n      .mandatory()\n      .asObject({\n        default: map().toNode(\"@default\").asString(),\n        multipleValues: map().toNode(\"@multipleValues\").asBoolean(),\n        nearestValue: map().toNode(\"@nearestValue\").asBoolean(),\n        current: map().toNode(\"@current\").asBoolean(),\n        value: map().toNode(\".\").asString(),\n      })\n      .createNodeDataExtractor()(extent, select);\n  }\n}\n","import { map, type SingleNodeDataExtractorFn } from \"@alxcube/xml-mapper\";\nimport type { Layer } from \"../data-types\";\n\n/**\n * `Dimension` objects array extractor, compatible with WMS 1.3.\n */\nexport const dimensionsExtractor_1_3: SingleNodeDataExtractorFn<\n  Layer[\"dimensions\"]\n> = map()\n  .toNodesArray(\"wms:Dimension\")\n  .asArray()\n  .ofObjects({\n    name: map().toNode(\"@name\").mandatory().asString(),\n    units: map().toNode(\"@units\").mandatory().asString(),\n    unitSymbol: map().toNode(\"@unitSymbol\").asString(),\n    default: map().toNode(\"@default\").asString(),\n    multipleValues: map().toNode(\"@multipleValues\").asBoolean(),\n    nearestValue: map().toNode(\"@nearestValue\").asBoolean(),\n    current: map().toNode(\"@current\").asBoolean(),\n    value: map().toNode(\".\").asString(),\n  })\n  .createNodeDataExtractor();\n","import { map, type SingleNodeDataExtractorFn } from \"@alxcube/xml-mapper\";\nimport type { GeographicBoundingBox } from \"../data-types\";\n\n/**\n * `GeographicBoundingBox` object extractor, compatible with WMS 1.1.\n */\nexport const geographicBoundsExtractor_1_1: SingleNodeDataExtractorFn<\n  GeographicBoundingBox | undefined\n> = map()\n  .toNode(\"LatLonBoundingBox\")\n  .asObject({\n    west: map().toNode(\"@minx\").mandatory().asNumber(),\n    south: map().toNode(\"@miny\").mandatory().asNumber(),\n    east: map().toNode(\"@maxx\").mandatory().asNumber(),\n    north: map().toNode(\"@maxy\").mandatory().asNumber(),\n  })\n  .createNodeDataExtractor();\n","import { map, type SingleNodeDataExtractorFn } from \"@alxcube/xml-mapper\";\nimport type { GeographicBoundingBox } from \"../data-types\";\n\n/**\n * `GeographicBoundingBox` object extractor, compatible with WMS 1.3.\n */\nexport const geographicBoundsExtractor_1_3: SingleNodeDataExtractorFn<\n  GeographicBoundingBox | undefined\n> = map()\n  .toNode(\"wms:EX_GeographicBoundingBox\")\n  .asObject({\n    north: map().toNode(\"wms:northBoundLatitude\").mandatory().asNumber(),\n    south: map().toNode(\"wms:southBoundLatitude\").mandatory().asNumber(),\n    west: map().toNode(\"wms:westBoundLongitude\").mandatory().asNumber(),\n    east: map().toNode(\"wms:eastBoundLongitude\").mandatory().asNumber(),\n  })\n  .createNodeDataExtractor();\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport type { XPathSelect } from \"xpath\";\nimport { withNamespace } from \"../../../utils\";\nimport type { Identifier } from \"../data-types\";\n\n/**\n * `Identifier` objects array extractor.\n */\nexport class IdentifiersExtractor\n  implements SingleNodeDataExtractorFnFactory<Identifier[] | undefined>\n{\n  /**\n   * IdentifiersExtractor constructor.\n   *\n   * @param ns\n   */\n  constructor(private readonly ns: string) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<\n    Identifier[] | undefined\n  > {\n    return map()\n      .toNodesArray(withNamespace(\"Identifier\", this.ns))\n      .asArray()\n      .ofObjects({\n        value: map().toNode(\".\").mandatory().asString(),\n        authorityUrl: (node, select) => this.getAuthorityUrl(node, select),\n      })\n      .createNodeDataExtractor();\n  }\n\n  /**\n   * Returns corresponding authority URL for given <Identifier/> node.\n   *\n   * @param identifierNode\n   * @param select\n   * @private\n   */\n  private getAuthorityUrl(identifierNode: Node, select: XPathSelect): string {\n    const authority = select(\"string(@authority)\", identifierNode) as string;\n    const lookupExpression =\n      `//${withNamespace(\"Layer\", this.ns)}` +\n      `//${withNamespace(\"AuthorityURL\", this.ns)}[@name=\"${authority.trim()}\"][1]` +\n      `/${withNamespace(\"OnlineResource\", this.ns)}/@xlink:href`;\n    return select(`string(${lookupExpression})`, identifierNode) as string;\n  }\n}\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport { withNamespace } from \"../../../utils\";\nimport type { Keyword, Layer } from \"../data-types\";\nimport type { XmlDataExtractor } from \"../XmlDataExtractor\";\n\n/**\n * Generic `Layer` objects array extractor.\n */\nexport class LayersExtractor\n  implements SingleNodeDataExtractorFnFactory<Layer[]>\n{\n  /**\n   * LayersExtractor constructor.\n   *\n   * @param keywordsExtractor\n   * @param crsExtractor\n   * @param layerDimensionsExtractor\n   * @param geographicBoundsExtractor\n   * @param boundingBoxesExtractor\n   * @param attributionExtractor\n   * @param identifiersExtractor\n   * @param metadataUrlsExtractor\n   * @param dataUrlsExtractor\n   * @param featureListUrlsExtractor\n   * @param stylesExtractor\n   * @param ns\n   */\n  constructor(\n    private readonly keywordsExtractor: XmlDataExtractor<Keyword[] | undefined>,\n    private readonly crsExtractor: XmlDataExtractor<Layer[\"crs\"]>,\n    private readonly layerDimensionsExtractor: XmlDataExtractor<\n      Layer[\"dimensions\"]\n    >,\n    private readonly geographicBoundsExtractor: XmlDataExtractor<\n      Layer[\"geographicBounds\"]\n    >,\n    private readonly boundingBoxesExtractor: XmlDataExtractor<\n      Layer[\"boundingBoxes\"]\n    >,\n    private readonly attributionExtractor: XmlDataExtractor<\n      Layer[\"attribution\"]\n    >,\n    private readonly identifiersExtractor: XmlDataExtractor<\n      Layer[\"identifiers\"]\n    >,\n    private readonly metadataUrlsExtractor: XmlDataExtractor<\n      Layer[\"metadataUrls\"]\n    >,\n    private readonly dataUrlsExtractor: XmlDataExtractor<Layer[\"dataUrls\"]>,\n    private readonly featureListUrlsExtractor: XmlDataExtractor<\n      Layer[\"featureListUrls\"]\n    >,\n    private readonly stylesExtractor: XmlDataExtractor<Layer[\"styles\"]>,\n    private readonly ns: string\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<Layer[]> {\n    return map()\n      .toNodesArray(withNamespace(\"Layer\", this.ns))\n      .mandatory()\n      .asArray()\n      .ofRecursiveObjects<Layer>((recursion) => ({\n        title: map()\n          .toNode(withNamespace(\"Title\", this.ns))\n          .mandatory()\n          .asString(),\n        crs: this.crsExtractor,\n        name: map().toNode(withNamespace(\"Name\", this.ns)).asString(),\n        description: map()\n          .toNode(withNamespace(\"Abstract\", this.ns))\n          .asString(),\n        keywords: this.keywordsExtractor,\n        geographicBounds: this.geographicBoundsExtractor,\n        boundingBoxes: this.boundingBoxesExtractor,\n        dimensions: this.layerDimensionsExtractor,\n        attribution: this.attributionExtractor,\n        identifiers: this.identifiersExtractor,\n        metadataUrls: this.metadataUrlsExtractor,\n        dataUrls: this.dataUrlsExtractor,\n        featureListUrls: this.featureListUrlsExtractor,\n        styles: this.stylesExtractor,\n        scaleHint: map()\n          .toNode(withNamespace(\"ScaleHint\", this.ns))\n          .asObject({\n            min: map().toNode(\"@min\").mandatory().asNumber(),\n            max: map().toNode(\"@max\").mandatory().asNumber(),\n          }),\n        queryable: map().toNode(\"@queryable\").asBoolean(),\n        cascaded: map().toNode(\"@cascaded\").asNumber(),\n        opaque: map().toNode(\"@opaque\").asBoolean(),\n        noSubsets: map().toNode(\"@noSubsets\").asBoolean(),\n        fixedWidth: map().toNode(\"@fixedWidth\").asNumber(),\n        fixedHeight: map().toNode(\"@fixedHeight\").asNumber(),\n        layers: map()\n          .toNodesArray(withNamespace(\"Layer\", this.ns))\n          .asArray()\n          .ofRecursiveObjects(recursion),\n      }))\n      .createNodeDataExtractor();\n  }\n}\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport { withNamespace } from \"../../../utils\";\nimport type { MetadataUrl } from \"../data-types\";\n\n/**\n * `MetadataUrl` objects array extractor.\n */\nexport class MetadataUrlsExtractor\n  implements SingleNodeDataExtractorFnFactory<MetadataUrl[] | undefined>\n{\n  /**\n   * MetadataUrlsExtractor constructor.\n   *\n   * @param ns\n   */\n  constructor(private readonly ns: string) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<\n    MetadataUrl[] | undefined\n  > {\n    return map()\n      .toNodesArray(withNamespace(\"MetadataURL\", this.ns))\n      .asArray()\n      .ofObjects({\n        type: map().toNode(\"@type\").mandatory().asString(),\n        format: map()\n          .toNode(withNamespace(\"Format\", this.ns))\n          .mandatory()\n          .asString(),\n        url: map()\n          .toNode(`${withNamespace(\"OnlineResource\", this.ns)}/@xlink:href`)\n          .mandatory()\n          .asString(),\n      })\n      .createNodeDataExtractor();\n  }\n}\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport { withNamespace } from \"../../../utils\";\nimport type { ResourceUrl } from \"../data-types\";\n\n/**\n * Generic extractor for `ResourceUrl` objects.\n */\nexport class ResourceUrlsExtractor\n  implements SingleNodeDataExtractorFnFactory<ResourceUrl[] | undefined>\n{\n  /**\n   * ResourceUrlExtractor constructor.\n   *\n   * @param nodeName\n   * @param ns\n   */\n  constructor(\n    private readonly nodeName: string,\n    private readonly ns: string\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<\n    ResourceUrl[] | undefined\n  > {\n    return map()\n      .toNodesArray(withNamespace(this.nodeName, this.ns))\n      .asArray()\n      .ofObjects({\n        format: map()\n          .toNode(withNamespace(\"Format\", this.ns))\n          .mandatory()\n          .asString(),\n        url: map()\n          .toNode(`${withNamespace(\"OnlineResource\", this.ns)}/@xlink:href`)\n          .mandatory()\n          .asString(),\n      })\n      .createNodeDataExtractor();\n  }\n}\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport { withNamespace } from \"../../../utils\";\nimport type { LayerStyle, ResourceUrl } from \"../data-types\";\nimport type { XmlDataExtractor } from \"../XmlDataExtractor\";\n\n/**\n * Layer styles metadata array extractor.\n */\nexport class StylesExtractor\n  implements SingleNodeDataExtractorFnFactory<LayerStyle[] | undefined>\n{\n  /**\n   * StylesExtractor constructor.\n   *\n   * @param styleUrlExtractor\n   * @param ns\n   */\n  constructor(\n    private readonly styleUrlExtractor: XmlDataExtractor<\n      ResourceUrl | undefined\n    >,\n    private readonly ns: string\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<\n    LayerStyle[] | undefined\n  > {\n    return map()\n      .toNodesArray(withNamespace(\"Style\", this.ns))\n      .asArray()\n      .ofObjects({\n        name: map()\n          .toNode(withNamespace(\"Name\", this.ns))\n          .mandatory()\n          .asString(),\n        title: map()\n          .toNode(withNamespace(\"Title\", this.ns))\n          .mandatory()\n          .asString(),\n        description: map()\n          .toNode(withNamespace(\"Abstract\", this.ns))\n          .asString(),\n        legendUrls: map()\n          .toNodesArray(withNamespace(\"LegendURL\", this.ns))\n          .asArray()\n          .ofObjects({\n            width: map().toNode(\"@width\").mandatory().asNumber(),\n            height: map().toNode(\"@height\").mandatory().asNumber(),\n            format: map()\n              .toNode(withNamespace(\"Format\", this.ns))\n              .mandatory()\n              .asString(),\n            url: map()\n              .toNode(`${withNamespace(\"OnlineResource\", this.ns)}/@xlink:href`)\n              .mandatory()\n              .asString(),\n          }),\n        stylesheetUrl: map()\n          .toNode(withNamespace(\"StyleSheetURL\", this.ns))\n          .asObject({\n            format: map()\n              .toNode(withNamespace(\"Format\", this.ns))\n              .mandatory()\n              .asString(),\n            url: map()\n              .toNode(`${withNamespace(\"OnlineResource\", this.ns)}/@xlink:href`)\n              .mandatory()\n              .asString(),\n          }),\n        styleUrl: this.styleUrlExtractor,\n      })\n      .createNodeDataExtractor();\n  }\n}\n","import { map, type SingleNodeDataExtractorFn } from \"@alxcube/xml-mapper\";\nimport type { ResourceUrl } from \"../data-types\";\n\n/**\n * <StyleURL/> node data extractor, compatible with WMS 1.0.\n */\nexport const styleUrlExtractor_1_0: SingleNodeDataExtractorFn<\n  ResourceUrl | undefined\n> = map()\n  .toNode(\"StyleURL\")\n  .asObject({\n    format: () => \"\",\n    url: map().toNode(\".\").mandatory().asString(),\n  })\n  .createNodeDataExtractor();\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport { withNamespace } from \"../../../utils\";\nimport type { ResourceUrl } from \"../data-types\";\n\n/**\n * <StyleURL/> node data extractor, compatible with WMS 1.1, 1.3.\n */\nexport class StyleUrlExtractor_1_1\n  implements SingleNodeDataExtractorFnFactory<ResourceUrl | undefined>\n{\n  /**\n   * StyleUrlExtractor_1_1 constructor.\n   *\n   * @param ns\n   */\n  constructor(private readonly ns: string) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<\n    ResourceUrl | undefined\n  > {\n    return map()\n      .toNode(withNamespace(\"StyleURL\", this.ns))\n      .asObject({\n        format: map()\n          .toNode(withNamespace(\"Format\", this.ns))\n          .mandatory()\n          .asString(),\n        url: map()\n          .toNode(`${withNamespace(\"OnlineResource\", this.ns)}/@xlink:href`)\n          .mandatory()\n          .asString(),\n      })\n      .createNodeDataExtractor();\n  }\n}\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport { withNamespace } from \"../../utils\";\nimport type { ExceptionFormat } from \"../../error\";\nimport type {\n  OperationType,\n  UnifiedCapabilitiesResponse,\n  Layer,\n} from \"./data-types\";\nimport type { XmlDataExtractor } from \"./XmlDataExtractor\";\n\n/**\n * Extractor of 'capability' section of `UnifiedCapabilitiesResponse`, compatible with WMS 1.1, 1.3.\n */\nexport class CapabilitiesSectionExtractor\n  implements\n    SingleNodeDataExtractorFnFactory<UnifiedCapabilitiesResponse[\"capability\"]>\n{\n  /**\n   * CapabilitiesSectionExtractor constructor.\n   *\n   * @param layersDataExtractor\n   * @param exceptionFormatsExtractor\n   * @param rootNodeName\n   * @param ns\n   */\n  constructor(\n    private layersDataExtractor: XmlDataExtractor<Layer[]>,\n    private exceptionFormatsExtractor: XmlDataExtractor<ExceptionFormat[]>,\n    private readonly rootNodeName: string,\n    private readonly ns: string\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<\n    UnifiedCapabilitiesResponse[\"capability\"]\n  > {\n    return map()\n      .toNode(\n        `/${withNamespace(this.rootNodeName, this.ns)}/${this.withNamespace(\"Capability\")}`\n      )\n      .mandatory()\n      .asObject({\n        request: map()\n          .toNode(this.withNamespace(\"Request\"))\n          .mandatory()\n          .asObject({\n            getCapabilities:\n              this.buildOperationTypeExtractor(\"GetCapabilities\"),\n            getMap: this.buildOperationTypeExtractor(\"GetMap\"),\n            getFeatureInfo: this.buildOperationTypeExtractor(\n              \"GetFeatureInfo\",\n              true\n            ),\n            describeLayer: this.buildOperationTypeExtractor(\n              \"DescribeLayer\",\n              true\n            ),\n          }),\n        exceptionFormats: this.exceptionFormatsExtractor,\n        layers: this.layersDataExtractor,\n      })\n      .createNodeDataExtractor();\n  }\n  protected buildLinkUrlDataExtractor(): SingleNodeDataExtractorFnFactory<string>;\n  protected buildLinkUrlDataExtractor(\n    pathPrefix: string,\n    mandatory: false\n  ): SingleNodeDataExtractorFnFactory<string | undefined>;\n  protected buildLinkUrlDataExtractor(\n    pathPrefix: string,\n    mandatory: true\n  ): SingleNodeDataExtractorFnFactory<string>;\n  protected buildLinkUrlDataExtractor(\n    pathPrefix = \"\",\n    mandatory: boolean = true\n  ):\n    | SingleNodeDataExtractorFnFactory<string | undefined>\n    | SingleNodeDataExtractorFnFactory<string> {\n    let builder = map().toNode(\n      `${pathPrefix}${this.withNamespace(\"OnlineResource\")}/@xlink:href`\n    );\n    if (mandatory) {\n      builder = builder.mandatory();\n    }\n    return builder.asString();\n  }\n\n  private buildOperationTypeExtractor(\n    requestType: string\n  ): SingleNodeDataExtractorFnFactory<OperationType>;\n  private buildOperationTypeExtractor(\n    requestType: string,\n    optional: true\n  ): SingleNodeDataExtractorFnFactory<OperationType | undefined>;\n  private buildOperationTypeExtractor(\n    requestType: string,\n    optional = false\n  ):\n    | SingleNodeDataExtractorFnFactory<OperationType>\n    | SingleNodeDataExtractorFnFactory<OperationType | undefined> {\n    let builder = map().toNode(this.withNamespace(requestType));\n    if (!optional) {\n      builder = builder.mandatory();\n    }\n    return builder.asObject({\n      responseFormats: map()\n        .toNodesArray(this.withNamespace(\"Format\"))\n        .mandatory()\n        .asArray()\n        .ofStrings(),\n      httpGetUrl: this.buildLinkUrlDataExtractor(\n        `${this.withNamespace(\"DCPType\")}/${this.withNamespace(\"HTTP\")}/${this.withNamespace(\"Get\")}/`,\n        true\n      ),\n    });\n  }\n\n  private withNamespace(nodeName: string): string {\n    return this.ns.length ? `${this.ns}:${nodeName}` : nodeName;\n  }\n}\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport type { ExceptionFormat } from \"../../error\";\nimport type {\n  Layer,\n  OperationType,\n  UnifiedCapabilitiesResponse,\n} from \"./data-types\";\nimport type { XmlDataExtractor } from \"./XmlDataExtractor\";\n\n/**\n * Extractor of 'capability' section of `UnifiedCapabilitiesResponse`, compatible with WMS 1.0.\n */\nexport class CapabilitiesSectionExtractor_1_0\n  implements\n    SingleNodeDataExtractorFnFactory<UnifiedCapabilitiesResponse[\"capability\"]>\n{\n  /**\n   * CapabilitiesSectionExtractor_1_0 constructor.\n   *\n   * @param layersExtractor\n   */\n  constructor(private readonly layersExtractor: XmlDataExtractor<Layer[]>) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<\n    UnifiedCapabilitiesResponse[\"capability\"]\n  > {\n    return map()\n      .toNode(\"/WMT_MS_Capabilities/Capability\")\n      .mandatory()\n      .asObject<UnifiedCapabilitiesResponse[\"capability\"]>({\n        request: map()\n          .toNode(\"Request\")\n          .mandatory()\n          .asObject({\n            getCapabilities: this.buildOperationTypeExtractor(\"Capabilities\"),\n            getMap: this.buildOperationTypeExtractor(\"Map\"),\n            getFeatureInfo: this.buildOperationTypeExtractor(\n              \"FeatureInfo\",\n              true\n            ),\n          }),\n        exceptionFormats: map()\n          .toNodesArray(\"Exception/Format/*\")\n          .mandatory()\n          .asArray()\n          .usingMapper((formatNode) => {\n            const format = formatNode.nodeName.toUpperCase();\n            return format === \"WMS_XML\" ? \"XML\" : (format as ExceptionFormat);\n          }),\n        layers: this.layersExtractor,\n      })\n      .createNodeDataExtractor();\n  }\n\n  /**\n   * Creates data extractor for `OperationType`, using given request name (which is used as XML node name).\n   *\n   * @param requestType\n   * @private\n   */\n  private buildOperationTypeExtractor(\n    requestType: string\n  ): SingleNodeDataExtractorFnFactory<OperationType>;\n  private buildOperationTypeExtractor(\n    requestType: string,\n    optional: true\n  ): SingleNodeDataExtractorFnFactory<OperationType | undefined>;\n  private buildOperationTypeExtractor(\n    requestType: string,\n    optional = false\n  ):\n    | SingleNodeDataExtractorFnFactory<OperationType>\n    | SingleNodeDataExtractorFnFactory<OperationType | undefined> {\n    let builder = map().toNode(requestType);\n    if (!optional) {\n      builder = builder.mandatory();\n    }\n    return builder.asObject<OperationType>({\n      responseFormats: map()\n        .toNodesArray(\"Format/*\")\n        .mandatory()\n        .asArray()\n        .usingMapper((formatNode) => formatNode.nodeName),\n      httpGetUrl: map()\n        .toNode(\"DCPType/HTTP/Get/@onlineResource\")\n        .mandatory()\n        .asString(),\n    });\n  }\n}\n","import { map, type SingleNodeDataExtractorFn } from \"@alxcube/xml-mapper\";\nimport type { ExceptionFormat } from \"../../error\";\n\n/**\n * Data extractor for ExceptionFormat. Compatible with WMS 1.1.\n */\nexport const exceptionFormatExtractor_1_1: SingleNodeDataExtractorFn<\n  ExceptionFormat[]\n> = map()\n  .toNodesArray(\"Exception/Format\")\n  .mandatory()\n  .asArray()\n  .ofStrings()\n  .withConversion((formats) =>\n    formats.map((format) => {\n      switch (format) {\n        case \"application/vnd.ogc.se_xml\":\n          return \"XML\";\n        case \"application/vnd.ogc.se_inimage\":\n          return \"INIMAGE\";\n        case \"application/vnd.ogc.se_blank\":\n          return \"BLANK\";\n        default:\n          return format as ExceptionFormat;\n      }\n    })\n  )\n  .createNodeDataExtractor();\n","import { map, type SingleNodeDataExtractorFn } from \"@alxcube/xml-mapper\";\nimport type { ExceptionFormat } from \"../../error\";\n\n/**\n * Data extractor for ExceptionFormat. Compatible with WMS 1.3.\n */\nexport const exceptionFormatExtractor_1_3: SingleNodeDataExtractorFn<\n  ExceptionFormat[]\n> = map()\n  .toNodesArray(\"wms:Exception/wms:Format\")\n  .mandatory()\n  .asArray()\n  .ofStrings()\n  .withConversion((formats) => {\n    return formats as ExceptionFormat[];\n  })\n  .createNodeDataExtractor();\n","import {\n  createObjectMapper,\n  map,\n  type SingleNodeDataExtractorFn,\n} from \"@alxcube/xml-mapper\";\nimport xpath from \"xpath\";\nimport type { UnifiedCapabilitiesResponse } from \"./data-types\";\n\nimport type { CapabilitiesResponseDataExtractor } from \"./CapabilitiesResponseDataExtractor\";\nimport type { XmlDataExtractor } from \"./XmlDataExtractor\";\n\n/**\n * Generic CapabilitiesResponseDataExtractor implementing class.\n */\nexport class GenericCapabilitiesResponseDataExtractor\n  implements CapabilitiesResponseDataExtractor\n{\n  /**\n   * GenericCapabilitiesResponseDataExtractor constructor.\n   */\n  constructor(\n    private readonly serviceSectionExtractorFactory: XmlDataExtractor<\n      UnifiedCapabilitiesResponse[\"service\"]\n    >,\n    private readonly capabilitiesSectionExtractorFactory: XmlDataExtractor<\n      UnifiedCapabilitiesResponse[\"capability\"]\n    >,\n    private readonly namespaces: { [key: string]: string }\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  extract(response: Document): UnifiedCapabilitiesResponse {\n    return this.buildDataExtractor()(\n      response,\n      xpath.useNamespaces(this.namespaces)\n    );\n  }\n\n  /**\n   * Returns UnifiedCapabilitiesResponse extractor.\n   */\n  private buildDataExtractor(): SingleNodeDataExtractorFn<UnifiedCapabilitiesResponse> {\n    return createObjectMapper<UnifiedCapabilitiesResponse>({\n      version: map().toNode(\"/*/@version\").mandatory().asString(),\n      updateSequence: map().toNode(\"/*/@updatesequence\").asString(),\n      service: this.serviceSectionExtractorFactory,\n      capability: this.capabilitiesSectionExtractorFactory,\n    });\n  }\n}\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport { trim } from \"../../utils\";\nimport type { Keyword } from \"./data-types\";\n\n/**\n * `Keyword` objects array extractor, compatible with WMS 1.1, 1.3.\n */\nexport class KeywordsExtractor\n  implements SingleNodeDataExtractorFnFactory<Keyword[] | undefined>\n{\n  /**\n   * KeywordsExtractor constructor.\n   *\n   * @param ns\n   */\n  constructor(private readonly ns: string) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<Keyword[] | undefined> {\n    return map()\n      .toNodesArray(\n        `${this.withNameSpace(\"KeywordList\")}/${this.withNameSpace(\"Keyword\")}`\n      )\n      .asArray()\n      .ofObjects<Keyword>({\n        value: map().toNode(\".\").mandatory().asString().withConversion(trim),\n        vocabulary: map().toNode(\"@vocabulary\").asString(),\n      })\n      .createNodeDataExtractor();\n  }\n\n  private withNameSpace(nodeName: string): string {\n    return this.ns.length ? `${this.ns}:${nodeName}` : nodeName;\n  }\n}\n","import { map, type SingleNodeDataExtractorFn } from \"@alxcube/xml-mapper\";\nimport type { Keyword } from \"./data-types\";\n\n/**\n * `Keyword` objects array extractor, compatible with WMS 1.0.\n */\nexport const keywordsExtractor_1_0: SingleNodeDataExtractorFn<\n  Keyword[] | undefined\n> = map()\n  .toNode(\"Keywords\")\n  .asString()\n  .withConversion((keywordsString) => {\n    return keywordsString\n      .trim()\n      .split(/\\s+/)\n      .map((keyword) => ({ value: keyword }));\n  })\n  .createNodeDataExtractor();\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport { withNamespace } from \"../../utils\";\nimport type {\n  ContactAddress,\n  ContactInformation,\n  ContactPerson,\n  UnifiedCapabilitiesResponse,\n  Keyword,\n} from \"./data-types\";\nimport type { XmlDataExtractor } from \"./XmlDataExtractor\";\n\n/**\n * Data extractor of 'service' section of `UnifiedCapabilitiesResponse`, compatible with WMS 1.1, 1.3.\n */\nexport class ServiceSectionExtractor\n  implements\n    SingleNodeDataExtractorFnFactory<UnifiedCapabilitiesResponse[\"service\"]>\n{\n  /**\n   * ServiceSectionExtractor constructor.\n   *\n   * @param keywordsDataExtractor\n   * @param rootNodeName\n   * @param ns\n   */\n  constructor(\n    private readonly keywordsDataExtractor: XmlDataExtractor<\n      Keyword[] | undefined\n    >,\n    private readonly rootNodeName: string,\n    private readonly ns: string\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<\n    UnifiedCapabilitiesResponse[\"service\"]\n  > {\n    return map()\n      .toNode(\n        `/${withNamespace(this.rootNodeName, this.ns)}/${withNamespace(\"Service\", this.ns)}`\n      )\n      .mandatory()\n      .asObject({\n        title: map().toNode(this.withNamespace(\"Title\")).mandatory().asString(),\n        description: map().toNode(this.withNamespace(\"Abstract\")).asString(),\n        keywords: this.keywordsDataExtractor,\n        url: map()\n          .toNode(`${this.withNamespace(\"OnlineResource\")}/@xlink:href`)\n          .asString()\n          .withDefault(\"\"),\n        contactInformation: this.buildContactInformationExtractor(),\n        fees: map().toNode(this.withNamespace(\"Fees\")).asString(),\n        accessConstraints: map()\n          .toNode(this.withNamespace(\"AccessConstraints\"))\n          .asString(),\n        layerLimit: map().toNode(this.withNamespace(\"LayerLimit\")).asNumber(),\n        maxWidth: map().toNode(this.withNamespace(\"MaxWidth\")).asNumber(),\n        maxHeight: map().toNode(this.withNamespace(\"MaxHeight\")).asNumber(),\n      })\n      .createNodeDataExtractor();\n  }\n\n  /**\n   * Returns `ContactInformation` extractor.\n   *\n   * @private\n   */\n  private buildContactInformationExtractor(): SingleNodeDataExtractorFnFactory<\n    ContactInformation | undefined\n  > {\n    return map()\n      .toNode(this.withNamespace(\"ContactInformation\"))\n      .asObject({\n        contactPerson: this.buildContactPersonExtractor(),\n        position: map()\n          .toNode(this.withNamespace(\"ContactPosition\"))\n          .asString(),\n        address: this.buildAddressExtractor(),\n        telephone: map()\n          .toNode(this.withNamespace(\"ContactVoiceTelephone\"))\n          .asString(),\n        fax: map()\n          .toNode(this.withNamespace(\"ContactFacsimileTelephone\"))\n          .asString(),\n        email: map()\n          .toNode(this.withNamespace(\"ContactElectronicMailAddress\"))\n          .asString(),\n      });\n  }\n\n  /**\n   * Returns `ContactPerson` extractor.\n   *\n   * @private\n   */\n  private buildContactPersonExtractor(): SingleNodeDataExtractorFnFactory<\n    ContactPerson | undefined\n  > {\n    return map()\n      .toNode(this.withNamespace(\"ContactPersonPrimary\"))\n      .asObject({\n        name: map()\n          .toNode(this.withNamespace(\"ContactPerson\"))\n          .mandatory()\n          .asString(),\n        organization: map()\n          .toNode(this.withNamespace(\"ContactOrganization\"))\n          .mandatory()\n          .asString(),\n      });\n  }\n\n  /**\n   * Returns `ContactAddress` extractor.\n   *\n   * @private\n   */\n  private buildAddressExtractor(): SingleNodeDataExtractorFnFactory<\n    ContactAddress | undefined\n  > {\n    return map()\n      .toNode(this.withNamespace(\"ContactAddress\"))\n      .asObject({\n        addressType: map()\n          .toNode(this.withNamespace(\"AddressType\"))\n          .asString()\n          .withDefault(\"\"),\n        address: map()\n          .toNode(this.withNamespace(\"Address\"))\n          .asString()\n          .withDefault(\"\"),\n        city: map()\n          .toNode(this.withNamespace(\"City\"))\n          .asString()\n          .withDefault(\"\"),\n        stateOrProvince: map()\n          .toNode(this.withNamespace(\"StateOrProvince\"))\n          .asString()\n          .withDefault(\"\"),\n        postCode: map()\n          .toNode(this.withNamespace(\"PostCode\"))\n          .asString()\n          .withDefault(\"\"),\n        country: map()\n          .toNode(this.withNamespace(\"Country\"))\n          .asString()\n          .withDefault(\"\"),\n      });\n  }\n\n  private withNamespace(nodeName: string): string {\n    return this.ns.length ? `${this.ns}:${nodeName}` : nodeName;\n  }\n}\n","import {\n  map,\n  type SingleNodeDataExtractorFn,\n  type SingleNodeDataExtractorFnFactory,\n} from \"@alxcube/xml-mapper\";\nimport type { Keyword, UnifiedCapabilitiesResponse } from \"./data-types\";\nimport type { XmlDataExtractor } from \"./XmlDataExtractor\";\n\n/**\n * Data extractor of 'service' section of `UnifiedCapabilitiesResponse`, compatible with WMS 1.0.\n */\nexport class ServiceSectionExtractor_1_0\n  implements\n    SingleNodeDataExtractorFnFactory<UnifiedCapabilitiesResponse[\"service\"]>\n{\n  /**\n   * ServiceSectionExtractor_1_0 constructor.\n   *\n   * @param keywordsExtractor\n   */\n  constructor(\n    private keywordsExtractor: XmlDataExtractor<Keyword[] | undefined>\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  createNodeDataExtractor(): SingleNodeDataExtractorFn<\n    UnifiedCapabilitiesResponse[\"service\"]\n  > {\n    return map()\n      .toNode(\"/WMT_MS_Capabilities/Service\")\n      .mandatory()\n      .asObject({\n        title: map().toNode(\"Title\").asString().withDefault(\"\"),\n        description: map().toNode(\"Abstract\").asString(),\n        keywords: this.keywordsExtractor,\n        url: map().toNode(\"OnlineResource\").asString().withDefault(\"\"),\n        fees: map().toNode(\"Fees\").asString(),\n        accessConstraints: map().toNode(\"AccessConstraints\").asString(),\n      })\n      .createNodeDataExtractor();\n  }\n}\n","import type { XmlDataExtractor } from \"./XmlDataExtractor\";\n\n/**\n * Dummy data extractor, which always returns undefined. Used with WMS XML versions, that do not contain some\n * parts of `UnifiedCapabilitiesResponse` data, available in other versions.\n */\nexport const undefinedExtractor: XmlDataExtractor<undefined> = () => undefined;\n","/**\n * XML namespace, used in WMS \"GetCapabilities\" response v1.3.\n */\nexport const wmsXmlNamespace = \"http://www.opengis.net/wms\";\n","/**\n * XML namespace, used in <OnlineResource/> element attributes of WMS \"GetCapabilities\" response XML v1.1 and v1.3.\n */\nexport const xlinkXmlNamespace = \"http://www.w3.org/1999/xlink\";\n","import type { FeatureInfoRequestParamsWithCustom } from \"../../client\";\nimport type { VersionComparator } from \"../../version-comparator\";\nimport type { MapRequestParamsTransformer } from \"../map-request-params-transformer\";\nimport type { FeatureInfoRequestParamsTransformer } from \"./FeatureInfoRequestParamsTransformer\";\n\n/**\n * Generic implementation of FeatureInfoRequestParamsTransformer.\n */\nexport class GenericFeatureInfoRequestParamsTransformer\n  implements FeatureInfoRequestParamsTransformer\n{\n  /**\n   * GenericFeatureInfoRequestParamsTransformer constructor.\n   *\n   * @param mapRequestParamsTransformer\n   * @param versionComparator\n   * @param version\n   */\n  constructor(\n    private readonly mapRequestParamsTransformer: MapRequestParamsTransformer,\n    private readonly versionComparator: VersionComparator,\n    private readonly version: string\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  transform(params: FeatureInfoRequestParamsWithCustom): object {\n    const result = this.mapRequestParamsTransformer.transform(params) as {\n      [key: string]: string;\n    };\n    result.request = this.isV1_0() ? \"feature_info\" : \"GetFeatureInfo\";\n    if (this.isV1_3()) {\n      result.i = String(params.x);\n      result.j = String(params.y);\n      if (\"x\" in result) {\n        delete result.x;\n      }\n      if (\"y\" in result) {\n        delete result.y;\n      }\n    } else {\n      result.x = String(params.x);\n      result.y = String(params.y);\n    }\n    delete result.queryLayers;\n    result.query_layers = params.queryLayers.join(\",\");\n    delete result.infoFormat;\n    result.info_format = params.infoFormat;\n    return result;\n  }\n\n  /**\n   * Returns true if working with WMS version v1.3.x.\n   * @private\n   */\n  private isV1_3(): boolean {\n    return this.versionComparator.is(this.version, \">=\", \"1.3\");\n  }\n\n  /**\n   * Returns true if working with WMS version v1.0.x.\n   * @private\n   */\n  private isV1_0(): boolean {\n    return (\n      this.versionComparator.is(this.version, \">=\", \"1\") &&\n      this.versionComparator.is(this.version, \"<\", \"1.1\")\n    );\n  }\n}\n","import type {\n  MapRequestParams,\n  MapRequestParamsWithCustom,\n} from \"../../client\";\nimport type { ExceptionFormat } from \"../../error\";\nimport type { VersionComparator } from \"../../version-comparator\";\n\nimport type { MapRequestParamsTransformer } from \"./MapRequestParamsTransformer\";\n\n/**\n * Generic implementation of MapRequestParamsTransformer.\n */\nexport class GenericMapRequestParamsTransformer\n  implements MapRequestParamsTransformer\n{\n  /**\n   * GenericMapRequestParamsTransformer constructor.\n   *\n   * @param versionComparator\n   * @param version\n   */\n  constructor(\n    private readonly versionComparator: VersionComparator,\n    private readonly version: string\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  transform(params: MapRequestParamsWithCustom): object {\n    const requestParams: { [key: string]: unknown } = {};\n\n    Object.keys(params).forEach((key: keyof MapRequestParamsWithCustom) => {\n      switch (key) {\n        case \"layers\":\n          requestParams.layers = this.getLayersParam(params[key]);\n          requestParams.styles = this.getStylesParam(params[key]);\n          break;\n        case \"bounds\":\n          requestParams.bbox = this.getBboxParam(params[key]);\n          break;\n        case \"transparent\":\n          requestParams.transparent = params[key] ? \"TRUE\" : \"FALSE\";\n          break;\n        case \"crs\":\n          requestParams[this.getCrsParamName()] = params[key];\n          break;\n        case \"exceptionsFormat\":\n          requestParams[\"exceptions\"] = this.transformExceptionFormat(\n            params[key]\n          );\n          break;\n        case \"bgColor\":\n          requestParams.bgcolor = params[key];\n          break;\n        default:\n          requestParams[key] = params[key];\n          break;\n      }\n    });\n\n    requestParams[this.getVersionParamName()] = this.version;\n    requestParams.service = \"WMS\";\n    requestParams.request = this.getRequestName();\n\n    return requestParams;\n  }\n\n  /**\n   * Transforms `bounds` property of `MapRequestParams` interface to string value of `bbox` param of \"GetMap\" request.\n   *\n   * @param bounds\n   * @private\n   */\n  private getBboxParam(bounds: MapRequestParams[\"bounds\"]): string {\n    return [bounds.minX, bounds.minY, bounds.maxX, bounds.maxY].join(\",\");\n  }\n\n  /**\n   * Transforms `layers` property of `MapRequestParams` interface to string value of `layers` param of \"GetMap\" request.\n   *\n   * @param layers\n   * @private\n   */\n  private getLayersParam(layers: MapRequestParams[\"layers\"]): string {\n    return layers.map(({ layer }) => layer).join(\",\");\n  }\n\n  /**\n   * Transforms `layers` property of `MapRequestParams` interface to string value of `styles` param of \"GetMap\" request.\n   *\n   * @param layers\n   * @private\n   */\n  private getStylesParam(layers: MapRequestParams[\"layers\"]): string {\n    return layers.map(({ style }) => style || \"\").join(\",\");\n  }\n\n  /**\n   * Returns true, if working with WMS version 1.0.\n   * @private\n   */\n  private isV1_0_x(): boolean {\n    return this.versionComparator.is(this.version, \"<\", \"1.1\");\n  }\n\n  /**\n   * Returns true, if working with WMS version 1.3.\n   * @private\n   */\n  private isV1_3_x(): boolean {\n    return this.versionComparator.is(this.version, \">=\", \"1.3\");\n  }\n\n  /**\n   * Returns true, if working with WMS version 1.1.\n   * @private\n   */\n  private isV1_1(): boolean {\n    return (\n      this.versionComparator.is(this.version, \">=\", \"1.1\") &&\n      this.versionComparator.is(this.version, \"<\", \"1.2\")\n    );\n  }\n\n  /**\n   * Returns param name for WMS version param of \"GetMap\" request.\n   * @private\n   */\n  private getVersionParamName(): string {\n    return this.isV1_0_x() ? \"wmtver\" : \"version\";\n  }\n\n  /**\n   * Returns `request` param value of \"GetMap\" request.\n   * @private\n   */\n  private getRequestName(): string {\n    return this.isV1_0_x() ? \"map\" : \"GetMap\";\n  }\n\n  /**\n   * Returns param name for Coordinate (Spatial) Reference System param of \"GetMap\" request.\n   * @private\n   */\n  private getCrsParamName(): string {\n    return this.isV1_3_x() ? \"crs\" : \"srs\";\n  }\n\n  /**\n   * Transforms unified `ExceptionFormat` constant value to a value, understandable by particular WMS version.\n   *\n   * @param exceptionFormat\n   * @private\n   */\n  private transformExceptionFormat(\n    exceptionFormat: ExceptionFormat | string | undefined\n  ): string | undefined {\n    if (this.isV1_1()) {\n      switch (exceptionFormat) {\n        case \"XML\":\n          return \"application/vnd.ogc.se_xml\";\n        case \"INIMAGE\":\n          return \"application/vnd.ogc.se_inimage\";\n        case \"BLANK\":\n          return \"application/vnd.ogc.se_blank\";\n        default:\n          return exceptionFormat;\n      }\n    }\n    if (this.isV1_0_x() && exceptionFormat === \"XML\") {\n      return \"WMS_XML\";\n    }\n    return exceptionFormat;\n  }\n}\n","import type { VersionComparator } from \"../../version-comparator\";\nimport type { WmsVersionAdapter } from \"../WmsVersionAdapter\";\nimport type { WmsVersionAdapterResolver } from \"./WmsVersionAdapterResolver\";\n\n/**\n * Base WmsVersionAdapterResolver implementing class.\n */\nexport class BaseWmsVersionAdapterResolver\n  implements WmsVersionAdapterResolver\n{\n  /**\n   * BaseWmsVersionAdapterResolver constructor.\n   *\n   * @param adaptersPool\n   * @param versionComparator\n   */\n  constructor(\n    private readonly adaptersPool: WmsVersionAdapter[],\n    private readonly versionComparator: VersionComparator\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  resolve(wmsVersion: string): WmsVersionAdapter {\n    const adapter = this.find(wmsVersion);\n    if (!adapter) {\n      throw new RangeError(`No adapter for WMS version \"${wmsVersion}\"`);\n    }\n    return adapter;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  find(wmsVersion: string): WmsVersionAdapter | undefined {\n    return this.getNotEmptyAdaptersList().find(\n      ({ version }) => version === wmsVersion\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  findCompatible(wmsVersion: string): WmsVersionAdapter | undefined {\n    return this.getNotEmptyAdaptersList().find((adapter) =>\n      adapter.isCompatible(wmsVersion)\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  findLower(wmsVersion: string): WmsVersionAdapter | undefined {\n    return this.getAdaptersSortedByVersionDesc().find((adapter) =>\n      this.versionComparator.is(adapter.version, \"<\", wmsVersion)\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  getHighest(): WmsVersionAdapter {\n    return this.getAdaptersSortedByVersionDesc()[0];\n  }\n\n  /**\n   * Returns array of `WmsVersionAdapter` interfaces. Throws `RangeError` if provided adapters array is empty.\n   * @private\n   */\n  private getNotEmptyAdaptersList(): WmsVersionAdapter[] {\n    if (this.adaptersPool.length) {\n      return this.adaptersPool;\n    }\n    throw new RangeError(`WMS version adapters list is empty`);\n  }\n\n  /**\n   * Returns array of `WmsVersionAdapter`, sorted by supported WMS version descending.\n   * @private\n   */\n  private getAdaptersSortedByVersionDesc(): WmsVersionAdapter[] {\n    return this.getNotEmptyAdaptersList()\n      .slice()\n      .sort((adapter1, adapter2) =>\n        this.versionComparator.compare(adapter2.version, adapter1.version)\n      );\n  }\n}\n","import type { VersionComparator } from \"../../version-comparator\";\nimport type { VersionCompatibilityChecker } from \"./VersionCompatibilityChecker\";\n\n/**\n * VersionCompatibilityChecker implementation, checking compatibility using version range between min and max WMS\n * versions.\n */\nexport class RangeVersionCompatibilityChecker\n  implements VersionCompatibilityChecker\n{\n  /**\n   * RangeVersionCompatibilityChecker constructor.\n   *\n   * @param versionComparator\n   * @param minVersion\n   * @param maxVersion\n   */\n  constructor(\n    private readonly versionComparator: VersionComparator,\n    private readonly minVersion: string,\n    private readonly maxVersion: string\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  isCompatible(wmsVersion: string): boolean {\n    return (\n      this.versionComparator.is(wmsVersion, \">=\", this.minVersion) &&\n      this.versionComparator.is(wmsVersion, \"<\", this.maxVersion)\n    );\n  }\n}\n","import xpath from \"xpath\";\nimport type { XmlResponseVersionExtractor } from \"./XmlResponseVersionExtractor\";\n\n/**\n * Base XmlResponseVersionExtractor implementing class.\n */\nexport class BaseXmlResponseVersionExtractor\n  implements XmlResponseVersionExtractor\n{\n  /**\n   * @inheritdoc\n   */\n  extractVersion(doc: Document): string {\n    const version = (xpath.select(\"string(/*/@version)\", doc) as string).trim();\n    if (!/^\\d+(?:\\.\\d+(?:\\.\\d+)?)?$/.test(version)) {\n      throw new TypeError(`No valid XML response version was found`);\n    }\n    return version;\n  }\n}\n","import type {\n  CapabilitiesRequestParams,\n  FeatureInfoRequestParamsWithCustom,\n  MapRequestParamsWithCustom,\n} from \"../client\";\nimport type {\n  UnifiedCapabilitiesResponse,\n  CapabilitiesResponseDataExtractor,\n} from \"./capabilities-response-data-extractor\";\nimport type { CapabilitiesRequestParamsTransformer } from \"./capabilities-request-params-transformer\";\nimport type { FeatureInfoRequestParamsTransformer } from \"./feature-info-request-params-transformer\";\nimport type { MapRequestParamsTransformer } from \"./map-request-params-transformer\";\nimport type { VersionCompatibilityChecker } from \"./version-compatibility-checker\";\nimport type { WmsVersionAdapter } from \"./WmsVersionAdapter\";\n\n/**\n * Base WmsVersionAdapter implementing class.\n */\nexport class BaseWmsVersionAdapter implements WmsVersionAdapter {\n  /**\n   * BaseWmsVersionAdapter constructor.\n   *\n   * @param version\n   * @param capabilitiesRequestParamsTransformer\n   * @param capabilitiesResponseDataExtractor\n   * @param mapRequestParamsTransformer\n   * @param featureInfoRequestParamsTransformer\n   * @param versionCompatibilityChecker\n   */\n  constructor(\n    readonly version: string,\n    private readonly capabilitiesRequestParamsTransformer: CapabilitiesRequestParamsTransformer,\n    private readonly capabilitiesResponseDataExtractor: CapabilitiesResponseDataExtractor,\n    private readonly mapRequestParamsTransformer: MapRequestParamsTransformer,\n    private readonly featureInfoRequestParamsTransformer: FeatureInfoRequestParamsTransformer,\n    private readonly versionCompatibilityChecker: VersionCompatibilityChecker\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  extractCapabilitiesResponseData(\n    response: Document\n  ): UnifiedCapabilitiesResponse {\n    return this.capabilitiesResponseDataExtractor.extract(response);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  transformCapabilitiesRequestParams(\n    params: CapabilitiesRequestParams\n  ): object {\n    return this.capabilitiesRequestParamsTransformer.transform(params);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  transformMapRequestParams(params: MapRequestParamsWithCustom): object {\n    return this.mapRequestParamsTransformer.transform(params);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  transformFeatureInfoRequestParams(\n    params: FeatureInfoRequestParamsWithCustom\n  ): object {\n    return this.featureInfoRequestParamsTransformer.transform(params);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  isCompatible(wmsVersion: string): boolean {\n    return this.versionCompatibilityChecker.isCompatible(wmsVersion);\n  }\n}\n","import type {\n  ComparisonOperator,\n  VersionComparator,\n} from \"./VersionComparator\";\n\n/**\n * Base implementation of VersionComparator interface.\n */\nexport class BaseVersionComparator implements VersionComparator {\n  /**\n   * @inheritdoc\n   */\n  compare(v1: string, v2: string): -1 | 0 | 1 {\n    const [major1, minor1 = \"0\", patch1 = \"0\"] = v1.split(\".\");\n    const [major2, minor2 = \"0\", patch2 = \"0\"] = v2.split(\".\");\n    const majorResult = this.compareComponent(major1, major2);\n    if (majorResult !== 0) {\n      return majorResult;\n    }\n    const minorResult = this.compareComponent(minor1, minor2);\n    if (minorResult !== 0) {\n      return minorResult;\n    }\n    return this.compareComponent(patch1, patch2);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  is(v1: string, operator: ComparisonOperator, v2: string): boolean {\n    const result = this.compare(v1, v2);\n    switch (operator) {\n      case \"=\":\n        return result === 0;\n      case \"!=\":\n        return result !== 0;\n      case \">\":\n        return result > 0;\n      case \"<\":\n        return result < 0;\n      case \">=\":\n        return result >= 0;\n      case \"<=\":\n        return result <= 0;\n    }\n  }\n\n  /**\n   * Compares version component.\n   *\n   * @param component1\n   * @param component2\n   * @private\n   */\n  private compareComponent(component1: string, component2: string): -1 | 0 | 1 {\n    if (component1 === \"*\" || component2 === \"*\") {\n      return 0;\n    }\n    const numComponent1 = parseInt(component1, 10);\n    const numComponent2 = parseInt(component2, 10);\n    return numComponent1 > numComponent2\n      ? 1\n      : numComponent1 < numComponent2\n        ? -1\n        : 0;\n  }\n}\n","import type { ExceptionXmlChecker } from \"../error\";\nimport type { WmsXmlParser } from \"./WmsXmlParser\";\n\n/**\n * Base WmsXmlParser implementing class.\n */\nexport class BaseWmsXmlParser implements WmsXmlParser {\n  /**\n   * BaseWmsXmlParser constructor.\n   *\n   * @param xmlParser\n   * @param exceptionXmlChecker\n   */\n  constructor(\n    private readonly xmlParser: DOMParser,\n    private readonly exceptionXmlChecker: ExceptionXmlChecker\n  ) {}\n\n  /**\n   * @inheritdoc\n   */\n  parse(xml: string): Document {\n    const doc = this.xmlParser.parseFromString(xml, \"text/xml\");\n    this.exceptionXmlChecker.check(doc);\n    return doc;\n  }\n}\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { GenericCapabilitiesRequestParamsTransformer } from \"./GenericCapabilitiesRequestParamsTransformer\";\n\n/**\n * Service module for container registrations, related to GetCapabilities request params transformer for WMS v1.0.0.\n */\nexport const containerModule_1_0: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    container.implement(\n      \"CapabilitiesRequestParamsTransformer\",\n      GenericCapabilitiesRequestParamsTransformer,\n      [\"VersionComparator\", constant(\"1.0.0\")],\n      { name: \"1.0.0\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../../TypesMap\";\nimport { undefinedExtractor } from \"../undefinedExtractor\";\nimport { BoundingBoxesExtractor } from \"./BoundingBoxesExtractor\";\nimport { CrsExtractor } from \"./CrsExtractor\";\nimport { dataUrlsExtractor_1_0 } from \"./dataUrlsExtractor_1_0\";\nimport { geographicBoundsExtractor_1_1 } from \"./geographicBoundsExtractor_1_1\";\nimport { LayersExtractor } from \"./LayersExtractor\";\nimport { StylesExtractor } from \"./StylesExtractor\";\nimport { styleUrlExtractor_1_0 } from \"./styleUrlExtractor_1_0\";\n\n/**\n * Service module of container registrations, related to <Layer> node data extractors for WMS v 1.0.0.\n */\nexport const containerModule_1_0: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    // Name corresponds to version implementation. Used to distinguish between implementations of common interfaces\n    // for specific WMS versions.\n    const name = \"1.0.0\";\n\n    // XML namespace, used in GetCapability response XML document. Used by generic data extractors, generally when\n    // the only difference in XML structure is namespace.\n    const nameSpace = constant(\"\");\n\n    // Layer[] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[]>\",\n      LayersExtractor,\n      [\n        { service: \"XmlDataExtractor<Keyword[]>\", name },\n        { service: \"XmlDataExtractor<Layer[crs]>\", name },\n        { service: \"XmlDataExtractor<Layer[dimensions]>\", name },\n        { service: \"XmlDataExtractor<Layer[geographicBounds]>\", name },\n        { service: \"XmlDataExtractor<Layer[boundingBoxes]>\", name },\n        { service: \"XmlDataExtractor<Layer[attribution]>\", name },\n        { service: \"XmlDataExtractor<Layer[identifiers]>\", name },\n        { service: \"XmlDataExtractor<Layer[metadataUrls]>\", name },\n        { service: \"XmlDataExtractor<Layer[dataUrls]>\", name },\n        { service: \"XmlDataExtractor<Layer[featureListUrls]>\", name },\n        { service: \"XmlDataExtractor<Layer[styles]>\", name },\n        nameSpace,\n      ],\n      { name }\n    );\n\n    // Layer[\"crs\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[crs]>\",\n      CrsExtractor,\n      [constant(\"SRS\")],\n      { name }\n    );\n\n    // Layer[\"geographicBounds\"] exractor\n    container.registerConstant(\n      \"XmlDataExtractor<Layer[geographicBounds]>\",\n      geographicBoundsExtractor_1_1,\n      { name }\n    );\n\n    // Layer[\"boundingBoxes\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[boundingBoxes]>\",\n      BoundingBoxesExtractor,\n      [constant(\"SRS\"), nameSpace],\n      { name }\n    );\n\n    // Layer[\"dataUrls\"] extractor\n    container.registerConstant(\n      \"XmlDataExtractor<Layer[dataUrls]>\",\n      dataUrlsExtractor_1_0,\n      { name }\n    );\n\n    // Layer[\"styles\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[styles]>\",\n      StylesExtractor,\n      [\n        { service: \"XmlDataExtractor<Layer[styles][styleUrl]>\", name },\n        nameSpace,\n      ],\n      { name }\n    );\n\n    // Layer[\"styles\"][number][\"styleUrl\"] extractor\n    container.registerConstant(\n      \"XmlDataExtractor<Layer[styles][styleUrl]>\",\n      styleUrlExtractor_1_0,\n      { name }\n    );\n\n    // The following data doesn't exist in v1.0.0, so use simple undefined extractor\n    container.registerConstant(\n      \"XmlDataExtractor<Layer[dimensions]>\",\n      undefinedExtractor,\n      { name }\n    );\n    container.registerConstant(\n      \"XmlDataExtractor<Layer[attribution]>\",\n      undefinedExtractor,\n      { name }\n    );\n    container.registerConstant(\n      \"XmlDataExtractor<Layer[identifiers]>\",\n      undefinedExtractor,\n      { name }\n    );\n    container.registerConstant(\n      \"XmlDataExtractor<Layer[metadataUrls]>\",\n      undefinedExtractor,\n      { name }\n    );\n    container.registerConstant(\n      \"XmlDataExtractor<Layer[featureListUrls]>\",\n      undefinedExtractor,\n      { name }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { CapabilitiesSectionExtractor_1_0 } from \"./CapabilitiesSectionExtractor_1_0\";\nimport { GenericCapabilitiesResponseDataExtractor } from \"./GenericCapabilitiesResponseDataExtractor\";\nimport { keywordsExtractor_1_0 } from \"./keywordsExtractor_1_0\";\nimport { containerModule_1_0 as layersExtractorModule } from \"./layers-data-extractor/containerModule_1_0\";\nimport { ServiceSectionExtractor_1_0 } from \"./ServiceSectionExtractor_1_0\";\n\n/**\n * Service module for container registrations, related to `UnifiedCapabilitiesResponse` data extraction for WMS v1.0.\n */\nexport const containerModule_1_0: ServiceModule<TypesMap> = {\n  // Layer[] extractor module\n  register(container: ServiceContainer<TypesMap>) {\n    // Name corresponds to version implementation. Used to distinguish between implementations of common interfaces\n    // for specific WMS versions.\n    const name = \"1.0.0\";\n\n    // XML namespaces for performing xpath lookup\n    const namespaces = constant({});\n\n    // Keyword[] extractor\n    container.registerConstant(\n      \"XmlDataExtractor<Keyword[]>\",\n      keywordsExtractor_1_0,\n      { name }\n    );\n\n    // UnifiedCapabilitiesResponse extractor\n    container.implement(\n      \"CapabilitiesResponseDataExtractor\",\n      GenericCapabilitiesResponseDataExtractor,\n      [\n        {\n          service: \"XmlDataExtractor<UnifiedCapabilitiesResponse[service]>\",\n          name,\n        },\n        {\n          service: \"XmlDataExtractor<UnifiedCapabilitiesResponse[capability]>\",\n          name,\n        },\n        namespaces,\n      ],\n      { name }\n    );\n\n    // UnifiedCapabilitiesResponse[\"service\"] extractor\n    container.implement(\n      \"XmlDataExtractor<UnifiedCapabilitiesResponse[service]>\",\n      ServiceSectionExtractor_1_0,\n      [{ service: \"XmlDataExtractor<Keyword[]>\", name }],\n      { name }\n    );\n\n    // UnifiedCapabilitiesResponse[\"capability\"] extractor\n    container.implement(\n      \"XmlDataExtractor<UnifiedCapabilitiesResponse[capability]>\",\n      CapabilitiesSectionExtractor_1_0,\n      [{ service: \"XmlDataExtractor<Layer[]>\", name }],\n      { name }\n    );\n\n    container.loadModule(layersExtractorModule);\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { GenericMapRequestParamsTransformer } from \"./GenericMapRequestParamsTransformer\";\n\n/**\n * Service module of container registrations, related to GetMap request params transformer for WMS v1.0.\n */\nexport const containerModule_1_0: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    container.implement(\n      \"MapRequestParamsTransformer\",\n      GenericMapRequestParamsTransformer,\n      [\"VersionComparator\", constant(\"1.0.0\")],\n      { name: \"1.0.0\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { GenericFeatureInfoRequestParamsTransformer } from \"./GenericFeatureInfoRequestParamsTransformer\";\n\n/**\n * Service module of container registrations, related to GetFeatureInfo request params transformer for WMS v1.0.\n */\nexport const containerModule_1_0: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    container.implement(\n      \"FeatureInfoRequestParamsTransformer\",\n      GenericFeatureInfoRequestParamsTransformer,\n      [\n        { service: \"MapRequestParamsTransformer\", name: \"1.0.0\" },\n        \"VersionComparator\",\n        constant(\"1.0.0\"),\n      ],\n      { name: \"1.0.0\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { RangeVersionCompatibilityChecker } from \"./RangeVersionCompatibilityChecker\";\n\n/**\n * Service module of container registrations of `VersionCompatibilityChecker` for WMS v1.0.\n */\nexport const containerModule_1_0: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    const minVersion = constant(\"1.0\");\n    const maxVersion = constant(\"1.1\");\n    container.implement(\n      \"VersionCompatibilityChecker\",\n      RangeVersionCompatibilityChecker,\n      [\"VersionComparator\", minVersion, maxVersion],\n      { name: \"1.0.0\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../TypesMap\";\nimport { BaseWmsVersionAdapter } from \"./BaseWmsVersionAdapter\";\nimport { containerModule_1_0 as capabilitiesRequestParamsTransformerModule } from \"./capabilities-request-params-transformer/containerModule_1_0\";\nimport { containerModule_1_0 as capabilitiesResponseExtractorModule } from \"./capabilities-response-data-extractor/containerModule_1_0\";\nimport { containerModule_1_0 as mapRequestParamsTransformerModule } from \"./map-request-params-transformer/containerModule_1_0\";\nimport { containerModule_1_0 as featureInfoRequestParamsTransformerModule } from \"./feature-info-request-params-transformer/containerModule_1_0\";\nimport { containerModule_1_0 as versionCompatibilityCheckerModule } from \"./version-compatibility-checker/containerModule_1_0\";\n\n/**\n * Service module of container registrations, related to WmsVersionAdapter for WMS v1.0.0.\n */\nexport const containerModule_1_0_0: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    const name = \"1.0.0\";\n\n    container.implement(\n      \"WmsVersionAdapter\",\n      BaseWmsVersionAdapter,\n      [\n        constant(\"1.0.0\"),\n        { service: \"CapabilitiesRequestParamsTransformer\", name },\n        { service: \"CapabilitiesResponseDataExtractor\", name },\n        { service: \"MapRequestParamsTransformer\", name },\n        { service: \"FeatureInfoRequestParamsTransformer\", name },\n        { service: \"VersionCompatibilityChecker\", name },\n      ],\n      { name }\n    );\n\n    // CapabilitiesRequestParamsTransformer module\n    container.loadModule(capabilitiesRequestParamsTransformerModule);\n\n    // CapabilitiesResponseDataExtractor module\n    container.loadModule(capabilitiesResponseExtractorModule);\n\n    // MapRequestParamsTransformer module\n    container.loadModule(mapRequestParamsTransformerModule);\n\n    // FeatureInfoRequestParamsTransformer module\n    container.loadModule(featureInfoRequestParamsTransformerModule);\n\n    // VersionCompatibilityChecker module\n    container.loadModule(versionCompatibilityCheckerModule);\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../../TypesMap\";\nimport { AttributionExtractor } from \"./AttributionExtractor\";\nimport { BoundingBoxesExtractor } from \"./BoundingBoxesExtractor\";\nimport { CrsExtractor } from \"./CrsExtractor\";\nimport { DimensionsExtractor_1_1 } from \"./DimensionsExtractor_1_1\";\nimport { geographicBoundsExtractor_1_1 } from \"./geographicBoundsExtractor_1_1\";\nimport { IdentifiersExtractor } from \"./IdentifiersExtractor\";\nimport { LayersExtractor } from \"./LayersExtractor\";\nimport { MetadataUrlsExtractor } from \"./MetadataUrlsExtractor\";\nimport { ResourceUrlsExtractor } from \"./ResourceUrlsExtractor\";\nimport { StylesExtractor } from \"./StylesExtractor\";\nimport { StyleUrlExtractor_1_1 } from \"./StyleUrlExtractor_1_1\";\n\n/**\n * Service module of container registrations, related to <Layer> node data extractors for WMS v 1.1.1.\n */\nexport const containerModule_1_1: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    // Name corresponds to version implementation. Used to distinguish between implementations of common interfaces\n    // for specific WMS versions.\n    const name = \"1.1.1\";\n\n    // XML namespace, used in GetCapability response XML document. Used by generic data extractors, generally when\n    // the only difference in XML structure is namespace.\n    const nameSpace = constant(\"\");\n\n    // Layer[] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[]>\",\n      LayersExtractor,\n      [\n        { service: \"XmlDataExtractor<Keyword[]>\", name },\n        { service: \"XmlDataExtractor<Layer[crs]>\", name },\n        { service: \"XmlDataExtractor<Layer[dimensions]>\", name },\n        { service: \"XmlDataExtractor<Layer[geographicBounds]>\", name },\n        { service: \"XmlDataExtractor<Layer[boundingBoxes]>\", name },\n        { service: \"XmlDataExtractor<Layer[attribution]>\", name },\n        { service: \"XmlDataExtractor<Layer[identifiers]>\", name },\n        { service: \"XmlDataExtractor<Layer[metadataUrls]>\", name },\n        { service: \"XmlDataExtractor<Layer[dataUrls]>\", name },\n        { service: \"XmlDataExtractor<Layer[featureListUrls]>\", name },\n        { service: \"XmlDataExtractor<Layer[styles]>\", name },\n        nameSpace,\n      ],\n      { name }\n    );\n\n    // Layer[\"crs\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[crs]>\",\n      CrsExtractor,\n      [constant(\"SRS\")],\n      { name }\n    );\n\n    // Layer[\"dimensions\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[dimensions]>\",\n      DimensionsExtractor_1_1,\n      [],\n      { name }\n    );\n\n    // Layer[\"geographicBounds\"] exractor\n    container.registerConstant(\n      \"XmlDataExtractor<Layer[geographicBounds]>\",\n      geographicBoundsExtractor_1_1,\n      { name }\n    );\n\n    // Layer[\"boundingBoxes\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[boundingBoxes]>\",\n      BoundingBoxesExtractor,\n      [constant(\"SRS\"), nameSpace],\n      { name }\n    );\n\n    // Layer[\"attribution\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[attribution]>\",\n      AttributionExtractor,\n      [nameSpace],\n      { name }\n    );\n\n    // Layer[\"identifiers\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[identifiers]>\",\n      IdentifiersExtractor,\n      [nameSpace],\n      { name }\n    );\n\n    // Layer[\"metadataUrls\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[metadataUrls]>\",\n      MetadataUrlsExtractor,\n      [nameSpace],\n      { name }\n    );\n\n    // Layer[\"dataUrls\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[dataUrls]>\",\n      ResourceUrlsExtractor,\n      [constant(\"DataUrl\"), nameSpace],\n      { name }\n    );\n\n    // Layer[\"featureListUrls\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[featureListUrls]>\",\n      ResourceUrlsExtractor,\n      [constant(\"FeatureListURL\"), nameSpace],\n      { name }\n    );\n\n    // Layer[\"styles\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[styles]>\",\n      StylesExtractor,\n      [\n        { service: \"XmlDataExtractor<Layer[styles][styleUrl]>\", name },\n        nameSpace,\n      ],\n      { name }\n    );\n\n    // Layer[\"styles\"][number][\"styleUrl\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[styles][styleUrl]>\",\n      StyleUrlExtractor_1_1,\n      [nameSpace],\n      { name }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { CapabilitiesSectionExtractor } from \"./CapabilitiesSectionExtractor\";\nimport { exceptionFormatExtractor_1_1 } from \"./exceptionFormatExtractor_1_1\";\nimport { GenericCapabilitiesResponseDataExtractor } from \"./GenericCapabilitiesResponseDataExtractor\";\nimport { KeywordsExtractor } from \"./KeywordsExtractor\";\nimport { containerModule_1_1 as layersExtractorModule } from \"./layers-data-extractor/containerModule_1_1\";\nimport { ServiceSectionExtractor } from \"./ServiceSectionExtractor\";\nimport { xlinkXmlNamespace } from \"./xlinkXmlNamespace\";\n\n/**\n * Service module for container registrations, related to `UnifiedCapabilitiesResponse` data extraction for WMS v1.1.\n */\nexport const containerModule_1_1: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    // Name corresponds to version implementation. Used to distinguish between implementations of common interfaces\n    // for specific WMS versions.\n    const name = \"1.1.1\";\n\n    // XML namespace, used in GetCapability response XML document. Used by generic data extractors, generally when\n    // the only difference in XML structure is namespace.\n    const nameSpace = constant(\"\");\n\n    // XML namespaces for performing xpath lookup\n    const namespaces = constant({ xlink: xlinkXmlNamespace });\n\n    // Root node name of GetCapabilities response XML (without namespace)\n    const rootNodeName = constant(\"WMT_MS_Capabilities\");\n\n    // Keyword[] extractor\n    container.implement(\n      \"XmlDataExtractor<Keyword[]>\",\n      KeywordsExtractor,\n      [nameSpace],\n      { name }\n    );\n\n    // UnifiedCapabilitiesResponse extractor\n    container.implement(\n      \"CapabilitiesResponseDataExtractor\",\n      GenericCapabilitiesResponseDataExtractor,\n      [\n        {\n          service: \"XmlDataExtractor<UnifiedCapabilitiesResponse[service]>\",\n          name,\n        },\n        {\n          service: \"XmlDataExtractor<UnifiedCapabilitiesResponse[capability]>\",\n          name,\n        },\n        namespaces,\n      ],\n      { name }\n    );\n\n    // UnifiedCapabilitiesResponse[\"service\"] extractor\n    container.implement(\n      \"XmlDataExtractor<UnifiedCapabilitiesResponse[service]>\",\n      ServiceSectionExtractor,\n      [\n        { service: \"XmlDataExtractor<Keyword[]>\", name },\n        rootNodeName,\n        nameSpace,\n      ],\n      { name }\n    );\n\n    // UnifiedCapabilitiesResponse[\"capability\"] extractor\n    container.implement(\n      \"XmlDataExtractor<UnifiedCapabilitiesResponse[capability]>\",\n      CapabilitiesSectionExtractor,\n      [\n        { service: \"XmlDataExtractor<Layer[]>\", name },\n        { service: \"XmlDataExtractor<ExceptionFormat[]>\", name },\n        rootNodeName,\n        nameSpace,\n      ],\n      { name }\n    );\n\n    // Layer[] extractor module\n    container.loadModule(layersExtractorModule);\n\n    // ExceptionFormat[] extractor\n    container.registerConstant(\n      \"XmlDataExtractor<ExceptionFormat[]>\",\n      exceptionFormatExtractor_1_1,\n      { name }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { GenericCapabilitiesRequestParamsTransformer } from \"./GenericCapabilitiesRequestParamsTransformer\";\n\n/**\n * Service module for container registrations, related to GetCapabilities request params transformer for WMS v1.1.1.\n */\nexport const containerModule_1_1: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    container.implement(\n      \"CapabilitiesRequestParamsTransformer\",\n      GenericCapabilitiesRequestParamsTransformer,\n      [\"VersionComparator\", constant(\"1.1.1\")],\n      { name: \"1.1.1\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { GenericMapRequestParamsTransformer } from \"./GenericMapRequestParamsTransformer\";\n\n/**\n * Service module of container registrations, related to GetMap request params transformer for WMS v1.1.\n */\nexport const containerModule_1_1: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    container.implement(\n      \"MapRequestParamsTransformer\",\n      GenericMapRequestParamsTransformer,\n      [\"VersionComparator\", constant(\"1.1.1\")],\n      { name: \"1.1.1\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { RangeVersionCompatibilityChecker } from \"./RangeVersionCompatibilityChecker\";\n\n/**\n * Service module of container registrations of `VersionCompatibilityChecker` for WMS v1.1.\n */\nexport const containerModule_1_1: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    const minVersion = constant(\"1.1\");\n    const maxVersion = constant(\"1.2\");\n    container.implement(\n      \"VersionCompatibilityChecker\",\n      RangeVersionCompatibilityChecker,\n      [\"VersionComparator\", minVersion, maxVersion],\n      { name: \"1.1.1\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { GenericFeatureInfoRequestParamsTransformer } from \"./GenericFeatureInfoRequestParamsTransformer\";\n\n/**\n * Service module of container registrations, related to GetFeatureInfo request params transformer for WMS v1.1.\n */\nexport const containerModule_1_1: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    container.implement(\n      \"FeatureInfoRequestParamsTransformer\",\n      GenericFeatureInfoRequestParamsTransformer,\n      [\n        { service: \"MapRequestParamsTransformer\", name: \"1.1.1\" },\n        \"VersionComparator\",\n        constant(\"1.1.1\"),\n      ],\n      { name: \"1.1.1\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../TypesMap\";\nimport { BaseWmsVersionAdapter } from \"./BaseWmsVersionAdapter\";\nimport { containerModule_1_1 as capabilitiesResponseExtractorModule } from \"./capabilities-response-data-extractor/containerModule_1_1\";\nimport { containerModule_1_1 as capabilitiesRequestParamsTransformerModule } from \"./capabilities-request-params-transformer/containerModule_1_1\";\nimport { containerModule_1_1 as mapRequestParamsTransformerModule } from \"./map-request-params-transformer/containerModule_1_1\";\nimport { containerModule_1_1 as versionCompatibilityCheckerModule } from \"./version-compatibility-checker/containerModule_1_1\";\nimport { containerModule_1_1 as featureInfoRequestParamsTransformerModule } from \"./feature-info-request-params-transformer/containerModule_1_1\";\n\n/**\n * Service module of container registrations, related to WmsVersionAdapter for WMS v1.1.1.\n */\nexport const containerModule_1_1_1: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    const name = \"1.1.1\";\n\n    container.implement(\n      \"WmsVersionAdapter\",\n      BaseWmsVersionAdapter,\n      [\n        constant(\"1.1.1\"),\n        { service: \"CapabilitiesRequestParamsTransformer\", name },\n        { service: \"CapabilitiesResponseDataExtractor\", name },\n        { service: \"MapRequestParamsTransformer\", name },\n        { service: \"FeatureInfoRequestParamsTransformer\", name },\n        { service: \"VersionCompatibilityChecker\", name },\n      ],\n      { name }\n    );\n\n    // CapabilitiesRequestParamsTransformer module\n    container.loadModule(capabilitiesRequestParamsTransformerModule);\n\n    // CapabilitiesResponseDataExtractor module\n    container.loadModule(capabilitiesResponseExtractorModule);\n\n    // MapRequestParamsTransformer module\n    container.loadModule(mapRequestParamsTransformerModule);\n\n    // FeatureInfoRequestParamsTransformer module\n    container.loadModule(featureInfoRequestParamsTransformerModule);\n\n    // VersionCompatibilityChecker module\n    container.loadModule(versionCompatibilityCheckerModule);\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../../TypesMap\";\nimport { AttributionExtractor } from \"./AttributionExtractor\";\nimport { BoundingBoxesExtractor } from \"./BoundingBoxesExtractor\";\nimport { CrsExtractor } from \"./CrsExtractor\";\nimport { dimensionsExtractor_1_3 } from \"./dimensionsExtractor_1_3\";\nimport { geographicBoundsExtractor_1_3 } from \"./geographicBoundsExtractor_1_3\";\nimport { IdentifiersExtractor } from \"./IdentifiersExtractor\";\nimport { LayersExtractor } from \"./LayersExtractor\";\nimport { MetadataUrlsExtractor } from \"./MetadataUrlsExtractor\";\nimport { ResourceUrlsExtractor } from \"./ResourceUrlsExtractor\";\nimport { StylesExtractor } from \"./StylesExtractor\";\nimport { StyleUrlExtractor_1_1 } from \"./StyleUrlExtractor_1_1\";\n\n/**\n * Service module of container registrations, related to <Layer> node data extractors for WMS v 1.3.0.\n */\nexport const containerModule_1_3: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    // Name corresponds to version implementation. Used to distinguish between implementations of common interfaces\n    // for specific WMS versions.\n    const name = \"1.3.0\";\n\n    // XML namespace, used in GetCapability response XML document. Used by generic data extractors, generally when\n    // the only difference in XML structure is namespace.\n    const nameSpace = constant(\"wms\");\n\n    // Layer[] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[]>\",\n      LayersExtractor,\n      [\n        { service: \"XmlDataExtractor<Keyword[]>\", name },\n        { service: \"XmlDataExtractor<Layer[crs]>\", name },\n        { service: \"XmlDataExtractor<Layer[dimensions]>\", name },\n        { service: \"XmlDataExtractor<Layer[geographicBounds]>\", name },\n        { service: \"XmlDataExtractor<Layer[boundingBoxes]>\", name },\n        { service: \"XmlDataExtractor<Layer[attribution]>\", name },\n        { service: \"XmlDataExtractor<Layer[identifiers]>\", name },\n        { service: \"XmlDataExtractor<Layer[metadataUrls]>\", name },\n        { service: \"XmlDataExtractor<Layer[dataUrls]>\", name },\n        { service: \"XmlDataExtractor<Layer[featureListUrls]>\", name },\n        { service: \"XmlDataExtractor<Layer[styles]>\", name },\n        nameSpace,\n      ],\n      { name }\n    );\n\n    // Layer[\"crs\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[crs]>\",\n      CrsExtractor,\n      [constant(\"wms:CRS\")],\n      { name }\n    );\n\n    // Layer[\"dimensions\"] extractor\n    container.registerConstant(\n      \"XmlDataExtractor<Layer[dimensions]>\",\n      dimensionsExtractor_1_3,\n      { name }\n    );\n\n    // Layer[\"geographicBounds\"] exractor\n    container.registerConstant(\n      \"XmlDataExtractor<Layer[geographicBounds]>\",\n      geographicBoundsExtractor_1_3,\n      { name }\n    );\n\n    // Layer[\"boundingBoxes\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[boundingBoxes]>\",\n      BoundingBoxesExtractor,\n      [constant(\"CRS\"), nameSpace],\n      { name }\n    );\n\n    // Layer[\"attribution\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[attribution]>\",\n      AttributionExtractor,\n      [nameSpace],\n      { name }\n    );\n\n    // Layer[\"identifiers\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[identifiers]>\",\n      IdentifiersExtractor,\n      [nameSpace],\n      { name }\n    );\n\n    // Layer[\"metadataUrls\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[metadataUrls]>\",\n      MetadataUrlsExtractor,\n      [nameSpace],\n      { name }\n    );\n\n    // Layer[\"dataUrls\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[dataUrls]>\",\n      ResourceUrlsExtractor,\n      [constant(\"DataUrl\"), nameSpace],\n      { name }\n    );\n\n    // Layer[\"featureListUrls\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[featureListUrls]>\",\n      ResourceUrlsExtractor,\n      [constant(\"FeatureListURL\"), nameSpace],\n      { name }\n    );\n\n    // Layer[\"styles\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[styles]>\",\n      StylesExtractor,\n      [\n        { service: \"XmlDataExtractor<Layer[styles][styleUrl]>\", name },\n        nameSpace,\n      ],\n      { name }\n    );\n\n    // Layer[\"styles\"][number][\"styleUrl\"] extractor\n    container.implement(\n      \"XmlDataExtractor<Layer[styles][styleUrl]>\",\n      StyleUrlExtractor_1_1,\n      [nameSpace],\n      { name }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { CapabilitiesSectionExtractor } from \"./CapabilitiesSectionExtractor\";\nimport { exceptionFormatExtractor_1_3 } from \"./exceptionFormatExtractor_1_3\";\nimport { GenericCapabilitiesResponseDataExtractor } from \"./GenericCapabilitiesResponseDataExtractor\";\nimport { KeywordsExtractor } from \"./KeywordsExtractor\";\nimport { containerModule_1_3 as layersExtractorModule } from \"./layers-data-extractor/containerModule_1_3\";\nimport { ServiceSectionExtractor } from \"./ServiceSectionExtractor\";\nimport { wmsXmlNamespace } from \"./wmsXmlNamespace\";\nimport { xlinkXmlNamespace } from \"./xlinkXmlNamespace\";\n\n/**\n * Service module for container registrations, related to `UnifiedCapabilitiesResponse` data extraction for WMS v1.3.\n */\nexport const containerModule_1_3: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    // Name corresponds to version implementation. Used to distinguish between implementations of common interfaces\n    // for specific WMS versions.\n    const name = \"1.3.0\";\n\n    // XML namespace, used in GetCapability response XML document. Used by generic data extractors, generally when\n    // the only difference in XML structure is namespace.\n    const nameSpace = constant(\"wms\");\n\n    // XML namespaces for performing xpath lookup\n    const namespaces = constant({\n      xlink: xlinkXmlNamespace,\n      wms: wmsXmlNamespace,\n    });\n\n    // Root node name of GetCapabilities response XML (without namespace)\n    const rootNodeName = constant(\"WMS_Capabilities\");\n\n    // Keyword[] extractor\n    container.implement(\n      \"XmlDataExtractor<Keyword[]>\",\n      KeywordsExtractor,\n      [nameSpace],\n      { name }\n    );\n\n    // UnifiedCapabilitiesResponse extractor\n    container.implement(\n      \"CapabilitiesResponseDataExtractor\",\n      GenericCapabilitiesResponseDataExtractor,\n      [\n        {\n          service: \"XmlDataExtractor<UnifiedCapabilitiesResponse[service]>\",\n          name,\n        },\n        {\n          service: \"XmlDataExtractor<UnifiedCapabilitiesResponse[capability]>\",\n          name,\n        },\n        namespaces,\n      ],\n      { name }\n    );\n\n    // UnifiedCapabilitiesResponse[\"service\"] extractor\n    container.implement(\n      \"XmlDataExtractor<UnifiedCapabilitiesResponse[service]>\",\n      ServiceSectionExtractor,\n      [\n        { service: \"XmlDataExtractor<Keyword[]>\", name },\n        rootNodeName,\n        nameSpace,\n      ],\n      { name }\n    );\n\n    // UnifiedCapabilitiesResponse[\"capability\"] extractor\n    container.implement(\n      \"XmlDataExtractor<UnifiedCapabilitiesResponse[capability]>\",\n      CapabilitiesSectionExtractor,\n      [\n        { service: \"XmlDataExtractor<Layer[]>\", name },\n        { service: \"XmlDataExtractor<ExceptionFormat[]>\", name },\n        rootNodeName,\n        nameSpace,\n      ],\n      { name }\n    );\n\n    // Layer[] extractor module\n    container.loadModule(layersExtractorModule);\n\n    // ExceptionFormat[] extractor\n    container.registerConstant(\n      \"XmlDataExtractor<ExceptionFormat[]>\",\n      exceptionFormatExtractor_1_3,\n      { name }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { GenericCapabilitiesRequestParamsTransformer } from \"./GenericCapabilitiesRequestParamsTransformer\";\n\n/**\n * Service module for container registrations, related to GetCapabilities request params transformer for WMS v1.3.0.\n */\nexport const containerModule_1_3: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    container.implement(\n      \"CapabilitiesRequestParamsTransformer\",\n      GenericCapabilitiesRequestParamsTransformer,\n      [\"VersionComparator\", constant(\"1.3.0\")],\n      { name: \"1.3.0\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { GenericMapRequestParamsTransformer } from \"./GenericMapRequestParamsTransformer\";\n\n/**\n * Service module of container registrations, related to GetMap request params transformer for WMS v1.3.\n */\nexport const containerModule_1_3: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    container.implement(\n      \"MapRequestParamsTransformer\",\n      GenericMapRequestParamsTransformer,\n      [\"VersionComparator\", constant(\"1.3.0\")],\n      { name: \"1.3.0\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { RangeVersionCompatibilityChecker } from \"./RangeVersionCompatibilityChecker\";\n\n/**\n * Service module of container registrations of `VersionCompatibilityChecker` for WMS v1.3.\n */\nexport const containerModule_1_3: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    const minVersion = constant(\"1.3\");\n    const maxVersion = constant(\"1.4\");\n    container.implement(\n      \"VersionCompatibilityChecker\",\n      RangeVersionCompatibilityChecker,\n      [\"VersionComparator\", minVersion, maxVersion],\n      { name: \"1.3.0\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../../TypesMap\";\nimport { GenericFeatureInfoRequestParamsTransformer } from \"./GenericFeatureInfoRequestParamsTransformer\";\n\n/**\n * Service module of container registrations, related to GetFeatureInfo request params transformer for WMS v1.3.\n */\nexport const containerModule_1_3: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    container.implement(\n      \"FeatureInfoRequestParamsTransformer\",\n      GenericFeatureInfoRequestParamsTransformer,\n      [\n        { service: \"MapRequestParamsTransformer\", name: \"1.3.0\" },\n        \"VersionComparator\",\n        constant(\"1.3.0\"),\n      ],\n      { name: \"1.3.0\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../TypesMap\";\nimport { containerModule_1_3 as capabilitiesResponseExtractorModule } from \"./capabilities-response-data-extractor/containerModule_1_3\";\nimport { BaseWmsVersionAdapter } from \"./BaseWmsVersionAdapter\";\nimport { containerModule_1_3 as capabilitiesRequestParamsTransformerModule } from \"./capabilities-request-params-transformer/containerModule_1_3\";\nimport { containerModule_1_3 as mapRequestParamsTransformerModule } from \"./map-request-params-transformer/containerModule_1_3\";\nimport { containerModule_1_3 as versionCompatibilityCheckerModule } from \"./version-compatibility-checker/containerModule_1_3\";\nimport { containerModule_1_3 as featureInfoRequestParamsTransformerModule } from \"./feature-info-request-params-transformer/containerModule_1_3\";\n\n/**\n * Service module of container registrations, related to WmsVersionAdapter for WMS v1.3.0.\n */\nexport const containerModule_1_3_0: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    const name = \"1.3.0\";\n\n    container.implement(\n      \"WmsVersionAdapter\",\n      BaseWmsVersionAdapter,\n      [\n        constant(\"1.3.0\"),\n        { service: \"CapabilitiesRequestParamsTransformer\", name },\n        { service: \"CapabilitiesResponseDataExtractor\", name },\n        { service: \"MapRequestParamsTransformer\", name },\n        { service: \"FeatureInfoRequestParamsTransformer\", name },\n        { service: \"VersionCompatibilityChecker\", name },\n      ],\n      { name }\n    );\n\n    // CapabilitiesRequestParamsTransformer module\n    container.loadModule(capabilitiesRequestParamsTransformerModule);\n\n    // CapabilitiesResponseDataExtractor module\n    container.loadModule(capabilitiesResponseExtractorModule);\n\n    // MapRequestParamsTransformer module\n    container.loadModule(mapRequestParamsTransformerModule);\n\n    // FeatureInfoRequestParamsTransformer module\n    container.loadModule(featureInfoRequestParamsTransformerModule);\n\n    // VersionCompatibilityChecker module\n    container.loadModule(versionCompatibilityCheckerModule);\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../TypesMap\";\nimport { GenericExceptionReportExtractor } from \"./GenericExceptionReportExtractor\";\n\n/**\n * Service module for container registrations, related to errors for WMS v1.1.1.\n */\nexport const containerModule_1_1_1: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    container.implement(\n      \"ExceptionReportExtractor\",\n      GenericExceptionReportExtractor,\n      [\n        \"XmlResponseVersionExtractor\",\n        \"VersionComparator\",\n        constant(\"1.1.0\"),\n        constant(\"1.2.0\"),\n        constant(\"\"),\n      ],\n      { name: \"1.1.1\" }\n    );\n  },\n};\n","import { constant } from \"@alxcube/di-container\";\nimport type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../TypesMap\";\nimport { GenericExceptionReportExtractor } from \"./GenericExceptionReportExtractor\";\n\n/**\n * Service module for container registrations, related to errors for WMS v1.3.0.\n */\nexport const containerModule_1_3_0: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    container.implement(\n      \"ExceptionReportExtractor\",\n      GenericExceptionReportExtractor,\n      [\n        \"XmlResponseVersionExtractor\",\n        \"VersionComparator\",\n        constant(\"1.3.0\"),\n        constant(\"1.4.0\"),\n        constant(\"ogc\"),\n      ],\n      { name: \"1.3.0\" }\n    );\n  },\n};\n","import type { ServiceContainer, ServiceModule } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"../TypesMap\";\nimport { ExceptionReportExtractor_1_0 } from \"./ExceptionReportExtractor_1_0\";\n\n/**\n * Service module for container registrations, related to errors for WMS v1.0.0.\n */\nexport const containerModule_1_0_0: ServiceModule<TypesMap> = {\n  register(container: ServiceContainer<TypesMap>) {\n    container.implement(\n      \"ExceptionReportExtractor\",\n      ExceptionReportExtractor_1_0,\n      [],\n      { name: \"1.0.0\" }\n    );\n  },\n};\n","import { BaseRequestErrorHandler, BaseWmsClientFactory } from \"./client\";\nimport { BaseWmsNegotiator } from \"./negotiator\";\nimport { BaseWmsXmlParser } from \"./wms-xml-parser\";\nimport {\n  BaseXmlResponseVersionExtractor,\n  BaseWmsVersionAdapterResolver,\n} from \"./version-adapter\";\nimport { BaseExceptionXmlChecker } from \"./error\";\nimport { BaseQueryParamsSerializer } from \"./query-params-serializer\";\nimport { Container } from \"@alxcube/di-container\";\nimport type { TypesMap } from \"./TypesMap\";\nimport { containerModule_1_0_0 as versionAdapterModule_1_0_0 } from \"./version-adapter/containerModule_1_0_0\";\nimport { containerModule_1_1_1 as versionAdapterModule_1_1_1 } from \"./version-adapter/containerModule_1_1_1\";\nimport { containerModule_1_3_0 as versionAdapterModule_1_3_0 } from \"./version-adapter/containerModule_1_3_0\";\nimport { BaseVersionComparator } from \"./version-comparator\";\nimport { DOMParser, XMLSerializer } from \"@xmldom/xmldom\";\nimport { containerModule_1_1_1 as exceptionModule_1_1_1 } from \"./error/containerModule_1_1_1\";\nimport { containerModule_1_3_0 as exceptionModule_1_3_0 } from \"./error/containerModule_1_3_0\";\nimport { containerModule_1_0_0 as exceptionModule_1_0_0 } from \"./error/containerModule_1_0_0\";\n\n/**\n * Dependency injection container.\n */\nexport const serviceContainer = new Container<TypesMap>();\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nserviceContainer.implement(\"DOMParser\", DOMParser, [] as any);\n\nserviceContainer.implement(\"WmsClientFactory\", BaseWmsClientFactory, [\n  \"WmsVersionAdapterResolver\",\n  \"QueryParamsSerializer\",\n  \"WmsXmlParser\",\n  \"RequestErrorHandler\",\n  \"TextDecoder\",\n]);\n\nserviceContainer.implement(\n  \"QueryParamsSerializer\",\n  BaseQueryParamsSerializer,\n  []\n);\n\nserviceContainer.implement(\"VersionComparator\", BaseVersionComparator, []);\n\nserviceContainer.createArrayResolver(\n  \"WmsVersionAdapter\",\n  \"WmsVersionAdapter[]\"\n);\n\nserviceContainer.implement(\n  \"WmsVersionAdapterResolver\",\n  BaseWmsVersionAdapterResolver,\n  [\"WmsVersionAdapter[]\", \"VersionComparator\"]\n);\n\nserviceContainer.implement(\n  \"XmlResponseVersionExtractor\",\n  BaseXmlResponseVersionExtractor,\n  []\n);\n\nserviceContainer.createArrayResolver(\n  \"ExceptionReportExtractor\",\n  \"ExceptionReportExtractor[]\"\n);\n\nserviceContainer.implement(\"XMLSerializer\", XMLSerializer, []);\n\nserviceContainer.implement(\"ExceptionXmlChecker\", BaseExceptionXmlChecker, [\n  \"ExceptionReportExtractor[]\",\n  \"XMLSerializer\",\n]);\n\nserviceContainer.implement(\"WmsNegotiator\", BaseWmsNegotiator, [\n  \"WmsXmlParser\",\n  \"XmlResponseVersionExtractor\",\n  \"WmsClientFactory\",\n  \"WmsVersionAdapterResolver\",\n  \"RequestErrorHandler\",\n  \"VersionComparator\",\n  \"QueryParamsSerializer\",\n]);\n\nserviceContainer.loadModule(versionAdapterModule_1_0_0);\nserviceContainer.loadModule(versionAdapterModule_1_1_1);\nserviceContainer.loadModule(versionAdapterModule_1_3_0);\nserviceContainer.loadModule(exceptionModule_1_0_0);\nserviceContainer.loadModule(exceptionModule_1_1_1);\nserviceContainer.loadModule(exceptionModule_1_3_0);\n\nserviceContainer.implement(\"WmsXmlParser\", BaseWmsXmlParser, [\n  \"DOMParser\",\n  \"ExceptionXmlChecker\",\n]);\n\nserviceContainer.implement(\"TextDecoder\", TextDecoder, []);\n\nserviceContainer.implement(\"RequestErrorHandler\", BaseRequestErrorHandler, [\n  \"TextDecoder\",\n  \"WmsXmlParser\",\n]);\n","import { serviceContainer } from \"./serviceContainer\";\nimport type { WmsClient, WmsClientFactoryOptions } from \"./client\";\n\n/**\n * Takes WMS base URL and WMS version, which should be one of registered WMS adapter versions, and returns `WmsClient`\n * interface.\n *\n * @param wmsUrl\n * @param wmsVersion\n * @param options\n */\nexport function createClient(\n  wmsUrl: string,\n  wmsVersion: string,\n  options: WmsClientFactoryOptions = {}\n): WmsClient {\n  return serviceContainer\n    .resolve(\"WmsClientFactory\")\n    .create(wmsUrl, wmsVersion, options);\n}\n","import { serviceContainer } from \"./serviceContainer\";\nimport type { WmsClient } from \"./client\";\nimport type { WmsNegotiatorOptions } from \"./negotiator\";\n\n/**\n * Takes WMS base URL and returns Promise, which will be resolved with `WmsClient` interface of compatible version.\n * If no compatible version is found, the promise will be rejected.\n *\n * @param wmsUrl\n * @param options\n */\nexport async function negotiate(\n  wmsUrl: string,\n  options: WmsNegotiatorOptions = {}\n): Promise<WmsClient> {\n  const negotiator = serviceContainer.resolve(\"WmsNegotiator\");\n  return await negotiator.negotiate(wmsUrl, options);\n}\n"],"names":["BaseRequestErrorHandler","textDecoder","wmsXmlParser","this","thrown","isAxiosError","response","isXmlResponse","parse","getResponseBodyString","test","headers","data","ArrayBuffer","decode","TypeError","inheritLayerData","layer","parentLayer","styles","structuredClone","crs","Set","geographicBounds","boundingBoxes","dimensions","attribution","minScaleDenominator","maxScaleDenominator","scaleHint","queryable","cascaded","opaque","noSubsets","fixedWidth","fixedHeight","layers","childLayer","inheritLayersData","mergeSearchParams","url","queryString","options","urlObj","URL","searchParams","URLSearchParams","replace","key","val","set","toString","trim","str","withNamespace","nodeName","namespace","length","BaseWmsClient","httpClient","queryParamsSerializer","versionAdapter","requestErrorHandler","wmsUrl","mapRequestUrl","featureInfoRequestUrl","getVersion","version","params","requestParams","getCustomQueryParams","transformCapabilitiesRequestParams","prepareUrl","get","responseType","e","handleRequestError","doc","capabilities","extractCapabilitiesResponseData","capability","getMapUrl","checkForErrorGetMapResponse","getMapRequestUrl","transformMapRequestParams","transformFeatureInfoRequestParams","query","responseString","getResponseString","baseUrl","serialize","BaseWmsClientFactory","versionAdapterResolver","wmsVersion","resolve","axios","create","WmsException","Error","message","code","locator","super","name","WmsExceptionReport","exceptions","BaseExceptionXmlChecker","exceptionReportExtractors","xmlSerializer","responseDoc","isException","wmsExceptions","getExceptionReport","map","entry","xmlResponse","rootNode","xpath","select1","exceptionResponseDoc","extractor","report","extractExceptionReport","errorXml","serializeToString","ExceptionReportExtractor_1_0","exceptionNode","select","WmsExceptionCode","GenericExceptionReportExtractor","versionExtractor","versionComparator","fromVersion","toVersion","ns","extractVersion","is","useNamespaces","ogc","getDataExtractor","toNodesArray","mandatory","asArray","ofObjects","toNode","asString","withConversion","InvalidCRS","createNodeDataExtractor","BaseWmsNegotiator","xmlResponseVersionExtractor","wmsClientFactory","adapter","getNegotiationOutcome","factoryOptions","request","getMap","httpGetUrl","getFeatureInfo","customQuery","getHighest","serverVersions","getWmsServerCapabilities","findLower","serverVersion","push","o","compatibleAdapter","getCompatibleAdapter","RangeError","v","join","wmsAdapter","find","findCompatible","BaseQueryParamsSerializer","queryParams","prefix","Object","keys","filter","paramName","paramValue","encode","stringifyValue","String","encodeURIComponent","c","charCodeAt","GenericCapabilitiesRequestParamsTransformer","transformedParams","forEach","updatesequence","service","getRequestName","getVersionParamName","isV_1_0","AttributionExtractor","asObject","title","logo","width","asNumber","height","format","BoundingBoxesExtractor","crsAttrName","minX","minY","maxX","maxY","resX","resY","CrsExtractor","crsNodeName","ofStrings","crses","flatMap","split","dataUrlsExtractor_1_0","DimensionsExtractor_1_1","layerNode","hasExtentOrDimensionChild","dimensionsMap","getDimensionsMap","extentElements","extentEl","dimension","assign","extractExtentElementData","node","dimensionElements","parentNode","getDimensionElementsRecursive","getPrecedingDimensionElements","dimensionElement","units","extent","default","multipleValues","asBoolean","nearestValue","current","value","dimensionsExtractor_1_3","unitSymbol","geographicBoundsExtractor_1_1","west","south","east","north","geographicBoundsExtractor_1_3","IdentifiersExtractor","authorityUrl","getAuthorityUrl","identifierNode","authority","LayersExtractor","keywordsExtractor","crsExtractor","layerDimensionsExtractor","geographicBoundsExtractor","boundingBoxesExtractor","attributionExtractor","identifiersExtractor","metadataUrlsExtractor","dataUrlsExtractor","featureListUrlsExtractor","stylesExtractor","ofRecursiveObjects","recursion","description","keywords","identifiers","metadataUrls","dataUrls","featureListUrls","min","max","MetadataUrlsExtractor","type","ResourceUrlsExtractor","StylesExtractor","styleUrlExtractor","legendUrls","stylesheetUrl","styleUrl","styleUrlExtractor_1_0","StyleUrlExtractor_1_1","CapabilitiesSectionExtractor","layersDataExtractor","exceptionFormatsExtractor","rootNodeName","getCapabilities","buildOperationTypeExtractor","describeLayer","exceptionFormats","pathPrefix","builder","requestType","optional","responseFormats","buildLinkUrlDataExtractor","CapabilitiesSectionExtractor_1_0","layersExtractor","usingMapper","formatNode","toUpperCase","exceptionFormatExtractor_1_1","formats","exceptionFormatExtractor_1_3","GenericCapabilitiesResponseDataExtractor","serviceSectionExtractorFactory","capabilitiesSectionExtractorFactory","namespaces","buildDataExtractor","createObjectMapper","updateSequence","KeywordsExtractor","withNameSpace","vocabulary","keywordsExtractor_1_0","keywordsString","keyword","ServiceSectionExtractor","keywordsDataExtractor","withDefault","contactInformation","buildContactInformationExtractor","fees","accessConstraints","layerLimit","maxWidth","maxHeight","contactPerson","buildContactPersonExtractor","position","address","buildAddressExtractor","telephone","fax","email","organization","addressType","city","stateOrProvince","postCode","country","ServiceSectionExtractor_1_0","undefinedExtractor","wmsXmlNamespace","xlinkXmlNamespace","GenericFeatureInfoRequestParamsTransformer","mapRequestParamsTransformer","result","transform","isV1_0","isV1_3","i","x","j","y","queryLayers","query_layers","infoFormat","info_format","GenericMapRequestParamsTransformer","getLayersParam","getStylesParam","bbox","getBboxParam","transparent","getCrsParamName","transformExceptionFormat","bgcolor","bounds","style","isV1_0_x","isV1_3_x","exceptionFormat","isV1_1","BaseWmsVersionAdapterResolver","adaptersPool","getNotEmptyAdaptersList","isCompatible","getAdaptersSortedByVersionDesc","slice","sort","adapter1","adapter2","compare","RangeVersionCompatibilityChecker","minVersion","maxVersion","BaseXmlResponseVersionExtractor","BaseWmsVersionAdapter","capabilitiesRequestParamsTransformer","capabilitiesResponseDataExtractor","featureInfoRequestParamsTransformer","versionCompatibilityChecker","extract","BaseVersionComparator","v1","v2","major1","minor1","patch1","major2","minor2","patch2","majorResult","compareComponent","minorResult","operator","component1","component2","numComponent1","parseInt","numComponent2","BaseWmsXmlParser","xmlParser","exceptionXmlChecker","xml","parseFromString","check","containerModule_1_0","container","implement","constant","nameSpace","registerConstant","loadModule","layersExtractorModule","containerModule_1_0_0","capabilitiesRequestParamsTransformerModule","capabilitiesResponseExtractorModule","mapRequestParamsTransformerModule","featureInfoRequestParamsTransformerModule","versionCompatibilityCheckerModule","containerModule_1_1","xlink","containerModule_1_1_1","containerModule_1_3","wms","containerModule_1_3_0","serviceContainer","Container","DOMParser","createArrayResolver","XMLSerializer","versionAdapterModule_1_0_0","versionAdapterModule_1_1_1","versionAdapterModule_1_3_0","exceptionModule_1_0_0","exceptionModule_1_1_1","exceptionModule_1_3_0","TextDecoder","async","negotiator","negotiate"],"mappings":"qsBAOO,MAAMA,EAOX,YACmBC,EACAC,EAAAA,CADAC,KAAAF,YAAAA,EACAE,KAAAD,aAAAA,CAChB,CAKH,mBAAmBE,EASX,CAAA,MAPJC,EAAAA,aAAaD,CAAAA,GACbA,EAAOE,UACPH,KAAKI,cAAcH,EAAOE,QAAAA,GAG1BH,KAAKD,aAAaM,MAAML,KAAKM,sBAAsBL,EAAOE,QAEtDF,CAAAA,EAAAA,CACR,CAQQ,cAAcE,EACpB,CAAA,MAAO,sBAAsBI,KAAKJ,EAASK,QAAQ,cACrD,CAAA,CAAA,CAQQ,sBAAsBL,EAAAA,CACxB,GAAyB,OAAlBA,EAASM,MAAS,SAC3B,OAAON,EAASM,KAEd,GAAAN,EAASM,gBAAgBC,YAC3B,OAAOV,KAAKF,YAAYa,OAAOR,EAASM,MAEpC,MAAA,IAAIG,UAAU,0BACtB,CAAA,CAAA,CClDc,SAAAC,EAAiBC,EAAcC,EA+E7C,CAAA,GA9EIA,EAAYC,SACVF,EAAME,OACFF,EAAAE,OAAS,CAAIC,GAAAA,gBAAgBF,EAAYC,MAAYF,EAAAA,GAAAA,EAAME,QAE3DF,EAAAE,OAASC,gBAAgBF,EAAYC,MAAAA,GAI3CD,EAAYG,MACVJ,EAAMI,IAERJ,EAAMI,IAAM,IAAI,IAAIC,IAAI,IAAIJ,EAAYG,IAAAA,GAAQJ,EAAMI,GAAAA,CAAAA,CAAAA,EAEtDJ,EAAMI,IAAM,CAAA,GAAIH,EAAYG,GAI5BH,GAAAA,EAAYK,mBAAqBN,EAAMM,mBACzCN,EAAMM,iBAAmB,IAAKL,EAAYK,gBAAAA,GAGxCL,EAAYM,eAAkBP,CAAAA,EAAMO,gBAChCP,EAAAO,cAAgBJ,gBAAgBF,EAAYM,gBAGhDN,EAAYO,YAAAA,CAAeR,EAAMQ,aAC7BR,EAAAQ,WAAaL,gBAAgBF,EAAYO,UAG7CP,GAAAA,EAAYQ,cAAgBT,EAAMS,cAC9BT,EAAAS,YAAcN,gBAAgBF,EAAYQ,WAIZ,GAApCR,EAAYS,sBAAwB,QACpCV,EAAMU,sBADMA,SAGZV,EAAMU,oBAAsBT,EAAYS,qBAIxCT,EAAYU,8BACZX,EAAMW,sBAAwB,SAE9BX,EAAMW,oBAAsBV,EAAYU,qBAGtCV,EAAYW,WAAcZ,CAAAA,EAAMY,YAC5BZ,EAAAY,UAAYT,gBAAgBF,EAAYW,YAG5CX,EAAYY,oBAA2Bb,EAAMa,qBAC/Cb,EAAMa,UAAYZ,EAAYY,WAG5BZ,EAAYa,WAAa,QAAad,EAAMc,WAAa,SAC3Dd,EAAMc,SAAWb,EAAYa,UAG3Bb,EAAYc,iBAAwBf,EAAMe,kBAC5Cf,EAAMe,OAASd,EAAYc,QAGzBd,EAAYe,YAHaD,QAGcf,EAAMgB,YAAjCA,SACdhB,EAAMgB,UAAYf,EAAYe,WAG5Bf,EAAYgB,aAAe,QAAajB,EAAMiB,aAAe,SAC/DjB,EAAMiB,WAAahB,EAAYgB,YAI/BhB,EAAYiB,cAJmBD,QAK/BjB,EAAMkB,uBAENlB,EAAMkB,YAAcjB,EAAYiB,aAG9BlB,EAAMmB,OACG,UAAAC,KAAcpB,EAAMmB,OAC7BpB,EAAiBqB,EAAYpB,GAI1B,OAAAA,CACT,CCrFO,SAASqB,EAAkBF,EAChC,CAAA,UAAWnB,KAASmB,EAClB,GAAInB,EAAMmB,OACG,UAAAC,KAAcpB,EAAMmB,OAC7BpB,EAAiBqB,EAAYpB,CAAAA,EAI5B,OAAAmB,CACT,CCAO,SAASG,EACdC,EACAC,EACAC,EAAoC,CAAA,GAE9B,MAAAC,EAAS,IAAIC,IAAIJ,CAAAA,EACjBK,EAAe,IAAIC,gBAAgBL,CACrC,EAAA,GAAA,CAACC,EAAQK,QACX,UAAYC,EAAKC,CAAAA,IAAQN,EAAOE,aACjBA,EAAAK,IAAIF,EAAKC,GAG1B,SAAA,CAAYD,EAAKC,CAAQJ,IAAAA,EAChBF,EAAAE,aAAaK,IAAIF,EAAKC,CAAAA,EAG/B,OAAON,EAAOQ,SAAAA,CAChB,CC9BO,SAASC,EAAKC,EACnB,CAAA,OAAOA,EAAID,KACb,CAAA,CCAgB,SAAAE,EAAcC,EAAkBC,GAC9C,OAAOA,GAAaA,EAAUC,OAAS,GAAGD,CAAaD,IAAAA,CAAAA,GAAaA,CACtE,CCWO,MAAMG,EA0BX,YACmBC,EACAC,EACA1D,EACA2D,EACAC,EACA7D,EACA8D,EACArB,EAA4B,GAP5BvC,CArBX6D,EAAAA,sBAMAC,EAAAA,8BAeW9D,KAAAwD,WAAAA,EACAxD,KAAAyD,sBAAAA,EACAzD,KAAAD,aAAAA,EACAC,KAAA0D,eAAAA,EACA1D,KAAA2D,oBAAAA,EACA3D,KAAAF,YAAAA,EACAE,KAAA4D,OAAAA,EACA5D,KAAAuC,QAAAA,EAEZvC,KAAA6D,cAAgBtB,EAAQsB,eAAiBD,EACzC5D,KAAA8D,sBAAwBvB,EAAQuB,uBAAyBF,CAChE,CAKA,YAAAG,CACE,OAAO/D,KAAK0D,eAAeM,OAC7B,CAKA,WACE,CAAA,OAAOhE,KAAK4D,MACd,CAKA,sBACEK,EAAoC,GAEpC,CAAA,MAAMC,EAAgB,CAAA,GACjBlE,KAAKmE,qBACLnE,EAAAA,GAAAA,KAAK0D,eAAeU,mCAAmCH,CAAAA,CAAAA,EAEtD5B,EAAMrC,KAAKqE,WAAWrE,KAAK4D,OAAQM,GACrC,IAAA/D,EACA,IACFA,EAAiBH,MAAAA,KAAKwD,WAAWc,IAAIjC,EAAIW,SAAY,EAAA,CACnDuB,aAAc,eAETC,EACFxE,CAAAA,KAAA2D,oBAAoBc,mBAAmBD,CAAAA,CAC9C,CAEA,MAAME,EAAM1E,KAAKD,aAAaM,MAAMF,EAASM,IAAAA,EACvCkE,EACJ3E,KAAK0D,eAAekB,gCAAgCF,CAI/C,EAAA,OAFWvC,EAAAwC,EAAaE,WAAW5C,QAEnC0C,CACT,CAKA,aAAaV,EAAAA,CACL,MAAA5B,EAAMrC,KAAK8E,UAAUb,CAAAA,EACvB,IAAA9D,EACA,GAAA,CACFA,QAAiBH,KAAKwD,WAAWc,IAAiBjC,EAAK,CACrDkC,aAAc,aAAA,CAAA,QAETC,EAAAA,CACFxE,KAAA2D,oBAAoBc,mBAAmBD,CAC9C,CAAA,CAIA,OAFAxE,KAAK+E,4BAA4B5E,GAE1BA,EAASM,IAClB,CAKA,kBAAAuE,CACE,OAAOhF,KAAK6D,aACd,CAKA,iBAAiBxB,EACfrC,CAAAA,KAAK6D,cAAgBxB,CACvB,CAKA,UAAU4B,GACR,MAAMC,EAAgB,IACjBlE,KAAKmE,qBAAAA,EAAAA,GACLnE,KAAK0D,eAAeuB,0BAA0BhB,CAEnD,CAAA,EAAA,OAAOjE,KAAKqE,WAAWrE,KAAK6D,cAAeK,CAC7C,CAAA,CAKA,qBACED,EAAAA,CAEA,MAAMC,EAAgB,IACjBlE,KAAKmE,qBAAAA,EAAAA,GACLnE,KAAK0D,eAAewB,kCAAkCjB,IAErD5B,EAAMrC,KAAKqE,WAAWrE,KAAK8D,sBAAuBI,GACpD,IAAA/D,EACA,IACFA,EAAiBH,MAAAA,KAAKwD,WAAWc,IAAYjC,EAAK,CAChDkC,aAAc,eAETC,GACFxE,KAAA2D,oBAAoBc,mBAAmBD,CAC9C,CAAA,CAMA,OAJIxE,KAAKI,cAAcD,CAEhBH,GAAAA,KAAAD,aAAaM,MAAMF,EAASM,MAE5BN,EAASM,IAClB,CAKA,2BACE,OAAOT,KAAK8D,qBACd,CAKA,yBAAyBzB,EACvBrC,CAAAA,KAAK8D,sBAAwBzB,CAC/B,CAKA,sBAAA8B,CACE,MAAMgB,MAAEA,EAAQ,CAAA,CAAOnF,EAAAA,KAAKuC,QACrB,MAAA,IAAK4C,CACd,CAAA,CAKA,eACE,CAAA,OAAOnF,KAAKwD,UACd,CAQQ,4BAA4BrD,GAClC,GAAKH,CAAAA,KAAKI,cAAcD,CACtB,EAAA,OAEI,MAAAiF,EAAiBpF,KAAKqF,kBAAkBlF,CAAAA,EAEzCH,KAAAD,aAAaM,MAAM+E,EAC1B,CAQQ,kBAAkBjF,EACpB,CAAA,UAAOA,EAASM,MAAS,SAC3B,OAAON,EAASM,KAEd,GAAAN,EAASM,gBAAgBC,YAC3B,OAAOV,KAAKF,YAAYa,OAAOR,EAASM,IAEpC,EAAA,MAAA,IAAIG,UAAU,0BAAA,CACtB,CAQQ,cAAcT,EACpB,CAAA,MAAO,sBAAsBI,KAAKJ,EAASK,QAAQ,cACrD,CAAA,CAAA,CASQ,WAAW8E,EAAiBH,EAE3B,CAAA,OAAA/C,EAAkBkD,EADAtF,KAAKyD,sBAAsB8B,UAAUJ,CAAAA,CAAAA,CAEhE,EChPK,MAAMK,CAAAA,CAUX,YACmBC,EACAhC,EACA1D,EACA4D,EACA7D,EAJAE,CAAAA,KAAAyF,uBAAAA,EACAzF,KAAAyD,sBAAAA,EACAzD,KAAAD,aAAAA,EACAC,KAAA2D,oBAAAA,EACA3D,KAAAF,YAAAA,CAChB,CAKH,OACE8D,EACA8B,EACAnD,EAAmC,CAAA,EAAA,CAEnC,MAAMmB,EAAiB1D,KAAKyF,uBAAuBE,QAAQD,IACrDlC,WAAEA,EAAaoC,EAAMC,OAAatD,CAAAA,EAAAA,EAExC,OAAO,IAAIgB,EACTC,EACAxD,KAAKyD,sBACLzD,KAAKD,aACL2D,EACA1D,KAAK2D,oBACL3D,KAAKF,YACL8D,EACArB,CAEJ,CAAA,CAAA,CChDK,MAAMuD,UAAqBC,KAAAA,CAQhC,YACEC,EACSC,EAAkC,GAClCC,EAAAA,CAETC,MAAMH,CAAAA,EAHGhG,KAAAiG,KAAAA,EACAjG,KAAAkG,QAAAA,EAGTlG,KAAKoG,KAAO,cACd,CCdK,CAAA,MAAMC,UAA2BN,KAMtC,CAAA,YAAqBO,EACnBH,CAAAA,MAAM,mCADanG,KAAAsG,WAAAA,EAEnBtG,KAAKoG,KAAO,oBACd,CAAA,CCFK,MAAMG,EAOX,CAAA,YACmBC,EACAC,EAAAA,CADAzG,KAAAwG,0BAAAA,EACAxG,KAAAyG,cAAAA,CAChB,CAKH,MAAMC,EACJ,CAAA,GAAA,CAAK1G,KAAK2G,YAAYD,GACpB,OAEI,MACAE,EADkB5G,KAAK6G,mBAAmBH,GACVI,IACnCC,GAAU,IAAIjB,EAAaiB,EAAMf,QAASe,EAAMd,KAAMc,EAAMb,OAAAA,CAAAA,EAE3D,MAAAU,EAActD,SAAW,EACrBsD,EAAc,GAEhB,IAAIP,EAAmBO,CAC/B,CAAA,CAQQ,YAAYI,EAAAA,CAClB,MAAMC,EAAWC,EAAMC,QAAQ,KAAMH,GAC9B,MAAA,aAAazG,KAAK0G,EAAS7D,QAAAA,CACpC,CAQQ,mBACNgE,EAEW,CAAA,UAAAC,KAAarH,KAAKwG,0BAA2B,CAChD,MAAAc,EAASD,EAAUE,uBAAuBH,CAChD,EAAA,GAAIE,EACK,OAAAA,CAEX,CAEA,MAAME,EAAWxH,KAAKyG,cAAcgB,kBAAkBL,CACtD,EAAA,MAAM,IAAItB,EACR;AAAA,EAAoE0B,IAExE,CChEK,CAAA,MAAME,EAIX,CAAA,uBAAuBhD,EACrB,CAAA,MAAMiD,EAAgBT,EAAMU,OAC1B,gBACAlD,EACA,EAAA,EAEF,GAAIiD,EAEK,MAAA,CAAC,CAAE3B,QADO4B,EAAAA,OAAO,YAAaD,CAAAA,EAA0B1E,KAEjE,CAAA,CAAA,CACF,ECpBU,IAAA4E,GAAAA,IACVA,EAAgB,cAAA,gBAChBA,EAAa,WAAA,aACbA,EAAkB,gBAAA,kBAClBA,EAAkB,gBAAA,kBAClBA,EAAoB,kBAAA,oBACpBA,EAAe,aAAA,eACfA,EAAwB,sBAAA,wBACxBA,EAAwB,sBAAA,wBACxBA,EAAwB,sBAAA,wBACxBA,EAAwB,sBAAA,wBACxBA,EAAwB,sBAAA,wBAXdA,IAAAA,GAAA,CAAA,CAAA,ECWL,MAAMC,CAAAA,CAYX,YACmBC,EACAC,EACAC,EACAC,EACAC,GAJAnI,KAAA+H,iBAAAA,EACA/H,KAAAgI,kBAAAA,EACAhI,KAAAiI,YAAAA,EACAjI,KAAAkI,UAAAA,EACAlI,KAAAmI,GAAAA,CAChB,CAKH,uBAAuBzD,GACjB,IAAAV,EACA,IACQA,EAAAhE,KAAK+H,iBAAiBK,eAAe1D,SAExC,MACT,CAEA,GACE1E,KAAKgI,kBAAkBK,GAAGrE,EAAS,KAAMhE,KAAKiI,WAAAA,GAC9CjI,KAAKgI,kBAAkBK,GAAGrE,EAAS,IAAKhE,KAAKkI,WAC7C,CACA,MAAMN,EAASV,EAAMoB,cAAc,CAAEC,IAAK,4BAAA,CAAA,EAC1C,OAAOvI,KAAKwI,iBAAAA,EAAmB9D,EAAKkD,EACtC,CACF,CAMQ,kBAGN,CAAA,OAAOd,EAAAA,IACJ2B,EAAAA,aAAa,KAAKtF,EAAc,mBAAoBnD,KAAKmI,EAAAA,CAAAA,EAAAA,EACzDO,YACAC,QACAC,EAAAA,UAAU,CACT5C,QAASc,EAAAA,IAAM+B,EAAAA,OAAO,KAAKH,UAAYI,EAAAA,SAAAA,EAAWC,eAAe9F,CACjEgD,EAAAA,KAAMa,EAAIA,IACP+B,EAAAA,OAAO,OACPC,EAAAA,SAAAA,EACAC,eACE9C,GACEA,IAAS,aACN4B,EAAiBmB,WACjB/C,GAEVC,QAASY,EAAAA,IAAM+B,EAAAA,OAAO,YAAYC,SAEnCG,CAAAA,CAAAA,EAAAA,wBAAAA,CACL,EC1CK,MAAMC,EAAAA,CAYX,YACmBnJ,EACAoJ,EACAC,EACA3D,EACA9B,EACAqE,EACAvE,GANAzD,KAAAD,aAAAA,EACAC,KAAAmJ,4BAAAA,EACAnJ,KAAAoJ,iBAAAA,EACApJ,KAAAyF,uBAAAA,EACAzF,KAAA2D,oBAAAA,EACA3D,KAAAgI,kBAAAA,EACAhI,KAAAyD,sBAAAA,CAChB,CAKH,gBACEG,EACArB,EAAgC,qBAEhC,KAAMiB,CAAAA,WAAEA,EAAaoC,EAAMC,OAAAA,CAAAA,EAAatD,GAClC8G,QAAEA,EAAA3C,YAASA,CAAsB1G,EAAAA,MAAAA,KAAKsJ,sBAC1C1F,EACAJ,EACAjB,EAAQ4C,KAAAA,EAEJR,EAAe0E,EAAQzE,gCAAgC8B,GAEvD6C,EAAiB,CAAA,GAClBhH,EACHiB,WAAAA,EACAK,eAAec,GAAAA,GAAAA,EAAAA,GAAAA,YAAAA,EAAcE,aAAdF,YAAAA,EAA0B6E,UAA1B7E,YAAAA,EAAmC8E,SAAnC9E,YAAAA,EAA2C+E,WAC1D5F,uBACEa,IAAAA,GAAAA,EAAAA,GAAAA,YAAAA,EAAcE,aAAdF,YAAAA,EAA0B6E,UAA1B7E,YAAAA,EAAmCgF,iBAAnChF,YAAAA,GAAmD+E,YAEvD,OAAO1J,KAAKoJ,iBAAiBvD,OAC3BjC,EACAyF,EAAQrF,QACRuF,CAAAA,CAEJ,CAUA,MAAA,sBACE3F,EACAJ,EACAoG,EAAsB,CAAA,EAAA,CAElB,IAAAP,EACFrJ,KAAKyF,uBAAuBoE,WAAAA,EAC9B,MAAMC,EAA2B,CAAA,EAEjC,KAAOT,GAAS,CACV,IAAA3C,EACA,GAAA,CACFA,EAAoB1G,MAAAA,KAAK+J,yBACvBnG,EACAyF,EACA7F,EACAoG,SAEKpF,EACH,CAAA,GAAAA,aAAasB,GAAgBtB,aAAa6B,EAAoB,CAChEgD,EAAUrJ,KAAKyF,uBAAuBuE,UAAUX,EAAQrF,OACxD,EAAA,QAAA,CAEM,MAAAQ,CAEV,CAEA,MAAMyF,EACJjK,KAAKmJ,4BAA4Bf,eAAe1B,CAE9C,EAAA,GADJoD,EAAeI,KAAKD,GAChBA,IAAkBZ,EAAQrF,QACrB,MAAA,CAAEqF,UAAkB3C,YAEvByD,CAAA,EAAA,MAAAC,EAAoBpK,KAAKqK,qBAAqBJ,CACpD,EAAA,GAAIG,EACK,MAAA,CAAEf,QAASe,EAAmB1D,YAAAA,CAAAA,EAEvC2C,EAAUrJ,KAAKyF,uBAAuBuE,UACpChK,KAAKgI,kBAAkBK,GAAG4B,EAAe,IAAKZ,EAAQrF,OAAAA,EAClDiG,EACAZ,EAAQrF,QAEhB,CAEA,MAAM,IAAIsG,WACR,yEAAyER,EAAehD,IAAKyD,GAAM,IAAIA,CAAAA,GAAAA,EAAMC,KAAK,IAEtH,CAAA,EAAA,CAAA,CAWA,+BACE5G,EACA6G,EACAjH,EACAoG,EAAsB,CAAA,EAAA,CAEhB,MAAA3F,EAASwG,EAAWrG,mCAAmC,CACxDwF,GAAAA,CAAAA,CAAAA,EAGCvH,EAAMD,EAAkBwB,EADL5D,KAAKyD,sBAAsB8B,UAAUtB,IAE1D,IAAA9D,EACA,IACSA,EAAMqD,MAAAA,EAAWc,IAAYjC,EAAK,CAC3CkC,aAAc,MAAA,CAAA,QAETC,EAAAA,CACFxE,KAAA2D,oBAAoBc,mBAAmBD,EAC9C,CAEA,OAAOxE,KAAKD,aAAaM,MAAMF,EAASM,IAAAA,CAC1C,CAQQ,qBACNiF,GAGA,OADgB1F,KAAKyF,uBAAuBiF,KAAKhF,IAC/B1F,KAAKyF,uBAAuBkF,eAAejF,CAC/D,CAAA,CAAA,CCvLK,MAAMkF,EAIX,CAAA,UAAUC,EAAqBC,EAAS,GACtC,CAAA,OAAOC,OAAOC,KAAKH,CAAAA,EAChBI,OAAQpI,GAAuB,OAARA,GAAQ,QAC/BiE,EAAAA,IAAKjE,IACJ,MAAMqI,EAAYJ,EAAOxH,OAAS,GAAGwH,KAAUjI,CAASA,IAAAA,EAClDsI,EAAaN,EACjBhI,GAGF,OAA0B,OAAfsI,GAAe,UAAYA,IAAe,KAC5CnL,KAAKuF,UAAU4F,EAAYD,CAGlClL,EAAAA,KAAKoL,OAAOF,CACZ,EAAA,IACAlL,KAAKoL,OAAOpL,KAAKqL,eAAeF,CAAW,CAAA,CAAA,CAAA,EAG9CX,KAAK,GACV,CAAA,CAQQ,eAAe1H,EAAAA,CACrB,cAAeA,EACb,CAAA,IAAK,SACH,OAAOwI,OAAOxI,CAChB,EAAA,IAAK,SACI,OAAAA,EACT,IAAK,SACL,IAAK,YACI,MAAA,GACT,QACE,OAAOA,EAAM,IAAM,GAAA,CAEzB,CAQQ,OAAOI,GACb,OAAOqI,mBAAmBrI,CAAKN,EAAAA,QAAQ,WAAY,SAAU4I,EAAAA,CAC3D,MAAO,IAAMA,EAAEC,WAAW,CAAGzI,EAAAA,SAAS,EAAE,CAAA,CAAA,CAE5C,ECpDK,MAAM0I,CAAAA,CASX,YACmB1D,EACAhE,GADAhE,KAAAgI,kBAAAA,EACAhI,KAAAgE,QAAAA,CAChB,CAKH,UAAUC,EAAAA,CACR,MAAM0H,EAAgD,CAAA,EAc/C,OAbPZ,OAAOC,KAAK/G,CAAAA,EAAQ2H,QAAS/I,GAC3B,CAAQA,IACD,iBACe8I,EAAAE,eAAiB5H,EAAOpB,GAGxB8I,EAAA9I,CAAAA,EAAOoB,EAAOpB,CAEpC,CAAA,CAAA,EAEF8I,EAAkBG,QAAU,MACVH,EAAAnC,QAAUxJ,KAAK+L,eACjCJ,EAAAA,EAAkB3L,KAAKgM,oBAAyBhM,CAAAA,EAAAA,KAAKgE,QAC9C2H,CACT,CAOQ,gBAAAI,CACC,OAAA/L,KAAKiM,QAAAA,EAAY,eAAiB,iBAC3C,CAMQ,qBACC,CAAA,OAAAjM,KAAKiM,QAAAA,EAAY,SAAW,SACrC,CAMQ,SACN,CAAA,OACEjM,KAAKgI,kBAAkBK,GAAGrI,KAAKgE,QAAS,KAAM,GAC9ChE,GAAAA,KAAKgI,kBAAkBK,GAAGrI,KAAKgE,QAAS,IAAK,KAAA,CAEjD,CC1DK,CAAA,MAAMkI,EAQX,YAA6B/D,GAAAnI,KAAAmI,GAAAA,CAAa,CAK1C,yBAGS,CAAA,OAAArB,EAAAA,IACJ+B,EAAAA,OAAO1F,EAAc,cAAenD,KAAKmI,KACzCgE,SAAS,CACRC,MAAOtF,EAAAA,MAAM+B,OAAO1F,EAAc,QAASnD,KAAKmI,EAAAA,CAAAA,EAAKW,WACrDzG,IAAKyE,EAAAA,IACF+B,EAAAA,OAAO,GAAG1F,EAAc,iBAAkBnD,KAAKmI,EAC/CW,CAAAA,cAAAA,EAAAA,SAAAA,EACHuD,KAAMvF,EAAAA,IAAAA,EACH+B,OAAO1F,EAAc,UAAWnD,KAAKmI,EACrCgE,CAAAA,EAAAA,SAAS,CACRG,MAAOxF,QAAM+B,OAAO,QAAA,EAAUH,UAAY6D,EAAAA,SAAAA,EAC1CC,OAAQ1F,QAAM+B,OAAO,SAAWH,EAAAA,UAAAA,EAAY6D,WAC5CE,OAAQ3F,EAAAA,IACL+B,EAAAA,OAAO1F,EAAc,SAAUnD,KAAKmI,KACpCO,UACAI,EAAAA,SAAAA,EACHzG,IAAKyE,EAAAA,IAAAA,EACF+B,OAAO,GAAG1F,EAAc,iBAAkBnD,KAAKmI,mBAC/CO,UACAI,EAAAA,SAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAGRG,yBACL,CCvCK,CAAA,MAAMyD,CASX,CAAA,YACmBC,EACAxE,EAAAA,CADAnI,KAAA2M,YAAAA,EACA3M,KAAAmI,GAAAA,CAChB,CAKH,0BAGS,OAAArB,QACJ2B,aAAatF,EAAc,cAAenD,KAAKmI,EAAAA,CAAAA,EAC/CQ,QACAC,EAAAA,UAAU,CACT1H,IAAK4F,EAAIA,MAAE+B,OAAO,IAAI7I,KAAK2M,WAAejE,EAAAA,EAAAA,UAAAA,EAAYI,SACtD8D,EAAAA,KAAM9F,MAAM+B,EAAAA,OAAO,SAASH,UAAY6D,EAAAA,SAAAA,EACxCM,KAAM/F,QAAM+B,OAAO,OAASH,EAAAA,UAAAA,EAAY6D,WACxCO,KAAMhG,QAAM+B,OAAO,OAAA,EAASH,YAAY6D,SACxCQ,EAAAA,KAAMjG,QAAM+B,OAAO,OAASH,EAAAA,UAAAA,EAAY6D,WACxCS,KAAMlG,EAAAA,MAAM+B,OAAO,OAAA,EAAS0D,SAC5BU,EAAAA,KAAMnG,EAAAA,IAAM+B,EAAAA,OAAO,SAAS0D,SAE7BtD,CAAAA,CAAAA,EAAAA,wBAAAA,CACL,EClCK,MAAMiE,CAAAA,CAQX,YAA6BC,GAAAnN,KAAAmN,YAAAA,CAAsB,CAKnD,0BACE,OAAOrG,MACJ2B,EAAAA,aAAazI,KAAKmN,WAClBxE,EAAAA,QAAAA,EACAyE,YACArE,eAAgBsE,GAERA,EAAMC,QAASpM,GAAQA,EAAI+B,KAAAA,EAAOsK,MAAM,KAEhDtE,CAAAA,CAAAA,EAAAA,wBAAAA,CACL,EC3BW,MAAAuE,GAET1G,MACD2B,EAAAA,aAAa,SACbE,EAAAA,QAAAA,EACAC,UAAU,CACT6D,OAAQ,IAAM,GACdpK,IAAKyE,MAAM+B,EAAAA,OAAO,GAAKH,EAAAA,UAAAA,EAAYI,aAEpCG,wBCQI,EAAA,MAAMwE,GAMX,yBAAAxE,CACS,MAAA,CAACyE,EAAW9F,KACjB,GAAK5H,CAAAA,KAAK2N,0BAA0BD,EAAW9F,CAAAA,EAEtC,OAGT,MAAMtG,EAA0B,GAG1BsM,EAAgB5N,KAAK6N,iBAAiBH,EAAW9F,GAGjDkG,EAAiBlG,EAAO,SAAU8F,CACxC,EAAA,UAAWK,KAAYD,EAAgB,CAC/B,MAAA1H,EAAOwB,EAAO,gBAAiBmG,GAEjC,GAAE3H,EAAAA,KAAQwH,GACZ,SAIF,MAAMI,EAAY,CAAA,GAAKJ,EAAcxH,CAG9B2E,CAAAA,EAAAA,OAAAkD,OACLD,EACAhO,KAAKkO,yBAAyBH,EAAUnG,CAAAA,CAAAA,EAG1CtG,EAAW4I,KAAK8D,EAClB,CAEO,OAAA1M,CAAA,CAEX,CASQ,0BACNoM,EACA9F,EAEA,CAAA,OACGA,EAAO,qBAAsB8F,CAAAA,GAC7B9F,EAAO,kBAAmB8F,CAAAA,CAE/B,CAUQ,8BACNS,EACAvG,EAAAA,CAEM,MAAAwG,EAAoBxG,EAAO,YAAauG,CAMvC,EAAA,OALHA,EAAKE,YAAcF,EAAKE,WAAWjL,WAAa,SAChCgL,EAAAlE,KAAAA,GACblK,KAAKsO,8BAA8BH,EAAKE,WAAYzG,CAGpDwG,CAAAA,EAAAA,CACT,CASQ,8BACNV,EACA9F,EAAAA,CAEO,OAAAA,EAAO,6BAA8B8F,EAC9C,CAUQ,iBACNA,EACA9F,GAIA,MAAMwG,EAAoB,IACrBpO,KAAKsO,8BAA8BZ,EAAW9F,CAC9C5H,EAAAA,GAAAA,KAAKuO,8BAA8Bb,EAAW9F,IAG7CgG,EAEF,CAAA,EAEJ,UAAWY,KAAoBJ,EAAmB,CAC1C,MAAAhI,EAAOwB,EAAO,gBAAiB4G,CAAAA,EACjCpI,KAAQwH,IAGZA,EAAcxH,GAAQ,CACpBA,KAAAA,EACAqI,MAAO7G,EAAO,iBAAkB4G,CAEpC,CAAA,EAAA,CAEO,OAAAZ,CACT,CASQ,yBACNc,EACA9G,EAEA,CAAA,OAAOd,EAAAA,IACJ+B,EAAAA,OAAO,KACPH,UACAyD,EAAAA,SAAS,CACRwC,QAAS7H,EAAAA,IAAM+B,EAAAA,OAAO,YAAYC,SAClC8F,EAAAA,eAAgB9H,EAAAA,IAAM+B,EAAAA,OAAO,mBAAmBgG,UAChDC,EAAAA,aAAchI,EAAAA,IAAAA,EAAM+B,OAAO,eAAiBgG,EAAAA,UAAAA,EAC5CE,QAASjI,EAAAA,IAAAA,EAAM+B,OAAO,UAAYgG,EAAAA,UAAAA,EAClCG,MAAOlI,EAAAA,IAAAA,EAAM+B,OAAO,GAAKC,EAAAA,SAAAA,CAAAA,CAAAA,EAE1BG,0BAA0ByF,EAAQ9G,EACvC,CC3KW,CAAA,MAAAqH,GAETnI,QACD2B,aAAa,eAAA,EACbE,UACAC,UAAU,CACTxC,KAAMU,QAAM+B,OAAO,OAAA,EAASH,YAAYI,SACxC2F,EAAAA,MAAO3H,MAAM+B,EAAAA,OAAO,UAAUH,UAAYI,EAAAA,SAAAA,EAC1CoG,WAAYpI,EAAAA,MAAM+B,OAAO,aAAA,EAAeC,WACxC6F,QAAS7H,EAAAA,MAAM+B,OAAO,UAAA,EAAYC,SAClC8F,EAAAA,eAAgB9H,EAAAA,IAAM+B,EAAAA,OAAO,mBAAmBgG,UAChDC,EAAAA,aAAchI,EAAAA,IAAM+B,EAAAA,OAAO,eAAiBgG,EAAAA,UAAAA,EAC5CE,QAASjI,EAAAA,IAAAA,EAAM+B,OAAO,UAAYgG,EAAAA,UAAAA,EAClCG,MAAOlI,EAAAA,IAAAA,EAAM+B,OAAO,GAAA,EAAKC,aAE1BG,wBCfUkG,EAAAA,EAETrI,EAAAA,IACD+B,EAAAA,OAAO,qBACPsD,SAAS,CACRiD,KAAMtI,QAAM+B,OAAO,OAAA,EAASH,YAAY6D,SACxC8C,EAAAA,MAAOvI,MAAM+B,EAAAA,OAAO,SAASH,UAAY6D,EAAAA,SAAAA,EACzC+C,KAAMxI,QAAM+B,OAAO,OAASH,EAAAA,UAAAA,EAAY6D,WACxCgD,MAAOzI,MAAM+B,EAAAA,OAAO,SAASH,UAAY6D,EAAAA,SAAAA,CAAAA,CAAAA,EAE1CtD,0BCVUuG,GAET1I,EAAAA,MACD+B,OAAO,8BAAA,EACPsD,SAAS,CACRoD,MAAOzI,QAAM+B,OAAO,wBAA0BH,EAAAA,UAAAA,EAAY6D,WAC1D8C,MAAOvI,MAAM+B,EAAAA,OAAO,0BAA0BH,UAAY6D,EAAAA,SAAAA,EAC1D6C,KAAMtI,QAAM+B,OAAO,wBAA0BH,EAAAA,UAAAA,EAAY6D,SACzD+C,EAAAA,KAAMxI,MAAM+B,EAAAA,OAAO,0BAA0BH,UAAY6D,EAAAA,SAAAA,CAAAA,CAAAA,EAE1DtD,0BCJI,MAAMwG,CAAAA,CAQX,YAA6BtH,GAAAnI,KAAAmI,GAAAA,CAAa,CAK1C,0BAGS,OAAArB,MACJ2B,EAAAA,aAAatF,EAAc,aAAcnD,KAAKmI,KAC9CQ,QACAC,EAAAA,UAAU,CACToG,MAAOlI,MAAM+B,EAAAA,OAAO,KAAKH,UAAYI,EAAAA,SAAAA,EACrC4G,aAAc,CAACvB,EAAMvG,IAAW5H,KAAK2P,gBAAgBxB,EAAMvG,CAE5DqB,CAAAA,CAAAA,EAAAA,wBAAAA,CACL,CASQ,gBAAgB2G,EAAsBhI,EACtC,CAAA,MAAAiI,EAAYjI,EAAO,qBAAsBgI,CAK/C,EAAA,OAAOhI,EAAO,UAHZ,KAAKzE,EAAc,QAASnD,KAAKmI,QAC5BhF,EAAc,eAAgBnD,KAAKmI,EAAAA,CAAAA,WAAc0H,EAAU5M,KAC5DE,CAAAA,SAAAA,EAAc,iBAAkBnD,KAAKmI,EAAAA,CAAAA,cAAAA,IACEyH,EAC/C,CCxCK,CAAA,MAAME,CAmBX,CAAA,YACmBC,EACAC,EACAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EACAC,EAGAC,EACAtI,EAzBAnI,CAAAA,KAAA+P,kBAAAA,EACA/P,KAAAgQ,aAAAA,EACAhQ,KAAAiQ,yBAAAA,EAGAjQ,KAAAkQ,0BAAAA,EAGAlQ,KAAAmQ,uBAAAA,EAGAnQ,KAAAoQ,qBAAAA,EAGApQ,KAAAqQ,qBAAAA,EAGArQ,KAAAsQ,sBAAAA,EAGAtQ,KAAAuQ,kBAAAA,EACAvQ,KAAAwQ,yBAAAA,EAGAxQ,KAAAyQ,gBAAAA,EACAzQ,KAAAmI,GAAAA,CAChB,CAKH,yBACE,CAAA,OAAOrB,EAAIA,IAAAA,EACR2B,aAAatF,EAAc,QAASnD,KAAKmI,EACzCO,CAAAA,EAAAA,UAAAA,EACAC,UACA+H,mBAA2BC,IAAe,CACzCvE,MAAOtF,EAAAA,IACJ+B,EAAAA,OAAO1F,EAAc,QAASnD,KAAKmI,KACnCO,UACAI,EAAAA,SAAAA,EACH5H,IAAKlB,KAAKgQ,aACV5J,KAAMU,EAAAA,MAAM+B,OAAO1F,EAAc,OAAQnD,KAAKmI,EAAAA,CAAAA,EAAKW,SACnD8H,EAAAA,YAAa9J,EAAAA,IACV+B,EAAAA,OAAO1F,EAAc,WAAYnD,KAAKmI,KACtCW,SACH+H,EAAAA,SAAU7Q,KAAK+P,kBACf3O,iBAAkBpB,KAAKkQ,0BACvB7O,cAAerB,KAAKmQ,uBACpB7O,WAAYtB,KAAKiQ,yBACjB1O,YAAavB,KAAKoQ,qBAClBU,YAAa9Q,KAAKqQ,qBAClBU,aAAc/Q,KAAKsQ,sBACnBU,SAAUhR,KAAKuQ,kBACfU,gBAAiBjR,KAAKwQ,yBACtBxP,OAAQhB,KAAKyQ,gBACb/O,UAAWoF,EAAAA,IACR+B,EAAAA,OAAO1F,EAAc,YAAanD,KAAKmI,EACvCgE,CAAAA,EAAAA,SAAS,CACR+E,IAAKpK,QAAM+B,OAAO,MAAA,EAAQH,YAAY6D,SACtC4E,EAAAA,IAAKrK,MAAM+B,EAAAA,OAAO,QAAQH,UAAY6D,EAAAA,SAAAA,CAAAA,CAAAA,EAE1C5K,UAAWmF,EAAAA,IAAAA,EAAM+B,OAAO,YAAA,EAAcgG,YACtCjN,SAAUkF,EAAAA,MAAM+B,OAAO,WAAA,EAAa0D,WACpC1K,OAAQiF,EAAAA,IAAM+B,EAAAA,OAAO,WAAWgG,UAChC/M,EAAAA,UAAWgF,EAAAA,IAAM+B,EAAAA,OAAO,cAAcgG,UACtC9M,EAAAA,WAAY+E,EAAAA,IAAAA,EAAM+B,OAAO,aAAe0D,EAAAA,SAAAA,EACxCvK,YAAa8E,EAAAA,IAAAA,EAAM+B,OAAO,cAAgB0D,EAAAA,SAAAA,EAC1CtK,OAAQ6E,EAAAA,MACL2B,aAAatF,EAAc,QAASnD,KAAKmI,EAAAA,CAAAA,EACzCQ,UACA+H,mBAAmBC,CAAAA,CAAAA,EAAAA,EAEvB1H,wBACL,CAAA,CAAA,CC/FK,MAAMmI,CAQX,CAAA,YAA6BjJ,EAAAnI,CAAAA,KAAAmI,GAAAA,CAAa,CAK1C,yBAAAc,CAGS,OAAAnC,QACJ2B,aAAatF,EAAc,cAAenD,KAAKmI,EAC/CQ,CAAAA,EAAAA,QAAAA,EACAC,UAAU,CACTyI,KAAMvK,QAAM+B,OAAO,OAASH,EAAAA,UAAAA,EAAYI,WACxC2D,OAAQ3F,EAAAA,MACL+B,OAAO1F,EAAc,SAAUnD,KAAKmI,EAAAA,CAAAA,EACpCO,YACAI,SACHzG,EAAAA,IAAKyE,EAAAA,IACF+B,EAAAA,OAAO,GAAG1F,EAAc,iBAAkBnD,KAAKmI,EAAAA,CAAAA,cAAAA,EAC/CO,YACAI,SAEJG,CAAAA,CAAAA,EAAAA,wBAAAA,CACL,EC/BK,MAAMqI,CAAAA,CASX,YACmBlO,EACA+E,EADAnI,CAAAA,KAAAoD,SAAAA,EACApD,KAAAmI,GAAAA,CAChB,CAKH,yBAAAc,CAGE,OAAOnC,QACJ2B,aAAatF,EAAcnD,KAAKoD,SAAUpD,KAAKmI,EAAAA,CAAAA,EAC/CQ,QACAC,EAAAA,UAAU,CACT6D,OAAQ3F,EAAAA,MACL+B,OAAO1F,EAAc,SAAUnD,KAAKmI,EAAAA,CAAAA,EACpCO,UACAI,EAAAA,SAAAA,EACHzG,IAAKyE,EAAAA,IAAAA,EACF+B,OAAO,GAAG1F,EAAc,iBAAkBnD,KAAKmI,EAAAA,CAAAA,cAAAA,EAC/CO,UACAI,EAAAA,SAAAA,CAAAA,CAAAA,EAEJG,yBACL,CCjCK,CAAA,MAAMsI,EASX,YACmBC,EAGArJ,EAHAnI,CAAAA,KAAAwR,kBAAAA,EAGAxR,KAAAmI,GAAAA,CAChB,CAKH,yBAAAc,CAGS,OAAAnC,QACJ2B,aAAatF,EAAc,QAASnD,KAAKmI,EACzCQ,CAAAA,EAAAA,QAAAA,EACAC,UAAU,CACTxC,KAAMU,EAAAA,IACH+B,EAAAA,OAAO1F,EAAc,OAAQnD,KAAKmI,EAClCO,CAAAA,EAAAA,UAAAA,EACAI,WACHsD,MAAOtF,EAAAA,MACJ+B,OAAO1F,EAAc,QAASnD,KAAKmI,KACnCO,UACAI,EAAAA,SAAAA,EACH8H,YAAa9J,EAAAA,IAAAA,EACV+B,OAAO1F,EAAc,WAAYnD,KAAKmI,EAAAA,CAAAA,EACtCW,WACH2I,WAAY3K,EAAAA,MACT2B,aAAatF,EAAc,YAAanD,KAAKmI,EAAAA,CAAAA,EAC7CQ,QACAC,EAAAA,UAAU,CACT0D,MAAOxF,QAAM+B,OAAO,QAAA,EAAUH,YAAY6D,SAC1CC,EAAAA,OAAQ1F,QAAM+B,OAAO,SAAWH,EAAAA,UAAAA,EAAY6D,WAC5CE,OAAQ3F,EAAAA,MACL+B,OAAO1F,EAAc,SAAUnD,KAAKmI,KACpCO,UACAI,EAAAA,SAAAA,EACHzG,IAAKyE,EAAAA,IAAAA,EACF+B,OAAO,GAAG1F,EAAc,iBAAkBnD,KAAKmI,mBAC/CO,UACAI,EAAAA,SAAAA,CAAAA,CAAAA,EAEP4I,cAAe5K,EAAAA,IAAAA,EACZ+B,OAAO1F,EAAc,gBAAiBnD,KAAKmI,EAC3CgE,CAAAA,EAAAA,SAAS,CACRM,OAAQ3F,EAAAA,MACL+B,OAAO1F,EAAc,SAAUnD,KAAKmI,EAAAA,CAAAA,EACpCO,UACAI,EAAAA,SAAAA,EACHzG,IAAKyE,EAAAA,IAAAA,EACF+B,OAAO,GAAG1F,EAAc,iBAAkBnD,KAAKmI,EAAAA,CAAAA,cAAAA,EAC/CO,UACAI,EAAAA,SAAAA,CAAAA,CAAAA,EAEP6I,SAAU3R,KAAKwR,iBAAAA,CAAAA,EAEhBvI,yBACL,CCzEW,CAAA,MAAA2I,GAET9K,EAAAA,IAAAA,EACD+B,OAAO,UAAA,EACPsD,SAAS,CACRM,OAAQ,IAAM,GACdpK,IAAKyE,MAAM+B,EAAAA,OAAO,GAAKH,EAAAA,UAAAA,EAAYI,aAEpCG,wBCHI,EAAA,MAAM4I,EAQX,YAA6B1J,GAAAnI,KAAAmI,GAAAA,CAAa,CAK1C,yBAGS,CAAA,OAAArB,EAAAA,IACJ+B,EAAAA,OAAO1F,EAAc,WAAYnD,KAAKmI,EACtCgE,CAAAA,EAAAA,SAAS,CACRM,OAAQ3F,EAAAA,MACL+B,OAAO1F,EAAc,SAAUnD,KAAKmI,EAAAA,CAAAA,EACpCO,UACAI,EAAAA,SAAAA,EACHzG,IAAKyE,EAAAA,IAAAA,EACF+B,OAAO,GAAG1F,EAAc,iBAAkBnD,KAAKmI,EAAAA,CAAAA,cAAAA,EAC/CO,YACAI,SAEJG,CAAAA,CAAAA,EAAAA,wBAAAA,CACL,ECvBK,MAAM6I,CAAAA,CAYX,YACUC,EACAC,EACSC,EACA9J,EAAAA,CAHTnI,KAAA+R,oBAAAA,EACA/R,KAAAgS,0BAAAA,EACShS,KAAAiS,aAAAA,EACAjS,KAAAmI,GAAAA,CAChB,CAKH,yBAGE,CAAA,OAAOrB,EAAAA,IACJ+B,EAAAA,OACC,IAAI1F,EAAcnD,KAAKiS,aAAcjS,KAAKmI,OAAOnI,KAAKmD,cAAc,iBAErEuF,UACAyD,EAAAA,SAAS,CACR3C,QAAS1C,EAAAA,IACN+B,EAAAA,OAAO7I,KAAKmD,cAAc,SAAA,CAAA,EAC1BuF,YACAyD,SAAS,CACR+F,gBACElS,KAAKmS,4BAA4B,iBACnC1I,EAAAA,OAAQzJ,KAAKmS,4BAA4B,QAAA,EACzCxI,eAAgB3J,KAAKmS,4BACnB,mBAGFC,EAAAA,cAAepS,KAAKmS,4BAClB,kBAINE,CAAAA,CAAAA,EAAAA,iBAAkBrS,KAAKgS,0BACvB/P,OAAQjC,KAAK+R,mBAEd9I,CAAAA,EAAAA,wBAAAA,CACL,CAUU,0BACRqJ,EAAa,GACb5J,KAII,CAAA,IAAA6J,EAAUzL,QAAM+B,OAClB,GAAGyJ,CAAAA,GAAatS,KAAKmD,cAAc,gBAAA,CAAA,cAAA,EAKrC,OAHIuF,IACF6J,EAAUA,EAAQ7J,UAEb6J,GAAAA,EAAQzJ,SACjB,CAAA,CASQ,4BACN0J,EACAC,KAIA,CAAA,IAAIF,EAAUzL,EAAAA,IAAAA,EAAM+B,OAAO7I,KAAKmD,cAAcqP,CAI9C,CAAA,EAAA,OAHKC,IACHF,EAAUA,EAAQ7J,aAEb6J,EAAQpG,SAAS,CACtBuG,gBAAiB5L,EAAAA,IACd2B,EAAAA,aAAazI,KAAKmD,cAAc,QAAA,CAAA,EAChCuF,YACAC,QACAyE,EAAAA,UAAAA,EACH1D,WAAY1J,KAAK2S,0BACf,GAAG3S,KAAKmD,cAAc,SAAcnD,CAAAA,IAAAA,KAAKmD,cAAc,MAAWnD,CAAAA,IAAAA,KAAKmD,cAAc,KAAA,CAAA,IAAA,KAI3F,CAEQ,cAAcC,EACb,CAAA,OAAApD,KAAKmI,GAAG7E,OAAS,GAAGtD,KAAKmI,MAAM/E,CAAaA,GAAAA,CACrD,EC7GK,MAAMwP,EAAAA,CASX,YAA6BC,EAAAA,CAAA7S,KAAA6S,gBAAAA,CAA6C,CAK1E,0BAGE,OAAO/L,EAAAA,MACJ+B,OAAO,iCAAA,EACPH,YACAyD,SAAoD,CACnD3C,QAAS1C,QACN+B,OAAO,SACPH,EAAAA,UAAAA,EACAyD,SAAS,CACR+F,gBAAiBlS,KAAKmS,4BAA4B,gBAClD1I,OAAQzJ,KAAKmS,4BAA4B,KACzCxI,EAAAA,eAAgB3J,KAAKmS,4BACnB,cAAA,EAINE,CAAAA,CAAAA,EAAAA,iBAAkBvL,EAAAA,IACf2B,EAAAA,aAAa,sBACbC,UACAC,EAAAA,QAAAA,EACAmK,YAAaC,GACN,CAAA,MAAAtG,EAASsG,EAAW3P,SAAS4P,YAC5B,EAAA,OAAAvG,IAAW,UAAY,MAASA,CAAA,CAE3CxK,EAAAA,OAAQjC,KAAK6S,eAAAA,CAAAA,EAEd5J,yBACL,CAeQ,4BACNuJ,EACAC,EAAAA,IAIA,IAAIF,EAAUzL,EAAAA,IAAAA,EAAM+B,OAAO2J,CAI3B,EAAA,OAHKC,IACHF,EAAUA,EAAQ7J,aAEb6J,EAAQpG,SAAwB,CACrCuG,gBAAiB5L,EAAAA,IACd2B,EAAAA,aAAa,YACbC,UACAC,EAAAA,QAAAA,EACAmK,YAAaC,GAAeA,EAAW3P,QAC1CsG,EAAAA,WAAY5C,MACT+B,EAAAA,OAAO,oCACPH,UACAI,EAAAA,SAAAA,CAAAA,CAAAA,CAEP,ECzFW,MAAAmK,GAETnM,EAAAA,IAAAA,EACD2B,aAAa,kBACbC,EAAAA,UAAAA,EACAC,UACAyE,UACArE,EAAAA,eAAgBmK,GACfA,EAAQpM,IAAK2F,GACX,CAAA,OAAQA,GACN,IAAK,6BACI,MAAA,MACT,IAAK,iCACI,MAAA,UACT,IAAK,+BACI,MAAA,QACT,QACS,OAAAA,CACX,CAAA,CAAA,CAAA,EAGHxD,0BCrBUkK,GAETrM,EAAAA,IACD2B,EAAAA,aAAa,4BACbC,UACAC,EAAAA,QAAAA,EACAyE,YACArE,eAAgBmK,GACRA,GAERjK,wBCFI,EAAA,MAAMmK,CAMX,CAAA,YACmBC,EAGAC,EAGAC,GANAvT,KAAAqT,+BAAAA,EAGArT,KAAAsT,oCAAAA,EAGAtT,KAAAuT,WAAAA,CAChB,CAKH,QAAQpT,EAAAA,CACN,OAAOH,KAAKwT,mBAAAA,EACVrT,EACA+G,EAAMoB,cAActI,KAAKuT,YAE7B,CAKQ,qBACN,OAAOE,qBAAgD,CACrDzP,QAAS8C,QAAM+B,OAAO,aAAeH,EAAAA,UAAAA,EAAYI,WACjD4K,eAAgB5M,EAAAA,MAAM+B,OAAO,oBAAA,EAAsBC,WACnDgD,QAAS9L,KAAKqT,+BACdxO,WAAY7E,KAAKsT,qCAErB,CCvCK,CAAA,MAAMK,CAQX,CAAA,YAA6BxL,EAAAnI,CAAAA,KAAAmI,GAAAA,CAAa,CAK1C,yBACE,CAAA,OAAOrB,EAAAA,IAAAA,EACJ2B,aACC,GAAGzI,KAAK4T,cAAc,aAAkB5T,CAAAA,IAAAA,KAAK4T,cAAc,SAE5DjL,CAAAA,EAAAA,EAAAA,QAAAA,EACAC,UAAmB,CAClBoG,MAAOlI,EAAAA,IAAAA,EAAM+B,OAAO,GAAKH,EAAAA,UAAAA,EAAYI,WAAWC,eAAe9F,CAAAA,EAC/D4Q,WAAY/M,EAAAA,MAAM+B,OAAO,aAAA,EAAeC,aAEzCG,wBACL,CAAA,CAEQ,cAAc7F,EAAAA,CACb,OAAApD,KAAKmI,GAAG7E,OAAS,GAAGtD,KAAKmI,EAAM/E,IAAAA,CAAAA,GAAaA,CACrD,CCjCW,CAAA,MAAA0Q,GAEThN,EAAAA,MACD+B,OAAO,UAAA,EACPC,WACAC,eAAgBgL,GACRA,EACJ9Q,KACAsK,EAAAA,MAAM,KACNzG,EAAAA,IAAKkN,IAAa,CAAEhF,MAAOgF,MAE/B/K,wBCCI,EAAA,MAAMgL,EAWX,YACmBC,EAGAjC,EACA9J,EAAAA,CAJAnI,KAAAkU,sBAAAA,EAGAlU,KAAAiS,aAAAA,EACAjS,KAAAmI,GAAAA,CAChB,CAKH,0BAGE,OAAOrB,EAAAA,MACJ+B,OACC,IAAI1F,EAAcnD,KAAKiS,aAAcjS,KAAKmI,EAAAA,CAAAA,IAAOhF,EAAc,UAAWnD,KAAKmI,OAEhFO,UACAyD,EAAAA,SAAS,CACRC,MAAOtF,EAAAA,IAAM+B,EAAAA,OAAO7I,KAAKmD,cAAc,OAAA,CAAA,EAAUuF,YAAYI,SAC7D8H,EAAAA,YAAa9J,EAAAA,IAAM+B,EAAAA,OAAO7I,KAAKmD,cAAc,aAAa2F,SAC1D+H,EAAAA,SAAU7Q,KAAKkU,sBACf7R,IAAKyE,EAAAA,IACF+B,EAAAA,OAAO,GAAG7I,KAAKmD,cAAc,gBAC7B2F,CAAAA,cAAAA,EAAAA,SAAAA,EACAqL,YAAY,EACfC,EAAAA,mBAAoBpU,KAAKqU,iCACzBC,EAAAA,KAAMxN,EAAAA,IAAAA,EAAM+B,OAAO7I,KAAKmD,cAAc,SAAS2F,SAC/CyL,EAAAA,kBAAmBzN,EAAAA,IAChB+B,EAAAA,OAAO7I,KAAKmD,cAAc,sBAC1B2F,SACH0L,EAAAA,WAAY1N,EAAAA,IAAM+B,EAAAA,OAAO7I,KAAKmD,cAAc,YAAA,CAAA,EAAeoJ,WAC3DkI,SAAU3N,EAAAA,MAAM+B,OAAO7I,KAAKmD,cAAc,UAAaoJ,CAAAA,EAAAA,SAAAA,EACvDmI,UAAW5N,EAAAA,IAAAA,EAAM+B,OAAO7I,KAAKmD,cAAc,WAAcoJ,CAAAA,EAAAA,SAAAA,CAAAA,CAAAA,EAE1DtD,yBACL,CAOQ,mCAGC,OAAAnC,EAAAA,IACJ+B,EAAAA,OAAO7I,KAAKmD,cAAc,oBAAA,CAAA,EAC1BgJ,SAAS,CACRwI,cAAe3U,KAAK4U,4BACpBC,EAAAA,SAAU/N,EAAAA,IAAAA,EACP+B,OAAO7I,KAAKmD,cAAc,oBAC1B2F,SACHgM,EAAAA,QAAS9U,KAAK+U,sBACdC,EAAAA,UAAWlO,EAAAA,IAAAA,EACR+B,OAAO7I,KAAKmD,cAAc,0BAC1B2F,SACHmM,EAAAA,IAAKnO,EAAAA,IACF+B,EAAAA,OAAO7I,KAAKmD,cAAc,8BAC1B2F,SACHoM,EAAAA,MAAOpO,EAAAA,IACJ+B,EAAAA,OAAO7I,KAAKmD,cAAc,8BAAA,CAAA,EAC1B2F,SAET,CAAA,CAAA,CAAA,CAOQ,6BAGC,CAAA,OAAAhC,EAAAA,IACJ+B,EAAAA,OAAO7I,KAAKmD,cAAc,sBAAA,CAAA,EAC1BgJ,SAAS,CACR/F,KAAMU,EAAAA,IAAAA,EACH+B,OAAO7I,KAAKmD,cAAc,kBAC1BuF,UACAI,EAAAA,SAAAA,EACHqM,aAAcrO,EAAAA,MACX+B,OAAO7I,KAAKmD,cAAc,qBAC1BuF,CAAAA,EAAAA,UAAAA,EACAI,YAET,CAOQ,uBAGC,CAAA,OAAAhC,EAAAA,IACJ+B,EAAAA,OAAO7I,KAAKmD,cAAc,gBAAA,CAAA,EAC1BgJ,SAAS,CACRiJ,YAAatO,EAAAA,IAAAA,EACV+B,OAAO7I,KAAKmD,cAAc,gBAC1B2F,SACAqL,EAAAA,YAAY,IACfW,QAAShO,EAAAA,IACN+B,EAAAA,OAAO7I,KAAKmD,cAAc,SAAA,CAAA,EAC1B2F,WACAqL,YAAY,EAAA,EACfkB,KAAMvO,EAAAA,IAAAA,EACH+B,OAAO7I,KAAKmD,cAAc,MAC1B2F,CAAAA,EAAAA,SAAAA,EACAqL,YAAY,EACfmB,EAAAA,gBAAiBxO,EAAAA,IACd+B,EAAAA,OAAO7I,KAAKmD,cAAc,oBAC1B2F,SACAqL,EAAAA,YAAY,IACfoB,SAAUzO,EAAAA,MACP+B,OAAO7I,KAAKmD,cAAc,UAAA,CAAA,EAC1B2F,WACAqL,YAAY,EAAA,EACfqB,QAAS1O,EAAAA,IAAAA,EACN+B,OAAO7I,KAAKmD,cAAc,SAC1B2F,CAAAA,EAAAA,SAAAA,EACAqL,YAAY,EAErB,CAAA,CAAA,CAAA,CAEQ,cAAc/Q,EAAAA,CACb,OAAApD,KAAKmI,GAAG7E,OAAS,GAAGtD,KAAKmI,MAAM/E,CAAaA,GAAAA,CACrD,ECnJK,MAAMqS,EAAAA,CASX,YACU1F,EAAAA,CAAA/P,KAAA+P,kBAAAA,CACP,CAKH,0BAGE,OAAOjJ,EAAAA,MACJ+B,OAAO,8BAAA,EACPH,UACAyD,EAAAA,SAAS,CACRC,MAAOtF,EAAAA,MAAM+B,OAAO,OAAA,EAASC,WAAWqL,YAAY,EAAA,EACpDvD,YAAa9J,EAAAA,MAAM+B,OAAO,UAAA,EAAYC,WACtC+H,SAAU7Q,KAAK+P,kBACf1N,IAAKyE,EAAAA,IAAM+B,EAAAA,OAAO,kBAAkBC,SAAWqL,EAAAA,YAAY,IAC3DG,KAAMxN,EAAAA,MAAM+B,OAAO,MAAA,EAAQC,SAC3ByL,EAAAA,kBAAmBzN,EAAAA,IAAM+B,EAAAA,OAAO,qBAAqBC,SAEtDG,CAAAA,CAAAA,EAAAA,wBAAAA,CACL,ECpCW,MAAAyM,EAAkD,IAAM,CAAA,ECHxDC,GAAkB,6BCAlBC,EAAoB,+BCK1B,MAAMC,CAAAA,CAUX,YACmBC,EACA9N,EACAhE,EAAAA,CAFAhE,KAAA8V,4BAAAA,EACA9V,KAAAgI,kBAAAA,EACAhI,KAAAgE,QAAAA,CAChB,CAKH,UAAUC,GACR,MAAM8R,EAAS/V,KAAK8V,4BAA4BE,UAAU/R,GAqBnD,OAlBP8R,EAAOvM,QAAUxJ,KAAKiW,SAAW,eAAiB,iBAC9CjW,KAAKkW,OACAH,GAAAA,EAAAI,EAAI7K,OAAOrH,EAAOmS,CAClBL,EAAAA,EAAAM,EAAI/K,OAAOrH,EAAOqS,GACrB,MAAOP,GAAAA,OACFA,EAAOK,EAEZ,MAAOL,GACFA,OAAAA,EAAOO,IAGTP,EAAAK,EAAI9K,OAAOrH,EAAOmS,CAAAA,EAClBL,EAAAO,EAAIhL,OAAOrH,EAAOqS,CAAAA,GAAAA,OAEpBP,EAAOQ,YACdR,EAAOS,aAAevS,EAAOsS,YAAY/L,KAAK,GACvCuL,EAAAA,OAAAA,EAAOU,WACdV,EAAOW,YAAczS,EAAOwS,WACrBV,CACT,CAMQ,SACN,OAAO/V,KAAKgI,kBAAkBK,GAAGrI,KAAKgE,QAAS,KAAM,MACvD,CAMQ,SACN,OACEhE,KAAKgI,kBAAkBK,GAAGrI,KAAKgE,QAAS,KAAM,MAC9ChE,KAAKgI,kBAAkBK,GAAGrI,KAAKgE,QAAS,IAAK,KAEjD,CAAA,CAAA,CCzDK,MAAM2S,CASX,CAAA,YACmB3O,EACAhE,EAAAA,CADAhE,KAAAgI,kBAAAA,EACAhI,KAAAgE,QAAAA,CAChB,CAKH,UAAUC,EACR,CAAA,MAAMC,EAA4C,CAAA,EAmC3C,OAjCP6G,OAAOC,KAAK/G,CAAQ2H,EAAAA,QAAS/I,IAC3B,OAAQA,EAAAA,CACN,IAAK,SACHqB,EAAcjC,OAASjC,KAAK4W,eAAe3S,EAAOpB,CAAAA,CAAAA,EAClDqB,EAAclD,OAAShB,KAAK6W,eAAe5S,EAAOpB,CAAAA,CAAAA,EAClD,MACF,IAAK,SACHqB,EAAc4S,KAAO9W,KAAK+W,aAAa9S,EAAOpB,IAC9C,MACF,IAAK,cACHqB,EAAc8S,YAAc/S,EAAOpB,CAAAA,EAAO,OAAS,QACnD,MACF,IAAK,MACHqB,EAAclE,KAAKiX,gBAAAA,CAAAA,EAAqBhT,EAAOpB,CAC/C,EAAA,MACF,IAAK,mBACWqB,EAAY,WAAIlE,KAAKkX,yBACjCjT,EAAOpB,CAAAA,CAAAA,EAET,MACF,IAAK,UACWqB,EAAAiT,QAAUlT,EAAOpB,GAC/B,MACF,QACgBqB,EAAArB,CAAAA,EAAOoB,EAAOpB,CAEhC,CAAA,CAAA,CAAA,EAGFqB,EAAclE,KAAKgM,oBAAAA,CAAAA,EAAyBhM,KAAKgE,QACjDE,EAAc4H,QAAU,MACV5H,EAAAsF,QAAUxJ,KAAK+L,iBAEtB7H,CACT,CAQQ,aAAakT,EAAAA,CACZ,MAAA,CAACA,EAAOxK,KAAMwK,EAAOvK,KAAMuK,EAAOtK,KAAMsK,EAAOrK,IAAMvC,EAAAA,KAAK,GACnE,CAAA,CAQQ,eAAevI,EAAAA,CACd,OAAAA,EAAO6E,IAAI,EAAGhG,MAAYA,CAAAA,IAAAA,CAAAA,EAAO0J,KAAK,GAAA,CAC/C,CAQQ,eAAevI,GACd,OAAAA,EAAO6E,IAAI,CAAGuQ,CAAAA,MAAAA,CAAAA,IAAYA,GAAS,EAAA,EAAI7M,KAAK,GACrD,CAAA,CAMQ,UACN,CAAA,OAAOxK,KAAKgI,kBAAkBK,GAAGrI,KAAKgE,QAAS,IAAK,KACtD,CAAA,CAMQ,UACN,CAAA,OAAOhE,KAAKgI,kBAAkBK,GAAGrI,KAAKgE,QAAS,KAAM,KACvD,CAAA,CAMQ,QACN,CAAA,OACEhE,KAAKgI,kBAAkBK,GAAGrI,KAAKgE,QAAS,KAAM,QAC9ChE,KAAKgI,kBAAkBK,GAAGrI,KAAKgE,QAAS,IAAK,KAEjD,CAAA,CAMQ,qBAAAgI,CACC,OAAAhM,KAAKsX,SAAAA,EAAa,SAAW,SACtC,CAMQ,gBACC,CAAA,OAAAtX,KAAKsX,SAAAA,EAAa,MAAQ,QACnC,CAMQ,iBACC,CAAA,OAAAtX,KAAKuX,SAAa,EAAA,MAAQ,KACnC,CAQQ,yBACNC,EAAAA,CAEI,GAAAxX,KAAKyX,OAAAA,EACP,OAAQD,EACN,CAAA,IAAK,MACI,MAAA,6BACT,IAAK,UACI,MAAA,iCACT,IAAK,QACI,MAAA,+BACT,QACS,OAAAA,EAGb,OAAIxX,KAAKsX,YAAcE,IAAoB,MAClC,UAEFA,CACT,CAAA,CCvKK,MAAME,EAAAA,CASX,YACmBC,EACA3P,GADAhI,KAAA2X,aAAAA,EACA3X,KAAAgI,kBAAAA,CAChB,CAKH,QAAQtC,EAAAA,CACA,MAAA2D,EAAUrJ,KAAK0K,KAAKhF,CAC1B,EAAA,GAAA,CAAK2D,EACH,MAAM,IAAIiB,WAAW,+BAA+B5E,CAAAA,GAAAA,EAE/C,OAAA2D,CACT,CAKA,KAAK3D,EAAAA,CACI,OAAA1F,KAAK4X,0BAA0BlN,KACpC,CAAA,CAAG1G,aAAcA,IAAY0B,CAAAA,CAEjC,CAKA,eAAeA,EACN,CAAA,OAAA1F,KAAK4X,wBAA0BlN,EAAAA,KAAMrB,GAC1CA,EAAQwO,aAAanS,GAEzB,CAKA,UAAUA,EAAAA,CACD,OAAA1F,KAAK8X,+BAAAA,EAAiCpN,KAAMrB,GACjDrJ,KAAKgI,kBAAkBK,GAAGgB,EAAQrF,QAAS,IAAK0B,GAEpD,CAKA,aACS,OAAA1F,KAAK8X,iCAAiC,CAC/C,CAAA,CAMQ,yBAAAF,CACF,GAAA5X,KAAK2X,aAAarU,OACpB,OAAOtD,KAAK2X,aAER,MAAA,IAAIrN,WAAW,oCAAA,CACvB,CAMQ,gCAAAwN,CACN,OAAO9X,KAAK4X,wBAAAA,EACTG,QACAC,KAAK,CAACC,EAAUC,IACflY,KAAKgI,kBAAkBmQ,QAAQD,EAASlU,QAASiU,EAASjU,SAEhE,CChFK,CAAA,MAAMoU,EAUX,YACmBpQ,EACAqQ,EACAC,EAAAA,CAFAtY,KAAAgI,kBAAAA,EACAhI,KAAAqY,WAAAA,EACArY,KAAAsY,WAAAA,CAChB,CAKH,aAAa5S,EACX,CAAA,OACE1F,KAAKgI,kBAAkBK,GAAG3C,EAAY,KAAM1F,KAAKqY,UACjDrY,GAAAA,KAAKgI,kBAAkBK,GAAG3C,EAAY,IAAK1F,KAAKsY,UAAAA,CAEpD,CCzBK,CAAA,MAAMC,GAMX,eAAe7T,GACb,MAAMV,EAAWkD,EAAMU,OAAO,sBAAuBlD,CAAgBzB,EAAAA,KAAAA,EACrE,IAAK,4BAA4B1C,KAAKyD,GAC9B,MAAA,IAAIpD,UAAU,yCAEf,EAAA,OAAAoD,CACT,CAAA,CCAK,MAAMwU,CAWX,CAAA,YACWxU,EACQyU,EACAC,EACA5C,EACA6C,EACAC,EALR5Y,CAAAA,KAAAgE,QAAAA,EACQhE,KAAAyY,qCAAAA,EACAzY,KAAA0Y,kCAAAA,EACA1Y,KAAA8V,4BAAAA,EACA9V,KAAA2Y,oCAAAA,EACA3Y,KAAA4Y,4BAAAA,CAChB,CAKH,gCACEzY,GAEO,OAAAH,KAAK0Y,kCAAkCG,QAAQ1Y,CAAAA,CACxD,CAKA,mCACE8D,GAEO,OAAAjE,KAAKyY,qCAAqCzC,UAAU/R,EAC7D,CAKA,0BAA0BA,EACjB,CAAA,OAAAjE,KAAK8V,4BAA4BE,UAAU/R,CACpD,CAAA,CAKA,kCACEA,EAAAA,CAEO,OAAAjE,KAAK2Y,oCAAoC3C,UAAU/R,CAC5D,CAAA,CAKA,aAAayB,GACJ,OAAA1F,KAAK4Y,4BAA4Bf,aAAanS,CAAAA,CACvD,ECrEK,MAAMoT,EAAAA,CAIX,QAAQC,EAAYC,EACZ,CAAA,KAAA,CAACC,EAAQC,EAAS,IAAKC,EAAS,GAAOJ,EAAAA,EAAGxL,MAAM,GAAA,EAAA,CAC/C6L,EAAQC,EAAS,IAAKC,EAAS,GAAON,EAAAA,EAAGzL,MAAM,GAChDgM,EAAAA,EAAcvZ,KAAKwZ,iBAAiBP,EAAQG,CAClD,EAAA,GAAIG,IAAgB,EACX,OAAAA,EAET,MAAME,EAAczZ,KAAKwZ,iBAAiBN,EAAQG,CAClD,EAAA,OAAII,IAAgB,EACXA,EAEFzZ,KAAKwZ,iBAAiBL,EAAQG,EACvC,CAKA,GAAGP,EAAYW,EAA8BV,GAC3C,MAAMjD,EAAS/V,KAAKmY,QAAQY,EAAIC,CAChC,EAAA,OAAQU,GACN,IAAK,IACH,OAAO3D,IAAW,EACpB,IAAK,KACH,OAAOA,IAAW,EACpB,IAAK,IACH,OAAOA,EAAS,EAClB,IAAK,IACH,OAAOA,EAAS,EAClB,IAAK,KACH,OAAOA,GAAU,EACnB,IAAK,KACH,OAAOA,GAAU,CAAA,CAEvB,CASQ,iBAAiB4D,EAAoBC,EAAAA,CACvC,GAAAD,IAAe,KAAOC,IAAe,IAChC,MAAA,GAEH,MAAAC,EAAgBC,SAASH,EAAY,IACrCI,EAAgBD,SAASF,EAAY,EAC3C,EAAA,OAAOC,EAAgBE,EACnB,EACAF,EAAgBE,EAAAA,GAEd,CACR,CAAA,CC3DK,MAAMC,EAOX,CAAA,YACmBC,EACAC,GADAla,KAAAia,UAAAA,EACAja,KAAAka,oBAAAA,CAChB,CAKH,MAAMC,EACJ,CAAA,MAAMzV,EAAM1E,KAAKia,UAAUG,gBAAgBD,EAAK,UAAA,EAEzC,OADFna,KAAAka,oBAAoBG,MAAM3V,CAAAA,EACxBA,CACT,CCjBK,CAAA,MAAM4V,GAA+C,CAC1D,SAASC,EACGA,CAAAA,EAAAC,UACR,uCACA9O,EACA,CAAC,oBAAqB+O,WAAS,OAAA,CAAA,EAC/B,CAAErU,KAAM,OAAA,CAAA,CAEZ,CCDWkU,EAAAA,GAA+C,CAC1D,SAASC,GAGP,MAAMnU,EAAO,QAIPsU,EAAYD,WAAS,EAAA,EAGjBF,EAAAC,UACR,4BACA1K,EACA,CACE,CAAEhE,QAAS,8BAA+B1F,KAAAA,CAAAA,EAC1C,CAAE0F,QAAS,+BAAgC1F,KAC3C,CAAA,EAAA,CAAE0F,QAAS,sCAAuC1F,KAAAA,CAAAA,EAClD,CAAE0F,QAAS,4CAA6C1F,KACxD,CAAA,EAAA,CAAE0F,QAAS,yCAA0C1F,KAAAA,CAAAA,EACrD,CAAE0F,QAAS,uCAAwC1F,QACnD,CAAE0F,QAAS,uCAAwC1F,KAAAA,CAAAA,EACnD,CAAE0F,QAAS,wCAAyC1F,QACpD,CAAE0F,QAAS,oCAAqC1F,KAChD,CAAA,EAAA,CAAE0F,QAAS,2CAA4C1F,KAAAA,CAAAA,EACvD,CAAE0F,QAAS,kCAAmC1F,QAC9CsU,CAEF,EAAA,CAAEtU,SAIMmU,EAAAC,UACR,+BACAtN,EACA,CAACuN,EAAAA,SAAS,QACV,CAAErU,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAI,iBACR,4CACAxL,EACA,CAAE/I,SAIMmU,EAAAC,UACR,yCACA9N,EACA,CAAC+N,EAAAA,SAAS,KAAA,EAAQC,CAClB,EAAA,CAAEtU,SAIMmU,EAAAI,iBACR,oCACAnN,GACA,CAAEpH,SAIMmU,EAAAC,UACR,kCACAjJ,EACA,CACE,CAAEzF,QAAS,4CAA6C1F,KACxDsU,CAAAA,EAAAA,CAAAA,EAEF,CAAEtU,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAI,iBACR,4CACA/I,GACA,CAAExL,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAI,iBACR,sCACAjF,EACA,CAAEtP,KAAAA,CAAAA,CAAAA,EAEMmU,EAAAI,iBACR,uCACAjF,EACA,CAAEtP,SAEMmU,EAAAI,iBACR,uCACAjF,EACA,CAAEtP,KAEMmU,CAAAA,CAAAA,EAAAA,EAAAI,iBACR,wCACAjF,EACA,CAAEtP,KAEMmU,CAAAA,CAAAA,EAAAA,EAAAI,iBACR,2CACAjF,EACA,CAAEtP,KAAAA,CAAAA,CAAAA,CAEN,GC5GWkU,GAA+C,CAE1D,SAASC,EAAAA,CAGP,MAAMnU,EAAO,QAGPmN,EAAakH,WAAS,CAAA,CAAA,EAGlBF,EAAAI,iBACR,8BACA7G,GACA,CAAE1N,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,oCACApH,EACA,CACE,CACEtH,QAAS,yDACT1F,QAEF,CACE0F,QAAS,4DACT1F,KAAAA,CAAAA,EAEFmN,GAEF,CAAEnN,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,yDACA/E,GACA,CAAC,CAAE3J,QAAS,8BAA+B1F,SAC3C,CAAEA,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,4DACA5H,GACA,CAAC,CAAE9G,QAAS,4BAA6B1F,SACzC,CAAEA,KAAAA,CAAAA,CAAAA,EAGJmU,EAAUK,WAAWC,EAAAA,CACvB,GCxDWP,GAA+C,CAC1D,SAASC,GACGA,EAAAC,UACR,8BACA7D,EACA,CAAC,oBAAqB8D,WAAS,OAC/B,CAAA,EAAA,CAAErU,KAAM,OAEZ,CAAA,CAAA,CAAA,ECRWkU,GAA+C,CAC1D,SAASC,EACGA,CAAAA,EAAAC,UACR,sCACA3E,EACA,CACE,CAAE/J,QAAS,8BAA+B1F,KAAM,OAAA,EAChD,oBACAqU,EAAAA,SAAS,OAEX,CAAA,EAAA,CAAErU,KAAM,OAEZ,CAAA,CAAA,CAAA,ECZWkU,GAA+C,CAC1D,SAASC,EACD,CAAA,MAAAlC,EAAaoC,WAAS,KACtBnC,EAAAA,EAAamC,WAAS,KAAA,EAClBF,EAAAC,UACR,8BACApC,EACA,CAAC,oBAAqBC,EAAYC,CAAAA,EAClC,CAAElS,KAAM,OAAA,CAAA,CAEZ,GCLW0U,GAAiD,CAC5D,SAASP,GACP,MAAMnU,EAAO,QAEHmU,EAAAC,UACR,oBACAhC,EACA,CACEiC,EAAAA,SAAS,SACT,CAAE3O,QAAS,uCAAwC1F,KACnD,CAAA,EAAA,CAAE0F,QAAS,oCAAqC1F,KAAAA,CAAAA,EAChD,CAAE0F,QAAS,8BAA+B1F,KAC1C,CAAA,EAAA,CAAE0F,QAAS,sCAAuC1F,KAAAA,CAAAA,EAClD,CAAE0F,QAAS,8BAA+B1F,KAE5C,CAAA,CAAA,EAAA,CAAEA,SAIJmU,EAAUK,WAAWG,IAGrBR,EAAUK,WAAWI,IAGrBT,EAAUK,WAAWK,IAGrBV,EAAUK,WAAWM,IAGrBX,EAAUK,WAAWO,GACvB,CC3BWC,EAAAA,GAA+C,CAC1D,SAASb,EAGP,CAAA,MAAMnU,EAAO,QAIPsU,EAAYD,WAAS,EAAA,EAGjBF,EAAAC,UACR,4BACA1K,EACA,CACE,CAAEhE,QAAS,8BAA+B1F,QAC1C,CAAE0F,QAAS,+BAAgC1F,KAC3C,CAAA,EAAA,CAAE0F,QAAS,sCAAuC1F,QAClD,CAAE0F,QAAS,4CAA6C1F,KACxD,CAAA,EAAA,CAAE0F,QAAS,yCAA0C1F,KAAAA,CAAAA,EACrD,CAAE0F,QAAS,uCAAwC1F,KACnD,CAAA,EAAA,CAAE0F,QAAS,uCAAwC1F,KAAAA,CAAAA,EACnD,CAAE0F,QAAS,wCAAyC1F,KACpD,CAAA,EAAA,CAAE0F,QAAS,oCAAqC1F,KAAAA,CAAAA,EAChD,CAAE0F,QAAS,2CAA4C1F,QACvD,CAAE0F,QAAS,kCAAmC1F,KAAAA,CAAAA,EAC9CsU,GAEF,CAAEtU,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,+BACAtN,EACA,CAACuN,EAAAA,SAAS,KAAA,CAAA,EACV,CAAErU,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAC,UACR,sCACA/M,GACA,GACA,CAAErH,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAI,iBACR,4CACAxL,EACA,CAAE/I,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,yCACA9N,EACA,CAAC+N,EAAAA,SAAS,KAAA,EAAQC,GAClB,CAAEtU,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,uCACAtO,EACA,CAACwO,CAAAA,EACD,CAAEtU,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,uCACA/K,EACA,CAACiL,CAAAA,EACD,CAAEtU,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAC,UACR,wCACApJ,EACA,CAACsJ,CAAAA,EACD,CAAEtU,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAC,UACR,oCACAlJ,EACA,CAACmJ,EAAAA,SAAS,SAAYC,EAAAA,CAAAA,EACtB,CAAEtU,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAC,UACR,2CACAlJ,EACA,CAACmJ,EAAAA,SAAS,gBAAmBC,EAAAA,CAAAA,EAC7B,CAAEtU,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAC,UACR,kCACAjJ,EACA,CACE,CAAEzF,QAAS,4CAA6C1F,KAAAA,CAAAA,EACxDsU,GAEF,CAAEtU,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,4CACA3I,EACA,CAAC6I,GACD,CAAEtU,KAAAA,CAAAA,CAAAA,CAEN,GC5HWgV,GAA+C,CAC1D,SAASb,EAAAA,CAGP,MAAMnU,EAAO,QAIPsU,EAAYD,WAAS,IAGrBlH,EAAakH,EAAAA,SAAS,CAAEY,MAAOzF,CAG/B3D,CAAAA,EAAAA,EAAewI,WAAS,qBAAA,EAGpBF,EAAAC,UACR,8BACA7G,EACA,CAAC+G,CAAAA,EACD,CAAEtU,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,oCACApH,EACA,CACE,CACEtH,QAAS,yDACT1F,KAAAA,CAAAA,EAEF,CACE0F,QAAS,4DACT1F,KAEFmN,CAAAA,EAAAA,CAAAA,EAEF,CAAEnN,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAC,UACR,yDACAvG,EACA,CACE,CAAEnI,QAAS,8BAA+B1F,KAAAA,CAAAA,EAC1C6L,EACAyI,CAEF,EAAA,CAAEtU,SAIMmU,EAAAC,UACR,4DACA1I,EACA,CACE,CAAEhG,QAAS,4BAA6B1F,KACxC,CAAA,EAAA,CAAE0F,QAAS,sCAAuC1F,KAAAA,CAAAA,EAClD6L,EACAyI,CAAAA,EAEF,CAAEtU,KAIJmU,CAAAA,CAAAA,EAAAA,EAAUK,WAAWC,EAGXN,EAAAA,EAAAI,iBACR,sCACA1H,GACA,CAAE7M,KAAAA,CAAAA,CAAAA,CAEN,GClFWgV,GAA+C,CAC1D,SAASb,EAAAA,CACGA,EAAAC,UACR,uCACA9O,EACA,CAAC,oBAAqB+O,WAAS,OAAA,CAAA,EAC/B,CAAErU,KAAM,OAAA,CAAA,CAEZ,GCRWgV,GAA+C,CAC1D,SAASb,GACGA,EAAAC,UACR,8BACA7D,EACA,CAAC,oBAAqB8D,WAAS,OAC/B,CAAA,EAAA,CAAErU,KAAM,OAEZ,CAAA,CAAA,CAAA,ECRWgV,GAA+C,CAC1D,SAASb,EACD,CAAA,MAAAlC,EAAaoC,WAAS,KACtBnC,EAAAA,EAAamC,WAAS,KAAA,EAClBF,EAAAC,UACR,8BACApC,EACA,CAAC,oBAAqBC,EAAYC,CAAAA,EAClC,CAAElS,KAAM,OAAA,CAAA,CAEZ,GCVWgV,GAA+C,CAC1D,SAASb,GACGA,EAAAC,UACR,sCACA3E,EACA,CACE,CAAE/J,QAAS,8BAA+B1F,KAAM,OAAA,EAChD,oBACAqU,EAAAA,SAAS,UAEX,CAAErU,KAAM,SAEZ,CCPWkV,EAAAA,GAAiD,CAC5D,SAASf,EACP,CAAA,MAAMnU,EAAO,QAEHmU,EAAAC,UACR,oBACAhC,EACA,CACEiC,EAAAA,SAAS,SACT,CAAE3O,QAAS,uCAAwC1F,KACnD,CAAA,EAAA,CAAE0F,QAAS,oCAAqC1F,KAAAA,CAAAA,EAChD,CAAE0F,QAAS,8BAA+B1F,KAC1C,CAAA,EAAA,CAAE0F,QAAS,sCAAuC1F,KAAAA,CAAAA,EAClD,CAAE0F,QAAS,8BAA+B1F,KAE5C,CAAA,CAAA,EAAA,CAAEA,SAIJmU,EAAUK,WAAWG,IAGrBR,EAAUK,WAAWI,IAGrBT,EAAUK,WAAWK,EAGrBV,EAAAA,EAAUK,WAAWM,EAGrBX,EAAAA,EAAUK,WAAWO,EACvB,CAAA,CAAA,EC3BWI,GAA+C,CAC1D,SAAShB,EAAAA,CAGP,MAAMnU,EAAO,QAIPsU,EAAYD,WAAS,OAGjBF,EAAAC,UACR,4BACA1K,EACA,CACE,CAAEhE,QAAS,8BAA+B1F,KAC1C,CAAA,EAAA,CAAE0F,QAAS,+BAAgC1F,KAAAA,CAAAA,EAC3C,CAAE0F,QAAS,sCAAuC1F,KAClD,CAAA,EAAA,CAAE0F,QAAS,4CAA6C1F,KAAAA,CAAAA,EACxD,CAAE0F,QAAS,yCAA0C1F,KACrD,CAAA,EAAA,CAAE0F,QAAS,uCAAwC1F,KAAAA,CAAAA,EACnD,CAAE0F,QAAS,uCAAwC1F,QACnD,CAAE0F,QAAS,wCAAyC1F,KACpD,CAAA,EAAA,CAAE0F,QAAS,oCAAqC1F,KAAAA,CAAAA,EAChD,CAAE0F,QAAS,2CAA4C1F,QACvD,CAAE0F,QAAS,kCAAmC1F,KAAAA,CAAAA,EAC9CsU,GAEF,CAAEtU,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,+BACAtN,EACA,CAACuN,EAAAA,SAAS,SAAA,CAAA,EACV,CAAErU,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAI,iBACR,sCACA1L,GACA,CAAE7I,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAI,iBACR,4CACAnL,GACA,CAAEpJ,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,yCACA9N,EACA,CAAC+N,EAAAA,SAAS,KAAA,EAAQC,GAClB,CAAEtU,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,uCACAtO,EACA,CAACwO,CAAAA,EACD,CAAEtU,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,uCACA/K,EACA,CAACiL,CAAAA,EACD,CAAEtU,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAC,UACR,wCACApJ,EACA,CAACsJ,CAAAA,EACD,CAAEtU,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAC,UACR,oCACAlJ,EACA,CAACmJ,EAAAA,SAAS,SAAYC,EAAAA,CAAAA,EACtB,CAAEtU,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAC,UACR,2CACAlJ,EACA,CAACmJ,EAAAA,SAAS,gBAAmBC,EAAAA,CAAAA,EAC7B,CAAEtU,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAC,UACR,kCACAjJ,EACA,CACE,CAAEzF,QAAS,4CAA6C1F,KAAAA,CAAAA,EACxDsU,GAEF,CAAEtU,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,4CACA3I,EACA,CAAC6I,GACD,CAAEtU,KAAAA,CAAAA,CAAAA,CAEN,GC1HWmV,GAA+C,CAC1D,SAAShB,EAAAA,CAGP,MAAMnU,EAAO,QAIPsU,EAAYD,WAAS,KAGrBlH,EAAAA,EAAakH,EAAAA,SAAS,CAC1BY,MAAOzF,EACP4F,IAAK7F,EAID1D,CAAAA,EAAAA,EAAewI,WAAS,kBAAA,EAGpBF,EAAAC,UACR,8BACA7G,EACA,CAAC+G,GACD,CAAEtU,KAAAA,CAAAA,CAAAA,EAIMmU,EAAAC,UACR,oCACApH,EACA,CACE,CACEtH,QAAS,yDACT1F,QAEF,CACE0F,QAAS,4DACT1F,KAEFmN,CAAAA,EAAAA,CAAAA,EAEF,CAAEnN,KAIMmU,CAAAA,CAAAA,EAAAA,EAAAC,UACR,yDACAvG,EACA,CACE,CAAEnI,QAAS,8BAA+B1F,KAAAA,CAAAA,EAC1C6L,EACAyI,CAEF,EAAA,CAAEtU,SAIMmU,EAAAC,UACR,4DACA1I,EACA,CACE,CAAEhG,QAAS,4BAA6B1F,QACxC,CAAE0F,QAAS,sCAAuC1F,KAAAA,CAAAA,EAClD6L,EACAyI,CAEF,EAAA,CAAEtU,SAIJmU,EAAUK,WAAWC,IAGXN,EAAAI,iBACR,sCACAxH,GACA,CAAE/M,KAEN,CAAA,CAAA,CAAA,CAAA,ECtFWmV,GAA+C,CAC1D,SAAShB,EACGA,CAAAA,EAAAC,UACR,uCACA9O,EACA,CAAC,oBAAqB+O,WAAS,OAAA,CAAA,EAC/B,CAAErU,KAAM,OAAA,CAAA,CAEZ,CCRWmV,EAAAA,GAA+C,CAC1D,SAAShB,GACGA,EAAAC,UACR,8BACA7D,EACA,CAAC,oBAAqB8D,WAAS,OAC/B,CAAA,EAAA,CAAErU,KAAM,OAEZ,CAAA,CAAA,CAAA,ECRWmV,GAA+C,CAC1D,SAAShB,EAAAA,CACD,MAAAlC,EAAaoC,WAAS,KACtBnC,EAAAA,EAAamC,WAAS,KAAA,EAClBF,EAAAC,UACR,8BACApC,EACA,CAAC,oBAAqBC,EAAYC,CAAAA,EAClC,CAAElS,KAAM,OAAA,CAAA,CAEZ,GCVWmV,GAA+C,CAC1D,SAAShB,EAAAA,CACGA,EAAAC,UACR,sCACA3E,EACA,CACE,CAAE/J,QAAS,8BAA+B1F,KAAM,OAChD,EAAA,oBACAqU,EAAAA,SAAS,OAAA,CAAA,EAEX,CAAErU,KAAM,OAAA,CAAA,CAEZ,CCPWqV,EAAAA,GAAiD,CAC5D,SAASlB,GACP,MAAMnU,EAAO,QAEHmU,EAAAC,UACR,oBACAhC,EACA,CACEiC,EAAAA,SAAS,SACT,CAAE3O,QAAS,uCAAwC1F,KACnD,CAAA,EAAA,CAAE0F,QAAS,oCAAqC1F,QAChD,CAAE0F,QAAS,8BAA+B1F,KAC1C,CAAA,EAAA,CAAE0F,QAAS,sCAAuC1F,KAAAA,CAAAA,EAClD,CAAE0F,QAAS,8BAA+B1F,KAE5C,CAAA,CAAA,EAAA,CAAEA,SAIJmU,EAAUK,WAAWG,IAGrBR,EAAUK,WAAWI,EAGrBT,EAAAA,EAAUK,WAAWK,EAGrBV,EAAAA,EAAUK,WAAWM,EAGrBX,EAAAA,EAAUK,WAAWO,EACvB,CAAA,CAAA,ECrCWG,GAAiD,CAC5D,SAASf,EAAAA,CACGA,EAAAC,UACR,2BACA1S,EACA,CACE,8BACA,oBACA2S,EAAAA,SAAS,SACTA,EAAAA,SAAS,SACTA,EAAAA,SAAS,KAEX,CAAErU,KAAM,OAEZ,CAAA,CAAA,CAAA,ECdWqV,GAAiD,CAC5D,SAASlB,EACGA,CAAAA,EAAAC,UACR,2BACA1S,EACA,CACE,8BACA,oBACA2S,EAAAA,SAAS,SACTA,EAAAA,SAAS,SACTA,EAAAA,SAAS,KAEX,CAAA,EAAA,CAAErU,KAAM,OAEZ,CAAA,CAAA,CAAA,ECfW0U,GAAiD,CAC5D,SAASP,EACGA,CAAAA,EAAAC,UACR,2BACA9S,GACA,CACA,EAAA,CAAEtB,KAAM,OAEZ,CAAA,CAAA,CAAA,ECQWsV,EAAmB,IAAIC,EAAAA,UAGpCD,EAAiBlB,UAAU,YAAaoB,EAAWA,UAAA,CAEnDF,CAAAA,EAAAA,EAAiBlB,UAAU,mBAAoBhV,EAAsB,CACnE,4BACA,wBACA,eACA,sBACA,gBAGFkW,EAAiBlB,UACf,wBACA5P,GACA,CAAA,CAAA,EAGF8Q,EAAiBlB,UAAU,oBAAqB1B,GAAuB,CAAA,CAAA,EAEvE4C,EAAiBG,oBACf,oBACA,uBAGFH,EAAiBlB,UACf,4BACA9C,GACA,CAAC,sBAAuB,mBAG1BgE,CAAAA,EAAAA,EAAiBlB,UACf,8BACAjC,GACA,IAGFmD,EAAiBG,oBACf,2BACA,4BAAA,EAGFH,EAAiBlB,UAAU,gBAAiBsB,EAAeA,cAAA,CAAA,CAAA,EAE3DJ,EAAiBlB,UAAU,sBAAuBjU,GAAyB,CACzE,6BACA,eAGFmV,CAAAA,EAAAA,EAAiBlB,UAAU,gBAAiBtR,GAAmB,CAC7D,eACA,8BACA,mBACA,4BACA,sBACA,oBACA,uBAAA,CAAA,EAGFwS,EAAiBd,WAAWmB,EAAAA,EAC5BL,EAAiBd,WAAWoB,EAAAA,EAC5BN,EAAiBd,WAAWqB,IAC5BP,EAAiBd,WAAWsB,IAC5BR,EAAiBd,WAAWuB,IAC5BT,EAAiBd,WAAWwB,EAE5BV,EAAAA,EAAiBlB,UAAU,eAAgBR,GAAkB,CAC3D,YACA,qBAAA,CAAA,EAGF0B,EAAiBlB,UAAU,cAAe6B,YAAa,CAAA,CAAA,EAEvDX,EAAiBlB,UAAU,sBAAuB3a,EAAyB,CACzE,cACA,mjCCxFK,SACL+D,EACA8B,EACAnD,EAAmC,CAAA,EAAA,CAEnC,OAAOmZ,EACJ/V,QAAQ,oBACRE,OAAOjC,EAAQ8B,EAAYnD,CAChC,CAAA,2SCRA+Z,eACE1Y,EACArB,EAAgC,GAE1B,CACN,OAAaga,MADMb,EAAiB/V,QAAQ,iBACpB6W,UAAU5Y,EAAQrB,EAC5C"}