diff --git a/.github/workflows/alpine/Dockerfile.ci b/.github/workflows/alpine/Dockerfile.ci index 1d77900b772b..1ea835b068e3 100644 --- a/.github/workflows/alpine/Dockerfile.ci +++ b/.github/workflows/alpine/Dockerfile.ci @@ -44,7 +44,6 @@ RUN apk add \ muparser-dev \ netcdf-dev \ odbc-cpp-wrapper-dev \ - ogdi-dev \ openexr-dev \ openjpeg-dev \ openssl-dev \ diff --git a/.github/workflows/alpine_32bit/Dockerfile.ci b/.github/workflows/alpine_32bit/Dockerfile.ci index b16711eedee8..d4bf5d4a85c3 100644 --- a/.github/workflows/alpine_32bit/Dockerfile.ci +++ b/.github/workflows/alpine_32bit/Dockerfile.ci @@ -45,7 +45,6 @@ RUN apk add \ mariadb-connector-c-dev \ netcdf-dev \ odbc-cpp-wrapper-dev \ - ogdi-dev \ openexr-dev \ openjpeg-dev \ openssl-dev \ diff --git a/.github/workflows/alpine_32bit/test.sh b/.github/workflows/alpine_32bit/test.sh index 65f5b11fb26d..c0f21c260137 100755 --- a/.github/workflows/alpine_32bit/test.sh +++ b/.github/workflows/alpine_32bit/test.sh @@ -11,9 +11,6 @@ make quicktest PYTEST_SKIP= PYTEST_XFAIL="gcore/tiff_ovr.py gdrivers/gribmultidim.py gdrivers/mbtiles.py gdrivers/vrtwarp.py gdrivers/wcs.py utilities/test_gdalwarp.py pyscripts/test_gdal_pansharpen.py" -# Fails with ERROR 1: OGDI DataSource Open Failed: Could not find the dynamic library "vrf" -PYTEST_SKIP="ogr/ogr_ogdi.py $PYTEST_SKIP" - # Stalls on it. Probably not enough memory PYTEST_SKIP="gdrivers/jp2openjpeg.py $PYTEST_SKIP" diff --git a/.github/workflows/android_cmake.yml b/.github/workflows/android_cmake.yml index a0c8e535c5c8..0f812922f86a 100644 --- a/.github/workflows/android_cmake.yml +++ b/.github/workflows/android_cmake.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Cache uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 diff --git a/.github/workflows/asan/test.sh b/.github/workflows/asan/test.sh index acf8a6576fd7..051aa88a92d4 100755 --- a/.github/workflows/asan/test.sh +++ b/.github/workflows/asan/test.sh @@ -49,7 +49,6 @@ find -L \ ! -name netcdf_cfchecks.py \ ! -name ogr_fgdb.py `# Don't run these` \ ! -name ogr_pgeo.py `# Don't run these` \ - ! -name ogr_ogdi.py `# Error on ogdi_5 test` \ ! -name ogr_gpsbabel.py `# new-delete-type-mismatch error in gpsbabel binary that we can't suppress` \ ! -name "__init__.py" \ ! -path 'ogr/data/*' \ diff --git a/.github/workflows/auto_tag_stable.yml b/.github/workflows/auto_tag_stable.yml index f701a47e9401..84150fb0dc9c 100644 --- a/.github/workflows/auto_tag_stable.yml +++ b/.github/workflows/auto_tag_stable.yml @@ -30,7 +30,7 @@ jobs: - name: Checkout code if: steps.check_branch.outputs.run == 'true' - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Tag if: steps.check_branch.outputs.run == 'true' diff --git a/.github/workflows/clang_static_analyzer.yml b/.github/workflows/clang_static_analyzer.yml index 070b99a4f24b..39a010b41dd2 100644 --- a/.github/workflows/clang_static_analyzer.yml +++ b/.github/workflows/clang_static_analyzer.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run run: docker run --rm -v $PWD:$PWD ubuntu:24.04 sh -c "cd $PWD && apt update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends sudo software-properties-common && DEBIAN_FRONTEND=noninteractive sh ./ci/travis/csa_common/before_install.sh && sh ./ci/travis/csa_common/install.sh && sh ./ci/travis/csa_common/script.sh" diff --git a/.github/workflows/cmake_builds.yml b/.github/workflows/cmake_builds.yml index c5ab1a4e25a5..a645e812f4ba 100644 --- a/.github/workflows/cmake_builds.yml +++ b/.github/workflows/cmake_builds.yml @@ -36,7 +36,7 @@ jobs: cache-name: cmake-ubuntu-jammy steps: - name: Checkout GDAL - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup cache uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 id: cache @@ -56,7 +56,7 @@ jobs: libfreexl-dev unixodbc-dev libwebp-dev liblcms2-2 libcrypto++-dev libkml-dev \ libmysqlclient-dev libarmadillo-dev wget libfyba-dev libjsoncpp-dev libexpat1-dev \ libclc-dev ocl-icd-opencl-dev libsqlite3-dev sqlite3-pcre libpcre3-dev libspatialite-dev libsfcgal-dev fossil libcairo2-dev libjson-c-dev libdeflate-dev liblz4-dev libblosc-dev libarchive-dev \ - libqhull-dev libcfitsio-dev libogdi-dev libopenjp2-7-dev libheif-dev \ + libqhull-dev libcfitsio-dev libopenjp2-7-dev libheif-dev \ python3-dev libpython3-dev libpython3.10-dev python3.10-dev python3-numpy python3-lxml python3-pyflakes python3-setuptools python3-pip python3-venv \ python3-pytest swig doxygen texlive-latex-base make cppcheck ccache g++ \ libpq-dev libpqtypes-dev postgresql-14 postgresql-14-postgis-3 postgresql-client-14 postgresql-14-postgis-3-scripts @@ -95,9 +95,6 @@ jobs: sudo apt-get update sudo apt-get install -y -V libarrow-dev libparquet-dev libarrow-dataset-dev # - # Workaround bug in ogdi packaging - sudo ln -s /usr/lib/ogdi/libvrf.so /usr/lib - # PYTHON_CMD=python3 && $PYTHON_CMD -m pip install -r $GITHUB_WORKSPACE/autotest/requirements.txt - name: Build libjxl @@ -319,9 +316,9 @@ jobs: run: | git config --global core.autocrlf false - name: Checkout GDAL - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install development packages - uses: msys2/setup-msys2@c52d1fa9c7492275e60fe763540fb601f5f232a1 # v2.25.0 + uses: msys2/setup-msys2@61f9e5e925871ba6c9e3e8da24ede83ea27fa91f # v2.27.0 with: msystem: MINGW64 update: true @@ -414,13 +411,13 @@ jobs: run: | git config --global core.autocrlf false - name: Checkout GDAL - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 - name: populate JAVA_HOME shell: pwsh run: | echo "JAVA_HOME=$env:JAVA_HOME_11_X64" >> %GITHUB_ENV% - - uses: conda-incubator/setup-miniconda@d2e6a045a86077fb6cad6f5adf368e9076ddaa8d # v3.1.0 + - uses: conda-incubator/setup-miniconda@505e6394dae86d6a5c7fbb6e3fb8938e3e863830 # v3.1.1 with: activate-environment: gdalenv miniforge-version: latest @@ -525,8 +522,8 @@ jobs: run: | git config --global core.autocrlf false - name: Checkout GDAL - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - - uses: conda-incubator/setup-miniconda@d2e6a045a86077fb6cad6f5adf368e9076ddaa8d # v3.1.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: conda-incubator/setup-miniconda@505e6394dae86d6a5c7fbb6e3fb8938e3e863830 # v3.1.1 with: activate-environment: gdalenv miniforge-version: latest @@ -609,7 +606,7 @@ jobs: with: xcode-version: '15.4.0' - name: Checkout GDAL - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup cache uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 id: cache @@ -696,8 +693,8 @@ jobs: run: | git config --global core.autocrlf false - name: Checkout GDAL - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - - uses: conda-incubator/setup-miniconda@d2e6a045a86077fb6cad6f5adf368e9076ddaa8d # v3.1.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: conda-incubator/setup-miniconda@505e6394dae86d6a5c7fbb6e3fb8938e3e863830 # v3.1.1 with: activate-environment: gdalenv python-version: 3.9 diff --git a/.github/workflows/code_checks.yml b/.github/workflows/code_checks.yml index 8c1a78699ff3..c7ca8295fe50 100644 --- a/.github/workflows/code_checks.yml +++ b/.github/workflows/code_checks.yml @@ -25,7 +25,7 @@ jobs: container: ubuntu:20.04 steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install Requirements run: | @@ -48,7 +48,7 @@ jobs: container: ubuntu:24.04 steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install Requirements run: | @@ -70,7 +70,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install Requirements run: | @@ -111,7 +111,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Detect tabulations run: ./scripts/detect_tabulations.sh @@ -152,7 +152,7 @@ jobs: sudo apt-get install -y python3 coreutils - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Detect binary files run: python3 ./scripts/check_binaries.py @@ -160,7 +160,7 @@ jobs: linting: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 - uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1 @@ -169,7 +169,7 @@ jobs: container: ghcr.io/osgeo/proj-docs steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run doxygen run: | @@ -180,7 +180,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install Requirements run: | @@ -200,7 +200,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set up Python uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: @@ -216,7 +216,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install requirements run: | @@ -233,7 +233,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set up Python uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index f11bd0b899a8..3ed067cd9239 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -46,7 +46,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install dependencies run: | @@ -74,7 +74,6 @@ jobs: liblzma-dev \ libmysqlclient-dev \ libnetcdf-dev \ - libogdi-dev \ libopenexr-dev \ libopenjp2-7-dev \ libpcre3-dev \ @@ -109,7 +108,7 @@ jobs: # We do that after running CMake to avoid CodeQL to trigger during CMake time, # in particular during HDF5 detection which is terribly slow (https://github.com/OSGeo/gdal/issues/9549) - name: Initialize CodeQL - uses: github/codeql-action/init@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 + uses: github/codeql-action/init@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -129,6 +128,6 @@ jobs: cmake --build build -j$(nproc) - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 + uses: github/codeql-action/analyze@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/conda.yml b/.github/workflows/conda.yml index 981751e8cd21..a4e8cfba0e6e 100644 --- a/.github/workflows/conda.yml +++ b/.github/workflows/conda.yml @@ -38,7 +38,7 @@ jobs: CACHE_NUMBER: 0 steps: - - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Support longpaths run: git config --system core.longpaths true @@ -50,7 +50,7 @@ jobs: path: ~/conda_pkgs_dir key: ${{ runner.os }}-${{ steps.get-date.outputs.today }}-conda-${{ env.CACHE_NUMBER }} - - uses: conda-incubator/setup-miniconda@d2e6a045a86077fb6cad6f5adf368e9076ddaa8d # v3.1.0 + - uses: conda-incubator/setup-miniconda@505e6394dae86d6a5c7fbb6e3fb8938e3e863830 # v3.1.1 with: miniforge-version: latest use-mamba: true diff --git a/.github/workflows/coverity_scan.yml b/.github/workflows/coverity_scan.yml index 961177d2e54b..e392d36b7fab 100644 --- a/.github/workflows/coverity_scan.yml +++ b/.github/workflows/coverity_scan.yml @@ -43,7 +43,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to GHCR if: env.CONTAINER_REGISTRY == 'ghcr.io' diff --git a/.github/workflows/doc_checks.yml b/.github/workflows/doc_checks.yml index f5481f804c24..4a6280cb3d5b 100644 --- a/.github/workflows/doc_checks.yml +++ b/.github/workflows/doc_checks.yml @@ -24,7 +24,7 @@ jobs: container: ghcr.io/osgeo/proj-docs steps: - - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup environment shell: bash -l {0} run: | diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 576546e1c709..3f12a7b4bbbd 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -54,7 +54,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Build shell: bash -l {0} diff --git a/.github/workflows/linux_build.yml b/.github/workflows/linux_build.yml index 4ab30594ea9e..8ca1eccae93f 100644 --- a/.github/workflows/linux_build.yml +++ b/.github/workflows/linux_build.yml @@ -177,7 +177,7 @@ jobs: sudo sysctl vm.mmap_rnd_bits=28 - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to Docker Hub if: env.CONTAINER_REGISTRY == 'docker.io' diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 41cde23f8338..4fe2f4a1eea9 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -27,9 +27,9 @@ jobs: runs-on: macos-14 steps: - - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - uses: conda-incubator/setup-miniconda@d2e6a045a86077fb6cad6f5adf368e9076ddaa8d # v3.1.0 + - uses: conda-incubator/setup-miniconda@505e6394dae86d6a5c7fbb6e3fb8938e3e863830 # v3.1.1 with: channels: conda-forge auto-update-conda: true diff --git a/.github/workflows/s390x/Dockerfile.ci b/.github/workflows/s390x/Dockerfile.ci index 090b1f9ae9a2..9f3857f3f99a 100644 --- a/.github/workflows/s390x/Dockerfile.ci +++ b/.github/workflows/s390x/Dockerfile.ci @@ -53,7 +53,6 @@ RUN apt-get update && \ liblzma-dev${APT_ARCH_SUFFIX} \ libmysqlclient-dev${APT_ARCH_SUFFIX} \ libnetcdf-dev${APT_ARCH_SUFFIX} \ - libogdi-dev${APT_ARCH_SUFFIX} \ libopenexr-dev${APT_ARCH_SUFFIX} \ libopenjp2-7-dev${APT_ARCH_SUFFIX} \ libpcre3-dev${APT_ARCH_SUFFIX} \ diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 79787550803f..be746ffd7e0f 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -36,12 +36,12 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 + uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1 with: results_file: results.sarif results_format: sarif @@ -71,6 +71,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 + uses: github/codeql-action/upload-sarif@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10 with: sarif_file: results.sarif diff --git a/.github/workflows/slow_tests.yml b/.github/workflows/slow_tests.yml index 3e6cbda1466f..2fea29a982aa 100644 --- a/.github/workflows/slow_tests.yml +++ b/.github/workflows/slow_tests.yml @@ -47,7 +47,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to GHCR if: env.CONTAINER_REGISTRY == 'ghcr.io' diff --git a/.github/workflows/ubuntu_20.04/Dockerfile.ci b/.github/workflows/ubuntu_20.04/Dockerfile.ci index 1cced8bce495..57de7a406734 100644 --- a/.github/workflows/ubuntu_20.04/Dockerfile.ci +++ b/.github/workflows/ubuntu_20.04/Dockerfile.ci @@ -52,7 +52,6 @@ RUN apt-get update -y \ libmuparser-dev \ libmysqlclient-dev \ libnetcdf-dev \ - libogdi-dev \ libopenexr-dev \ libopenjp2-7-dev \ libpcre2-dev \ @@ -124,9 +123,6 @@ RUN mkdir tiledb \ && cd ../.. \ && rm -rf tiledeb -# Workaround bug in ogdi packaging -RUN ln -s /usr/lib/ogdi/libvrf.so /usr/lib - # Build libjxl # libjxl being still unstable, if the main branch fails to compile/test # you can replace JXL_TREEISH=main by JXL_TREEISH=sha1_of_known_working_commit @@ -276,7 +272,7 @@ RUN if test "${OPENDRIVE_VERSION}" != ""; then ( \ ); fi # Install exprtk -RUN wget -q -P /usr/local/include https://raw.githubusercontent.com/ArashPartow/exprtk/refs/heads/master/exprtk.hpp +RUN wget -q -P /usr/local/include https://raw.githubusercontent.com/ArashPartow/exprtk/refs/heads/master/exprtk.hpp RUN ldconfig diff --git a/.github/workflows/ubuntu_22.04/Dockerfile.ci b/.github/workflows/ubuntu_22.04/Dockerfile.ci index ec8f111a6362..19e046eeaf21 100644 --- a/.github/workflows/ubuntu_22.04/Dockerfile.ci +++ b/.github/workflows/ubuntu_22.04/Dockerfile.ci @@ -39,7 +39,6 @@ RUN apt-get update && \ liblzma-dev \ libmysqlclient-dev \ libnetcdf-dev \ - libogdi-dev \ libopenexr-dev \ libopenjp2-7-dev \ libpcre3-dev \ diff --git a/.github/workflows/ubuntu_24.04/Dockerfile.ci b/.github/workflows/ubuntu_24.04/Dockerfile.ci index 87a682a43eee..e548b76658d5 100644 --- a/.github/workflows/ubuntu_24.04/Dockerfile.ci +++ b/.github/workflows/ubuntu_24.04/Dockerfile.ci @@ -40,7 +40,6 @@ RUN apt-get update && \ libmuparser-dev \ libmysqlclient-dev \ libnetcdf-dev \ - libogdi-dev \ libopenexr-dev \ libopenjp2-7-dev \ libpcre3-dev \ @@ -158,10 +157,6 @@ RUN curl -L -O https://download.oracle.com/otn_software/linux/instantclient/1990 && apt-get install -y libaio1t64 \ && ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1 -# Workaround libogdi packaging issue -# Cf https://lists.debian.org/debian-gis/2024/04/msg00006.html -RUN ln -s /usr/lib/x86_64-linux-gnu/ogdi/4.1/libvrf.so /usr/lib/x86_64-linux-gnu - COPY requirements.txt /tmp/ RUN PYTHON_CMD=python3 && $PYTHON_CMD -m pip install -U --break-system-packages -r /tmp/requirements.txt diff --git a/.github/workflows/ubuntu_24.04/expected_gdalinfo_formats.txt b/.github/workflows/ubuntu_24.04/expected_gdalinfo_formats.txt index cc6aaf4a837a..b0de3e32d5eb 100644 --- a/.github/workflows/ubuntu_24.04/expected_gdalinfo_formats.txt +++ b/.github/workflows/ubuntu_24.04/expected_gdalinfo_formats.txt @@ -14,13 +14,11 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, CEOS -raster- (rov): CEOS Image JAXAPALSAR -raster- (rov): JAXA PALSAR Product Reader (Level 1.1/1.5) GFF -raster- (rov): Ground-based SAR Applications Testbed File Format (.gff) (*.gff) - ELAS -raster- (rw+v): ELAS ESRIC -raster- (rov): Esri Compact Cache (*.json, *.tpkx) AIG -raster- (rov): Arc/Info Binary Grid AAIGrid -raster- (rwv): Arc/Info ASCII Grid (*.asc) GRASSASCIIGrid -raster- (rov): GRASS ASCII Grid ISG -raster- (rov): International Service for the Geoid (*.isg) - SDTS -raster- (rov): SDTS Raster (*.ddf) DTED -raster- (rwv): DTED Elevation Raster (*.dt0, *.dt1, *.dt2) PNG -raster- (rwv): Portable Network Graphics (*.png) JPEG -raster- (rwv): JPEG JFIF (*.jpg, *.jpeg) @@ -31,7 +29,6 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, ESAT -raster- (rov): Envisat Image Format (*.n1) FITS -raster,vector- (rw+): Flexible Image Transport System (*.fits) BSB -raster- (rov): Maptech BSB Nautical Charts (*.kap) - XPM -raster- (rwv): X11 PixMap Format (*.xpm) BMP -raster- (rw+v): MS Windows Device Independent Bitmap (*.bmp) DIMAP -raster- (rovs): SPOT DIMAP AirSAR -raster- (rov): AirSAR Polarimetric Image @@ -40,7 +37,6 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, PCIDSK -raster,vector- (rw+uv): PCIDSK Database File (*.pix) PCRaster -raster- (rw+): PCRaster Raster File (*.map) ILWIS -raster- (rw+v): ILWIS Raster Map (*.mpr, *.mpl) - SGI -raster- (rw+v): SGI Image File Format 1.0 (*.rgb) SRTMHGT -raster- (rwv): SRTMHGT File Format (*.hgt) Leveller -raster- (rw+v): Leveller heightfield (*.ter) Terragen -raster- (rw+v): Terragen heightfield (*.ter) @@ -48,7 +44,7 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, HDF4 -raster,multidimensional raster- (ros): Hierarchical Data Format Release 4 (*.hdf) HDF4Image -raster- (rw+): HDF4 Dataset ISIS3 -raster- (rw+v): USGS Astrogeology ISIS cube (Version 3) (*.lbl, *.cub) - ISIS2 -raster- (rw+v): USGS Astrogeology ISIS cube (Version 2) + ISIS2 -raster- (rov): USGS Astrogeology ISIS cube (Version 2) PDS -raster- (rov): NASA Planetary Data System PDS4 -raster,vector- (rw+uvs): NASA Planetary Data System 4 (*.xml) VICAR -raster,vector- (rw+v): MIPL VICAR file @@ -56,25 +52,20 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, ERS -raster- (rw+v): ERMapper .ers Labelled (*.ers) JP2OpenJPEG -raster,vector- (rwv): JPEG-2000 driver based on JP2OpenJPEG library (*.jp2, *.j2k) L1B -raster- (rovs): NOAA Polar Orbiter Level 1b Data Set - FIT -raster- (rwv): FIT Image GRIB -raster,multidimensional raster- (rwv): GRIdded Binary (.grb, .grb2) (*.grb, *.grb2, *.grib2) RMF -raster- (rw+v): Raster Matrix Format (*.rsw) WCS -raster- (rovs): OGC Web Coverage Service WMS -raster- (rwvs): OGC Web Map Service MSGN -raster- (rov): EUMETSAT Archive native (.nat) (*.nat) RST -raster- (rw+v): Idrisi Raster A.1 (*.rst) - GSAG -raster- (rwv): Golden Software ASCII Grid (.grd) (*.grd) - GSBG -raster- (rw+v): Golden Software Binary Grid (.grd) (*.grd) GS7BG -raster- (rw+v): Golden Software 7 Binary Grid (.grd) (*.grd) COSAR -raster- (rov): COSAR Annotated Binary Matrix (TerraSAR-X) TSX -raster- (rov): TerraSAR-X Product COASP -raster- (ro): DRDC COASP SAR Processor Raster (*.hdr) - R -raster- (rwv): R Object Data Store (*.rda) MAP -raster- (rov): OziExplorer .MAP KMLSUPEROVERLAY -raster- (rwv): Kml Super Overlay (*.kml, *.kmz) WEBP -raster- (rwv): WEBP (*.webp) PDF -raster,vector- (rw+uvs): Geospatial PDF (*.pdf) - Rasterlite -raster- (rwvs): Rasterlite (*.sqlite) MBTiles -raster,vector- (rw+v): MBTiles (*.mbtiles) PLMOSAIC -raster- (ro): Planet Labs Mosaics API CALS -raster- (rwv): CALS (Type 1) (*.cal, *.ct1) @@ -84,32 +75,29 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, PNM -raster- (rw+v): Portable Pixmap Format (netpbm) (*.pgm, *.ppm, *.pnm) DOQ1 -raster- (rov): USGS DOQ (Old Style) DOQ2 -raster- (rov): USGS DOQ (New Style) - PAux -raster- (rw+v): PCI .aux Labelled - MFF -raster- (rw+v): Vexcel MFF Raster (*.hdr) - MFF2 -raster- (rw+): Vexcel MFF2 (HKV) Raster + PAux -raster- (rov): PCI .aux Labelled + MFF -raster- (rov): Vexcel MFF Raster (*.hdr) + MFF2 -raster- (ro): Vexcel MFF2 (HKV) Raster GSC -raster- (rov): GSC Geogrid FAST -raster- (rov): EOSAT FAST Format - BT -raster- (rw+v): VTP .bt (Binary Terrain) 1.3 Format (*.bt) - LAN -raster- (rw+v): Erdas .LAN/.GIS + LAN -raster- (rov): Erdas .LAN/.GIS CPG -raster- (rov): Convair PolGASP NDF -raster- (rov): NLAPS Data Format EIR -raster- (rov): Erdas Imagine Raw - DIPEx -raster- (rov): DIPEx LCP -raster- (rwv): FARSITE v.4 Landscape File (.lcp) (*.lcp) GTX -raster- (rw+v): NOAA Vertical Datum .GTX (*.gtx) LOSLAS -raster- (rov): NADCON .los/.las Datum Grid Shift - NTv2 -raster- (rw+vs): NTv2 Datum Grid Shift (*.gsb, *.gvb) - CTable2 -raster- (rw+v): CTable2 Datum Grid Shift + NTv2 -raster- (rovs): NTv2 Datum Grid Shift (*.gsb, *.gvb) ACE2 -raster- (rov): ACE2 (*.ACE2) SNODAS -raster- (rov): Snow Data Assimilation System (*.hdr) KRO -raster- (rw+v): KOLOR Raw (*.kro) ROI_PAC -raster- (rw+v): ROI_PAC raster RRASTER -raster- (rw+uv): R Raster (*.grd) - BYN -raster- (rw+v): Natural Resources Canada's Geoid (*.byn, *.err) + BYN -raster- (rov): Natural Resources Canada's Geoid (*.byn, *.err) NOAA_B -raster- (rov): NOAA GEOCON/NADCON5 .b format (*.b) NSIDCbin -raster- (rov): NSIDC Sea Ice Concentrations binary (.bin) (*.bin) RIK -raster- (rov): Swedish Grid RIK (.rik) (*.rik) - USGSDEM -raster- (rwv): USGS Optional ASCII DEM (and CDED) (*.dem) + USGSDEM -raster- (rov): USGS Optional ASCII DEM (and CDED) (*.dem) GXF -raster- (rov): GeoSoft Grid Exchange Format (*.gxf) BAG -raster,multidimensional raster,vector- (rw+v): Bathymetry Attributed Grid (*.bag) S102 -raster,multidimensional raster- (rovs): S-102 Bathymetric Surface Product (*.h5) @@ -119,9 +107,8 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, HDF5Image -raster- (rov): HDF5 Dataset NWT_GRD -raster- (rw+v): Northwood Numeric Grid Format .grd/.tab (*.grd) NWT_GRC -raster- (rov): Northwood Classified Grid Format .grc/.tab (*.grc) - ADRG -raster- (rw+vs): ARC Digitized Raster Graphics (*.gen) + ADRG -raster- (rovs): ARC Digitized Raster Graphics (*.gen) SRP -raster- (rovs): Standard Raster Product (ASRP/USRP) (*.img) - BLX -raster- (rwv): Magellan topo (.blx) (*.blx) GeoRaster -raster- (rw+s): Oracle Spatial GeoRaster PostGISRaster -raster- (rws): PostGIS Raster driver SAGA -raster- (rw+v): SAGA GIS Binary Grid (.sdat, .sg-grd-z) (*.sdat, *.sg-grd-z) diff --git a/.github/workflows/ubuntu_24.04/expected_ogrinfo_formats.txt b/.github/workflows/ubuntu_24.04/expected_ogrinfo_formats.txt index cebb30291c8f..60fd621c108e 100644 --- a/.github/workflows/ubuntu_24.04/expected_ogrinfo_formats.txt +++ b/.github/workflows/ubuntu_24.04/expected_ogrinfo_formats.txt @@ -12,9 +12,7 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, OGCAPI -raster,vector- (rov): OGCAPI ESRI Shapefile -vector- (rw+uv): ESRI Shapefile (*.shp, *.dbf, *.shz, *.shp.zip) MapInfo File -vector- (rw+uv): MapInfo File (*.tab, *.mif, *.mid) - UK .NTF -vector- (rov): UK .NTF LVBAG -vector- (rov): Kadaster LV BAG Extract 2.0 (*.xml) - OGR_SDTS -vector- (rov): SDTS S57 -vector- (rw+v): IHO S-57 (ENC) (*.000) DGN -vector- (rw+v): Microstation DGN (*.dgn) OGR_VRT -vector- (rov): VRT - Virtual Datasource (*.vrt) @@ -38,7 +36,6 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, WAsP -vector- (rw+v): WAsP .map format (*.map) PGeo -vector- (ro): ESRI Personal GeoDatabase (*.mdb) MSSQLSpatial -vector- (rw+u): Microsoft SQL Server Spatial Database (BCP) - OGR_OGDI -vector- (ro): OGDI Vectors (VPF, VMAP, DCW) PostgreSQL -vector- (rw+u): PostgreSQL/PostGIS MySQL -vector- (rw+u): MySQL OCI -vector- (rw+u): Oracle Spatial @@ -47,7 +44,6 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, DXF -vector- (rw+v): AutoCAD DXF (*.dxf) CAD -raster,vector- (rovs): AutoCAD Driver (*.dwg) FlatGeobuf -vector- (rw+v): FlatGeobuf (*.fgb) - Geoconcept -vector- (rw+v): Geoconcept (*.gxt, *.txt) GeoRSS -vector- (rw+v): GeoRSS VFK -vector- (ro): Czech Cadastral Exchange Data Format (*.vfk) PGDUMP -vector- (w+v): PostgreSQL SQL dump (*.sql) @@ -58,7 +54,6 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, OAPIF -vector- (ro): OGC API - Features SOSI -vector- (ro): Norwegian SOSI Standard EDIGEO -vector- (rov): French EDIGEO exchange format (*.thf) - SVG -vector- (rov): Scalable Vector Graphics (*.svg) Idrisi -vector- (rov): Idrisi Vector (.vct) (*.vct) XLS -vector- (ro): MS Excel format (*.xls) ODS -vector- (rw+uv): Open Document/ LibreOffice / OpenOffice Spreadsheet (*.ods) @@ -83,7 +78,6 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, MiraMonVector -vector- (rw+v): MiraMon Vectors (.pol, .arc, .pnt) (*.pol, *.arc, *.pnt) XODR -vector- (ro): OpenDRIVE - Open Dynamic Road Information for Vehicle Environment (*.xodr) ADBC -vector- (ro): Arrow Database Connectivity - TIGER -vector- (rov): U.S. Census TIGER/Line AVCBin -vector- (rov): Arc/Info Binary Coverage AVCE00 -vector- (rov): Arc/Info E00 (ASCII) Coverage (*.e00) AIVector -vector- (ro): Artificial Intelligence powered vector driver diff --git a/.github/workflows/windows_build.yml b/.github/workflows/windows_build.yml index 91146477d8be..07764da5bd9d 100644 --- a/.github/workflows/windows_build.yml +++ b/.github/workflows/windows_build.yml @@ -58,7 +58,7 @@ jobs: git config --global core.autocrlf false - name: Checkout - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set environment shell: pwsh diff --git a/.github/workflows/windows_conda_expected_gdalinfo_formats.txt b/.github/workflows/windows_conda_expected_gdalinfo_formats.txt index 6b3d18b03b88..4d52648e6499 100644 --- a/.github/workflows/windows_conda_expected_gdalinfo_formats.txt +++ b/.github/workflows/windows_conda_expected_gdalinfo_formats.txt @@ -14,13 +14,11 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, CEOS -raster- (rov): CEOS Image JAXAPALSAR -raster- (rov): JAXA PALSAR Product Reader (Level 1.1/1.5) GFF -raster- (rov): Ground-based SAR Applications Testbed File Format (.gff) (*.gff) - ELAS -raster- (rw+v): ELAS ESRIC -raster- (rov): Esri Compact Cache (*.json, *.tpkx) AIG -raster- (rov): Arc/Info Binary Grid AAIGrid -raster- (rwv): Arc/Info ASCII Grid (*.asc) GRASSASCIIGrid -raster- (rov): GRASS ASCII Grid ISG -raster- (rov): International Service for the Geoid (*.isg) - SDTS -raster- (rov): SDTS Raster (*.ddf) DTED -raster- (rwv): DTED Elevation Raster (*.dt0, *.dt1, *.dt2) PNG -raster- (rwv): Portable Network Graphics (*.png) JPEG -raster- (rwv): JPEG JFIF (*.jpg, *.jpeg) @@ -31,7 +29,6 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, ESAT -raster- (rov): Envisat Image Format (*.n1) FITS -raster,vector- (rw+): Flexible Image Transport System (*.fits) BSB -raster- (rov): Maptech BSB Nautical Charts (*.kap) - XPM -raster- (rwv): X11 PixMap Format (*.xpm) BMP -raster- (rw+v): MS Windows Device Independent Bitmap (*.bmp) DIMAP -raster- (rovs): SPOT DIMAP AirSAR -raster- (rov): AirSAR Polarimetric Image @@ -40,7 +37,6 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, PCIDSK -raster,vector- (rw+uv): PCIDSK Database File (*.pix) PCRaster -raster- (rw+): PCRaster Raster File (*.map) ILWIS -raster- (rw+v): ILWIS Raster Map (*.mpr, *.mpl) - SGI -raster- (rw+v): SGI Image File Format 1.0 (*.rgb) SRTMHGT -raster- (rwv): SRTMHGT File Format (*.hgt) Leveller -raster- (rw+v): Leveller heightfield (*.ter) Terragen -raster- (rw+v): Terragen heightfield (*.ter) @@ -48,7 +44,7 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, HDF4 -raster,multidimensional raster- (ros): Hierarchical Data Format Release 4 (*.hdf) HDF4Image -raster- (rw+): HDF4 Dataset ISIS3 -raster- (rw+v): USGS Astrogeology ISIS cube (Version 3) (*.lbl, *.cub) - ISIS2 -raster- (rw+v): USGS Astrogeology ISIS cube (Version 2) + ISIS2 -raster- (rov): USGS Astrogeology ISIS cube (Version 2) PDS -raster- (rov): NASA Planetary Data System PDS4 -raster,vector- (rw+uvs): NASA Planetary Data System 4 (*.xml) VICAR -raster,vector- (rw+v): MIPL VICAR file @@ -56,7 +52,6 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, ERS -raster- (rw+v): ERMapper .ers Labelled (*.ers) JP2OpenJPEG -raster,vector- (rwv): JPEG-2000 driver based on JP2OpenJPEG library (*.jp2, *.j2k) L1B -raster- (rovs): NOAA Polar Orbiter Level 1b Data Set - FIT -raster- (rwv): FIT Image GRIB -raster,multidimensional raster- (rwv): GRIdded Binary (.grb, .grb2) (*.grb, *.grb2, *.grib2) RMF -raster- (rw+v): Raster Matrix Format (*.rsw) WCS -raster- (rovs): OGC Web Coverage Service @@ -64,18 +59,14 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, MSGN -raster- (rov): EUMETSAT Archive native (.nat) (*.nat) MSG -raster- (ro): MSG HRIT Data RST -raster- (rw+v): Idrisi Raster A.1 (*.rst) - GSAG -raster- (rwv): Golden Software ASCII Grid (.grd) (*.grd) - GSBG -raster- (rw+v): Golden Software Binary Grid (.grd) (*.grd) GS7BG -raster- (rw+v): Golden Software 7 Binary Grid (.grd) (*.grd) COSAR -raster- (rov): COSAR Annotated Binary Matrix (TerraSAR-X) TSX -raster- (rov): TerraSAR-X Product COASP -raster- (ro): DRDC COASP SAR Processor Raster (*.hdr) - R -raster- (rwv): R Object Data Store (*.rda) MAP -raster- (rov): OziExplorer .MAP KMLSUPEROVERLAY -raster- (rwv): Kml Super Overlay (*.kml, *.kmz) WEBP -raster- (rwv): WEBP (*.webp) PDF -raster,vector- (rw+uvs): Geospatial PDF (*.pdf) - Rasterlite -raster- (rwvs): Rasterlite (*.sqlite) MBTiles -raster,vector- (rw+v): MBTiles (*.mbtiles) PLMOSAIC -raster- (ro): Planet Labs Mosaics API CALS -raster- (rwv): CALS (Type 1) (*.cal, *.ct1) @@ -86,31 +77,28 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, PNM -raster- (rw+v): Portable Pixmap Format (netpbm) (*.pgm, *.ppm, *.pnm) DOQ1 -raster- (rov): USGS DOQ (Old Style) DOQ2 -raster- (rov): USGS DOQ (New Style) - PAux -raster- (rw+v): PCI .aux Labelled - MFF -raster- (rw+v): Vexcel MFF Raster (*.hdr) - MFF2 -raster- (rw+): Vexcel MFF2 (HKV) Raster + PAux -raster- (rov): PCI .aux Labelled + MFF -raster- (rov): Vexcel MFF Raster (*.hdr) + MFF2 -raster- (ro): Vexcel MFF2 (HKV) Raster GSC -raster- (rov): GSC Geogrid FAST -raster- (rov): EOSAT FAST Format - BT -raster- (rw+v): VTP .bt (Binary Terrain) 1.3 Format (*.bt) - LAN -raster- (rw+v): Erdas .LAN/.GIS + LAN -raster- (rov): Erdas .LAN/.GIS CPG -raster- (rov): Convair PolGASP NDF -raster- (rov): NLAPS Data Format EIR -raster- (rov): Erdas Imagine Raw - DIPEx -raster- (rov): DIPEx LCP -raster- (rwv): FARSITE v.4 Landscape File (.lcp) (*.lcp) GTX -raster- (rw+v): NOAA Vertical Datum .GTX (*.gtx) LOSLAS -raster- (rov): NADCON .los/.las Datum Grid Shift - NTv2 -raster- (rw+vs): NTv2 Datum Grid Shift (*.gsb, *.gvb) - CTable2 -raster- (rw+v): CTable2 Datum Grid Shift + NTv2 -raster- (rovs): NTv2 Datum Grid Shift (*.gsb, *.gvb) ACE2 -raster- (rov): ACE2 (*.ACE2) SNODAS -raster- (rov): Snow Data Assimilation System (*.hdr) KRO -raster- (rw+v): KOLOR Raw (*.kro) ROI_PAC -raster- (rw+v): ROI_PAC raster RRASTER -raster- (rw+uv): R Raster (*.grd) - BYN -raster- (rw+v): Natural Resources Canada's Geoid (*.byn, *.err) + BYN -raster- (rov): Natural Resources Canada's Geoid (*.byn, *.err) NOAA_B -raster- (rov): NOAA GEOCON/NADCON5 .b format (*.b) RIK -raster- (rov): Swedish Grid RIK (.rik) (*.rik) - USGSDEM -raster- (rwv): USGS Optional ASCII DEM (and CDED) (*.dem) + USGSDEM -raster- (rov): USGS Optional ASCII DEM (and CDED) (*.dem) GXF -raster- (rov): GeoSoft Grid Exchange Format (*.gxf) KEA -raster- (rw+uv): KEA Image Format (.kea) (*.kea) BAG -raster,multidimensional raster,vector- (rw+v): Bathymetry Attributed Grid (*.bag) @@ -121,9 +109,8 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, HDF5Image -raster- (rov): HDF5 Dataset NWT_GRD -raster- (rw+v): Northwood Numeric Grid Format .grd/.tab (*.grd) NWT_GRC -raster- (rov): Northwood Classified Grid Format .grc/.tab (*.grc) - ADRG -raster- (rw+vs): ARC Digitized Raster Graphics (*.gen) + ADRG -raster- (rovs): ARC Digitized Raster Graphics (*.gen) SRP -raster- (rovs): Standard Raster Product (ASRP/USRP) (*.img) - BLX -raster- (rwv): Magellan topo (.blx) (*.blx) PostGISRaster -raster- (rws): PostGIS Raster driver SAGA -raster- (rw+v): SAGA GIS Binary Grid (.sdat, .sg-grd-z) (*.sdat, *.sg-grd-z) XYZ -raster- (rwv): ASCII Gridded XYZ (*.xyz) diff --git a/.github/workflows/windows_conda_expected_ogrinfo_formats.txt b/.github/workflows/windows_conda_expected_ogrinfo_formats.txt index 31b21a6d2c79..3b3e347e450e 100644 --- a/.github/workflows/windows_conda_expected_ogrinfo_formats.txt +++ b/.github/workflows/windows_conda_expected_ogrinfo_formats.txt @@ -13,9 +13,7 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, OGCAPI -raster,vector- (rov): OGCAPI ESRI Shapefile -vector- (rw+uv): ESRI Shapefile (*.shp, *.dbf, *.shz, *.shp.zip) MapInfo File -vector- (rw+uv): MapInfo File (*.tab, *.mif, *.mid) - UK .NTF -vector- (rov): UK .NTF LVBAG -vector- (rov): Kadaster LV BAG Extract 2.0 (*.xml) - OGR_SDTS -vector- (rov): SDTS S57 -vector- (rw+v): IHO S-57 (ENC) (*.000) DGN -vector- (rw+v): Microstation DGN (*.dgn) OGR_VRT -vector- (rov): VRT - Virtual Datasource (*.vrt) @@ -43,7 +41,6 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, DXF -vector- (rw+v): AutoCAD DXF (*.dxf) CAD -raster,vector- (rovs): AutoCAD Driver (*.dwg) FlatGeobuf -vector- (rw+v): FlatGeobuf (*.fgb) - Geoconcept -vector- (rw+v): Geoconcept (*.gxt, *.txt) GeoRSS -vector- (rw+v): GeoRSS VFK -vector- (ro): Czech Cadastral Exchange Data Format (*.vfk) PGDUMP -vector- (w+v): PostgreSQL SQL dump (*.sql) @@ -53,7 +50,6 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, WFS -vector- (rov): OGC WFS (Web Feature Service) OAPIF -vector- (ro): OGC API - Features EDIGEO -vector- (rov): French EDIGEO exchange format (*.thf) - SVG -vector- (rov): Scalable Vector Graphics (*.svg) Idrisi -vector- (rov): Idrisi Vector (.vct) (*.vct) XLS -vector- (ro): MS Excel format (*.xls) ODS -vector- (rw+uv): Open Document/ LibreOffice / OpenOffice Spreadsheet (*.ods) @@ -78,7 +74,6 @@ Supported Formats: (ro:read-only, rw:read-write, +:write from scratch, u:update, JSONFG -vector- (rw+v): OGC Features and Geometries JSON (*.json) MiraMonVector -vector- (rw+v): MiraMon Vectors (.pol, .arc, .pnt) (*.pol, *.arc, *.pnt) ADBC -vector- (ro): Arrow Database Connectivity - TIGER -vector- (rov): U.S. Census TIGER/Line AVCBin -vector- (rov): Arc/Info Binary Coverage AVCE00 -vector- (rov): Arc/Info E00 (ASCII) Coverage (*.e00) AIVector -vector- (ro): Artificial Intelligence powered vector driver diff --git a/autotest/gdrivers/adrg.py b/autotest/gdrivers/adrg.py index b373759cbce4..a6cec6e33432 100755 --- a/autotest/gdrivers/adrg.py +++ b/autotest/gdrivers/adrg.py @@ -12,9 +12,6 @@ # SPDX-License-Identifier: MIT ############################################################################### -import os -import shutil - import gdaltest import pytest @@ -58,91 +55,6 @@ def test_adrg_read_subdataset_img(): tst.testOpen() -############################################################################### -# Test copying. - - -def test_adrg_copy(): - - drv = gdal.GetDriverByName("ADRG") - srcds = gdal.Open("data/adrg/SMALL_ADRG/ABCDEF01.GEN") - - dstds = drv.CreateCopy("tmp/ABCDEF01.GEN", srcds) - - chksum = dstds.GetRasterBand(1).Checksum() - - assert chksum == 62833, "Wrong checksum" - - dstds = None - - drv.Delete("tmp/ABCDEF01.GEN") - - -############################################################################### -# Test creating a fake 2 subdataset image and reading it. - - -def test_adrg_2subdatasets(): - - drv = gdal.GetDriverByName("ADRG") - srcds = gdal.Open("data/adrg/SMALL_ADRG/ABCDEF01.GEN") - - with gdal.config_option("ADRG_SIMULATE_MULTI_IMG", "ON"): - dstds = drv.CreateCopy("tmp/XXXXXX01.GEN", srcds) - del dstds - - shutil.copy("tmp/XXXXXX01.IMG", "tmp/XXXXXX02.IMG") - - ds = gdal.Open("tmp/TRANSH01.THF") - assert ds.RasterCount == 0, "did not expected non 0 RasterCount" - ds = None - - ds = gdal.Open("ADRG:tmp/XXXXXX01.GEN,tmp/XXXXXX02.IMG") - chksum = ds.GetRasterBand(1).Checksum() - - assert chksum == 62833, "Wrong checksum" - - md = ds.GetMetadata("") - assert md["ADRG_NAM"] == "XXXXXX02", "metadata wrong." - - ds = None - - os.remove("tmp/XXXXXX01.GEN") - os.remove("tmp/XXXXXX01.GEN.aux.xml") - os.remove("tmp/XXXXXX01.IMG") - os.remove("tmp/XXXXXX02.IMG") - os.remove("tmp/TRANSH01.THF") - - -############################################################################### -# Test creating an in memory copy. - - -def test_adrg_copy_vsimem(): - - drv = gdal.GetDriverByName("ADRG") - srcds = gdal.Open("data/adrg/SMALL_ADRG/ABCDEF01.GEN") - - dstds = drv.CreateCopy("/vsimem/ABCDEF01.GEN", srcds) - - chksum = dstds.GetRasterBand(1).Checksum() - - assert chksum == 62833, "Wrong checksum" - - dstds = None - - # Reopen file - ds = gdal.Open("/vsimem/ABCDEF01.GEN") - - chksum = ds.GetRasterBand(1).Checksum() - assert chksum == 62833, "Wrong checksum" - - ds = None - - drv.Delete("/vsimem/ABCDEF01.GEN") - gdal.Unlink("/vsimem/TRANSH01.THF") - - ############################################################################### # Test reading a fake North Polar dataset (#6560) @@ -196,3 +108,23 @@ def test_adrg_zna_18(): ############################################################################### +# Test reading dataset with 2 subdataset image + + +def test_adrg_read_2subdatasets(): + + ds = gdal.Open("data/adrg/subdataset/TRANSH01.THF") + assert ds.RasterCount == 0, "did not expected non 0 RasterCount" + ds = None + + ds = gdal.Open( + "ADRG:data/adrg/subdataset/XXXXXX01.GEN,data/adrg/subdataset/XXXXXX02.IMG" + ) + chksum = ds.GetRasterBand(1).Checksum() + + assert chksum == 62833, "Wrong checksum" + + md = ds.GetMetadata("") + assert md["ADRG_NAM"] == "XXXXXX02", "metadata wrong." + + ds = None diff --git a/autotest/gdrivers/blx.py b/autotest/gdrivers/blx.py deleted file mode 100755 index 2edc448e43ef..000000000000 --- a/autotest/gdrivers/blx.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test BLX support. -# Author: Even Rouault < even dot rouault @ spatialys.com > -# -############################################################################### -# Copyright (c) 2008, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - -import gdaltest -import pytest - -from osgeo import gdal - -pytestmark = pytest.mark.require_driver("BLX") - -############################################################################### -# Test reading a little-endian BLX - - -def test_blx_1(): - - prj = "WGS84" - gt = [20.0004166, 0.0008333, 0.0, 50.0004166, 0.0, -0.0008333] - tst = gdaltest.GDALTest("BLX", "blx/s4103.blx", 1, 47024) - tst.testOpen(check_prj=prj, check_gt=gt) - - -############################################################################### -# Test reading a big-endian BLX - - -def test_blx_2(): - - prj = "WGS84" - gt = [20.0004166, 0.0008333, 0.0, 50.0004166, 0.0, -0.0008333] - tst = gdaltest.GDALTest("BLX", "blx/s4103.xlb", 1, 47024) - tst.testOpen(check_prj=prj, check_gt=gt) - - -############################################################################### -# Test writing a little-endian BLX - - -def test_blx_3(): - - tst = gdaltest.GDALTest("BLX", "blx/s4103.xlb", 1, 47024) - tst.testCreateCopy(check_gt=1, check_srs=1) - - -############################################################################### -# Test writing a big-endian BLX - - -def test_blx_4(): - - tst = gdaltest.GDALTest("BLX", "blx/s4103.blx", 1, 47024, options=["BIGENDIAN=YES"]) - tst.testCreateCopy(check_gt=1, check_srs=1) - - -############################################################################### -# Test overviews - - -def test_blx_5(): - - ds = gdal.Open("data/blx/s4103.blx") - - band = ds.GetRasterBand(1) - assert band.GetOverviewCount() == 4, "did not get expected overview count" - - cs = band.GetOverview(0).Checksum() - assert cs == 42981, "wrong overview checksum (%d)" % cs - - cs = band.GetOverview(1).Checksum() - assert cs == 61363, "wrong overview checksum (%d)" % cs - - cs = band.GetOverview(2).Checksum() - assert cs == 48060, "wrong overview checksum (%d)" % cs - - cs = band.GetOverview(3).Checksum() - assert cs == 12058, "wrong overview checksum (%d)" % cs diff --git a/autotest/gdrivers/bt.py b/autotest/gdrivers/bt.py deleted file mode 100755 index 2aba56e14f9a..000000000000 --- a/autotest/gdrivers/bt.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test read/write functionality for BT driver. -# Author: Even Rouault -# -############################################################################### -# Copyright (c) 2008-2011, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - -import gdaltest -import pytest - -from osgeo import gdal, osr - -pytestmark = pytest.mark.require_driver("BT") - - -@pytest.fixture(scope="module", autouse=True) -def setup_and_cleanup(): - - yield - - for f in ("/vsimem/int16.tif.prj", "tmp/int32.tif.prj", "tmp/float32.tif.prj"): - try: - gdal.Unlink(f) - except RuntimeError: - pass - - -############################################################################### -# Test CreateCopy() - - -@pytest.mark.parametrize( - "fname,to_vsimem", - [("int16.tif", True), ("int32.tif", False), ("float32.tif", False)], -) -def test_bt_create_copy(fname, to_vsimem): - - tst = gdaltest.GDALTest("BT", fname, 1, 4672) - srs = osr.SpatialReference() - srs.SetWellKnownGeogCS("NAD27") - tst.testCreateCopy( - vsimem=to_vsimem, - check_srs=srs.ExportToWkt(), - check_gt=(-67.00041667, 0.00083333, 0.0, 50.000416667, 0.0, -0.00083333), - ) - - -############################################################################### -# Test Create() of float32.tif - - -def test_bt_create(): - - tst = gdaltest.GDALTest("BT", "float32.tif", 1, 4672) - tst.testCreate(out_bands=1) - - -############################################################################### -# Test testSetProjection() of float32.tif - - -def test_bt_set_projection(): - - tst = gdaltest.GDALTest("BT", "float32.tif", 1, 4672) - tst.testSetProjection() - - -############################################################################### -# Test testSetGeoTransform() of float32.tif - - -def test_bt_set_geotransform(): - - tst = gdaltest.GDALTest("BT", "float32.tif", 1, 4672) - tst.testSetGeoTransform() diff --git a/autotest/gdrivers/byn.py b/autotest/gdrivers/byn.py index 3027fb12a724..68417f7bd9f2 100755 --- a/autotest/gdrivers/byn.py +++ b/autotest/gdrivers/byn.py @@ -34,16 +34,6 @@ def test_byn_1(): # -def test_byn_2(): - - tst = gdaltest.GDALTest("BYN", "byn/cgg2013ai08_reduced.byn", 1, 64764) - tst.testCreateCopy(new_filename="tmp/byn_test_2.byn") - - -############################################################################### -# - - def test_byn_invalid_header_bytes(): tst = gdaltest.GDALTest("BYN", "byn/test_invalid_header_bytes.byn", 1, 64764) diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107CATD.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107CATD.DDF deleted file mode 100644 index 852afcf4bba3..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107CATD.DDF +++ /dev/null @@ -1 +0,0 @@ -001672L 1 0600049 22040000210000012921CATD68500000;&1107CATD.DDF0100;&DDF RECORD IDENTIFER1600;&Catalog/DirectoryMODN!RCID!NAME!TYPE!FILE!EXTR!MVER(A,I,5A)00091 D 1 00039 21040001080CATD4480000001CATD1IDENIdentification1107IDEN.DDFN100103 D 1 00039 21040001080CATD5680000002CATD2IREFInternal Spatial Reference1107IREF.DDFN100103 D 1 00039 21040001080CATD5680000003CATD3XREFExternal Spatial Reference1107XREF.DDFN100099 D 1 00039 21040001080CATD5280000004CATD4DDSHData Dictionary/Schema1107DDSH.DDFN100099 D 1 00039 21040001080CATD5280000005CATD5DDOMData Dictionary/Domain1107DDOM.DDFN100097 D 1 00039 21040001080CATD5080000006CATD6DQHLData Quality/Lineage1107DQHL.DDFN100109 D 1 00039 21040001080CATD6280000007CATD7DQPAData Quality/Positional Accuracy1107DQPA.DDFN100108 D 1 00039 21040001080CATD6180000008CATD8DQAAData Quality/Attribute Accuracy1107DQAA.DDFN100109 D 1 00039 21040001080CATD6280000009CATD9DQLCData Quality/Logical Consistency1107DQLC.DDFN100103 D 1 00039 21040001080CATD5680000010CATD10DQCGData Quality/Completeness1107DQCG.DDFN100095 D 1 00039 21040001080CATD4880000011CATD11RSDFRaster Definition1107RSDF.DDFN100094 D 1 00039 21040001080CATD4780000012CATD12LDEFLayer Definition1107LDEF.DDFN100095 D 1 00039 21040001080CATD4880000013CATD13CATDCatalog/Directory1107CATD.DDFN100100 D 1 00039 21040001080CATD5380000014CATD14CATSCatalog/Spatial Domain1107CATS.DDFN100097 D 1 00039 21040001080CATD5080000015CATD15STATTransfer Statistics1107STAT.DDFN100104 D 1 00039 21040001080CATD5780000016CATD16DDDFData Dictionary/Definition1107DDDF.DDFN100092 D 1 00039 21040001080CATD4580000017CATD17SPDMSpatial Domain1107SPDM.DDFN100082 D 1 00039 21040001080CATD3580000018CATD18CEL0Cell1107CEL0.DDFN1 \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107CATS.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107CATS.DDF deleted file mode 100644 index 2eead64d098c..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107CATS.DDF +++ /dev/null @@ -1 +0,0 @@ -001762L 1 0600049 22040000210000012921CATS77500000;&1107CATS.DDF0100;&DDF RECORD IDENTIFER1600;&Catalog/Spatial DomainMODN!RCID!NAME!TYPE!MAP!THEM!AGOB!AGTP(A,I,6A)00133 D 1 00039 21040001080CATS8680000001CATS1IDENIdentificationALANSON, MI ELEVATIONDEM1G200145 D 1 00039 21040001080CATS9880000002CATS2IREFInternal Spatial ReferenceALANSON, MI ELEVATIONDEM1G200145 D 1 00039 21040001080CATS9880000003CATS3XREFExternal Spatial ReferenceALANSON, MI ELEVATIONDEM1G200133 D 1 00039 21040001080CATS8680000004CATS4SPDMSpatial DomainALANSON, MI ELEVATIONDEM1G200139 D 1 00039 21040001080CATS9280000005CATS5DQHLData Quality/LineageALANSON, MI ELEVATIONDEM1G200153 D 1 00041 310400010080CATS10480000006CATS6DQPAData Quality/Positional AccuracyALANSON, MI ELEVATIONDEM1G200152 D 1 00041 310400010080CATS10380000007CATS7DQAAData Quality/Attribute AccuracyALANSON, MI ELEVATIONDEM1G200153 D 1 00041 310400010080CATS10480000008CATS8DQLCData Quality/Logical ConsistancyALANSON, MI ELEVATIONDEM1G200144 D 1 00039 21040001080CATS9780000009CATS9DQCGData Quality/CompletenessALANSON, MI ELEVATIONDEM1G200146 D 1 00039 21040001080CATS9980000010CATS10DDDFData Dictionary/DefinitionALANSON, MI ELEVATIONDEM1G200142 D 1 00039 21040001080CATS9580000011CATS11DDOMData Dictionary/DomainALANSON, MI ELEVATIONDEM1G200142 D 1 00039 21040001080CATS9580000012CATS12DDSHData Dictionary/SchemaALANSON, MI ELEVATIONDEM1G200137 D 1 00039 21040001080CATS9080000013CATS13RSDFRaster DefinitionALANSON, MI ELEVATIONDEM1G200136 D 1 00039 21040001080CATS8980000014CATS14LDEFLayer DefinitionALANSON, MI ELEVATIONDEM1G200124 D 1 00039 21040001080CATS7780000015CATS15CEL0CellALANSON, MI ELEVATIONDEM1G200142 D 1 00039 21040001080CATS9580000016CATS16CATSCatalog/Spatial DomainALANSON, MI ELEVATIONDEM1G200139 D 1 00039 21040001080CATS9280000017CATS17STATTransfer StatisticsALANSON, MI ELEVATIONDEM1G200137 D 1 00039 21040001080CATS9080000018CATS18CATDCatalog/DirectoryALANSON, MI ELEVATIONDEM1G2 \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107CEL0.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107CEL0.DDF deleted file mode 100644 index cf38cbb1e08b..000000000000 Binary files a/autotest/gdrivers/data/STDS_1107834_truncated/1107CEL0.DDF and /dev/null differ diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107DDDF.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107DDDF.DDF deleted file mode 100644 index e479d2bffa4b..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107DDDF.DDF +++ /dev/null @@ -1 +0,0 @@ -001762L 1 0600049 22040000210000012921DDDF77500000;&1107DDDF.DDF0100;&DDF RECORD IDENTIFER1600;&Data Dictionary/DefinitionMODN!RCID!EORA!EALB!DFIN!AUTH!ADSC(A,I,5A)00169 D 1 00041 310400010080DDDF12080000001DDDF1ATTELEVATIONThe vertical distance from a given datumUSGS/NMDU.S. Geological Survey/National Mapping Division \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107DDOM.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107DDOM.DDF deleted file mode 100644 index 825275c8ca95..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107DDOM.DDF +++ /dev/null @@ -1 +0,0 @@ -001912L 1 0600049 22040000210000012921DDOM92500000;&1107DDOM.DDF0100;&DDF RECORD IDENTIFER1600;&Data Dictionary/DomainMODN!RCID!ATLB!AUTH!ATYP!ADVF!ADMU!RAVA!DVAL!DVDF(A,I,6A,I,A)00114 D 1 00039 21040001080DDOM6780000001DDOM1ELEVATIONUSGS/NMDINTEGERIVALUE-32767Void area in DEM00141 D 1 00039 21040001080DDOM9480000002DDOM2ELEVATIONUSGS/NMDINTEGERIVALUE-32766Fill Value used to make the DEM a rectangle00127 D 1 00039 21040001080DDOM8080000003DDOM3ELEVATIONUSGS/NMDINTEGERIMETERSMIN182Minimum elevation of the DEM00127 D 1 00039 21040001080DDOM8080000004DDOM4ELEVATIONUSGS/NMDINTEGERIMETERSMAX345Maximum elevation of the DEM \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107DDSH.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107DDSH.DDF deleted file mode 100644 index 6ce062b997d8..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107DDSH.DDF +++ /dev/null @@ -1 +0,0 @@ -001832L 1 0600049 22040000210000012921DDSH84500000;&1107DDSH.DDF0100;&DDF RECORD IDENTIFER1600;&Data Dictionary/SchemaMODN!RCID!NAME!TYPE!ATLB!AUTH!FMT!UNIT!PREC(A,I,6A,R)00106 D 1 00039 21040001080DDSH5980000001DDSH1CEL0CELLELEVATIONUSGS/NMDBI16METERS1.00000000 \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107DQAA.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107DQAA.DDF deleted file mode 100644 index 03b809607e9c..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107DQAA.DDF +++ /dev/null @@ -1,2 +0,0 @@ -001472L 1 0600049 22040000210000012921DQAA48500000;&1107DQAA.DDF0100;&DDF RECORD IDENTIFER1600;&Attribute AccuracyMODN!RCID!COMT(A,I,A)00175 D 1 00041 310400010080DQAA12680000001DQAA1No Attribute Accuracy to report. See Positional Accuracy module, -because the cell values are elevation measurements. \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107DQCG.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107DQCG.DDF deleted file mode 100644 index db00e4582d61..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107DQCG.DDF +++ /dev/null @@ -1,34 +0,0 @@ -001412L 1 0600049 22040000210000012921DQCG42500000;&1107DQCG.DDF0100;&DDF RECORD IDENTIFER1600;&CompletenessMODN!RCID!COMT(A,I,A)00081 D 1 00039 21040001080DQCG3480000001DQCG1VOID AREAS: No void areas.00793 D 1 00041 310400010080DQCG74480000002DQCG2The 7.5-minute series DEMS are based on a UTM grid. Hence, the scans -do not always have the same number of elevation posts due to the -variable angle between true north and grid north of the UTM coordinate -system. Any elevation post that falls outside of the 7.5-minute -quadrangle edge is dropped, i.e. there is no overedge. The 7.5-minute -DEM will be encoded as a non-ragged grid by filling with a background -post value to the edges of the minimum bounding rectangle. The fill -value is distinguishable from all other elevation post values, and it -will be same value for all USGS DEM series encoded in SDTS. The Void -post value(-32767) will not be reused as the fill value, so the -original extent of the DEM data can easily be detected.00471 D 1 00041 310400010080DQCG42280000003DQCG3Void areas occur in the DEM as a result of interruptions -to the contours of the source graphic or DLG (eg. photoimages -overprinted onto a topographic map). Each DEM elevation post located -within a void area is assigned a false negative value of -32,767. The -percentage of void elevation values in the DEM, if present, was -calculated from the total number of grid posts in the DEM assigned the -false negative value.01225 D 1 00043 4104000100080DQCG117480000004DQCG4HYDROGRAPHY INCLUDED: For DEM Level 1 and 2, water bodies -contained in DEM data are edited when they conform to the following -criteria: 1) Type is a pond, lake, reservoir, or double-line drainage; -and, 2) Size of a pond, lake or reservoir exceeds approximately 1/2 -inch at map scale (1000 feet at 1:24,000 scale, 4167 feet at 1:100,000 -scale) along the major axis; or, 3) Size of a double-line drain -exceeds 1/4 inch (500 feet at 1:24,000 scale, 2087 feet at 1:100,000 -scale) in width. For level 3 DEM's, the grid is constrained by all -major hydrographic features contained within a DLG hydrography -category, including drainage, lakes, swamps, and -shorelines. Elevations of hydrographic features are determined through -interpolation of contours using a registered DLG hypsography file. DEM -surfaces constrained to drains are treated as a special case of -hypsographic faulting where the DEM surface is simply creased along -the track line of the drain. Additionally, all grid cells are tilted -consistent with the direction of stream flow, along the track line of -the drain. There must not be any unsupported breaks or discontinuities -in the rate of slope of the drain. \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107DQHL.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107DQHL.DDF deleted file mode 100644 index 48e36ed738dc..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107DQHL.DDF +++ /dev/null @@ -1,46 +0,0 @@ -001362L 1 0600049 22040000210000012921DQHL37500000;&1107DQHL.DDF0100;&DDF RECORD IDENTIFER1600;&LineageMODN!RCID!COMT(A,I,A)01754 D 1 00043 4104000100080DQHL170380000001DQHL1CONVERSION TO SDTS: This DEM was converted to SDTS Raster Profile as -part ofa mass conversion of US Geological Survey Digital Elevation -model archive to SDTS. The data organization was changed from a -southwest origin with south to north scans to a northwest origin with -west to east scans. The x,y grid positions were not altered -- i.e., -the data was not resampled. The UTM gridded DEMs are ragged in their -native form. A fill value was used too make the DEM grid rectangular -in this transfer. - - -GENERAL NOTES: A number of factors affect gridding processes and the -accuracy of the final DEM product: 1) A dependency exists between the -scale of the source materials and the level of detail or grid -refinement that is possible from a given source. 2) During the -process of changing scale, from large to small, some source data may -be generalized or dropped out and, therefore, some features would not -be available for formation of, or incorporation into, a grid at that -scale. 3) The process of forming a grid with regular spacing requires -the transfer of precise point or vector data to generalized grid -square corners using a process similar to taking a simple weighted -average. This process may alter the apparent position upon display of -point or vector source data, reducing the ability to recover positions -of specific features whose dimensions are less than the internal grid -cell spacing. For all DEM's, the grid spacing and spatial resolution -results in data intervals that span terrain discontinuities, such as -benches, tops, and drainage. Some features can be appropriately -captured at a given grid spacing while other, smaller features are -subdued or filtered out altogether.00087 D 1 00039 21040001080DQHL4080000002DQHL2DEM CELL NAME: ALANSON, MI-2400000117 D 1 00039 21040001080DQHL7080000003DQHL3PROCESS CODE 5: DLG/hypsography LINETRACE, LT4X complex linear00070 D 1 00039 21040001080DQHL2380000004DQHL4DEM PRODUCER: 00066 D 1 00039 21040001080DQHL1980000005DQHL5DEM LEVEL-200436 D 1 00041 310400010080DQHL38780000006DQHL6DEM LEVEL 2 means: DEM created from digital line graph (DLG) contours or equivalent, or from any USGS map series up to 1:100,00 scale using stable base contour separate or equivalent. DEM data derived from hyposgraphic and hydrographic data digitizing, either photogrammetrically or from existing maps, are entered into the Level 2 category after review on a DEM editing system.00105 D 1 00039 21040001080DQHL5880000007DQHL7SOURCE DATE OF PUBLISHED MAP OR PHOTOGRAPHY: 198300094 D 1 00039 21040001080DQHL4780000008DQHL8DATA INSPECTION OR REVISION DATE: 199800145 D 1 00039 21040001080DQHL9880000009DQHL9INSPECTION FLAG: Iindicates all process of part three quality control have been performed.00152 D 1 00041 310400010080DQHL10380000010DQHL10DATA VALIDATION FLAG: Level 2 and 3 DEMs reviewed and edited. RSME computed from test points.00085 D 1 00039 21040001080DQHL3880000011DQHL11DATA EDITION: 1: USGS default00111 D 1 00039 21040001080DQHL6480000012DQHL12GRID RESOLUTION: 30.000000 METERS X, 30.000000 METERS Y01326 D 1 00043 4104000100080DQHL127580000013DQHL13VISUAL VERIFICATION: Because of practical limitations -inherent in all collection systems, there will always be some artifacts -such as benches, striations, patches, or some other anomaly that -imparts some signature of the collection system in the data set. Some -of these artifacts, although falling within normal DEM vertical error -tolerances, can coalesce with valid surface features. All DEM's are -viewed and edited so corrective actions can be taken to minimize these -artifacts. For example, 1) Isolated tops are depicted with their -approximate size and shape; 2) Flat trending surfaces are depicted as -generally flat trending without confusing patterns or striations; and, -3) Water bodies are flat, lower than the surrounding terrain, and have -shorelines clearly delineated. Additional testing is performed using -a DEM Editing System (DES) to aid in the identification of blunders -such as irregularly gridded data, mistagging of tops and depressions, -and spikes. These blunders are generally identified by displaying the -DEM with the aid of DES options, which include color banding of -elevation gradients, stereoscopic viewing using anaglyphic filters, -and shaded-relief enhancement. An elevation matrix is analyzed in -suspect areas and corrected as required. \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107DQLC.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107DQLC.DDF deleted file mode 100644 index 0eb2e690c3f2..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107DQLC.DDF +++ /dev/null @@ -1,18 +0,0 @@ -001482L 1 0600049 22040000210000012921DQLC49500000;&1107DQLC.DDF0100;&DDF RECORD IDENTIFER1600;&Logical ConsistencyMODN!RCID!COMT(A,I,A)00650 D 1 00041 310400010080DQLC60180000001DQLC1EDGE MATCH STATUS: West(1), North(1), East(4), South(4). - -Edge matching is a process of matching elevation values along common -quadrangle edges. The objective of edge matching is to improve the -alignment of ridges and drains and overall topographic shaping and -representation. Code of 0 = not edge matched; 1 = edge match checked -and joined; 2 = not edge matched because adjoining DEM is on a -different horizontal or vertical datum; 3 = not edge matched because -the adjoining DEM is not part of the current project; 4 = not edge -matched because the adjoining DEM has a different vertical unit.00618 D 1 00041 310400010080DQLC56980000002DQLC2NULL SCHEME: The method for indicating no value for a cell in the -Cell module records contained in this transfer is described here. In -the Data Dictionary Domain module there are specific values that are -reserved to mean VOID and FILL for ELEVATION. VOID means there is no -elevation measurement available for a cell that falls within the -*geographic boundaries* of the DEM. (In the geographic coordinate -system the bounds of the DEM data are rectangular.) A fill also means -there is no data, but is used to make the DEM rectangular in the UTM -coordinate system. \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107DQPA.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107DQPA.DDF deleted file mode 100644 index 0eafa94d2a8a..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107DQPA.DDF +++ /dev/null @@ -1,32 +0,0 @@ -001482L 1 0600049 22040000210000012921DQPA49500000;&1107DQPA.DDF0100;&DDF RECORD IDENTIFER1600;&Positional AccuracyMODN!RCID!COMT(A,I,A)00295 D 1 00041 310400010080DQPA24680000001DQPA1DEM LEVEL 2 means: Data sets have been processed or smoothed for consistency and edited to remove identifiable systematic errors. An RMSE of half of the contour interval is the maximum permitted, with no errors greater than one contour.00197 D 1 00041 310400010080DQPA14880000002DQPA2ACCURACY: RMSE of the DEM data relative to the file's datum -(x,y,z) is (0, 0, 1); accuracy has been calculated based on a sample -size of 30.00076 D 1 00039 21040001080DQPA2980000003DQPA3CONTOUR INTERVAL: 5.00087 D 1 00039 21040001080DQPA4080000004DQPA4CONTOUR INTERVAL UNITS: METERS.00087 D 1 00039 21040001080DQPA4080000005DQPA5SUSPECT AREAS: No suspect areas.00297 D 1 00041 310400010080DQPA24880000006DQPA6VERTICAL DATUM SHIFT: -0.050000. Adding this value to -the elevation values will convert it to North American Vertical Datum -1988. Value is computed by averaging the shift values for the four -quadrangle corners obtained from program VERTCON.01219 D 1 00043 4104000100080DQPA116880000007DQPA7SUSPECT AREAS: Suspect areas in the DEM result from corresponding -areas on the graphic source that are shown as disturbed surfaces. -They are symbolized by contours that have been overprinted with -photorevised or other surface patterns. Examples of disturbed surfaces -are: lava flows, land slides, open pit mining, construction cut and -fill, and land fill operations. An estimated elevation is supplied for -suspect areas based on the presumed elevation at the time the DEM grid -is generated; however, the true elevation is subject to change without -notice. When an elevation cannot be estimated for a suspect area, the -area is downgraded to a void area and assigned a false negative value --32,767. Grid posts falling in suspect areas are added to the DEM grid -as though they were valid elevations; they are distinguishable from -normal DEM grid posts only by an independent inspection of the graphic -source. For this reason, no percentage value for the total number of -cells in the DEM that are assigned an estimated value. Suspect areas -relate only to graphic sources. Furthermore, no commensurate code -exists for suspects areas in the DLG hypsography category.00296 D 1 00041 310400010080DQPA24780000008DQPA8WATER BODIES: Water body areas are naturally occurring -areas of constant elevation. Oceans or estuaries at mean sea level -are assigned an elevation value of zero. All other water bodies are -assigned their known or an estimated elevation.00586 D 1 00041 310400010080DQPA53780000009DQPA9HORIZONTAL ACCURACY: The horizontal positions of grid posts -in USGS DEM's are located at precise mathematically defined positions -in UTM meters or arc seconds. These grid posts are fixed in position -and can be considered constants for the purpose of determining -accuracy. The only measurable or perceivable errors in the DEM exist -as vertical errors that may be partially attributable to horizontal -error inherent in the source data or to errors in converting -horizontal and vertical components of the source to gridded format. \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107IDEN.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107IDEN.DDF deleted file mode 100644 index c7287149dbf2..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107IDEN.DDF +++ /dev/null @@ -1 +0,0 @@ -002752L 1 0600061 2304000021000000129021IDEN96050CONF681460000;&1107IDEN.DDF0100;&DDF RECORD IDENTIFER1600;&IdentificationMODN!RCID!STID!STVS!DOCU!PRID!PDOC!PRVS!TITL!DAID!DAST!MPDT!DCDT(A,I,11A)1600;&ConformanceFFYN!VGYN!GTYN!RCYN!EXSP!FTLV!CDLV!NGDM(4A,3I,A)00342 D 1 00055 33040001008000IDEN263008CONF0162710000001IDEN1SPATIAL DATA TRANSFER STANDARD1998 JUNE 9ANSI NCITS 320-1998SRPE: SDTS RASTER PROFILE and EXTENSIONSFederal Geographic Data Committee FGDC-STD-002.51998ALANSON, MI-24000LAT:: 45 22 30.0000 N LONG:: -84 45 0.0000 W SCALE:: 24000DEM19982001808NNNY140N \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107IREF.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107IREF.DDF deleted file mode 100644 index d65316534168..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107IREF.DDF +++ /dev/null @@ -1 +0,0 @@ -002072L 1 0600052 3204000002100000102921IREF105500000;&1107IREF.DDF0100;&DDF RECORD IDENTIFER1600;&Internal Spacial ReferenceMODN!RCID!SATP!XLBL!YLBL!HFMT!SFAX!SFAY!XORG!YORG!XHRS!YHRS(A,I,4A,6R)00151 D 1 00041 310400010080IREF10280000001IREF12-TUPLEEastingNorthingR1.000000001.000000000.000000000.0000000030.0000000030.00000000 \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107LDEF.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107LDEF.DDF deleted file mode 100644 index 89e79aed56a2..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107LDEF.DDF +++ /dev/null @@ -1 +0,0 @@ -001962L 1 0600049 22040000210000012921LDEF97500000;&1107LDEF.DDF0100;&DDF RECORD IDENTIFER1600;&Layer DefinitionMODN!RCID!CMNM!LLBL!CODE!NROW!NCOL!SORI!SOCI!RWOO!CLOO!INTR(A,I,3A,6I,A)00090 D 1 00039 21040001080LDEF4380000001LDEF1CEL0ELEVATIONV0253391100CE \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107RSDF.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107RSDF.DDF deleted file mode 100644 index 90c480529f1f..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107RSDF.DDF +++ /dev/null @@ -1 +0,0 @@ -003512L 1 0600085 330400000210000001029021RSDF112050ISID042162SADR031204LYID0312350000;&1107RSDF.DDF0100;&DDF RECORD IDENTIFER1600;&Raster DefinitionMODN!RCID!OBRP!CSCD!DEFI!RWXT!CLXT!SCOR!TIDX!ALTN!FSCN!ASPR!NLAY(A,I,3A,2I,2A,I,A,R,I)1600;&Internal Spatial IDMODN!RCID(A,I)1600;&Spatial AddressX!Y(2R)1600;&Layer IDMODN!RCID(A,I)00177 D 1 00070 2304000108000RSDF52008ISID07060SADR33067LYID071000000001RSDF1G2GIDEF472339TLNOTESS1R1.000000001IREF1666030.000000005040720.00000000LDEF1 \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107SPDM.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107SPDM.DDF deleted file mode 100644 index fb4b65ca1d5d..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107SPDM.DDF +++ /dev/null @@ -1 +0,0 @@ -001992L 1 0600061 2304000021000000129021SPDM50050DMSA381000000;&1107SPDM.DDF0100;&DDF RECORD IDENTIFER1600;&Spatial DomainMODN!RCID!DTYP!DSTP(A,I,2A)1600;&Domain Spatial AddressX!Y(2R)00213 D 1 00052 3204000100800SPDM02108DMSA132290000001SPDM1RINGEXTERNAL666390.919530005026588.57789500666023.795294005040475.32910700675789.821559005040741.40018700676178.562581005026854.66559100 \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107STAT.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107STAT.DDF deleted file mode 100644 index c02d2a36c20a..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107STAT.DDF +++ /dev/null @@ -1 +0,0 @@ -001672L 1 0600049 22040000210000012921STAT68500000;&1107STAT.DDF0100;&DDF RECORD IDENTIFER1600;&Transfer StatisticsMODN!RCID!MNTF!MNRF!NREC!NSAD(A,I,2A,2I)00078 D 1 00039 21040001080STAT3180000001STAT1IdentificationIDEN1000090 D 1 00039 21040001080STAT4380000002STAT2Internal Spatial ReferenceIREF1000090 D 1 00039 21040001080STAT4380000003STAT3External Spatial ReferenceXREF1000086 D 1 00039 21040001080STAT3980000004STAT4Data Dictionary/SchemaDDSH1000086 D 1 00039 21040001080STAT3980000005STAT5Data Dictionary/DomainDDOM4000085 D 1 00039 21040001080STAT3880000006STAT6Data Quality/LineageDQHL13000096 D 1 00039 21040001080STAT4980000007STAT7Data Quality/Positional AccuracyDQPA9000095 D 1 00039 21040001080STAT4880000008STAT8Data Quality/Attribute AccuracyDQAA1000096 D 1 00039 21040001080STAT4980000009STAT9Data Quality/Logical ConsistencyDQLC2000090 D 1 00039 21040001080STAT4380000010STAT10Data Quality/CompletenessDQCG4000082 D 1 00039 21040001080STAT3580000011STAT11Raster DefinitionRSDF1000081 D 1 00039 21040001080STAT3480000012STAT12Layer DefinitionLDEF1000083 D 1 00039 21040001080STAT3680000013STAT13Catalog/DirectoryCATD18000088 D 1 00039 21040001080STAT4180000014STAT14Catalog/Spatial DomainCATS18000091 D 1 00039 21040001080STAT4480000015STAT15Data Dictionary/DefinitionDDDF1000079 D 1 00039 21040001080STAT3280000016STAT16Spatial DomainSPDM1000071 D 1 00039 21040001080STAT2480000017STAT17CellCEL0472000085 D 1 00039 21040001080STAT3880000018STAT18Transfer StatisticsSTAT180 \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/1107XREF.DDF b/autotest/gdrivers/data/STDS_1107834_truncated/1107XREF.DDF deleted file mode 100644 index a2171dfa9367..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/1107XREF.DDF +++ /dev/null @@ -1 +0,0 @@ -002332L 1 0600061 2304000021000000129021XREF72050VATT501220000;&1107XREF.DDF0100;&DDF RECORD IDENTIFER1600;&External Spatial ReferenceMODN!RCID!COMT!RSNM!HDAT!ZONE(A,I,4A)1600;&Vertical AttributesVDAT!VEM!ATLB!AUTH(4A)00282 D 1 00055 33040001008000XREF190008VATT0291980000001XREF1National Geodetic Vertical Datum 1929 Vertical Datum Shift = -0.05; always add to convert from National Geodetic Vertical Datum 1929 to North American Vertical Datum 1988.UTMNAS16NGVDCELLELEVATIONUSGS/NMD \ No newline at end of file diff --git a/autotest/gdrivers/data/STDS_1107834_truncated/README b/autotest/gdrivers/data/STDS_1107834_truncated/README deleted file mode 100644 index ba67fdc7573b..000000000000 --- a/autotest/gdrivers/data/STDS_1107834_truncated/README +++ /dev/null @@ -1,74 +0,0 @@ -This dataset has been truncated to 25 scanlines for GDAL testing purpose. -Original README: - -**************************************************************************** -NOTICE: THESE FILES ARE FOR SOFTWARE TESTING ONLY NOT FOR DISTRIBUTION -**************************************************************************** - -1:24,000-Scale Raster Profile Digital Elevation Model Readme File -Version: 08/2001 (README) - -This directory contains a Spatial Data Transfer Standard (SDTS)-compliant -raster profile transfer, produced by the National Mapping Program of the -U.S. Geological Survey (USGS). - -This transfer corrects potential horizontal errors in SDTS DEMs created -before January 1, 2001. This transfer also corrects a variant in the -profile identifier field. - -If you have questions or comments, please send e-mail to sdts@usgs.gov -or contact the USGS at: - U.S. Geological Survey - SDTS Task Force - 1400 Independence Road - Rolla, MO 65401 - -PURPOSE OF TRANSFER: - The mission of the USGS National Mapping Program is to meet the - Nation's need for basic geospatial data, ensuring access to and - advancing the application of these data and other related earth - science information for users worldwide. These data are provided - in SDTS format as the result of a Federal mandate. - - The digital elevation model (DEM) is the USGS National Mapping - Program's response to the Nation's need for accurate and - consistent geospatial digital elevation data in raster format. - -STANDARD AUTHORITY: - American National Standards Institute (ANSI): - Parts 1-3: ANSI NCITS 320-1998 The Spatial Data Transfer Standard - Federal Geographic Data Committee: - FGDC-STD-002.5-1999, February 1999 - Part 5: SDTS Raster Profile (RPE) with Basic Image Interchange - Format (BIIF). - -ISO 8211 CONFORMANCE: - All files with extension *.DDF are in the ISO 8211 file transfer - format. All SDTS spatial addresses are expressed in two 32-bit - binary subfields defined by the ISO 8211. Files are Level 2 of - ISO 8211. - -CATALOG DIRECTORY MODULE xxxxCATD.DDF: - Each transfer includes this catalog directory module that - contains a listing of every SDTS ISO 8211 file included in the - transfer (xxxx indicates a four-character transfer base that - is common to all files in a transfer). - -IDENTIFICATION MODULE xxxxIDEN.DDF: - This module contains information that describes the overall - characteristics of the data in a transfer. - -REFERENCES: - "The Spatial Data Transfer Standard Mapping of the USGS Digital - Elevation Model" describes SDTS transfers of DEM data, including - detailed information on each module. The file can be downloaded - from the SDTS FTP site: - ftp://sdts.er.usgs.gov/pub/sdts/datasets/raster/dem/ - -Additional information can be found on the SDTS Web site: - http://mcmcweb.er.usgs.gov/sdts - - - - - diff --git a/autotest/gdrivers/data/adrg/subdataset/TRANSH01.THF b/autotest/gdrivers/data/adrg/subdataset/TRANSH01.THF new file mode 100644 index 000000000000..4712972d3115 --- /dev/null +++ b/autotest/gdrivers/data/adrg/subdataset/TRANSH01.THF @@ -0,0 +1 @@ +009902L 0600135 340300003000000010420030VDR1180072FDR1020190QSR0740292QUV0670366CPS0990433CPT0570532SPR1700589BDF0500759VFF0460809 TRANSMITTAL_HEADER_FILE1000;&RECORD_ID_FIELDRTY!RID(A(3),A(2))1600;&TRANSMITTAL_HEADER_FIELDMSD!VOO!ADR!NOV!SQN!NOF!URF!END!DAT(A(1),A(200),A(1),I(1),I(1),I(3),A(16),I(3),A(12))1600;&DATA_SET_DESCRIPTION_FIELDNAM!STR!PRT!SWO!SWA!NEO!NEA(A(8),I(1),A(4),A(11),A(10),A(11),A(10))1000;&SECURITY_AND_RELEASE_FIELDQSS!QOD!DAT!QLE(A(1),A(1),A(12),A(200))1000;&VOLUME_UP_TO_DATENESS_FIELDSRC!DAT!SPA(A(100),A(12),A(20))1600;&TEST_PATCH_IDENTIFIER_FIELDPNM!DWV!REF!PUR!PIR!PIG!PIB(A(7),I(6),R(5),R(5),I(3),I(3),I(3))1600;&TEST_PATCH_INFORMATION_FIELDSTR!SCR(I(1),A(100))1600;&DATA_SET_PARAMETERS_FIELDNUL!NUS!NLL!NLS!NFL!NFC!PNC!PNL!COD!ROD!POR!PCB!PVB!BAD!TIF(I(6),I(6),I(6),I(6),I(3),I(3),I(6),I(6),I(1),I(1),I(1),I(1),I(1),A(12),A(1))2600;&BAND_ID_FIELD*BID!WS1!WS2(A(5),I(5),I(5))1000;&TRANSMITTAL_FILENAMES_FIELDVFF(A(51))00356 D 00055 34030010060000VDR2390006FDR0560245VTH01 11001 001017,19940101XXXXXX013ADRG-0000000.50+465959.48+0010000.52+480000.5000409 D 00055 34030010060000QSR2150006QUV1330221LCF01UN MILITARY SPECIFICATION ARC DIGITIZED RASTER GRAPHICS (ADRG) 022,19900222MIL-A-89007 00323 D 00075 34030010060000CPS0330006CPT1020039SPR0610141BDF0460202TPA01Black 0000000003 00000000051100051100000000400400012800012801008TESTPA01.CPHNRed 0000000000Green0000000000Blue 000000000000417 D 00151 9903001000000006000000000VFF000000052000000006VFF000000052000000058VFF000000052000000110VFF000000052000000162VFF000000052000000214TFN01TRANSH01.THF TESTPA01.CPH XXXXXX01.GEN XXXXXX01.IMG XXXXXX02.IMG  \ No newline at end of file diff --git a/autotest/gdrivers/data/adrg/subdataset/XXXXXX01.GEN b/autotest/gdrivers/data/adrg/subdataset/XXXXXX01.GEN new file mode 100644 index 000000000000..ff9f53d030aa --- /dev/null +++ b/autotest/gdrivers/data/adrg/subdataset/XXXXXX01.GEN @@ -0,0 +1 @@ +008182L 0600115 340300003100000010420031DRF0570073DSI0440130OVI0820174GEN2290256SPR1290485BDF0500614TIM0390664 GENERAL_INFORMATION_FILE1000;&RECORD_ID_FIELDRTY!RID(A(3),A(2))1100;&DATA_SET_DESCRIPTION_FIELDNSH!NSV!NOZ!NOS(4I(2))1000;&DATA_SET-ID_FIELDPRT!NAM(A(4),A(8))1600;&OVERVIEW_INFORMATION_FIELDSTR!ARV!BRV!LSO!PSO(I(1),I(8),I(8),A(11),A(10))1600;&GENERAL_INFORMATION_FIELDSTR!LOD!LAD!UNIloa!SWO!SWA!NWO!NWA!NEO!NEA!SEO!SEA!SCA!ZNA!PSP!IMR!ARV!BRV!LSO!PSO!TXT(I(1),2R(6),I(3),A(11),A(10),A(11),A(10),A(11),A(10),A(11),A(10),I(9),I(2),R(5),A(1),2I(8),A(11),A(10),A(64))1600;&DATA_SET_PARAMETERS_FIELDNUL!NUS!NLL!NLS!NFL!NFC!PNC!PNL!COD!ROD!POR!PCB!PVB!BAD!TIF(4I(6),2I(3),2I(6),5I(1),A(12),A(1))2600;&BAND_ID_FIELD*BID!WS1!WS2(A(5),I(5),I(5))2100;&TILE_INDEX_MAP_FIELD*TSI(I(5))00060 D 00045 34030010060000DRF0090006DSS010101010100322 D 00151 9903001000000006000000000DSI000000013000000006OVI000000039000000019SPR000000061000000058BDF000000046000000119TIM000000006000000165OVV01ADRGXXXXXX0130004606700046067-0000000.50+480000.5000000000012700012700000000100100012800012801008XXXXXX01.IMGYRed 0000000000Green0000000000Blue 00000000000000100502 D 00151 9903001000000006000000000DSI000000013000000006GEN000000219000000019SPR000000061000000238BDF000000046000000299TIM000000006000000345GIN01ADRGXXXXXX0130099.90099.9016-0000000.50+465959.48-0000000.50+480000.50+0010000.52+480000.50+0010000.52+465959.4800869134101100.0N0004606700046067-0000000.50+480000.50 00000000012700012700000000100100012800012801008XXXXXX01.IMGYRed 0000000000Green0000000000Blue 00000000000000100502 D 00151 9903001000000006000000000DSI000000013000000006GEN000000219000000019SPR000000061000000238BDF000000046000000299TIM000000006000000345GIN01ADRGXXXXXX0230099.90099.9016-0000000.50+465959.48-0000000.50+480000.50+0010000.52+480000.50+0010000.52+465959.4800869134101100.0N0004606700046067-0000000.50+480000.50 00000000012700012700000000100100012800012801008XXXXXX02.IMGYRed 0000000000Green0000000000Blue 000000000000001 \ No newline at end of file diff --git a/autotest/gdrivers/data/adrg/subdataset/XXXXXX01.IMG b/autotest/gdrivers/data/adrg/subdataset/XXXXXX01.IMG new file mode 100644 index 000000000000..0955a8b16c1a --- /dev/null +++ b/autotest/gdrivers/data/adrg/subdataset/XXXXXX01.IMG @@ -0,0 +1,19 @@ +001852L 0600065 340300002000000010420020PAD0280062SCN0300090 GEO_DATA_FILE1000;&RECORD_ID_FIELDRTY!RID(A(3),A(2))1000;&PADDING_FIELDPAD(A)2000;&PIXEL_FIELD*PIX(A(1))51015 D 00088 9903001000000006000000000PAD000001769000000006SCN000049152000001775IMG01 ïîíìëêéèçææääââáàßÞÞÝÜÚÚÙØ×ÖÖÔÓÓÒÑÐÎÎÍÌËËÉÉÈÆÆÅÄÃÂÁÁÀ¿¾¼¼»º¹¸··µµ´³³±°¯¯®­¬«ª©¨§¦¦¥££¢¡ Ÿžœ›™™˜—–•””“’ŽŒ‹ŠŠ‰ˆ‡†……ƒ‚€~}|îíëëêéèçæååããâáàßÞÝÝÜÚÚÙØ×ÖÕÔÔÒÒÐÏÏÎÍÌËËÊÈÈÇÆÅÄÄÂÂÁÀ¿¾½¼»º¹¹·¶¶µ´³²²°¯¯®¬¬««ª¨§§¦¥££¢¡  žžœšš™˜—–•””’’ŽŒ‹‹‰‰ˆ‡†…„ƒƒ€~}|{íìëêéèççåäããâáàßßÞÝÜÚÙÙØ××ÕÕÓÒÒÑÐÏÎÍÌËËÉÉÈÇÆÅÄÃÃÁÁÀ¿¾½¼»ºº¸¸·µµ´³²±°¯¯®­«««©¨¨¦¦¥¤£¢¡ ŸŸœœ›š™˜—–••“’‘‘‹ŠŠˆˆ‡†……„‚‚€~}||zìëêêèèçæåäãâáàßßÞÜÜÛÚÚØØÖÕÔÔÓÒÑÐÐÎÍÌÌËÉÉÈÇÆÆÄÃÃÁÁÀ¿¾¾¼¼ºº¸¸·¶µ´³²±°¯¯­­¬«ª©¨¨§¦¥¤£¢¡  žž›šš™˜—–•””’’‘ŽŒŠŠ‰ˆ‡†……ƒƒ‚€~}||{yëêêéèææåäãâáààÞÞÝÜÛÚÙØ××ÖÕÓÒÑÑÐÏÎÍÍËËÉÉÈÇÆÅÄÃÂÁÁÀ¿¾¾¼»ºº¹··¶µµ´²±°¯®®­¬¬ª©©¨¦¦¤¤£¢¢ Ÿžœ›š™˜——–•““’‘ŒŒ‹Š‰ˆ‡‡†…ƒƒ€€~}}{zyyêééççæåäãâáàßßÞÝÜÛÚÙØØ×ÖÕÓÓÒÑÑÏÏÎÍÌÊÊÉÈÇÇÆÄÄÃÂÁÀ¿¾½¼¼»¹¹¸·¶µµ´²±°°®®­¬«ª©¨§§¦¥¤£¢¢ ŸŸžœ›š™™˜—–””“’’ŽŽŒŒ‹Š‰‰‡††„„ƒ‚€~~||{zyxééççååäãââààßÞÝÜÛÚÚØ××ÖÕÔÓÒÑÐÐÎÍÌÌËÊÉÈÇÆÅÄÄÃÂÁÀ¿¾¾½»»º¹¸·¶µµ³³±±¯¯®­­««©©¨§¦¥¥£¢¡¡ŸŸžœœš™™˜—–•”“’’ŽŽŒ‹ŠŠˆ‡††„ƒ‚€}||{zyxwéèçæåääââáàßÞÜÜÛÚÙØØ×ÕÕÔÓÒÒÐÐÏÎÌÌËÊÉÉÇÇÅÅÄÃÂÁÀ¿¾½½»ºº¹¸··¶µ³³²±°¯®®¬««ª©¨§¦¥¤£¢¢ ŸŸžœ›š™˜—––•””“‘ŽŒ‹Š‰ˆ‡†……ƒƒ‚€~~}|{zyxwvèçæåääãáààßÞÝÜÛÚÚÙ×ÖÖÔÔÓÒÑÑÐÎÎÍÌËÊÉÈÇÆÆÄÄÃÂÂÀ¿¿¾½»»º¹¸··µµ³³²±°¯¯®­¬«©¨¨§¦¥¤££¡  Ÿžœ››™˜—––•”“’’‘ŽŒ‹Š‰ˆˆ‡†…„ƒ‚€~}}|{zyxwvuçæåääãáàßßÞÞÜÛÚÚÙØ×ÖÕÔÓÒÒÐÏÏÎÍÌËËÉÈÈÇÅÅÄÃÂÂÀ¿¾¾½¼»º¹¸¸·µ´´³²±°¯®®­««ª©¨§¦¦¤££¡¡ Ÿžœœšš™˜—–•”“’’‘ŽŽŒ‹ŠŠ‰ˆ‡…„„ƒ‚€€~~}{{zyxwwuuçæåãâááàßßÝÜÛÛÚÙØ×ÖÕÔÓÓÒÐÏÏÎÍÌËÊÊÈÈÆÆÅÄÃÂÁÁ¿¿¾½¼»º¹¸·¶¶µ´³²±°¯®­¬¬«ª©¨§¦¦¤¤£¢¡ŸŸžœœšš™˜—–••”’’ŽŽŒ‹‹Š‰ˆ‡†…„ƒ‚€~~||{zyxwwvutæåãâááàßÞÝÜÜÛÚØØ×ÖÖÔÓÒÑÑÐÏÎÍÌËÊÉÉÈÇÆÅÄÃÃÂÁÀ¾¾½¼»º¹¸·¶¶µ´³²±°¯®­¬¬ªª©¨¨¦¥¤¤¢¢¡ Ÿžœ›š˜˜—––””“’‘ŽŒŒŠ‰‰ˆ‡†…„ƒ‚€~}}|{{yxxwvutsääãâáààÞÝÝÛÛÙØØØÖÕÔÓÒÒÑÐÏÎÍÌËËÊÉÈÇÆÅÄÄÂÂÁ¿¾¾½¼»º¹¹·¶¶µ´³²±±¯®®­¬«ª©¨§¦¦¥££¢¡ Ÿžžœ››™™˜——•”““‘‘ŽŒ‹‹‰ˆ‡‡†…„„ƒ€~}|{zyxxwuttsräãâáàßßÝÜÜÛÚÙØ×ÖÖÕÔÓÑÑÐÏÎÍÌËËÊÉÈÇÆÅÄÃÃÁÁ¿¾¾½¼»ºº¹··¶µ´³²±±°¯®­¬«ª©©¨¦¥¥££¢¡ ŸŸœ››š™˜—––”““‘ŒŒ‹‰‰ˆ‡†…„„‚‚~}||{yywvuutsrqãâááßÞÝÜÜÚÚÙØØÖÕÕÓÓÑÑÐÏÎÍÌËÊÊÉÈÇÆÅÅÃÃÁÁ¿¿¾½¼¼º¹¸·¶¶µ´³³²±¯¯®¬¬«ªª©¨§¦¤¤£¢¢ Ÿžžœœ›š™˜˜––””“’‘ŽŒ‹ŠŠ‰‡‡†……ƒ‚€€~}|{zzyxwvutsrqqâáàßÞÞÝÜÛÚÙØ×ÖÕÕÓÒÒÑÐÏÏÍÌÌÊÊÉÈÇÆÅÄÃÂÁÁ¿¿¾¾¼»º¹¹¸·¶µ´³³±°°¯®­¬«ªª©§¦¥¥¤£¢¡ ŸŸœ›š™™—––•”’’‘ŽŽŒ‹‰‰ˆ‡†…„„ƒ‚€€~}||{zxxwvutssqqoáààÞÞÝÜÛÚÙØØÖÖÕÔÓÒÑÐÏÎÎÍÌËÊÉÈÇÆÅÅÄÃÂÀÀ¿¾¾½»º¹¹¸·¶µ´³³±°¯¯®­¬«ª©¨¨§¦¥¤£¢¡¡ŸŸœ›š™˜˜—••”“’‘Ž‹‹Š‰ˆ‡†……„‚€~}|{{yyxwvuttrqppoáßßÞÝÜÛÚÙÙØ×ÖÕÓÓÒÑÑÐÎÎÌËËÊÉÈÇÇÅÄÄÂÂÁÀ¿¾½¼¼»¹¹¸·¶µ´´²²°°¯®­¬«ª©¨¨§¦¥¤£¢¡¡ Ÿž››š™˜˜—••”“’‘ŽŒŒ‹Š‰‰‡††…„‚‚€~}}{zyyxwvutsrrpoonàßÞÝÜÜÚÙÙ××ÖÔÔÓÒÑÑÏÏÍÍÌËÊÊÉÇÆÅÄÄÃÂÁÀ¿¿½¼¼»¹¹¸··µ´³³²°°¯®­¬¬«©©§§¦¥¤£¢¢¡ žžœœš™˜——–””“’‘ŽŒ‹Š‰ˆˆ‡…„„ƒ‚€€}}|{zyxwwuttrrpponmßÝÝÜÜÛÙØ××ÕÕÔÓÒÑÐÏÏÍÍÌËÊÉÈÇÇÆÅÃÃÂÁÀ¿¾¾½»ºº¹¸·¶¶´´²±±°¯®­¬««©©¨§¦¥¥££¢  žœœšš™—––•”“’‘‘ŽŒŒ‹Š‰‰ˆ††…„‚‚‚€~}||{zyxwwuttrqqponmlÝÝÜÛÚÙÙ××ÖÕÔÓÒÑÐÏÏÎÍÌËÊÉÈÇÇÆÅÄÃÂÁÀ¿¾¾½»»¹¹¸··¶µ³²²±°¯¯­¬««©©§§¦¥¤£¢¡¡ Ÿžœ›š™™˜–••”“’‘Œ‹‹‰‰ˆ††…„ƒ‚€}|{{yyxwvvttrrqppomllÞÝÜÚÙØØ×ÖÕÔÓÒÑÑÏÏÎÍÌËÊÊÉÇÆÆÅÄÃÂÁÁ¿¾½¼¼»º¹¸··¶´³²²±°¯®®­¬«ª©¨§¦¦¤£¢¢¡ Ÿžœœ›™˜˜—–•”“’’‘ŽŒŒŠ‰ˆˆ‡…„„ƒ‚‚€}}|{zyxxvvutsrqponmmkkÜÜÛÚØØ×ÖÕÔÓÒÑÑÐÏÎÍÌËËÉÉÇÆÆÅÄÃÃÁÀÀ¾½½¼»º¹¸¸·µµ´³²±°¯¯®­¬«ª©¨§§¥¤£¢¡¡ ŸŸœš™™——–•”““’ŽŒ‹Š‰ˆˆ††…„ƒ‚€~~}|{zyxxwvttsrqpoomlkjjÜÚÚØØ×ÖÕÔÔÓÒÐÐÏÎÍÌËËÊÉÈÆÆÅÄÃÃÁÁÀ¿¾½¼»º¹¸¸·¶µ´³²±°¯®®­«ªª©¨§¦¥¤££¡  Ÿžœœ›š™˜—–••““’‘Ž‹‹‰ˆˆ††…„ƒ‚€~}|{{yxwwvutsrqqpnnmkkjiÛÚØØ×ÖÖÔÓÓÒÐÐÏÎÍÌËËÉÉÈÇÆÅÄÃÂÁÀÀ¿¾½¼»º¹¸¸·¶´´³²±±°¯®¬««ª©©§§¦¤££¢¡ Ÿž››™˜˜——–•”’’‘ŽŒ‹ŠŠ‰ˆ‡†…„ƒ‚‚€~}||zzyxvuutsrqqoonmlkjihÚÙØ×ÖÕÔÓÓÑÑÐÏÎÍÌÌÊÊÉÈÇÆÅÅÃÃÂÀÀ¿¾½¼»º¹¹¸·µ´´³²±°¯¯®­««ª©¨§¦¦¤££¢¡ Ÿžž›šš™˜——–•”“’‘ŽŒŠŠ‰ˆ‡†…„ƒƒ}}|{{yxxwvutsrqponnllkjihgÙØ××ÕÔÔÓÒÐÐÏÎÍÍÌËÊÉÈÇÆÅÄÃÂÂÀÀ¿¾½½»»º¸¸·¶µ´³³²°°¯­­¬«ª©¨¨¦¦¥££¢¡ ŸŸžœšš™˜—–•””“’Œ‹‹Š‰ˆ‡††„ƒ‚€~}}{zyxwwuuttrqqponmlkjiiggØ×ÖÖÔÓÒÒÑÐÏÎÎÌÌÊÉÈÈÇÆÅÄÃÃÁÁÀ¿¾¾¼¼º¹¹¸·¶µµ´³²°¯¯®­¬«ª©©¨§¦¥¤£¢¡ Ÿžžœœ›š™˜——••““’‘ŽŒŒ‹Š‰ˆ‡†…„ƒƒ‚€€~}|{zzywwvuusrrqoonmlkjiigge××ÖÔÓÓÒÑÐÐÎÎÌËËÊÉÈÇÆÆÄÃÃÂÀÀ¿¾½¼¼»¹¹¸·¶µ´³³²±¯¯®­¬««ª©¨¦¥¥¤£¢¡  žžœ›š™™˜—••”“’‘ŒŒŠŠˆˆ‡††„„‚‚€€~~}{zzxxwvutssqqpnmmllkihgffeÖÖÕÔÒÒÑÐÐÎÎÌÌËÊÉÈÇÆÅÄÄÃÂÁÀÀ¾½¼»ºº¹¸·¶µµ´³±±¯®®­¬¬«©¨§§¥¥¤¤¢¡¡ŸŸž››š™˜——••”“’‘ŽŽŒŒ‹Š‰ˆ‡†…„„ƒ‚€}||{zxxwvuttsrqoonmlkjjhhgfedÖÕÔÒÒÑÐÐÎÎÍÌËÊÉÈÈÇÅÅÄÂÁÀÀ¿¾¾½¼ºº¹¸·¶µ´´²±±°¯®­­««©¨¨§¥¥¤¤¢¢  žžœ›š™˜——–””“’‘ŽŽŒ‹Š‰ˆ‡†……„ƒ‚€~}}|{zyxwvuutrrqponmlkkjihgfeecÕÔÓÒÑÐÏÎÎÍÌËÊÉÉÇÆÆÅÄÃÂÁÀ¿¾¾¼»ºº¹¸·¶µ´´³²±°¯®®¬¬«ª©¨§¦¥¤££¢  Ÿžœ›š™™˜––•”“’‘‘ŽŒ‹‹Š‰ˆ‡‡†…„ƒ‚€~}||zzyxwvutssrqponmlkjjihgfeddbÔÓÒÑÐÏÏÍÍÌËÊÉÉÇÇÅÅÄÃÂÁÀ¿¾¾¼¼»º¹¸·¶µ´´³²±°¯®®­««ª©¨§¦¥¤££¡¡ Ÿž›šš˜——–•”“’‘ŽŒŒ‹Š‰ˆ‡‡†…„ƒ‚‚€}|{{zyxwwvttsrqponmlljiihggeeccbÓÒÒÐÏÎÎÍÌËÊÉÉÈÆÆÅÄÃÂÁÁÀ¿¾½¼ºº¹¸·¶µµ´²±±°¯®­­«ªª¨¨§¦¥¤££¡¡ Ÿžœœšš˜˜—–•”“’‘‘ŽŒ‹‹‰ˆ‡‡†…ƒƒ‚€~~}{{zyxwvvtsrrqpponlljjihgfedcca`ÓÑÐÐÎÎÍÌËÊÉÉÇÇÅÄÄÃÂÁÀÀ¾½¼¼»º¹¹¸¶¶µ´²²±°°®­¬««ª©¨§¦¥¥¤£¢¡ Ÿžœ››™™˜—••””’‘‘ŽŒŒŒŠ‰‰‡‡……„ƒ‚€~~}|{zzywvvutsrqpoonllkiihgfedccb``ÑÑÐÏÎÍÍËÊÉÉÈÆÅÅÄÃÃÁÀÀ¿¾½¼»º¹¸··¶µ³³²±°¯®­¬¬«ª©¨§¦¥¤¤£¢¡  žœ›š™™˜—–•”“’‘‘ŽŒ‹‹‰ˆ‡‡……„ƒ‚€~}|{zyxxwuussrqpoonlljjihgfeeccba`_ÑÐÏÎÎÎáòûþüôçÒÄÃÃÁÿÿÿÿýøìؾ¸··¶´´³´ùù±®®¬¬«ªÿÿ§¦¦¥¤¢¢¡ Ÿžžœ›ÿÿÿÿû躔”“’‘•Æêúúêć………„‚„°ÛóüùèÉ—zxwÿÿutss…ïÿ³ml‘ÖõýíÆŠfddcbÿÿ_^ÐÏÎÍÓ÷ÿÿÿÿÿÿÿÿÄÃÂÁÿÿÿÿÿÿÿÿøÆ·¶µ´³²ÍÿÿË®­¬«ª©ÿÿ¦¦¥¤£¢¡ Ÿžž›šÿÿÿÿÿÿÿ»“’‘ òÿÿÿÿÿÿñ™…„ƒ‚äÿÿÿÿÿÿÿÿxwwÿÿtsr‡ðþ­nl›þÿÿÿÿÿÿddbbaÿÿ^]ÏÎÍÏ÷ÿ÷ÜÎÈÈÏÝòÃÁÀ¿ÿÿ½¼½ÃÓôÿù»µ´³²²ìÿÿì­¬«ª©¨ÿÿ¦¥¤£¢¡ Ÿžœššÿÿ——Õÿë’‘’îÿé«Ž©èÿ퉃ƒƒæÿñ²€®àxvvÿÿsrˆòþ¦nllæÿÒ€jsšÙdcbaaÿÿ]]ÎÍÍáÿöËÇÇÆÅÄÄÃÂÁÀ¿ÿÿ¼¼ºº¸»òÿÚ´³³±¾ÿíîÿ¹«ªª¨¨ÿÿ¥¤£¢¡ ŸŸœ›š™ÿÿ–••›ÿü‘¿ÿ튉ˆ‡Œìÿ¸ƒ‚³ÿï‰}}{zzxxwvuÿÿr‹óü nmlküÿshgfeccbba`ÿÿ]\ÎÌËòÿÛÈÇÆÅÅÄÃÂÁÀ¿¾ÿÿ»»¹¹¸·Íÿï³²²°ÜÿÎÌÿÚª©¨¨§ÿÿ¤£¢¡  žž››šš˜ÿÿ••”šÿùŽãÿ²Š‰ˆ‡‡†®ÿàÞÿ­}|{zzyxwvutÿÿŒôûšnmlkjìÿ²rfddcbaa`_ÿÿ\[ÌÌÊûÿÍÇÇÆÿÿÿÿÿÀ¿¾¾ÿÿ»º¹¸·¶¼ÿú³±°³úü±¯ùù¬¨§§¥ÿÿ£¢¢  Ÿžœ››™˜—ÿÿ•“›ÔÿÚŒ÷ÿ”‰ˆ‡‡†…ÿö€õÿ‰|{{yyxwvvttÿÿöù•nmlkjj¢ÿÿþêËea`__^ÿÿ[ZÌÊÊþÿÈÇÅÄÿÿÿÿÿ¿¾¾½ÿÿº¸¸·¶µµÿþ±±°ÌÿᬫÚÿɨ¦¦¥ÿÿ¢¡¡Ÿžžœœš™˜˜—ÿÿÿÿÿÿ皎ŽŒýÿ‹ˆ‡†……ƒ„ÿý€ýÿ~|{yyxwwuutsÿÿüò‡mmkjiihŽÑøÿÿÿão`_^]ùùZYËÊÉûÿÊÆÄÄÃÂÁÿÿ¾½½»ÿÿ¹¸·¶¶µºÿú±°¯îÿÁ¬«¶ÿ짦¥¤ÿÿ¡ ŸŸžœ›š™˜—––ÿÿÿÿÿú±ŽŒ‹÷ÿ“‡††…„ƒÿöõÿ‡zyxxwvuutsqÿÿœýó‡kjjhhgfef}¡éÿÆ^^]]îïZXÊÉÉòÿ×ÅÄÃÂÁÀÿÿ½½»»ÿÿ¸·¶µµ´Ìÿî°¯¾ÿÿÿÿÿÿÿÿ¶¥¥£ÿÿ¡ Ÿžœ›šš™—––•ÿÿ“”³úý¤‹‹Šãÿ¯††…„ƒ‚¬ÿà}Þÿ«zyxwvvttsqqÿÿožýõ‡iihgfeddbavÿô^]\[ãåYWÉÈÇàÿóÅÃÂÁÀÀÿÿ½¼ººÿÿ··¶µ´µñÿׯ®ÝÿÿÿÿÿÿÿÿÚ¤¤£ÿÿ Ÿžœ››š˜˜—–••ÿÿ’¾ÿ茌Š‰¼ÿë‹…„ƒ‚†êÿ¶}|°ÿî„xxwvttsrqpÿÿmm¢þö‰hgffedcb`kÿü^][[ZYWWÉÈÆÉøÿòÔÅÁÇØÿÿ»»º¹ÿÿ¶¶·¼Ïóÿøµ¯±úþ´ª©¨§°þú¨£¢ÿÿŸžœ››š™˜—–••“ÿÿìÿ»Š‰‰Žïÿ祈‡£æÿìƒ}|~åÿð­‡xyŠªßqqoÿÿlkk¥þ÷‹feÞ¤{feÓÿã]\ZYYXWVÇÆÅÅÎøÿÿÿÿÿÿý×»º¹¸ÿÿÿÿÿÿÿÿö¿¯®Íÿç©©¨§¦¦æÿÆ¡ ÿÿÿÿÿÿÿÿ™˜—–•””’ÿÿŽªÿù•‰ˆ‡šòÿÿÿÿÿÿð“}{{{‡äÿÿÿÿÿÿÿÿpooÿÿlkji¨ÿødÿÿÿÿÿÿÿý\ZYYÿÿVUÇÆÅÄÃÆßòüþ÷åÅ»º¹¹·ÿÿÿÿü÷èѳ®­­îÿƪ¨§¦¦¤Âÿì¡ ÿÿÿÿÿÿÿÿ˜—–••”“‘ÿÿŽŒ‹ØÿÚ‡‡†…ŒÂéúúéÀ†}|{{yx{«ÙóýùçÅonmÿÿkjiig¬ÿúŽ‚¹âùüîÊ\[ZYXÿÿVTÆÅÄÃÂÂÀ¿¿¾½½»º¹¹¸·µµ´³²±±°®­¬¬«ª©¨§¦¥¤££¢¡ Ÿžž››š˜˜—––•”“’ŽŒ‹ŠŠ‰ˆ‡†……ƒ‚‚€~}|{zzywvvuttrqppnnmlkjihggeddcbba`^]\\[ZYXXVUTSÅÄÃÂÂÀ¿¾¾½½»ºº¹¸¶µµ´³²±°¯®­¬¬«ª©©§¦¥¤¤£¢¡¡ žž››š™˜—–••“’’‘Ž‹‹Šˆˆ‡†…„ƒƒ~}|{zzywwvutsrrqonmmlkjiigffdccba`__]]\[ZYXXVUUTSÅÄÂÁÀ¿¿¾½¼»ºº¹¸·¶µ´³²²°¯¯®­¬«ª©©§§¥¥¤£¢¡¡ Ÿžœœ›š™˜˜––•“’’ŽŽ‹ŠŠ‰ˆ‡†…„„‚€~}||{yyxvuutsrrqoommlkjiihffedcba``_^\\[ZYXWWUTTSRÄÃÁÀ¿¿¾½½»»º¹¸·¶µ´³²²±¯¯®­¬«ª©©¨§¦¥¤£¢¢ ŸŸœ›š™™˜–•””“‘’Ž‹‹Š‰ˆ‡‡……ƒƒ‚€~~|{{zyxwvutsrqpponmlkjiiggfedccb``_^]\[ZYXWWVTTSRQÃÂÁÀ¿¾½¼»»¹¹¸¶¶µµ´²±±°®®­¬«ª©¨¨§¦¥¤£¢¡ ŸŸžœœ›š™˜—––•”“’‘‘ŽŒ‹‹‰‰ˆ‡††…ƒƒ‚€~}}{zzywwvutsrrqponmlkjjhhgfedcbb``_^]\[ZZXXVVUTSRQPÂÁÀ¿¾½¼¼»¹¹¸·¶µ´³²±°°¯®­­«ª©©¨§¥¥¤£¢¡  Ÿœ›š™™˜––•”“’‘ŽŒ‹Š‰‰ˆ††…„ƒ‚€~}|{zyyxwwuussrqpnnmlkkjihgeedcbb``^^]\[ZYXXVVUTSRRPOÁÀ¿¾½¼»»º¹¸·¶µµ³³²±°¯®­¬««ª¨¨§¦¥¤£¢¡  Ÿœ›š™˜˜—–•”“’‘‘ŽŒ‹ŠŠˆ‡††…„ƒ‚€€~}||{zxxwvutsrrqponmllkiiggfeecbb`__^]\[ZYYWVVUTSSRPOOÀ¿¾¾½¼»º¹¸··µµ³³²±°¯®­¬«ªª©¨¦¦¥¤£¢¢¡ŸŸžœœšš˜——–•”“’‘‘ŽŒ‹Š‰ˆ‡†……ƒƒ‚€~~}|{zyxwwuusrrqponmlljjiggfedccaa_^^]\[ZZYXWUUTTRQQPOMÀ¾½¼»»º¹¸·¶¶´´³±±°¯®­­««ª¨¨§¦¥¥£¢¢¡ Ÿžœ›š™™˜—–•”“’’ŽŒ‹Š‰‰‡††…„ƒ‚€}}|zzyyxvuussqqppnnmlkjihgfeecbba`_^]\[ZZYXWVUUSRQPPONM¿½¼¼»º¹¸¸¶¶´´³²±±¯®®­««ª©¨§¦¦¤£¢¢¡ Ÿžœ›š™™˜—–•””“‘Œ‹ŠŠˆˆ‡†„ƒƒ‚‚€}}|{zyxwvuutsrqponmmkkjihgffedcb```^]\\[YXXWVUTSRQPPONML¾½¼»º¹¸··¶´³³²±°¯¯­­¬«ª©¨§§¥¥¤£¢¡ Ÿžœ›š™——–•””’‘‘ŽŒ‹‹‰ˆˆ‡†…„ƒ‚€~~||{zyywwuttsrqpoonmkjiihgfeeccba``_]\\[ZXXWVUTSSRQPONMML½¼»ºº¹··¶µ´³²±°¯¯®­«ªª©¨§¦¥¤¤¢¢¡ Ÿžœœšš˜˜——••“’’‘ŽŒŒŠŠ‰ˆ‡†…„ƒƒ‚€€~}|{zyxxvvutsrqqpnmmlkjihgfeddcba`_^]][[YYXWVUUSRQQPONMLLK¼»º¹¹··µ´´³²±±°¯­¬¬«ª©¨§§¥¤££¢¡ ŸŸœ›š™˜—–•””“’ŽŒŒ‹‰‰ˆ‡†…„ƒ‚‚€~~}|{zyxwvuutsrrqponmkkjihhffedcba`_^]\\ZZYXWVVTTRRQPONNLKJI»ºº¸¸·µ´´³²±°¯¯­¬¬«ª©©¨¦¦¥¤£¢¡ Ÿžžœ›š™˜˜—•””“’‘ŽŒŒ‹‰‰‡‡††…ƒƒ‚€~}||zyxxwvutsrqppnnmkkkiihgeeccbb``^^\\[YYXXVVTSRRQPONMMKJJIºº¹¸·¶µ´³²±±°¯®­¬¬ª©¨§¦¥¥¤££¡ Ÿžœœšš™˜——•””“’‘Œ‹Š‰‰ˆ‡††„ƒƒ€~}|{{yxxwvutssqqonnmlljiiggeddcbba`^]]\[ZYXWVUTSSRQPPNNMKJJIH¹¹¸·¶µ´³³²±°¯®­¬«ªª¨¨¦¦¥¤£¢¡¡ žžœ›š™˜˜—•””“’‘‘ŽŒŒ‹Š‰ˆ‡†…„„ƒ€~}||zzxxwvutssqpponmlljihggfedcbb`_^^]\[[ZXXWUTSSRQPOOMLKJJIHG¹¸·¶¶´³²±±°¯®­¬«ª©¨¨§¦¥¤£¢¡  žœ›š™™˜—••““’‘ŒŒ‹Š‰ˆ‡†…„ƒ‚‚€€~||{zyxwvuttsqqponmlkjihhffedccb`__]]\[ZYYXVUUTSRQPOONMLKIIHGF¸·¶µ´³³±±°¯®­¬««ª¨§¦¦¥¤£¢¢  Ÿ››š™˜˜—–•”““‘ŽŒ‹Š‰ˆ‡†…„„ƒ‚€€~~}{zzyxwvuusrrpponmlkjjihffeddbba`_^]\[ZYXXWUUTSRQPONNLLKJIHGGF·¶¶µ´³²±°¯¯­¬««©¨¨§¦¥¤££¡¡ŸŸžœ›šš˜˜—–•”“’‘Œ‹Š‰‰‡†…„„ƒ‚€~~||{yyxwvuutsrqponnmkjjiggfeecbba`^^]\\ZZYWWVUTSSQQOONMLKJIHGFFE·¶´´²²±¯¯®­¬««ª©¨§¦¥¤£¢¡¡ Ÿžœœš™™—––•”“’’‘ŽŒ‹‹‰ˆˆ‡……„ƒ‚€~}}{{yyxxvvutsrqpoomllkjhhgfeedcba__^]\[ZYYXVUUTSRQQOONMLKJIHGFFEDµ´³³²±°¯®­­¬«ª©¨§¦¥¤££¡¡ žžœ›šš˜˜—–•”““’Œ‹‹‰ˆ‡‡……„ƒ‚€€~}}{{zyywvuutsrqppnmmlkiihgffecbba`_^]\\ZYYWWVUTSSQPPOMMLKKIIHFFECC´³²²±°¯®­­¬«ª©¨§¦¥¥¤¢¡¡ Ÿžœ›šš™˜—–•”“’’ŽŽŒ‹Š‰ˆˆ‡†„„ƒƒ€~}}{{zyxwvvussrqponmllkjihgfeddcb``_^]\[ZZYXWVUTSSQPPONMLKJJIHGFEDCB³³²±°°®­¬¬«ª©¨§¦¦¤££¡¡ Ÿž››™™——–•””’’ŽŒ‹‹Šˆˆ‡……„ƒƒ‚~~||{zzyxvvttsrqppomlljjihgfeedcba`_^^\\ZZYXWVUTSSRQPONNLKJJHHGFEDCBA³²±°¯®®¬¬«ª©¨¨§¦¤¤£¢¡ ŸŸ››š™˜—–•””“‘‘ŽŒ‹ŠŠˆ‡‡†…„„ƒ‚€~}|{zyxxvvussrqpoonmkkjihhgeddcba`_^]][[ZXXWVUTTRQQPONMMKKJIGGFEECBA@³±°¯®®­¬«ª©¨§§¦¥£¢¢¡ Ÿžœœ›š™˜—––”““’‘ŽŽ‹Š‰ˆˆ‡†…„„‚‚€~}|{zzxwvvttsrqponmlljjjigffedcba`_^]]\[ZYXWVUUTRRQPONNLKJJHHGFEDCBAA@±°°®®­¬«ª©¨§¦¦¤¤£¢¡¡ŸŸžœšš™˜—––””“’‘ŽŒ‹‹‰ˆˆ‡†…„ƒƒ‚€~}|{{yywwuttsrqqponmlkjiihffddcba`_^^]\[ZXXWWUTTSQQPONMLKJJIHGGEDCBA@@?°°®®­¬«ª©¨§¦¦¥¤£¢¡  žœ›š™˜˜–••”’’‘‹ŠŠ‰ˆ‡†…„„‚‚€€~}}|zzyxwvuttrqqpnnmlkjjhggfedcbb`__^]\ZZYXWWVUTSRQPONMLKKJIHGGEECCBA@?>¯¯®­¬«ªª¨§§¦¥¤£¢¡  Ÿžœ››š™˜——–•”“’‘ŒŒŠ‰‰ˆ‡††…„‚€~}|{{zyxwvuttsqpoommlkjiiggfedcca`__]]\[ZYXWWUTTSRQPONNLKJIIHHFEDDCBA@?>>¯®­¬¬ª©©¨§¦¥¤£¢¢¡ŸŸœ›š™™—––•““’‘Œ‹Š‰ˆ‡†……ƒ‚‚€~~||{yyxwvuussqqponmmkjjhggfedcbb`__^]\[ZYYWWVUTSRRPOOMLKKJIHGFFDCBBA@?>><®®¬«ª©©¨§¦¥¤££¡  Ÿžœ››™˜—––•”“’‘ŽŒ‹‹Š‰ˆ‡‡……ƒƒ‚€~~|{zzxxwvutssqqponmlkkihhgfeddcaa`^]]\[[ZXWVVUTSRQPOONMLKJIHHFEDDCBA@?>=<<­¬¬«ª¨§§¥¥¤¤£¡¡ŸŸžœ››™™—––””“’‘ŽŒ‹‹Š‰ˆ‡†……„ƒ‚€~~||{zyxwwuutrrqponnlkjjhhgfedcba``^^]\[[ZYWWVUTSRQQOONMLKJIIGFEECBBA@??=<<:¬««ª©¨§¦¥¤££¢  Ÿžœ›š™™˜—–•”“’‘‘Œ‹Š‰ˆ‡‡†„„ƒ‚‚€€~}}{{zyxxvuussqqponmlkjjhhgfedccba`_^]\\ZZXXWUUTTRQPPONLLKJIHHGFEDCBA@@>>=<;:¬«©©¨§¦¥¤£¢¡¡ Ÿžœ›šš™——•••“’’ŽŽŒ‹Š‰‰ˆ‡……„ƒ‚€}||{zzxwwutssrqponmlljiihgfedccb``_^]][ZYYXVVUUSRRQPONMLKJIIHGFEDCBA@?>=<<;:9«©©¨§¦¥¤¤£¡  Ÿžžœœ›š˜˜—•••““‘ŽŒ‹‹Šˆ‡††…„ƒ‚~}}|{zyywvvutsrqponnmljjhhhffedbba`__]\[[YYXWVUTSSQPPONMLKKJIGGFEDCBA@??>=<;:98ª©¨§¦¦¥£¢¡¡ Ÿžœš™™˜—–••”’‘ŽŒ‹‹‰ˆˆ‡†…„ƒ‚€€~||{zyxwwuutsrqppnmlkkiihgffdccba`_^^\[ZYYXWVUTTSQQONNMLKJJHHGFEDCBBA@>=<<;:997©¨¨¦¥¤¤£¢¡ Ÿž›šš™˜—–••“’’ŽŒ‹Š‰ˆ‡††…„ƒ‚‚€~}}|{zyxwvvutsrqpponmkkjihhgfedcba`_^]][ZYYXWVUTSRQPOONMLKKIIHGFEDCBA@@?>=<<:9977¨§¦¥¤££¢¡ Ÿžœ›š™˜—–•””’’‘ŽŒ‹‹Š‰ˆ‡†…„ƒ‚€€~}||zyxxwvutsrqqonnmlkjihgfeddcbaa_^]]\[ZYXXVUTSSQPPOOMLKJJHHGFEECBAA??>=<;::9866§¦¥¤££¢¡ ŸŸžœœ›š™˜—––”““’ŽŒ‹‹Š‰ˆ††……ƒƒ‚€~}|{zyxxvvutsrqpponmlkjiihgeeccbb`_^]\\[ZYXWVVTTRRQPOOMMLJIIHGFEDCCBA??>==<;:88765§¦¥¤£¢¡ Ÿžžœ›š™˜—––””“’ŽŽ‹ŠŠˆˆ‡†…„ƒ‚€~}|{zzxwwvutsrqqponmlkkiiggeedcba`__^][[ZYXWVVUSSRQPONMMLJJIHGFFDCCBA??>=<;:9877654¦¥¤£¢¡ Ÿžžœœ›š™™˜–••”“’‘‘ŒŒ‹Š‰ˆ‡†…„„ƒ‚€~}}|zzxwvvuttrrppnnmmkjihhgfddcbaa`^^\[[ZYXXVVTTSRQPONMMLKJIHGFEDDCB@@?>==<::9876543¥¤£¢¡  Ÿžœœ›š™˜——••”“’‘‘ŽŒ‹Š‰ˆ‡††…„ƒ€~}|{{yyxwvutssqpoonmlkkjiggfedcbb``_^][[ZZYWWUTTSRQPONMMKKJIIGGFDDCB@??>>=<::88765433¤££¡¡ Ÿžœ›š™™˜––•”“’‘Ž‹‹Š‰ˆ‡†……„ƒ‚€~}}{{zyxwvutssqqponmlljihhgfedccb`_^^]\[ZYYWVVUTSRQQONMMLKJIHGFEDDCB@@??=<;::977654432£¢¢ ŸŸžœ›š™™——–•““’‘ŽŒŒ‹ŠŠˆˆ†…„„ƒ‚€~}|{{yyxwwvttrrqpoomlljjhhffeecba``_^]\[[YYXWVTTSRRPOOMLLKJIHGGEDDCBA@??>=;;99876644321£¡ ŸŸžœ›š™˜˜—–•”““‘‘Ž‹‹Š‰‰ˆ†……ƒƒ‚€}||{zyxwvutssqqpoonlljjihgfedcbb``_^]\[ZZYXWVUTSSQQOONLLKJIHHFEDDCBB@@?>=<:998776443210¡¡ Ÿžœ››š™˜—–•”“’’ŽŒ‹Š‰ˆ‡‡†„„ƒ‚€~}}{{zyxwvvusrrqpoomlkkjhhgfeeccba`_^]\\ZZXXWVUTTRRQPONMLKJIHHFFEDCBA@??><<::98866543210/¡ Ÿž›š™™˜—••””’‘ŽŒ‹Š‰‰ˆ‡†…„ƒ‚€~}}|{zyxwvutssrqpoonmlkjihgfeddcaa`_^]][ZYYXWVUTSRRQPONMLLJIHHFFEDCBA@@?>=<;:98765543210// Ÿžœœ›š™˜—–••““’‘ŽŒ‹‹‰ˆ‡‡……„ƒƒ‚€~}|{zyywwvttsrqppnnmlkjihgfeddcaa`__]\[ZZYWWWUTSRQPPONMLKJIIHGFEDCBAA?>><<;:98865543210//.ŸŸœœ›š™˜—–•””“‘‘ŽŽŒ‹Š‰ˆˆ‡†…„ƒ‚€€~}|{zzxxwvttsrrqpnmmlkjiigffecbba`_^]]\[ZYXWVVTTRRQPONMMKJIHGGFEDCBBA?>>=<<:99876533210/.--žžœ››š˜˜—–•”“’’‘ŽŒ‹Š‰‰‡‡†…„ƒ‚€~~}|{zyywvvutsrqppomllkjjhgfeedcba`_^^\\[ZYXWWUUSSRQPONMMKJJHHGFEDCCBA??>=<;;99876543210/.--,œœ›™™˜—–•””’‘‘ŽŒŒŠ‰‰‡‡†…„ƒƒ‚}}||zyywwvutsrqpponmlkjihgffeccba`__]\\[ZYXWVVUTSRPPPOMMKKJIHGFEDCBBA@?>=<;;:8765544220/..-,+œœ›š™™—––””’’‘‹‹‰‰ˆ‡†…„ƒƒ€~}||{yywwvutsrrqponmlkjihgfeeccba``^]\\ZZYXWVVTTRQQPONNMLKJIHGFEEDBAA@?>=<;;98875554311/..-,,*œ›š™™—––•”’’‘ŽŒŒŠŠ‰ˆ‡††„ƒƒ‚€~}||{yxxwvutsrrqponmlkjihhgfedcba`_^^]\[ZYYXWUUTSRQPONMLLKJIHGGEEDCBA@?>=<<::98765533110/.-,+**›š™™˜––•”“’‘ŽŽŒŠŠ‰ˆ‡†…„ƒ‚€€~}|{{yyxvvutsrqppnmmlkjjhgfeedcbb`_^^]\[ZZXXWUTSSRQQPNNMKKJIHHGEEDCBA@?>=<<:998665433110/.-,,*)(›™˜——–”““’‘ŽŒŒŠŠ‰ˆ‡†……„ƒ€~}}{{zxxwvuutrrpponmmkkiihgeedccba`_]]\[ZYXWWVTTSRQPOONLKKJIHGFFECCBA@?>><<;:98765543210/.-,,+)((™™˜—–•”“’’ŽŽŒŒ‹Š‰ˆˆ‡…„„‚‚€}||{zyxwvutssrqponmmkkjihgfeeccaa_^^]\\ZZYXWVUTSRQPOOMLLKJIHHFEDCCBA@?>><<;:98765542110/.-,,+*)('˜˜––””“’‘ŽŽŒ‹Š‰ˆ‡‡……„ƒ‚€€~}|{yyxwvuutsrqponnlkjiihgffddbba`_^]\[ZYXWWVUTSRRPOONLLKJIIHFEEDCBAA?>==<;999776543210//--,+*(('&——–•”“’‘ŽŒ‹Š‰ˆ‡‡……„ƒ‚€~}|{zyxxvuttrrqpoomllkjhhgfedccaa__^]\[[ZYWWVUTSRQQOOMMLKJIHHFFECCBAA??><<;:987654432100.--,+*(('&%—–•”“’’ŽŽŒ‹‹‰ˆˆ‡…„„ƒ‚€€~||{zyxwvuutsrqpoonmlkjhhgfedcbba`_^]\[ZZXXWVUTTSQQPNNMLKJIHGGFEDCBAA?>=<<;:98765542220//.,,**)('&&%–•”““’‘ŽŽŒŒ‹‰ˆˆ‡†…„ƒ‚~~}|{zyyxwvttsrqppnmmlkiiigfeedcba`__^\[[ZYXWVUTSRRPONNMLKJIHHGFDDCBA@?>>=<;:998665432110/-,,+*)((&&%$–””’‘‘ŽŒ‹Š‰ˆˆ‡†…„ƒ‚€~~}{{zyxwwuttrrqpponmlkjihgfeedcba`__]\[[ZYXWVUTSSRPOONMLLJJHHGFEDCBBA??><;<:98776543210//--,**)(''&$$#”“’’‘ŽŽŒ‹Š‰ˆˆ‡†…„ƒ‚€~}|{zyxwwvttsrqpoommlkjihhfeddcba``_]\\[ZXXWVVTTRQQPONMLKKJIHGFEDCBAA??>=<<:99876443221/.-,,**)('&%$$#"”’‘ŽŽŒŒŠ‰‰‡‡†…„ƒƒ€~}|{zyywvvutsrrqoommlkjihhffedcba`_^]\\ZZXXWVVUTSRQPONMLKKJIHGFEDCCBA@>>=<<:99876543311/..-,+*))''%$$#"!“’‘ŽŒ‹‹Š‰ˆ‡†…„ƒ‚‚€~}}{zyxxwvutsrrqpnnmlkjiiggfddbba`_^]]\[ZYXWVVTTSRQPPNMMLKJIHGFEDCBA@@?>=<;;:88765433200/.-,+**((&%%$#"!!‘‘ŽŽŒŒ‹Š‰ˆ‡†…„ƒ‚‚~~}{zzxwwvuussqpponmlkjjhgffddcba`_^]][[ZYXXVUTTSRQPONNMKJJIHGFFDDBAA@?>=<<;:98765533210..-,+**(('&%###"!‘ŽŒ‹Šˆˆ‡†…„ƒƒ‚€~}}{{zyxwvvutrqqoonmlkjihhgeedcba`_^^]\[ZYXWWVUSSRQPPONMLKJIHGGEECCAA@?>><;::9776544221//.-,+*))(&&$$#"!!ŽŽŒ‹Š‰ˆ‡††…ƒƒ‚€~}}|{zyxwvuttsqpponmmkkiigffedcbba__^]\\ZYXWWUUSSSQPOONMLKJIHGFEDDCBAA@>><<;:88765533200/.--++*((&&%$$#! ŽŒ‹Š‰ˆ‡†……„ƒ‚€€~}{{zywwvvussrqponnmkkjihgfeedcaa__^]\[ZYYWVVTTTRQPOOMMLKJIHHFEDDCBAA??=<<;:98765532210/.-,+**((&&%%#""! ŽŒŒ‹Š‰ˆ‡‡†„„ƒ‚€~~}{{zyxxwvusrrqponnmlkiihffeddcb``^^]\[ZZXXWVUTSSQPOONMLKKIHGFEEDCBA@??==<;:99866543210/.-,,+))('&%$##!!Œ‹Š‰‰ˆ‡†…„ƒ‚€~}}|{zyxwwvttrrqponmlljjihgfedcbaa`_^]\[[YXXWVUTTRRQONNMLKJIHGFFDDCBBA?>><<;:99765543200/.--,**)('&%$##"! ŒŒŠ‰‰ˆ‡†…„ƒ‚€~}||{zyxwwvutrrqponmlkjjihgffddbaa`_^]\[[ZYXWVUTTRRQOOMMLLKIIHFFEDDBA@@?==<;:997654422100/-,++*)(('%$##"! Œ‹Š‰‰‡††…„ƒƒ~}|{zyxxvvutsrqpoonllkjihggfecbba`_^]][ZZYXWVVUSSRQPONMLLKIIGGFEDDCBA??>=<;::87665432100.--++*)('&%$$"" ‹Š‰ˆ‡‡†…„ƒ‚€€~~}|{{yxxwuutsrqqoonmljjihggfddcba`_^^\[ZYYXWVVUTSQQPONMLKKIHHGFEEDCAA@>>=<;::8776432210/.--,+))('&%%$#"! ŠŠ‰ˆ††…„„ƒ‚€€}}||zzxwvuutsrqpoonlkkjihgffecbba`__]][[ZYXWWVTTRRQPOOMLLJJIGGFFDCBBA@?>=<;::88765432100..-++*)('&%$$#"! Š‰ˆ††…„„ƒ€~}|{zzxwwvutssqqpnnmlkjihggfeccba`_^^]\[ZYXWVUUTRRPOONMLKJJIHGFFDCBBA@?>=<;:988765433110/.-,+*)('&%%$#"" ˆˆ‡†…„ƒ‚‚€€~}|{zyyxwuutsrrpponmlkjjhhffedcba``_^\[[ZYXWVVTTRQQPONNLLJJIHGFEEDBBA@?>=<;;:88655432210/.-,+*)('&&%$#"! ˆ‡‡†…„ƒ‚€~}|{zyxwuvttrqqpnmmlkjjhggfedcba`_^^]\[ZYYXVUUTRRQPPNMLKJIIHHFFEDBAA@?>><<::8876543321//.-,+*))''%%$#"!! ‡†…„„‚€~}||{zywwvvtsrqqoonmlkjiihgfedcba``_]]\[ZYXWWVTTSQQPPNMMKKIIHGFEECCAA@?>=<;:988765433200/--,+*)(''&%$#"! ‡…„ƒƒ‚€~~||zzyxwvutssqqponnllkjhhgfedcbaa__^]\[[YXXWUTTSRQPOONMLKJIHGFEECCBA@?>><<:998765432210/.--+*)(('&%$##! …„„‚‚€~}}|zyyxxvuutsrqponmlkjjigffeddcb`_^]]\[[YYWVVTTSRRPONNMKJJIHHFEECCBA@?>><<;:98765533210/.-,,+*(('&%$##!! îííìëêéèçææääãâáàßÞÝÝÜÛÚÙ××ÖÕÔÓÓÒÑÐÏÎÍÍËÊÉÉÈÇÅÅÄÃÂÂÀ¿¿¾¼¼»º¹¸¸·µµ´³³±°°®®­««ª©¨¨§¦¥££¢¡ ŸŸžœœ›š™˜—––”““’ŽŒ‹‹Š‰ˆ††……ƒ‚‚€€~}|íììëêéèèææåäãâáàßÞÞÜÜÚÚÙØ××ÕÔÓÒÒÑÐÏÎÍÍËËÊÉÈÇÆÅÄÄÂÁÀÀ¿¾½¼»º¹¸¸¶µµ´³²±°¯¯­­¬«ª©©§§¥¤¤£¢¡ ŸŸ›šš™˜—–•””’’‘ŽŒ‹Š‰‰ˆ‡††„ƒƒ‚€~}}{íìëêéèççååäãâáàßÞÝÜÛÚÚÙØØ×ÕÕÔÓÒÐÐÏÎÍÌÌËÉÉÈÇÆÅÄÃÂÂÁ¿¿¾½¼¼ºº¹¸·µ´´³²±±°®®­¬«ª©¨¨§¦¥££¢¡ Ÿžž››š™˜˜—••”“’‘Ž‹‹‰‰ˆ‡†…„ƒƒ€~}|{zìëëéèèçæääããáàßßÞÝÜÛÚÙØ×ÖÕÕÓÓÑÑÐÏÎÍÍÌËÉÉÈÇÆÅÄÃÃÂÀÀ¿¾½¼»»º¸¸¶¶µ´³²²°°¯®­¬«ª©¨§¦¦¥¤£¢¡ ŸŸžœ›š™˜—–•””“’‘ŽŽŒŒ‹Š‰ˆ‡†……„ƒ‚€}|{{zëêéèçææåäããááßÞÞÝÜÛÚÙØ×ÖÕÔÔÓÒÑÐÐÏÍÍÌËÊÉÈÈÆÆÄÄÃÁÁÀ¿¾½¼»»º¹··¶µ´³²±±°¯®¬¬««ª©§§¦¥¤£¢¡¡Ÿžžœ›šš˜˜—••”“’‘‘ŽŒ‹Š‰ˆ‡†……ƒ‚‚€~}|{zzyêêéèææåäããáàßßÞÝÜÛÚÚØ××ÖÕÓÓÒÑÐÏÎÍÌÌËÊÉÈÇÇÆÅÃÃÂÁÀ¿¾½½»»¹¹··¶¶´´²±±°¯®­¬«ªª©¨§¥¥¤¤¢¡  Ÿžœ›šš˜˜––””“’‘‘ŽŽŒ‹Š‰ˆ‡†…„„ƒ‚€~}}|{zyxêèèçæåääãááàßÞÝÜÛÚÚÙØ×ÖÕÓÓÒÑÑÏÎÎÌÌËÊÉÈÇÇÅÄÄÃÂÁÀ¿¾½¼¼»¹¹¸·¶µµ³²²°°¯®­­¬«©©¨¦¦¥¤£¢¢ ŸŸžœ›š™˜˜––•”“’‘ŽŽŒ‹Š‰ˆˆ††„„ƒ‚€~}}|{zyxwéèææåäãâáàßßÝÝÜÛÚÙÙØ×ÖÔÔÓÒÒÐÐÏÎÌÌÊÊÉÈÇÇÆÅÄÃÁÁÀ¿¿¾½»»º¹¸·¶µ´´²²±°¯®­¬««ª©§§¦¦¤£¢¡¡Ÿžžœ›š™˜—––•”“’‘‘ŒŒ‹ŠŠˆ‡†……ƒƒ‚€~}}|{zyywvèçæåääãááàÞÞÝÜÛÚÚØØ×ÕÕÔÓÓÑÑÐÏÎÍËËÊÉÉÇÆÅÄÄÃÂÁÀ¿¿¾½¼»º¹¸·¶µ´´²²°°¯®­­««ª©§§§¥¤¤¢¡¡ Ÿžœ››š™˜—–•”“’’ŽŒŒ‹Š‰‰ˆ†……„ƒ‚€€}}|{zyxwvvçææåããâáàßÞÝÜÛÛÚÙØ×ÖÕÔÓÒÑÑÐÏÎÌÌËËÉÈÇÇÆÄÄÃÂÂÀ¿¿½½¼»º¹¸··¶´´²²±°¯®®¬««ª©¨§¦¦¥¤£¢  Ÿžœšš˜——–•”“’‘‘ŽŒ‹Š‰‰ˆ‡†…ƒƒƒ€~}{{zyxwvuuçåääââáàßÞÝÜÛÚÚÙØ×ÖÕÔÓÓÒÐÏÎÎÍÌËËÉÉÇÆÅÅÄÃÂÁÁ¿¾¾¼¼»º¹¸¸¶µ´´³²±°°®®­¬«ª©¨¨§¦¤¤£¢¡ Ÿžœ›šš˜˜—–•””’‘‘ŽŒ‹ŠŠ‰ˆ‡†…„„‚‚€~}|{zyxxwvttæåããááàßÞÝÜÛÛÙÙØ×ÖÕÔÓÓÒÑÐÎÎÍÌËÊÉÈÈÇÆÄÄÃÂÁÀ¿¿¾¼¼»º¹¸·¶¶´´³²±°¯®­­«ªª©¨§¦¥¥¤£¡¡ Ÿžœ›™™˜—–•””’’‘ŽŒ‹‹‰‰‡‡†…„ƒ‚‚~}|{zyxwwvussåäãâàààÞÝÜÛÚÚÙØ×ÖÖÔÓÓÒÑÐÏÎÍÌÌÊÊÈÈÆÆÅÄÄÂÁÁÀ¾¾¼¼»º¹¸·¶¶µ´³²±°°®®­¬«ªª¨§§¦¥¤£¢¡ Ÿžžœ›™™˜—–•”““’‘ŽŒ‹Š‰‡‡†…„ƒƒ€~}|{zyywvvutsräãâááßÞÝÝÛÛÚÙØ×ÖÕÔÔÒÒÑÐÏÎÍÌËËÉÈÈÆÆÅÄÄÂÁÀ¿¿¾½¼»ºº¹¸·µµ´³²±°°®­­¬«ª©¨¨§¥¥¤£¢¡  žœ››š™˜——•”““‘‘ŽŒŠ‰‰ˆ‡††…ƒƒ€~}||zyyxwvutsrrãââààÞÞÝÜÛÚÙØØÖÕÔÓÓÒÑÐÏÎÎÌÌËÊÉÈÇÆÅÄÃÃÁÀ¿¾½½¼¼ºº¹¸·¶µ´³²±±¯®®­¬«ª©¨§¦¥¥¤£¢¡ ŸŸœœ›š™˜——••”“’‘ŽŒŒ‹Š‰ˆ‡†…„ƒƒ~~}|{{yxxwvutssrqâáàßÞÞÜÜÚÙÙÙ×ÖÖÔÓÓÒÑÐÏÎÍÌÌËÊÉÈÇÆÅÅÃÃÁÁÀ¿¾½¼»º¹¹¸·¶µ´³³²±°®­­¬«ª©¨§¦¦¥¤£¢¡  žžœ››š™™˜–••“’’‘ŽŽ‹ŠŠ‰ˆ‡††…„ƒ‚€€~}|{zzxxwvuussqqpáàßßÝÝÜÛÚÙØ×ÖÕÕÔÓÒÑÐÐÎÍÍËËÊÉÈÇÆÅÄÄÃÁÁÀ¿¾½¼»ºº¸¸·¶µ´³²±±¯¯­­¬«ª©¨¨§¦¥¤¤¢¡  Ÿžœ›šš˜——–””“’‘ŒŒ‹Š‰ˆ‡†…„ƒ‚‚€}|{zzxxwvutssqqooáàßÞÝÜÛÚÚØ×ÖÖÕÔÓÒÑÐÏÎÎÍÌËÉÉÈÇÆÅÅÄÂÂÁÀ¿¾¾½¼»º¸¸·¶µµ³³²±°¯®­­¬ª©¨¨§¥¥¤£¢¢  žžœ››™˜˜––””“’’ŽŒŒ‹Š‰ˆˆ†……ƒƒ‚€~~||{zyxwvuutrrqpnnßßÞÝÜÛÚÚØØ×ÖÕÔÓÒÑÐÏÏÎÌÌËÊÉÈÈÇÅÄÃÂÂÁÀÀ¾½¼»ºº¹¸·¶µµ³³²±°¯®®¬««©¨¨§¦¥¤£¢¡¡ Ÿžœ›š™˜—––•”“’’ŒŒŠŠ‰ˆ‡‡†…„ƒ‚€~}|{{zyxwvuttrrqponmßÞÝÜÛÚÙÙ×ÖÖÕÔÓÒÑÐÐÏÎÍÌËÊÉÈÈÆÆÄÃÂÂÁÁ¿¾½¼¼ºº¹¸·¶µ´´²±°¯¯®­¬««ª¨¨§¦¥¤£¢¡  Ÿžœ››™˜˜—–•”“’‘ŽŒ‹ŠŠˆ‡†……ƒƒ‚€€~}}|{zyxwvvttsqpponmlÞÝÜÛÛÙØ××ÖÕÔÓÓÑÐÐÏÎÍÌËÊÉÉÇÇÅÅÃÃÂÁÀ¿¾½½»»º¹¸·¶µµ³³±°°¯®­¬«ª©©¨§¦¥¤£¢¢  Ÿžœœ›™™—––•””’‘ŽŽŒ‹Š‰‰‡‡†…„ƒ‚‚€~~}|{zyxwvutssrqponmmkÝÜÛÚÙÙ××ÖÕÔÓÓÑÑÐÎÎÍÌËÊÉÈÈÇÅÅÄÃÂÁÁÀ¾¾½¼»º¹¸·¶µµ³³²±°¯®­­¬«ª©¨§¦¦¤¤£¢¡ Ÿž›šš™˜––•”““‘‘ŽŒ‹ŠŠˆ‡††„„ƒ‚€€~~}|{zyyxwvtsrrqppnmmlkÜÜÚÙØØ×ÖÖÔÓÓÑÑÏÏÎÍÌËÊÉÉÈÇÆÅÄÃÂÁÁÀ¿½¼¼»º¹¸··µµ³³²±°¯®®¬¬ªª¨¨§¦¥¥££¢¡ Ÿžœ›š˜˜—–•”“’‘‘Œ‹ŠŠ‰ˆ‡†…„ƒ‚€~}|{zyywwuutsrqponmmlkjÛÚÚÙØ×ÖÕÔÔÓÑÐÏÏÎÍÍËÊÉÉÈÇÆÅÄÄÂÁÀÀ¿¾½»»º¹¸··¶µ´²²±°°¯­­¬«ª©¨§¦¦¥££¢¡ Ÿžœšš˜˜—–•”“’‘ŽŽŒ‹‹‰‰ˆ‡†…„ƒƒ‚~}|{{yxxvuutsrqppnmllkjiÛÚÙØ×ÖÕÔÔÓÒÐÐÎÎÎÌËÊÊÉÇÇÆÅÄÃÃÁÀ¿¿¾½¼»ºº¸·¶¶µ´³²±°°®®­¬«ª©¨¨§¥¤££¢¡ Ÿžœœšš™˜—–•”““‘‘ŽŒŒŠŠ‰ˆ‡†…„ƒ‚‚€~}|{zzyxvuutsrqqpnmlkkjjhÙÙØ×ÖÕÔÓÓÒÐÐÏÎÍÌËËÉÉÈÇÆÅÄÃÂÂÁ¿¿¾½¼»º¹¸·¶¶µ´³³±°°¯­­««ª©¨§¦¥¤¤£¢¡ Ÿžœœšš™˜—––•“’‘‘ŽŒŒ‹Š‰ˆ‡†…„ƒ‚‚€€~}|{{zyxvvutsrrqpnnmlkjihgÙØ×ÖÖÕÔÒÒÐÐÏÎÎÌÌÊÊÉÇÇÆÅÄÄÂÂÀÀ¿¾½¼»ºº¸··¶µ´³²±°¯¯®¬¬«ª©©§¦¥¥¤£¢¡  Ÿžœ›š™˜—––•““’‘ŽŒ‹ŠŠ‰ˆ‡†……ƒ‚€~~|{zzyxwvutssrqponmlkjihgfØ××ÕÔÔÓÒÑÐÏÎÍÌËËÊÉÈÇÆÅÄÄÃÂÀÀ¿¾½¼¼ºº¹··¶µ´³³±°°¯®­¬«ª©¨§§¦¥££¢¡  žžœœ›š™˜—–••“’’‘ŽŒ‹‹Š‰ˆ‡†…„ƒƒ‚€~}|{zzxxvvutsrqpoonmlkjihggf×ÖÖÔÔÓÒÑÐÏÏÍÌÌËÊÉÈÇÆÅÄÃÃÂÁÀ¿¾½¼»»¹¹¸·¶µ´³³±°°¯®­¬¬ª©©¨§¦¥¤£¢¡ ŸŸžœ›š™˜˜—••”“’‘ŽŽŒŒ‹Š‰ˆ‡†…„ƒƒ‚€~}|{{yxxwvuttrqqoonmlkjiiggfeÖÖÕÔÓÒÑÐÏÎÍÌÌËÊÉÈÇÇÅÄÃÃÂÁÀ¿¾½½»»¹¹¸·¶µ´´³²±°®®®¬¬ª©¨¨¦¦¥¤¤¢¡¡ Ÿžœ›š™™——••”“’‘‘‹‹Š‰ˆ‡‡……„‚€}||{zyxwvuutsrqoonmmkjihggeedÕÕÔÓÒÑÐÏÎÎÌËËÊÉÈÈÆÆÅÃÂÂÁÀ¿¿¾½¼º¹¹¸·¶µ´³³²°°¯®­¬«ªª©§§¦¥¤£¢¡ ŸŸžœ›š™™˜—••”“’‘ŽŽŒ‹Š‰ˆˆ††…ƒƒ‚€€}}|zzyxwvvtsrqqponmlljiiggfedcÕÔÓÒÒÑÏÎÎÍÌËÊÉÈÇÆÆÅÄÃÂÁÀ¿¿¾¼»»º¹¸¸¶¶µ´³±°°¯®­­¬ªª©§§¦¦¤££¡¡ Ÿœœ›š™˜——–•””’’‘ŽŽŒ‹ŠŠˆ‡††„ƒƒ‚€~~}{{zyxwvvussrqpoommkjiiggfeeccÔÓÒÑÑÐÏÎÍÌËÊÊÉÇÇÅÅÄÃÂÁÀ¿¿½¼¼ºº¹¹¸·µ´³³²±°¯®®¬¬ªª©¨§¦¦¤££¡¡ Ÿžœšš˜——–•”“’‘ŽŒ‹Š‰ˆˆ‡……„ƒ‚€€}|{{zyxwwvutsqqpoomlkkiiggffdcbaÓÒÒÐÐÏÎÍÌËÊÉÉÇÆÅÅÄÃÂÁÀ¿¾½¼¼»º¹¸¸¶¶µ³³²±°¯®­¬¬ª©©¨§¦¥¤££¡  Ÿžœ›™™˜–••”“’‘‘ŽŒ‹Š‰‰ˆ††„„ƒƒ€~}|{zyxwvutssrqpoonlljjihgfeeccbaÒÒÑÐÏÎÍÌËËÉÈÇÇÆÅÄÃÂÁÀ¿¿¾¼¼»º¹¸·¶¶´´³²±°°®­­««ª©¨¨¦¥¤¤£¢¡ Ÿžœ››š™˜—–•”“’‘ŽŒ‹Š‰‰‡‡†…„ƒ‚€~~}|{zyxxvuttsrqqonnlljjihgffedbba`ÑÑÐÏÎÍÍËÊÊÉÇÇÅÅÄÃÂÂÀÀ¿¾½¼»º¹¸·¶¶µ´³²±°°®®¬¬ªª©¨§¦¥¤¤£¢¡ Ÿžœ››™™˜—–•”“’‘‘ŽŒ‹‹Š‰‡†……„ƒƒ€€~}|{zyxwvvussrqppnnllkjihgfedccba`_ÐÏÏÎÍÅs2 %T›ÄÃÂÂ4j°¸¸·¶µ´³­ «¯®¬¬«ª§¦¦¥££¢  Ÿžžœ› a”“’’†FC‡†…„ƒƒ€P$ 3`zyxutsrb :mmP 'Oeedca__ÐÏÎΰÃÃÂÀ’·¶µ´³²rq®­««ª©§¥¥¤¢¢¡ Ÿžœœš]’’wp…„ƒƒtyxwtsr` ?mlJedcba^]ÏÏÍÄ€³Ä½£s+ÂÁÁ¿½¼¶¤t¨µ´³²±))­¬«ª©¨¥¥¤£¢¢ Ÿžœ›š—–‰:’ˆd„ƒbƒ‚KmzwfIxwuss^ Enml We_Ddcbb`^]ÎÎÍt ¾ÈÇÆÅÄÄÂÂÀÀ¿¼¼ºº¹°![´³³²“'#¬«©©§¥¤¢¢¡  žœ›™™–••‹‘ŽP„Š‰ˆ‡€Kƒ‚Ns}||zyxwvvur] Jnmlkaggfeccbb`_]\ÍÍË1…ÈÇÆÅÄÄÂÁÁÀ¿¾¼º¹¹··{'´²²°LjkK«©¨¨§££¢¡  žœ›š™˜–•“‰Ž"\Š‰ˆ‡†…V ‚!P}|{{zxxwvut[Nnmllj 5^fedcbaa`^\[ÌË˸ÇÆÅÀ¿¾½»º¸··¶¦ ³±°ª ¤¦ ¤¨§§¦£¢¡¡ŸŸœ›š™™—•”‡91Ž +~‰ˆ‡‡…„w +€€ s|{{zyxwvuutRnmlkkj@"?aa`_^^[ZÌËÊÄÇÆÅ¿¾¾½º¸¸·¶¶±±±°m@¬«Ki§§¦¥¢¢ ŸŸžœ›š™™˜– ‚ŽŒŒ‡‰‡††„„€€{|zzyxwvutss +\mlljjihMW__^]ZYËÊÉ ·ÅÄÄÂÂÁ¿½½»¹¸··¶´¤ ±°¯&««%§¦¥¤¡  Ÿžœœ›šš˜——–dŽŽŒ‹ +}‡‡†…„ƒv +~ q{zyxwvuussrM YljihhgfedS; "_^]\ ZXÊÉÈ.‰ÅÄÃÂÁÀ½¼»º¸·¶¶µ´y'°¯ˆ¥¤£  Ÿœ›šš™˜—–”’cqŒ‹Š!Y††…„ƒ‚U~} NyyxwvvttsqqnHVihhgfeedcbS^]][XXÉÈÇl*ÀÃÂÂÁÀ½¼»º¸¶µ´³«Y¯®GE¥¤¢ žžœœš™™˜—–•”‘‘T‹‹Š‰L€…ƒƒ‚{H~}JoxwwuutsrqpmmDRggffddbb`Y]\[ZYXXWÈÈÇ»,‹µ¿«r¼»º¹·¶±q¢®¥ +˜ª¨¨§“ £¢Ÿžžœ››™™˜—–•”“‘ŒR‹Šˆ`}|_y}|xGitpbFqpomkj@Pfe:S^_M][ZZYXWVÈÇÆÅ¡p»»¹¸Œ®®h0ª©¨¨§¥.c¢¡™˜—–•””“ŽŽŽh{‰ˆ‡oj}|{zlponlkji<Ke@\[ZYVUÇÆÅÄ÷d' K£»º¹¹¸3h¨®®­"q©¨§§¦¥m ¡ ˜—–•”“’’ŽŒŒ.+ˆ‡†…{@>u}|{zyxuJ +/Woomkjihg8HP+ +H[[ZYXUUÆÅÄÃÃÁÁÀ¿¾¼½»»¹¸¸·¶µ´´²±°¯¯®¬««ª©¨§¦¥¥¤£¢¡¡Ÿžœœ›™™˜˜–•””’‘‘ŽŒ‹‹‰‰‡‡†…„ƒ‚€~}|{zyywwvutsrqppnmmlkjjhgffddcba`__]\[[ZYXWVUUSÅÅÄÂÂÀÀ¾¾½¼»ºº¹¸·¶µ´³²±°¯¯®­¬«ª©¨§§¦¥¤£¢¡¡Ÿž›šš™˜—––•”“’‘ŽŒŒ‹‰‰ˆ‡†……ƒƒ‚€€~}||zyywwvuttrqqonnmlkjihhgfeccbba_^^][[ZYXWVUTSSÅÃÃÂÁÀ¿¾½¼»º¹¸¸·¶µ´³³±±¯®®¬¬«ª©¨§¦¥¥¤£¢¡¡ žžœ›š™˜—–••““’‘Ž‹‹Š‰ˆ‡†……„ƒ‚€€~}|{{zxxwvutsrrqonnmlljjigffedcba`__^\\[ZYXXVVUTSQÄÃÂÀÀ¾¾¾¼»ºº¹¸·¶µ´³²±±°¯®­¬«ªª¨§§¥¥¤¤£¢¡ žžœ›š™˜——–”““’‘ŽŒ‹ŠŠ‰ˆ‡†……„ƒ‚€~}|{zzyxwvutsrrqponmlkjiigffedcbb`__]]\[ZYXWVVUSSRRÃÁÁ¿¿¾¾¼»ºº¹¸·¶µ´´³²±°®®­¬«ªª©¨§¥¥¤£¢¡¡ žœ›š™™—––””“’‘ŽŒ‹Š‰ˆ‡†……„‚‚€~}}{zzyxwvvttsrqponmlkkiihgeeddcaa`_]]\[ZYYXVVUTSRQPÂÁÀ¿¾¾¼»»º¹¸·¶¶´³³±±¯®®­¬««©©¨¦¦¥¤£¢¢¡ žœ›š™˜˜—–•”“’‘‘ŽŽŒŠŠ‰ˆ‡‡…„ƒƒ‚€€}|{{zxxwvutsrqpponmlkjiihgeedcbaa`_^]\[[YXWWUUTSRQPOÁÀ¿¿½¼»»º¹··¶¶µ´²²°°¯®­¬¬ªª©¨§¦¥¥£¢¢¡ Ÿžœ›šš˜—––•”“’‘‘ŽŒ‹ŠŠ‰ˆ†……„‚‚€~}|{zyxwvutsrrqponmlkkiiggfedccba__]]\[ZZYWWVUTSRRPOOÀ¿¾¾½»ºº¹¸··µ´´³±±°¯®­­¬ª©¨¨§¦¥¤¤£¢¡ Ÿžœ›šš™˜—••””“‘‘ŽŒ‹Š‰ˆ‡††…„ƒ‚€~}}|{zyxxvuttsrqponmmlkiihgfeecbba`_^^\[ZYXXWVUTSRQQPOM¿¿½½»»¹¹¸¸¶µµ´³²±°¯®­¬««ª©¨§¦¥¤££¢¡ Ÿžœ›š™˜˜—–•”““‘ŽŒ‹Š‰ˆ‡†……„ƒ‚~||{zyxwvvutsrqponmllkjhhgfedccb``_^]\[ZZYWWVUTSRQQOONM¿¾½¼»º¹¸·¶µµ³³²±°¯®­­¬«©©¨§¦¥¥¤¢¢  Ÿžœ››™˜——–•”“’’ŽŽŒŒŠŠˆ‡‡†…„ƒƒ€€~~||{zzxwvvttrrqppnnmlkiihggeddbba`_^]\[[YXXWVVUSRRPPONML¾½¼»ºº¸¸¶¶µ´³±±°¯®®¬¬«©¨¨§¦¦¥¤£¢¡ Ÿžœ›šš™˜—–•””’’ŽŒ‹‹‰ˆ‡††…„ƒ‚€~}|{zyywwuussrqponnllkjihgffeccba`_^]\[[ZYXWVVUTSRPPONMLK½»»º¹¹··¶´´³²±°¯®®­««ª©¨§§¥¥¤£¢  Ÿžœ›™˜——–••““‘ŽŒ‹‹‰‰ˆ‡†…„ƒƒ€~~}|{zyxxvvutsrrponmmlkjihgffedcba`_^^\\[ZYXWVVUSSRPPONMLLJ¼»ºº¹¸¶¶µ´³²²±°®­­¬«ª©¨¨¦¥¤££¢¡ Ÿž››š™˜——•”““’‘ŽŒŒŠ‰‰ˆ‡†…„ƒƒ~}|{zyxxwuutssqpoonmlkjihgfedccba`_^^\\[ZYXWVUUTSRPOONMLKKJ»ºº¹¸·¶µ´³²±°°®®­««ª©¨§§¦¥¤£¢¡  Ÿžœœ›š™˜—–••““’‘ŽŒŒ‹‰‰ˆ‡††„ƒ‚~~}||zyxwwvutsrqppomllkjiigffecbbb`__]][[ZYXWVVTTSRQPONMLLJJH»¹¹¸·¶µ´³²²°¯¯®­¬«ª©¨¨§¥¥¤££¢  žœ›š™˜—–••““’‘Ž‹‹Š‰ˆˆ‡…„„‚‚€~}||zyxwwvutssqpponmlkjihggfedcca``^]\\[ZYXWWUTTSQQQONNLKKIIH¹¹¸·¶µ´³²±°°¯®­¬¬ª©¨¨¦¥¥¤£¢¡  žœ›š™˜——•”““’‘ŽŽŒŒ‹Š‰ˆ‡†…„„‚€~}}{{yyxwvutsrrqonnmlljjiggfedcbb``_^]\[ZYXXWVUSSRQPONNMLKJIHG¹¸·¶¶´³²±°°¯®­¬«ªª¨§¦¦¥¤£¢¡¡ Ÿžœ›š™™—––•““’‘ŽŒŠŠ‰‰ˆ‡†„„‚‚€~}}{{zxxwvvttsqqpnnmlkkjihgeedcbba__^]\[ZYYWVVUTSRQPPNMLLKJIHGG¸·¶¶´´³²±°¯®­¬««©¨¨¦¦¥¤£¢¡¡ Ÿžœ›š™™˜—••”“’‘ŽŽ‹‹Š‰ˆ‡‡†…ƒ‚‚€~}}{zzyxwvuttrqqpoomlkkiihffedccb``_^]\\[ZYWVVUTSRQPPONMLKJIHHFE·¶µ´³³²±°¯®­¬¬ª©©¨§¦¥¤£¢¢  Ÿžœ›š™™——–•”“’‘‘ŽŽŒ‹Š‰ˆ‡‡†…„ƒ‚€}}|{zyxwvuutsrpoonmlkkiiggfedcbba__^]\\ZYXXWVUTSRQPONNMLKJIHGFFE¶µµ³²²±°¯®­¬««©¨¨§¦¥¤££¡¡ žžœ›š™™——–•”“’‘ŒŒ‹Š‰‰ˆ††…„ƒ‚€~}}|{zyxwvuutsrpponmllkjihgfeecbb`__^]][ZZXXWVUTSRRQPNMMLKJJIHFFED¶´³³²±°°®­¬¬ª©©¨§¦¥¤£¢¢¡ŸŸžœ›š™™——–•”““‘ŽŒŒ‹Š‰ˆ‡‡†…ƒƒ‚‚€~~}{{zyxwwuutsrqpoonlkkjhhgfeedbba`_^]\[ZZXWWVUTSRQQOONMLKJIHGFFEDCµ´³±±°¯®­¬¬ª©¨¨§¦¥¥££¢¡ Ÿžœœšš™˜—–•””’‘ŽŒ‹ŠŠˆˆ‡……„ƒ‚€~~}|{zyxwwuttsrqqoonlljjihgfeedcba`_^^\[[ZYXWVVUSSRQONNMLKJJIHFEEDDB´³²±°¯®®¬««ª¨¨§¦¦¤¤£¡¡ ŸŸžœœš™˜˜—–•”““‘‘ŽŒ‹Š‰ˆˆ‡†…„„ƒ‚€}}|{zyxwwvussrqpoommkkjihggfeccba`_^]\\ZZYXWVUTSRRQPONMLKJIIHGFEDCBA³²±°¯¯®¬¬«©©¨§§¥¤¤¢¢¡ ŸŸ››š™˜—–•”““’‘ŽŒ‹ŠŠ‰ˆ‡†…„ƒ‚‚€}}|{{yxxwuttsrqpoommkkjihgffedca``_^]\\[YYXWVUTSSRPPONNLLJIIHGFEDDCB@²±°¯®®­¬«ª©¨§§¥¤¤¢¢¡ Ÿžœ››™™˜—–•””“‘‘ŽŒ‹ŠŠ‰‡‡†…„„‚€~}|{zzxxvuttsrqqoommljjihhgfecbba`_^]\\[YXXWVUUTRRQPOOMLKKJHHFFFDCBB@@±±¯®®­¬ªª©¨§¦¦¥¤£¢¡  žœ›š™˜——–””’’‘ŽŒ‹‹Šˆˆ‡†……ƒƒ‚€~~}|{zyywwvttsrrponmmlkjjhhgeedbba`_^]\\ZZYXWVUTTSRQPONMMKKJIHGFFDCBBA@?°¯¯®­¬««ª©§§¥¥¤£¢¢¡Ÿžœ›š™˜˜—–•““’‘ŽŒ‹Šˆˆ‡†…„ƒ‚‚€~}|{zzyxvuuusrqqoonllkjihggfedcba``^]]\[ZYYWVVTSSRQPOONMKKJIHGGEDCCBA@?>¯¯®­¬«ª©¨§§¦¥¤££¡¡ŸŸžœššš˜—––””“’‘ŽŒ‹Š‰‰ˆ‡†……ƒƒ~}|{zyxxwvuussqqponmlkjiihgfedcba``^]]\[ZYYXWUUTSRQPPONMLKJIHGFEEDBBA??>=¯®­¬««©©§§¦¤¤£¢¡  žžœ›š™˜—––•”’’‘ŽŒŒ‹‰‰ˆ‡†…„ƒƒ€~}}{zzyxwvuutrrqpnmmlkjjihfeedcbb``^^]\[ZZXWWUUTSRQPOONMLJJIHGFEDDCBA@?>==®­¬«ªª¨§¦¦¥¤¤£¢¡ žœ›š™˜˜––”““’‘ŽŽŒ‹Š‰ˆ‡‡…„„ƒ‚€~}|{{zywwvutsrrqpnnmllkiihgeedccba__]]\[[YXWVUTTSRQPONNMLKJJHGGEECCBA@?>==<­¬¬«ª©¨§¦¥¤£¢¢ ŸŸžœ›š™™——••”““’ŽŒ‹Š‰ˆ‡†……ƒƒ‚€~}}{{zyxwvuusrrpponmlkjjhhgfedcbba`_^]\[ZYYXWVUTSRQPPOMMLKJIHGFFEDCBA@?>==;;¬««ª©¨§¦¥¤¤£¢¡ Ÿžœ›š™˜˜—–•”“’’‘ŽŒ‹‹‰‰‡††…„ƒ‚€~||{zyxwwvutsrpponmmljjhggfeddcb`__^]\[ZZYWVUUTSRQQPONMLKJJIGGFECBBA@@>=<;::¬ªª©¨§¦¥¤¤¢¢  Ÿž›šš™—––•””’’‘ŽŒ‹ŠŠ‰‡‡†…„ƒ‚€~~||{zyxwvuussrqponmlkjjihgfedccb``_^]\[ZZXXWVUTTSRQONNMLKJIHGFEEDCBBA@>=<;;:9«ª©§¨§¥¤££¡ ŸŸŸ››š™˜—–•”“’’Œ‹Š‰‰ˆ‡†„„ƒ‚€€~}|{zyywvuttsrqponmmlkjhhgffddcba__^^\[ZYXXWVUTSRRPPONMLKJJHHGFEDCBB@??>=<;:98ª¨¨§§¥¥£¢¢¡ Ÿžžœœš™™˜—–•””’‘‘ŽŒ‹ŠŠ‰ˆ‡†„„ƒ‚~}|{zyxxwuttsrqponnmlkjihhffedbb``__]\[[ZYWWVUUTSRPPONMLKJIIHGFEDCCA@??==<;:988©¨¨¦¥¥¤£¢¡ Ÿžžœœ›š™˜—–•””“’‘ŽŒ‹ŠŠ‰ˆ‡†…„ƒ‚‚€~}|{{yywvuussrqponnllkjihggfedcba`_^]\\ZZYXWVUTTRRQPONMLLJJHHGFEECBB@@>>=<;:9876¨§¦¥¥¤£¢¡  žœœ›š™˜—–••”’’‘ŽŽŒ‹‹‰‰ˆ‡†…„ƒƒ~~}|{zyyxvvutsrqpoonmljjihggeddcaa``^]\\[ZXXWVUUSSRQPONMLKKJIHGFEDCBBA@>==<<::9776§§¦¤¤£¢¡ ŸŸœœ›™™˜—–•””’’‘Ž‹‹Š‰ˆ‡†…„ƒ‚€~}|{zyxxwuutsrrqoonmlkjihhgfeccba`_^^][[ZYXWWUUSSRQPONMLLKJIHGFEEDBAA@?>=<;;:87665§¥¥££¢¡  Ÿœšš™˜——•””“’‘ŽŒŠ‰‰ˆ‡†……„ƒ‚~}}|{zyxwvutsrrqoonmlkjihggeedcba`__]][[ZYXXWVUTRRQPPNMMLKJIHGFEDCCAA@?>=<<;:987554¦¥¤£¢¡ ŸŸžœ›š™™—––””“‘‘ŽŒ‹‹Š‰ˆ‡†…„„‚‚€~}|{zyxxwvutsrqpponlllkjigfeedcba`__^][[ZYXXWVUSSRQPPOMLLJJIHGFEECCA@@?>=<;:99876553¥¤£¢¡  žž››š™˜—–••““’‘‘ŽŒŒŠŠ‰ˆ‡‡†„„ƒ‚€€~}}|{zyxwvuussqqponmlkkjhhgfedcba`_^^]\[ZYXWVUUTSRQPPNNMKJJHHGFEEDCBA@?>=<;;:98765442¤£¢¡  žž››š™˜—––•”“’‘‘ŽŒŒ‹Š‰ˆ‡‡…„„‚‚€~}||{yyxwvvtsrrpponmlljiiggfedcba``_]]\[ZYXXWVUTSRRPPNNMKKJIHGFFECCBA@??><<;:987654432£¢¡ Ÿžœ›š™™˜—–•”“’‘ŽŽŒŠŠ‰ˆ‡‡†…„ƒ‚€}}|{zyxwwuusrrqponnlkkjihgfeddbaa__^]\[ZZYWWVUTSRQPPONMLKJIHHFEDDCBB@@>><;;:9877554320¢¡¡ Ÿžœ›š™™˜—–•”“’‘Ž‹‹‹‰ˆˆ†……„‚‚€€~~||{zyxwwvutsrqpoommkkiihgfedcba``^^]\[ZZXWVVUTSRQQPONMLKJJHGGEEDCBA@@>>=<;:98766433210¢  Ÿžœ›š™™——–•”“’‘Œ‹‹‰‰ˆ‡……„ƒ‚}}|{zyxwvvutsrqponnllkiihgfedcbba`_^]\[ZYYWWVUTSRQQPNMLLLKJIHGEEDCBAA?>==<;:98876443210/¡ Ÿžœœš™™˜—–•”“’’ŽŽŒ‹ŠŠˆ‡‡…„„ƒ‚€€~}|{zyxwvuutsrqpoomllkjhhhffedcaa`_^]\\ZZXXWVUUSRQQOOMMLLJJIHGEEDCBA@??>=<;:98765543210/. Ÿžžœ›šš˜˜—–•””’’‘ŽŒ‹Š‰‰‡‡……„ƒ‚€€~~}|{zyxxvuutsrqqponmlkjihgfeedcba`_^]][[ZYWWVUTSSQQPONMLKKIIGGFEDCCB@??>=<;:98766542210/.-Ÿžœœ›™˜˜—–••”“‘ŽŒŒŠ‰ˆˆ‡†…„ƒ‚‚~||{zyxwwutssrqponmmlkjihggfdcbba`_^]\[[YYXWWUTSRRQPNNMLLJIHHGFEDDCBA?>==<;;:97764432100.--žžœ›š™˜—–•””’‘‘ŽŒ‹‹Š‰ˆ‡†…„„‚€~}|{zyyxvvutsrqpponmlkjihgffddcaa`_^]][ZZYXWVVTSSRQPONMLKKIIHGFEDCBBA@>==<;::88665432110..-,››š™˜—–••”“’‘ŽŽŒŒ‹‰‰ˆ‡††„„ƒ€~}|{{zxwwvutsrqqpnmmlkjiigffedbbaa_^]]\[ZYXWVUUTSRQPOOMMKJJIHGFFECBA@@?>==;;998765432100/--,+œšš™˜—–•”““’‘Ž‹‹Š‰ˆ‡‡…„ƒ‚‚€~~}||zzxxwvutsrrpponmlkjjhhfeeccca`__]]\[ZYYWVVUTRRQPONMLKJJHHGFEDDCBA@?>=<;::98665433100/.-,+*œ›š™˜—––•”“’‘‘ŽŽŒ‹‹Š‰ˆ‡††„ƒƒ‚€€~}||{yyxwvutssrqpnnmlljiihffedcbaa_^^]\[ZYYXVVUSSRQPONMMLKJIHGFEDCBAA@?>==<:998765432100/.--+*)›š™˜——–•“’’‘ŽŽŒŒ‹Š‰ˆ‡†……„ƒ‚€€}}{{zyxwvuttrqqpommlkjjhggfedcba`__]]\[[YYWVUUSSRQPONNLLJJIHGFFDCCBA@?>==<::98765532210/.-,+**(š™™—––•”“’‘ŽŽŒŒ‹Š‰ˆ‡††…ƒƒ‚€~~|{zzyxwvvutrrqponnlkjjihffedcbaa__^]\\ZYXWVVTSSRQPONNLKKJIHGFEEDBBA@??>=<;998765432100/.-,+**)(™˜—––””“’‘‘ŽŒ‹Š‰ˆ‡††„ƒƒ‚€€~~||{zyxwvvtsrrqponnlkjihhgfedcbba__^]\\ZYYXWUUTSRQPPOMLLKJIIGFFEDCBAA?>=<;;:98865432210/.-,,*))('™˜––•””’’Œ‹Š‰ˆˆ‡†…„‚‚€~}||{zyxwwutssrqponmmlkjihgfeddcba`^^]\[ZYYXVVUTSRRPONMMLKJIHGGFEDCBA@?>>=<;:99766432200/.--++))('&—––•”““‘‘ŽŒ‹Š‰‰ˆ††…„ƒƒ‚€}|{{zyxwvvutrrpponnlkjjihgfedccba__^]][ZYXWWVUTSRQPOONMLKKIHGFEEDCBA@??><<;:99776443210//.-++))('&%—–•”““‘ŽŽŒ‹Š‰‰ˆ‡……„ƒ‚€~}}|zzyxwvuutsrqponmmkjjihhfeecbaa`__]\\ZYXXWVUTSSQPONNMLKJJIGFFEDDBAA@?>=;;:99776433210/.-,++*))'&&%–•”“’’‘ŽŒ‹Š‰‰ˆ††…ƒƒ‚‚~~}|{zyyxvuussrqponmllkjihggedccba`_^]\\[ZYWWVVUSRRPPONMLKJIHGGFEDCBA@?>=<<;;:87765432100..,++*))'&%$$•””’’‘ŽŒ‹Š‰‰‡††…„ƒ‚‚€~~}|{zzywvuutsrqqonnllkjihhgfddcba``^^\\ZYYXWVVTTSRPPONMLKJJIHFFEDCBBA@?><<;:987765432100..-,**)(('&$##”““’‘ŽŒ‹Š‰‰‡††…„ƒ‚‚€€~~}|{zyxwwvttsrqponmmlkjihgfeeccba`_^]\[[YYXWWUUTSQQPONMLKJJHHGFEDCCA@??>=<;;998754432100..-,+*)('&%$#""”“’‘ŽŒŒŠŠ‰ˆ††…„ƒ‚‚€~}|{zyywwvuttrqppnnmlkjihgffedcba`_^]]\[YYXWVUUTSRQPONMMKJJIHGFEDCBB@@?>=<;:997765442110/.-,+*))''&%$#"!“’‘ŽŒ‹‹‰‰‡‡†…„„ƒ‚~}||zyywvuuttrqqponmlkjihhgeeccba`_^]\[[ZYXWVVUTRRPPPNNLKKJIHGFEEDBBA@?>=<<::87765442100.--,+**)''%%$#"!!’‘ŽŒŠŠ‰ˆˆ†…„„ƒ‚€~}|{zzyxwvuttrqpponllkjiigffedcbaa__^]\[ZYXWVUUTSRQPPNNLLJJIHGFFEDCBA@?>==<::97765442110/.--++))('&%$#"! ‘Œ‹Šˆˆˆ††…ƒƒ€€~}|{{zyxwvutssrqoonmlkkiihffddcbaa`_^][[ZYXWWUUTSRQQONNMLKJIHGGEDCCBA??>><;;:8876653210//.-,+*))''&%%##! ‘ŽŒŒ‹Š‰ˆ‡††„„‚‚€}}{zyyxwvvtssrqponmllkihggfedcbb``_^]\[ZYYWWVUTSRQPPNMMKKJIHGFFECCBA@??>=<;:8776554221//.--+**)('%%$$#!! ŽŒ‹Š‰ˆ‡†…„ƒƒ‚€~}||{zyxwvuttsrqpoomlkkiihgeedcba``_^]\[ZYXXWUUTSRRPPNNMLKJIHGFEDDCBA@?>==<;:9876643321//.--,+*(('&%$#"!!ŽŒ‹Š‰‰ˆ†……„ƒ‚€€}}|{yyxwvuusrqqpoomlkkjhhgfedcbaa__]]\[[YYXWVUTSSQQONNLLKJJHGGEEDCBAA??=<<;:98865443210/.-,++*)('&%%#""! Ž‹‹Š‰ˆ‡†……„ƒ‚€~~||{zyxwvuussrqponmlkjjihgfeddcaa`_^]\\ZZXWWVUTSRQQONNMLKJIHHGEDDBBA@?>==<;:98766443100/..,+**)('&%$#"" Œ‹‹Šˆˆ‡……„ƒƒ~~}|zzzyxwuutsrqponmlkkjihggeddbba__^^\[[ZYXWVUUSSQQOONMLKJIIGGFEDCCA@??>=<;:98776543210//-,,+*)(''&%$#!! Œ‹ŠŠˆ‡‡†…„ƒƒ€~}|{zzxwvvttsrqppnnmlkjihgfeedbaa`__]][[ZYWWVUTTRQQOONMLLKIHGGFEDCBAA??==<;:99775542210/.-,,+*)((&&$$#"! ŒŠ‰‰ˆ‡†„„ƒƒ€}}|{zyyxwvutrrqqonnmkkjihgfeecca``_^]\[ZZYXWVUTSSRQPNNMLLKIIHGFEDCBA@@>>=<;:98775533210//--++*)('&%%$#"! ‹‰ˆˆ††…„ƒƒ‚€~}|{zzxwvvutsrqqoonmkjjihggeddcba`_^]\[[ZYXWVVTSRRQPONMLKKJIHGFFDCBAA@>>=<;:997665432100.--,+*)(('%$##"! Šˆˆ‡†…„ƒƒ‚€~~}|{zyxxwuutsrqqonmllkjihgfeedcba``_^\\ZZYXWWVTTRRPPONMLLKJIHGFEDCCAA??>=<<:98775543321//.,,+*)((&&%$#"! ‰ˆ‡†……ƒ‚€~}|{zyyxwvutssqqponmlkjjigffedcba``_^\\[ZYXWVUUTRQQPONNLLKJIHGFEDCBBA@?>=<;::8776544210//.-,++*)'&%%$#"!!ˆ‡†…„ƒƒ‚€~}|{{zxxvvutsrqpponmmkjihhgfedcbb`__]]\ZZYXXWUTSSRQPOOMMLKJIHGFEDCBAA@?>==;:99876543220//.,,++)(''&%$#"! ˆ††…ƒƒ‚€~~}|{yyxwvvutsrpponmlkjiihgeedcba``_^]\[ZZXXVVUSSRQPPONLKJJIHGGFDCCBA@?>><;::98765532100/.-,+*)(('&%$#"!!††…„‚‚€}}|zzywwvutsrrpoonmlljiiggfedcbba`^^]\[ZZXWWVUTSRRPOONMLKJIHGGEDDCBA@?>=<;:99776553211//.-,+**)('&%$$"! ……„‚‚€~}}{{yyxwwuttrrqponmllkjhhgfeeccba__^]\[[ZYXVVUTSRRPPONMLKJIHGGFEDCAA@?>><;::98775443200/..,,*)(('&%$##!! îííìëêéèçæåäããâáàßßÝÝÜÚÙÙØ×ÖÕÔÓÒÑÐÐÏÎÍÌÌËÉÈÈÆÆÅÄÃÃÂÀÀ¿½½¼»º¹¹·¶¶µ´³²±±¯®­­¬«ª©¨¨§¥¤££¡¡ Ÿžœœ›š™˜——•””“’‘ŽŽŒŒ‹‰‰ˆ‡†…„ƒƒ‚~}}ííìëëéèçæåääââáàßÞÝÝÛÚÚÙØ××ÕÕÔÒÑÑÐÏÎÍÍËÊÉÉÈÇÆÆÅÃÂÂÀÀ¿¾½¼»º¹¹¸¶¶´´³²±°°®­­¬«ªª¨§¦¥¤¤£¢¡  žžœœ›š™˜—–•””’’‘ŽŒ‹‹‰‰ˆ‡†……„ƒ‚~}}{ììëêééçææåäãâáàßßÝÜÜÛÚÙØ××ÖÕÓÓÒÑÐÏÎÍÌËÊÉÈÈÇÆÅÄÃÃÁÁÀ¿¾½½¼ºº¸¸¶¶µ´³²±±°¯®­¬««©¨¨¦¦¥££¢¡ ŸŸžœ›š™˜—–••”“’‘ŽŽŒ‹‹‰‰ˆ‡†……„‚€~}|{zìëêêèèæååäãâáàßÞÞÜÜÛÚÙÙ×ÖÕÕÔÒÒÑÐÏÎÍÍËËÊÉÈÇÆÅÄÃÂÁÁÀ¿¾¾¼»»º¹¸¶µµ´³²²°¯¯®­­«ª©¨§§¦¥¤£¢¡ Ÿžžœ›š™™—–•””“’‘ŽŒ‹‰‰ˆ‡††…„ƒ€€~}||{zëëéèèææåääâááàßÞÝÜÛÚÙÙØÖÕÕÓÒÒÑÐÏÎÍÌÌËÊÉÈÇÆÅÅÄÃÁÁÀ¿¾¾½¼ºº¸¸·¶µ´³²±°°®®­¬««©©§§¦¥¤£¢¡ Ÿžžœœ›š™˜˜––•”“’‘ŽŒ‹Š‰ˆ‡††„ƒ‚‚€€~~||{zyêéèçææåääâááàÞÞÝÜÛÚÙÙØ×ÖÔÔÓÒÑÐÏÏÍÌËËÊÉÉÇÇÆÅÃÂÂÁÀ¿¾½½¼»º¸¸··µµ³³²°°¯®­¬««©©¨§¦¥¤£¢¡  žžœ›š™˜˜—–”““’‘‘ŽŒ‹Š‰ˆˆ‡……ƒƒ€}}{{zxxéèèçæåääâááßßÞÝÜÜÚÙØØÖÕÔÓÓÒÑÐÏÎÎÍËÊÊÉÈÇÆÅÄÄÂÁÁÀÀ¿¾¼¼º¹¹¸·¶µµ´³²±°®®­¬«ªª©¨§¦¥¥££¢¡Ÿžžœ›šš˜——–•”“’‘Œ‹Š‰ˆ‡†…„ƒƒ‚€~|{zzyxwéèçæååããâáßÞÞÝÜÛÚÚØ××ÖÕÔÓÒÑÐÐÎÎÍËËÊÊÉÈÆÅÅÄÃÂÁÀ¿¾½½¼ºº¹¸¸¶µ´´³²±°¯®­¬««©¨§§¦¥¤£¢¡¡ žžœ›š™˜——–•”““‘ŽŒ‹Š‰ˆˆ‡†…„ƒ€}|{{zxywvçææåääâááßÞÞÝÜÜÛÙØ××ÖÕÔÓÒÑÑÏÎÎÌÌËÊÉÉÈÆÅÅÄÃÂÁÀ¿¾¾½¼ºº¹¸··µ´´³²±°°®­¬¬ªª©§§¦¥¤£¢¢¡ žžœ››š˜——–•”“’‘‘ŽŽŒ‹ŠŠˆˆ††…„ƒ‚€~}{zzyxwvvççååããááàßÞÝÜÛÛÚÙØ×ÕÕÔÓÓÑÑÏÏÎÌÌËÊÊÈÈÆÆÅÄÃÃÁÁ¿¾½¼¼»º¹¸¸¶µµ´³²±°°®­¬¬«ª©¨§¦¥¤¤£¡¡ ŸŸžœœšš˜˜–••””’’‘ŽŒ‹‹Šˆ‡†……„ƒ‚‚~~}|{zyxwvvtæåäãâáààßÞÝÜÜÚÚÙ××ÖÕÔÔÒÑÐÐÏÎÍÌËÊÊÈÈÇÆÅÄÃÂÁÁÀ¿¾½»»ºº¸¸¶µµ´³²±°¯¯­­¬ªª©¨§¦¦¤¤¢¡¡ŸŸžžœœšš™——––”“’‘‘ŽŽŒ‹‹‰‰ˆ‡†…„ƒƒ‚€€~~||{zyxxwuusæääãâáàßÞÞÝÛÚÙÙØ×ÖÕÔÓÓÑÑÐÎÎÍÌËÊÉÉÇÇÆÅÄÃÃÂÀ¿¿¾½¼»ºº¸·¶¶µ´³²±°¯¯®­¬ªª©©§¦¥¥¤£¢¡ Ÿžœ›š˜˜—–•””“‘‘ŽŽŒ‹ŠŠˆ‡‡……„ƒ‚‚€~}|{{yywvvutsåäãâáàßÞÝÜÛÛÙÙØ×ÖÖÕÓÓÑÑÐÏÎÍÌÌÊÊÉÇÇÆÅÄÃÂÁÀ¿¿½½¼»º¹¸··¶µ´³²±°°¯®­¬ªª©¨§¦¥¥££¢¡ Ÿžœ›š™˜˜–•”“’’‘Ž‹‹Š‰ˆ‡†…„„‚€€~}|{zyyxwvttsräãâáàßÞÞÜÜÛÙØØØÖÕÕÓÒÑÑÐÏÎÍÍËÊÊÉÈÇÆÅÄÃÃÁÁÀ¿½¼¼»º¹¹··¶´´³²±°¯®®¬¬«ª©¨¨§¥¥££¢¡ Ÿžžœ›š™˜—–••”“’ŽŒ‹ŠŠ‰ˆ‡†…„ƒ‚‚€~}|{zzywvvutsrqãâáàßÞÝÜÜÛÙÙØ×ÖÖÔÔÒÑÑÐÏÎÍÌËËÊÈÇÇÆÅÅÃÂÁÁÀ¿¾½¼¼»º¸·¶¶µ´´²±°°¯®­¬««©©§¦¦¥£¢¢¡ ŸŸž››š™˜—–••”’‘‘ŽŒŒŠŠ‰ˆ‡†……ƒƒ‚€~~}|{zyyxwvutsrrqâáàßßÞÝÜÛÚÚØ×ÖÕÔÔÓÒÑÑÏÎÍÌËËÊÉÈÇÇÅÄÃÃÂÁ¿¿¾¾¼»º¹¹··¶µ´´²±°¯¯­­¬«ªª¨§¦¦¥¤£¢¡ Ÿžœ›š™˜˜––””“’‘ŽŒ‹‹Š‰ˆ‡†…„„ƒ‚~}|{zyxxwvuttrqpoáàßßÞÝÜÛÚÙØ×ÖÖÔÔÓÒÑÐÏÎÍÌËÊÉÉÈÇÆÅÄÄÃÁÁÀ¿¾½½¼»¹¹¸¶¶µ´´²±±¯¯®­¬«ªª¨§¦¦¥¤£¢¢  žž››š™™—–•””’’‘ŽŒŒ‹Šˆˆ‡‡……„ƒ‚€€~~||{zywwvutsrrppoáßÞÞÝÜÛÛÙÙ×ÖÕÕÔÓÒÑÑÐÎÎÍÌËÉÉÈÇÆÅÅÄÃÂÁÀ¿¾½½»º¹¹··¶¶´³²²±°®®­¬«ªª©¨¦¦¥¤££¢¡ Ÿžœœ›šš˜——••”“’’ŽŽŒ‹Š‰ˆ‡†…„„‚‚€~~}|zzyxwvuussqqponßßÞÝÜÛÚÚØ××ÖÕÔÓÒÑÐÏÏÍÍÌËÊÉÈÈÆÅÅÃÂÂÁÀ¿¾½½»ºº¹¸·¶¶´³³²±°¯®®¬¬«ª¨§§¦¥¤£¢¡¡ Ÿžœœšš˜——–•”“’‘‘Œ‹Š‰ˆ‡††„„‚‚€~~|{{zyxwwvttrrpoonnßÞÝÜÛÛÚØ×ÖÖÕÔÓÒÒÐÐÏÎÍÌËÊÉÈÈÇÆÅÃÃÂÁÀ¿¾½½»»º¸¸·¶µ´´²²±°¯®­¬«ªª©§§¦¥¤£¢¢¡ žžœ›šš˜˜—–•”“’‘ŽŒ‹Š‰ˆ‡‡……„ƒ‚€~~||{zyxwwuttsrqponmmÞÝÜÛÚÙÙØ×ÖÕÔÓÒÑÑÐÎÎÌÌËÊÊÈÈÇÆÅÄÃÂÁÀ¿¾¾½¼ºº¹¸¸¶µµ³³±±°¯®­¬¬«ª¨¨¦¦¥¤££¢¡ Ÿžœ››š™˜—–•”“’‘‘ŽŒ‹ŠŠˆˆ‡†…„ƒ‚~}||{zyxwvuussqqponmllÝÜÛÛÙÙØ×ÖÕÔÓÒÑÐÐÎÍÍÌËËÉÉÇÇÆÅÄÃÂÁÀ¿¾½½¼ºº¹¸·¶¶´³³²±±¯¯­¬««ª©¨§¦¥¥£¢¢  Ÿžžœ›šš˜˜—–•”“’‘‘ŽŒ‹ŠŠ‰ˆ††…ƒƒ‚€}||{zyxwwuttrrqponmlkjÜÛÚÙÙØ×ÖÕÔÓÒÑÑÐÏÍÍÌËÊÉÉÇÇÆÄÄÃÂÁÀ¿¾½¼¼»º¹¸··¶µ´³²±°¯®®­¬«ª©¨§¦¥¤¤£¢¡ Ÿžžœ››š™˜—–•”““’‘ŽŒŒŠŠˆ‡‡†…„ƒ‚~}}|{zyxwwuussrqponnmlkjÛÚÚÙØ×ÖÕÔÔÒÒÑÏÏÎÍÌËÊÊÉÈÇÆÅÄÃÃÁÁÀ¾¾½¼»º¹¸·¶¶µ´³²±°¯®­¬¬«ª©¨§¦¥¤¤£¢¡ Ÿž››š™˜—–•”“’’‘ŽŒŒŠ‰ˆ‡‡†…„ƒ‚€€}}|{zyxxwuutsrqpoonlkjjiÛÚØØ×ÖÕÕÓÓÒÐÐÏÎÍÌÌËÊÉÈÆÆÅÄÄÂÁÀ¿¿¾½¼»ºº¸¸·µ´´³²±°¯®®¬¬«ª©¨¨¦¦¥££¢¡ Ÿž››š™˜—–•”“’’‘ŽŒ‹Š‰‰ˆ‡†…„ƒƒ€~~||{zyywwvutsrqpoomlkjjihÚÙØ×ÖÕÕÔÓÑÐÐÏÎÍÌËËÊÈÈÇÆÅÄÄÂÁÁÀ¿¾½¼»º¹¹¸·¶µ´³²±±°¯­¬««ªª©¨¦¥¥¤¢¢¡  žœ›š™˜—–••““’‘ŽŒ‹ŠŠ‰ˆ‡†……ƒƒ‚€€~~}||zzxwvvutsrqpponmlkjihhÙØ×ÖÕÔÓÓÒÑÐÏÎÍÌÌÊÉÈÈÇÆÅÅÄÂÁÀÀ¿¾½¼»ºº¸¸·µµ´³²²°°®­­¬«ª©©¨¦¦¥¤£¢¡¡Ÿžœšš™˜—–•””’’‘ŽŒŒ‹Š‰ˆ‡†…„„ƒ‚€€~~}|{{yyxvuutsrqpoommlkjiiggØ×ÖÖÔÓÓÒÐÐÏÎÎÍÌÊÊÉÈÇÆÅÄÃÃÂÁÀ¾¾½¼¼º¹¹·¶¶µ´³²²±°¯­­¬¬«©¨¨§¦¥¤£¢¡ ŸŸžœšš™™—––”““’‘ŽŒ‹Šˆˆ‡‡…„ƒ‚‚€€~}|{{yyxwvvtsrqqpnmllkkiihgf××ÕÕÔÓÑÑÐÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÂÀÀ¿¾½¼»ºº¸¸·¶µ´³³±±¯®®­¬«ªª¨¨§¦¥¤£¢¢ Ÿžžœ›š™˜˜––•““’‘ŽŽ‹‹Š‰ˆ‡†…„ƒ‚‚€~}}{zyxxwvutssqqponmlkjihggfdÖÕÕÔÒÒÑÐÐÏÍÍËËÊÉÈÇÆÅÄÃÃÁÁÀ¿¾½¼»º¹¹¸·¶µµ³³±±°¯®­­««ª¨§§¦¥¤££¡  Ÿžœ›š™˜˜–••“’’‘ŽŽŒ‹Š‰ˆ‡‡†„ƒƒ‚€~}|{zzyxwvutsrrqponmlkkiihfeedÕÕÔÓÒÑÐÏÎÍÍÌËÊÉÉÇÆÆÅÄÃÂÁÀ¿¾½¼»ºº¹¸·¶µ´´³²±°¯®®¬¬ª©©§¦¦¥¤£¢¢¡ Ÿžœ›šš˜˜—–•”“’‘‘ŽŽŒŠŠ‰ˆˆ‡…„ƒƒ‚€~~}{{zyxwvuusrqqponmllkiihgfedcÔÔÓÒÑÑÏÏÎÍËËÊÉÈÇÆÆÅÄÃÂÁÀ¿¾¾¼»»º¹¸·¶µµ³³²±°¯®­¬««ª©¨¦¦¥¤££¡¡ Ÿžœœšš˜——–•”“’‘ŽŒŒ‹Š‰ˆ‡‡†„„ƒ‚€~}}{{yyxwvuussrqponnlljjihgfedccÔÓÒÑÐÐÎÍÌÌËÊÉÈÇÆÆÅÄÂÂÁÀ¿¾½¼¼»º¹¸·¶¶´³²±±°¯®®­¬ªª©§§¦¥¥££¢  Ÿžœœ›š™—––•”“’‘ŽŽŒ‹Š‰ˆˆ‡……„‚‚€~}}|{zyxwwvttsqqponmmlkjihgfedccbÓÒÒÑÐÏÎÌÌËÊÉÈÈÇÅÅÃÃÂÁÀÀ¾¾¼»»º¹¸·¶µ´´²²±°°®­­¬«ª©¨¨¦¥¤£¢¡¡ Ÿž›š™˜—––•”“’‘‘ŽŒ‹Š‰‰ˆ‡……„ƒ‚€€~~}|{zyxwvvttsrqponmmlkiihggedccbaÒÒÑÐÏÎÍÌËÊÉÉÇÇÆÅÄÃÂÁÀ¿¾½¼»»º¹¸·¶¶´´³²±±¯®®­¬ªª©¨§§¥¤¤£¢¡ŸŸžžœœ›™™˜—–•””’‘‘ŽŒ‹Š‰‰ˆ††…„ƒ‚€~||{zyywvvutsrqpoonmkkjihggeeccba`ÑÑÐÏÎÍÌËËÊÈÈÆÆÅÄÃÂÁÀÀ¿¾½¼»º¹¸¸·¶µ³³²±°°®®­¬«ª©¨§¦¥¤£¢¢  Ÿž›šš™˜—–•”““‘ŽŽŒ‹‹‰‰‡‡†…„ƒƒ‚€€~~}|{zzyxwuutsrrpoommkkiihggfeccaa`_ÐÐÏÎÍÄt2 %T›ÄÃÂÁ4j°¹·¶¶µ³³­ ª®­­¬«ª§¦¦¤¤£¢¡ Ÿžœ› a”““’†FC‡†…„ƒƒQ$ 3`yxwussra :mmP 'Ofdcbb`^ÐÏÎÍ°ÄÂÁÀ’¶¶µ´³²rq®­¬«ª©§¥¥££¢¡ Ÿžœ››^’’‘wp…„ƒƒtyxvtsr` ?nlJedcba^^ÏÎÍÅ€²Ä½£s+ÂÂÁÀ½¼¶¤u¨µ´³²²)*­««ª©¨¥¤££¢¢ Ÿžœœ›š—–Š:’‘ˆd„ƒc„ƒKmzwfIxvvsr^ Enml Wf^Ddcba`]\ÎÍÌs ¾ÈÇÆÅÅÄÂÂÁÀ¿½»»¹¸°![´³³²”'#««ª¨¨¥¤£¢¡¡ŸŸžœ›š™––”Š‘P„Š‰ˆ‡JƒMs~}{{zyxwvur] Inmlkbhgfedcba``\\ÍÍÌ1…ÈÇÆÅÅÄÂÁÀÀ¿¾»º¹¸¸·{'³²²±LjkKªª©§¦¤£¢¡¡ žžœ›šš˜••”ˆŽ"\Š‰ˆ‡††W !P~|{{yywwvut\Nnmlkj 5_fedcba`_^\[ÌÌ˸ÇÆÅÀ¿¾¾»º¸¸·¶¦ ³±±ª ¤¦ ¤¨§¦¦££¢ Ÿžœ›š™™—•“‡91ŽŽŒ +~‰ˆ‡†……w +€ +r|{{zyxwvuttRnmmlki@"?`aa__][ZÌËÊÅÆÅÄÀ¾½½º¸¸·¶µ±²°°m@¬¬Kj§¦¦¥¢¡  Ÿœ›š™™˜— ‚Ž‹‡ˆ‡††„ƒ€€z{zzxxwvvttr +\mlkjiihMX`^^]ZYËÊÊ ¶ÅÅÄÃÂÁ¾¾¼¼¹¸··µ´¤ ±°¯&¬«%§¦¥¥¢  Ÿžœ›šš˜˜—–eŽŒ‹ +|‡††…„ƒv +€~ qzzyxwvutssqM YkkiihgfedS; "^^]\ ZYÊÉÈ.‰ÅÃÃÂÁÀ¾¼¼»¹¸¶¶´³y'°¯Žˆ¥¤£¡ Ÿœœšš™˜––•’bpŒŒ‹Š!Y††„„ƒ‚U ~} NzyxwvvussrqnHViihgfeedbbT^]\[XXÉÉÇl*ÀÃÃÁÀÀ½¼»º·¶µ´´«Y¯®GE¤£¢ Ÿžžœ››š˜˜—–•”‘‘S‹‹Š‰M…„ƒ‚|H}|JoxxwuttsrqpmmDRhgfeeccbaY^]\[YXXWÈÈƼ,‹¶¾«r¼»º¹¶¶°žq¢¯¦ +˜©¨¨§” œ£¡Ÿžœœšš™˜—–•”“‘ŽŒQŠ‰ˆ‚`}}_y}|xGhsqbFqqolkk@Ofe:S__M\\ZZYXWVÈÇÆÅ¡o»»¹¸‹¯­h0ª©¨§¦¦.c¢¡˜˜—–••“’Žh{‰‡‡oi||{zlpoolkji<Ke?[ZZYWUÆÆÅÄÄ·d' +J£»ºº¸¸3h§®®­"q©¨¨§¥¥m ¡ ˜—–•””“’Ž‹.,ˆ‡†…{@>v}||zyxuJ +/Woonkjiig8IP+ +H\[ZYXUUÆÅÄÄÂÂÁ¿¿½½¼»º¹¹¸·¶µ´³²±±°®®¬¬«ª©¨§§¦¤££¢¡  žž››š™˜—–•”“’’‘ŒŒ‹‰‰ˆ‡†…„ƒ‚€€}}|{{yywvvutsrrqoonmlkjihgffedcba`_^^]\[ZYXWVVTTÆÄÃÃÁÁÀ¿¾½¼¼ºº¸¸·¶µ´³³±°¯¯®­¬«ª©¨¨¦¥¥¤£¢¡  žœ›š™˜—–•”“’’ŽŒŒŠŠ‰ˆ‡†……ƒƒ‚~}|{{yyxwvutsrqpoonllkkihhgfedcba`__^\\[ZYYWVVUTRÄÃÃÂÁ¿¿¾½¼»º¹¸¸·¶´´´³²±°®®­««ª©¨§§¥¥¤£¢¡¡Ÿžž›šš™˜—––”““’‘ŽŒ‹Š‰ˆ‡†……„ƒ‚€€~}|{{yywvvutsrqpponmlkjihgffddcba`__^\[[ZYXWVUUTSRÃÂÂÁÀ¿¿½¼»º¹¸··¶¶´³²²°°¯®­¬«ª©©¨¦¦¤¤£¢¡ Ÿžœœ›š™˜—––•”“’‘Ž‹‹‰ˆˆ‡†……„‚‚€~}||zyyxwvuusrrpoonmmkjjhggfedcbaa__^]\[ZZXWVVUTSRQÃÁÀÀ¿¾½½»»¹¸¸·¶µ´´³²°¯¯®­¬««©¨§§¦¥¤¤¢¡  žžœ›š™˜——–””“’‘ŽŒ‹Š‰ˆˆ†……ƒƒ‚€~}||zyyxwvuttrrqoonmlkkihggfeddba`__^]\[ZYXWVUUTRRQPÂÁÀ¿¾½½»»¹¹¸·¶µ´³³±°°¯®­¬«ªª©§¦¦¥¤£¢¡¡ Ÿžœ››™˜˜—–””“’‘ŽŽŒ‹‹Š‰ˆ‡†……„ƒ€~~}{{zyxwvuutrqqponmlljiihgfedcbb`_^]]\[ZYXWVVUTSRQQPÁÀ¿¾¾¼»»¹¹¸·¶¶µ³²±±°®®­¬«ªª¨§§¦¥¥££¡¡ žœ›š™™˜—–””“’’‘ŽŒŠŠ‰ˆ‡†……ƒƒ‚€~~}|{zyxwvutssqqponmlkjjiggfedccba__^]\[ZYYXWVUTSSQQPNÀ¿¾½½¼»º¹¸¸¶µµ³³±±°¯®­¬¬ªª©¨§¦¦¤¤¢¢  Ÿžœœšš˜˜––””“’‘Œ‹Š‰ˆˆ††„„‚‚€~}|{zyxwvuussrqponnmlkiihggfddbaa`_^]\[ZYYXVVUTSRRQPON¿¾½¼¼»º¹¸¸¶µµ´³²°°¯®­­«ªª©¨§§¥¥£¢¢¡ Ÿžœ›šš˜—––•”““’‘ŽŒ‹ŠŠˆ‡‡†„„ƒ‚€~}}|zzyxxvvutsrqpoomlkkjiggfeedbaa__^]\[ZZXXVVUUTRRQPONM¾¾½¼»º¹¹·¶¶µ´³²±°¯®®¬««ª©¨§¦¥¤¤£¢  ŸŸœ›šš˜˜—–••“’’‘ŽŒ‹ŠŠ‰ˆ‡†…„ƒƒ‚€€~~||{zyxwwuutrrqppnmlkjiihgfedcbba`_^]\[[ZYXVVVTSSQPPONML¾½¼»º¹¸¸·¶µ³³²±°°¯­¬¬«©©¨§¦¦¤¤£¢  Ÿžžœ››™™˜—–•”“’’‘Ž‹Š‰ˆ‡‡†…„„‚€~}}|{zyxxvvttsrqponnmlkiihggfedbb``_^]][[ZYXWVVUSSQPPONMLK½¼»ºº¹··¶´´³²±°°®­¬¬«ª©©§¦¥¥£¢¡¡ ŸŸœœšš™˜—–•”“’‘‘ŽŒ‹‹Š‰‡‡†……ƒ‚‚€~~}||zyyxvvutsrqppnnllkjihgfeddcba`__]\\[YYXXVUTSRQQPONMLKK¼»»¹¹··¶µ´³²±±°¯­­¬«ª©¨§¦¦¤¤£¢¡¡Ÿžœ››š™˜—–•””’‘ŽŒ‹‹‰‰‡‡†…„ƒ‚‚€}}||zyyxwvutsrqppnnmlkjihgffedcba``_^\\[ZYXWVVUTSRPPONNLLKJ»º¹¸¸·µµ´³²±°°¯­­¬«ª©¨§§¦¥¤¢¢¡¡ŸŸžœ›š™™˜—–•””“’‘ŽŒŒ‹Šˆˆ‡†…„„‚€~~}|{{zxxwvutsrrpoonmkkjihhffddcba`_^]][[ZYXWVUUTSQQPONMMKJJIº¹¹¸¶¶´´³²±°°¯­¬¬«ª©©§§¦¥¤£¢¡¡ŸŸžœ›š™˜—–•”““‘‘ŽŒŒŠŠ‰‡‡†…„ƒ‚‚€€~}|{{zyxwuutssqqoonmlkjiigfedccbaa`^]]\[ZZYWWUTTSRQPPNMLLJJHHº¹·¶¶µµ³³²°°¯®­¬«ªª¨§§¦¥¤££¡¡Ÿžžœ›š™™˜—•””“’‘ŽŒ‹Š‰ˆ‡†…„„ƒ‚€~}|{{yyxwvutssqppnnmmkjjiggfedcca``^]\\[ZYYWWUTTSRQQONNMKKJIHG¹¸·¶µ´´²±±°¯®­¬«ªª©¨§¦¥¤£¢¢  Ÿžœ›šš˜˜––•““’’ŒŒ‹Š‰ˆ‡†……„ƒ‚€~}|{{yyxwvutssqqoonmlkjjhggfedcbaa_^^]\[ZYXWWUUTSRQPOONMKKJIIGG¸·¶µ´³²±±°¯®­¬««©©¨§¦¥¥¤¢¡  Ÿžœ›šš˜——–•““’‘‘‹‹Š‰ˆ‡†……„ƒ€~}|{{zyxwvvtssrqponnlkjihhgfedcbaa`^^]\[ZYYWVVTTSRQQOOMMLKJIIGGF·¶¶´´²²±°¯®­­¬«©©¨§¦¥¤¤¢¡ Ÿžžœ›šš˜˜–••”“’‘‘ŽŒ‹Š‰ˆ‡††…„ƒ‚€~}||zyxxwvuusrqqponmlkkihhgfedccba_^^]\\[YXWVVUTSRQQOOMLLKJJIGFFE¶µ´³³²±°¯®®¬««ª©¨§¦¦¤£¢¢  Ÿžœ›šš˜˜—••”“’‘‘ŒŒ‹Š‰‰ˆ‡……„ƒ‚‚€}||{zxxwvuussrqponnlkkjihgfeddbba`_^]\[ZYXXWVUTSRQPPONMLKJJIGGFED¶µ³³²±°¯¯­­¬ª©¨¨§¦¥¤¤¢¢¡ Ÿžœ›šš˜˜—–•””’‘ŽŒ‹Š‰ˆ‡‡……„ƒ‚€}}|{zyxwwuttsrqponnllkihhgfedcca``_^]\[ZYYXVVUTSRQPPONMLKJJIHGEDDC´´³²±°¯®®­¬«©©¨§¦¦¥¤¢¡¡ Ÿžœ›šš™˜—–•”“’‘‘ŽŽŒ‹Š‰ˆˆ††…„ƒ‚€€~~}|{{yxwwuutrrqponmmlkjihgfeddcba`__]\[ZZXXWVUUSRRPPONMLLJIHGFEEDCB´³²±°¯¯­¬¬«ª©¨§§¦¥££¢  Ÿž››š™˜—–•””“’ŽŽŒŒŠŠˆ‡‡†…„ƒ‚‚€~}|{zyxxvvussrqpoonmlkjihgffeccba`_^]\[ZZYXWVUTSSRQOONMLKJIIHFFEDCBB³²²°°®®­¬«ª©¨§¦¦¥¤£¢¡  ž›šš™———••”’’‘ŽŒ‹‹‰ˆ‡‡†…„ƒ‚~}|{{yyxwvutsrqppnnlkkjihhffddcba`_^^\[[ZYXWWVTTSQQONNMLLKIIGGFEDCCA@²±°¯®­¬¬«ª©¨§§¥¥¤£¡¡ Ÿžœ›š™˜—–••““’‘ŽŒŒ‹Šˆ‡††…„ƒ‚‚€~}||zyywwvutsrrqoommlkjihgffedcba`_^^]\[ZYXWVUTSSRQOONMLKJJIHGFEDDCA@@±°¯®®­¬«ª©¨§¦¦¥¤£¢¡ ŸŸœšš™™—–•””“’‘ŽŒŒŠ‰‰ˆ‡‡……ƒƒ€€~}||zzywvvutsrrqponmkkjjiggeddbbaa`^^]\[YYXWWUUTRRQPONMMKJJIGGFEDDBA@@?°¯¯®­¬«ª©©§¦¥¥¤£¢¢ ŸŸœ›š™˜˜––•”’’‘ŽŒŠ‰‰ˆ‡†…„ƒƒ‚€€~}|{zzxxwvutsrqpoonmlljjihffddcba``_^][[ZYXXVUTTSRQPONMLKKIIHGFEEDCBA@?>°¯®¬¬««ª¨¨¦¥¥¤£¢¡ ŸŸžœœ›š™˜——–•”“’‘ŽŒŒ‹Š‰ˆˆ†…„ƒƒ‚€~}||zzxxwvuttrqqonnmlkjjhhgfddcbaa__^]\[ZYXWVVUTSRQPONNLKKIIHGFEEDCBA@?>=¯®­¬«ªª©¨¦¦¤¤£¢¡¡ žž››š™˜—––•”“’‘‘ŽŽŒŒ‹‰‰ˆ‡††…„ƒ‚€~}||{yxxwvutsrrqponmlkkiihffedcbb`__]]\[[YXXVVUSSRRPOONMKKJIHGFEEDBBA@?>><®­¬«ª©¨¨§¥¥¤££¢  žœ››š˜˜–••”“’‘ŽŽŒ‹ŠŠ‰‰‡‡†…„‚‚€~~|{zzyxwvuutrqqponmlljjhggfeecbba`^]]\\[ZYWVVUTSRQPOONMLKJIHGFEEDCBA@?>>=;­¬««©©¨§¦¥¤£¢¡ ŸŸœ›š™™˜––•”“’’ŽŒ‹Š‰ˆ‡‡†…ƒ‚‚€~}}|{yxxwvuusrrqponmlkkjhgffedccaa`_^]\[ZYYWWUUTSRQPPNMLLKJJHGFEEDCAA@@>=<<:­«ªª©¨§¦¥¤££¡¡ŸŸžœ›š™™˜––•”“’‘ŽŽŒ‹‹‰‰‡‡†„„ƒ‚~~}|{zyxwvuutrqqponmlkjjihgfeecbba__^]\\ZZXXWUUTSRQPONNMLKJIHGGEEDCBA@@>>=<;:¬ªª©¨§¦¥¤£¢¢¡ Ÿžœ›š™™—–••”“’‘ŽŽŒ‹Š‰‰ˆ††…ƒƒ‚€~}{zzyxwvuutsqqponnmkkiihgfedcbba`_^]\[[YXXVVUTSRRPPONMLKKIHGFEDDCCA@??>=<;:9«ª©¨§¦¥¥££¢  Ÿž›šš™——–•”“’’Œ‹Š‰ˆ‡††…„ƒ‚€~}}{{zyyxvvussrqppnmlkjjihgfeeccba`_^]\[[ZYXVVUTSRRPPOMMLKKJIHFFEDCBA@??==<;:98©©¨§§¥¥¤£¢¡ Ÿžœ››™™˜—––””“‘ŽŒ‹‹Š‰ˆ‡†…„„‚‚€}||{{zxwwvutsrqppnnmlkjihgfeedba```^]\\[ZYXWVUTTRQQOONMLLJJIHGFEDCBB@@>=<<;:988©¨§¦¦¤£¢¢¡ Ÿžœœ›™™——––”““’‘ŽŒŒŠ‰ˆˆ‡†…„ƒƒ‚€}}|{zyxxvvussrqppnmmlkjihgfeddcba`_^^][ZZYXWVUTTSRQPONMLKJIHHGFEDDBAA??==<;:9976©¨¦¦¥¤£¢¡  žœœ›š™˜—–••”“’‘ŽŒ‹‹‰‰ˆ‡††„„ƒ‚~}|{zzxxwuttsrrpoonmlkjihhffdccba`_^]\[ZZYXWWUUSSRQPONMLLKIHHGFEDCCB@@?==<;:99876§¦¦¤¤£¢¡ ŸŸž››š™˜—––•”“’‘ŽŒ‹‰ˆˆ‡†……„‚‚€~}||{yywvvutsrqponnmlkjihhffdccba`_^^\\[ZXXXVUUTRRQPONNLKJJHHGFEDCBAA@?>=<;;:87765¦¦¥¤£¢¡¡Ÿžœœ›š™˜—–••”“‘‘ŽŒŒŠŠ‰ˆ‡†…„„‚~}|{zzxxwvutsrrqonnmlkjjhhfeedccaa_^^][[ZYXXWVUTSQPPONMMLJJIGGFEDCBAA@?>=<;::986654¦¥¤£¢¡¡ŸŸžœ›š™˜˜—–””“’‘ŽŒ‹Š‰ˆ‡†…„„‚‚€~}||{zyxwvuttrrqpnnmlljjhhgeedcbaa`_]][[ZYXWWUUSSRQPONMMKJJIHGFEDCBAA@?>==<::8876554¥¤££¢¡ žžœ›š™˜˜–••”“’‘ŽŒ‹Š‰ˆ‡†…„ƒƒ€~~|{zyyxwvutssqqonnmlljjigfeedccaa`^^\\[ZYXWWVUTSRQPOOMLKJJIHGFEEDCBA@?>==;:988765432¤£¢¡¡Ÿžžœ››š˜—–••”“’‘ŽŒ‹Š‰ˆˆ†……„ƒ‚€~~}{{zyxwvutsrqpponmmljiiggfedccaa`^^]\[ZYYWWUUSSRQPOONLLKJIHGFEECCBA@?>=<;;:987764322¤¢¢¡ žžœ›š™˜˜—••”“’‘‘ŽŒŒ‹Š‰‰ˆ††„ƒƒ‚€}}{{zyxwvvusrrqoonmlljiihgfeddba``_^]\[ZZYXWVUTSRRQONNLLKJIHHGEEDCBA@?>>=<;99876553210¢¡¡Ÿžœœšš˜—––•”“’‘ŽŒ‹Š‰ˆ‡†……ƒƒ‚€~~|{{zyxwvvutsrppoonmkkjihggeecca``^^]\[[YXXVUUTSRQPPONLLKJIHGFEECCBA@??>=<;:98765533210¡ ŸŸžœ››™˜˜––•”“’‘ŽŽŒ‹‹‰‰‡‡†„ƒƒ‚€€}}|{zyxwvvutsqqponmllkjihgfeddbb``_^]\[ZYYXWVUTSRQPPNNMLKKJHGFEEDCBB@?>=<<;:98776533210/¡ Ÿžœ›š™™˜—–•”“’‘Œ‹‹Š‰‡‡†…„ƒ‚€~}|{zzxwwuttrrqqonmmlkjihgfeeccba__^]\\ZZYXWVUUSRQPPNNMLKJIHHGFEDCBAA?>>=<;:98776543211// Ÿž››š™——–•”“’‘ŽŒ‹Š‰ˆ‡‡†…„ƒ‚~}||{zyywwvutsrqponnmlkjihgffedcba`__]\[[ZYXWVUTTSRQPNNMMKKIHGGEEDCBAA?>>=<;:987655432100.-Ÿžœ››š˜˜—–••”“’‘ŽŒ‹‰‰ˆ‡†„„ƒ‚€~}|{zzxxwvutsrqppnnmkkjihgfedccba`__]\[[ZYXWVUTSSQQPONNMKJIIGFFEDCBB@@?>=<;:987765432200.-,žž›šš™˜—––”““‘‘ŽŽŒŒ‹‰ˆˆ‡†…„ƒ‚~}|{{yxwwvutsrqqonnmlkjihggeddbbaa_^^\\[ZYXWWVTTSQQPONMLKJJHHFFEDCCBA@>>=<;:98866543211/.--,žœ›šš™˜—––”““’‘ŽŒŠŠ‰ˆ‡†…„„‚‚€~}}{zyxwwvttsrrqoonllkjihgffeccba``_^][[YYYXVVUTSRQOONMLKJJIHGFEDCBB@@?>=<;;988765443100/--,+œœšš™˜—––•““’‘ŒŒŠ‰‰ˆ‡†…„ƒƒ‚€~}|{zyxwwvuttrrqoonmlkjiihgfedcbba_^]]\[ZYXWWVUSSRQPONNLKKJHHGFEDDCBA??>=<;:998665432100/.-,+*œššš˜——–””’’‘Ž‹‹‰‰ˆ‡†……ƒƒ‚€~}|{{yywwvutsrqpponmlkjihhfeedcbba`_^][[ZYXWVUTSSRQPONMMKJIIHGFEDDBBA@?>=<<;:88765533200/--,+**›š™˜˜–••”“’‘ŽŽ‹‹Š‰ˆ‡‡……„ƒ‚€~}|{zyyxwvutsrqpoonmmkjiihgfedcbb`__^]\[ZYXXVVTTSRQPONNMKKJIHGFEDCCBA@?>=<<:988765432210..-,,+*(š™˜˜––•”“’‘Œ‹Š‰ˆ‡††…ƒ‚‚€~}}|{yyxwvutsrrqponmlkkihhfeedccaa__^]\[ZYXXVVUSSRQPONMLLKJIHGGFEDBBA@?>>=;;:98765533100/..,,**)(š™˜––•”“’‘‘‹‹Š‰ˆ‡‡…„„‚‚€~~||{zyxwwvttsrqpoommkjiihffeddbaa`_]]\[ZYXXWUUTSRQQOONMLJJIHHFFEDCBA@@?=<;;:98765543200/.--++*)('™˜––•”“’’ŽŒ‹Š‰ˆˆ††…ƒƒ‚€~~}|{zyxwvvtsrqpponmlkkiihgffdcbba`_^]\[[YXWVUUTSSQQPOMMLKJIHHFFEDCBB@@>==<::98765543210/.--,*))(''——–•”““’ŽŒ‹Š‰ˆ‡†……„ƒ‚€~~||{zyxwvuutsrpponmlljjihgfeedcaa__^]\[[YXXWVTTSSQQPONMLKJIHHFFEDCBA@@>=<<;:99765542200/..,++*)('&%––•”““‘‘ŽŒ‹Š‰‰ˆ‡†…„ƒ‚€~~}|{zyywwuttrrqponmmkjjihggeddcba`_^]][[YYXWVUTSSRPOOMMLKKJIGFFEDCBAA?>==<;:99766543210/.-,,+*)('&%$–•”““‘ŽŒ‹Š‰‰ˆ‡……ƒƒ‚€€~}|{zyyxwvutsrqponnmkjjihgfeddcba``^^][[ZYXWVUTSRQQPOMMLKJIIGFFEDCBA@??=<<;:98765543210/.--++*)(''%%$•”““’ŽŒ‹ŠŠ‰‡‡†…„ƒ‚}||{zyxwwvutsrqppnmllkjihhffdccba`_^^\\ZZYXWWUTSSQQPONNMKJJIHFFEDCBAA@?>=<;:988764432110.-,,+*)(''&%$#”““’‘ŽŒ‹Š‰‰ˆ‡††„ƒƒ€€~~}|{{zyxwvutsrqppomlljjihgfeedcbaa__]\\[ZYXWVUTSRQQPONMLKJJIHGFEEDBBA@?>=<<:997765433110..-++*)(''&$##"”“‘‘ŽŒ‹ŠŠ‰ˆ‡†…„„‚€€~}||zyxxwvutssqqoommkkjihhffedcbaa_^]\\ZYYXWWUTTSRQPONMMKKJHGGFEDCBB@@?>=<;::9876543210/.--,+*))'&&%$#"!“’ŽŽŒ‹ŠŠˆˆ‡†……„‚€~}}|zzyxvvutsrqpoonmllkjigfeedbbaa_^^]\[ZYXWWVTTSRQPONMMKKJIHGGEDCCAA??>==;:998765432100/.-,+*))''%%##"! ’‘‹‹‰ˆˆ‡†…„„‚‚€~}|{{yxxwvutssrpponmlkjihggfedcbaa`^^\\[ZYXXVUTTSRQPONNMLKJIHGFEDCBBA@?>=<;;98876543221//.-,+**((&&%$#"" ‘ŒŒ‹Š‰ˆ‡‡†„ƒƒ€~}|{{zyxwvutssrppommlkjihhfeedcbba__^\\[ZYYWVVUSSRQQONNMKKIIHGFFDCCAA@?>><;;998765432100..-,+*))(&&%$#"!! Ž‹‹Š‰‰ˆ†……„ƒ‚€~}|{{yyxwvutssrpponmlkjiiggfedcbba__^]\[ZZXWVUUTSRQPONNLLKJJHGFEDCCBA@@>=<;;:98765432200/.--+*)(('&%$#"! ŽŽŒ‹ŠŠ‰‰ˆ‡…„ƒƒ‚€~}|{{zxxwvutsrrpponmlkjiihffedccaa__^]\[ZYYWWVUTSRQPONMMLKJIHGGEEDCBAA??>=;;:98765433110/.-,,+*)('&%$#"! ŽŒ‹ŠŠ‰‡††…ƒƒ‚€€~~||{yyxwvutssrqponmmkjiihgfeddca`__^]\[ZZXWWVTTSRQQPNNMLKJJHHGFECCBA@??>=<;:98775543210/.-,++)(('&&%$#"! ŽŒŒŠŠˆ‡†……„ƒ‚}}|{zyxwwuttrrqponnlkjjihgfeddbb``_^]\[ZZYXVVUTSRQQONNMLKJIIGGFEDCBAA@>=<<;998776443200//--,+*)(''%$#"! Œ‹Š‰‰‡‡…„„ƒ‚€€~}|{zyxwvvutsqqpoommlkihhggfeccba`_^]\\ZZYXWVUUSRRQPONMLKKIHHFFEDCBB@??==<;:99866533210/..-,+*)('&&$$#!!Œ‹‹Šˆ‡††…„ƒ‚‚€~}}|{zzyxvuttsrqponmmlkiihggeedcba`_^^\[ZZYXWVUTSSQPPONMLKJJIGFFEDCBB@?>>=<;:99775543211/..-++))('&%$##"! ŒŠŠ‰‡†…„„„‚‚€~~}|{{yxwvuttsrqponmmljjihgfeddcba`_^^][[ZYXWWUTSSQQPONMLKJJHGGFEDCCAA@?==<;:988765432100.--,+*))(&%%$#"! ŠŠ‰ˆ†……„ƒ‚~~}|{zyxxwuttsrqponnmlkjiihffddcba`_^]]\ZZYXWWUTTRRQPONMMLKJIHFFEDCBAA@?><<;:99866543311//-,,+*))''%$$#"!!Šˆˆ‡†…„„ƒ}}|{{yyxwvutsrqponmllkjihggeddcba`_^^]\[ZYXXWUUTRQPPONMMKKJIHGFEEDBAA@?>=<;;:9876544211//.-,+*)('&&%#""! ‰ˆ‡†…„ƒ‚‚€~}|{zzxxwvuttsqqponmlkjihgffecbba`_^^]\[ZYXWVVTSSRQPONMMKKJIHGFEDDBA@@?>==;;98776443210/..,,+**)''&$##"! ˆ‡††„ƒ‚€€~}|{zyxwwvutsrqpoonmlkjihhffddcba``^^]\[ZYXXWVTTSQQPPNMMKJJIHGFEDDBAA@?>=<<:99876544311//.,,+*)(('%$$#"! ‡†…„ƒƒ€€~}|{{yyxwvutssqqpnnmlkjihhgeedcbba`_^]\[ZYXXVVTSSQQPOONMKKJIHGFEDDBAA@?>>=<;:98765433200/.-,+**)''&%$#""! †…„„ƒ‚€~}|{{zxxwvutsrrqponmmkjjiggfedcba``_^]\[ZYYWVUUTSRQPPOMLLKJIIGFEEDBBA@?>=<;;998776542210/..,,+))''%%%#"! †…„ƒ‚€~~|{{zyxwvuussrpponmlljiihgfeddbba`_^]\[ZYYXVVUTSRQPPOMMLKJJHGGEEDCBA@?>=<<;:98866533200/.--++))('&%$##!  \ No newline at end of file diff --git a/autotest/gdrivers/data/adrg/subdataset/XXXXXX02.IMG b/autotest/gdrivers/data/adrg/subdataset/XXXXXX02.IMG new file mode 100644 index 000000000000..0955a8b16c1a --- /dev/null +++ b/autotest/gdrivers/data/adrg/subdataset/XXXXXX02.IMG @@ -0,0 +1,19 @@ +001852L 0600065 340300002000000010420020PAD0280062SCN0300090 GEO_DATA_FILE1000;&RECORD_ID_FIELDRTY!RID(A(3),A(2))1000;&PADDING_FIELDPAD(A)2000;&PIXEL_FIELD*PIX(A(1))51015 D 00088 9903001000000006000000000PAD000001769000000006SCN000049152000001775IMG01 ïîíìëêéèçææääââáàßÞÞÝÜÚÚÙØ×ÖÖÔÓÓÒÑÐÎÎÍÌËËÉÉÈÆÆÅÄÃÂÁÁÀ¿¾¼¼»º¹¸··µµ´³³±°¯¯®­¬«ª©¨§¦¦¥££¢¡ Ÿžœ›™™˜—–•””“’ŽŒ‹ŠŠ‰ˆ‡†……ƒ‚€~}|îíëëêéèçæååããâáàßÞÝÝÜÚÚÙØ×ÖÕÔÔÒÒÐÏÏÎÍÌËËÊÈÈÇÆÅÄÄÂÂÁÀ¿¾½¼»º¹¹·¶¶µ´³²²°¯¯®¬¬««ª¨§§¦¥££¢¡  žžœšš™˜—–•””’’ŽŒ‹‹‰‰ˆ‡†…„ƒƒ€~}|{íìëêéèççåäããâáàßßÞÝÜÚÙÙØ××ÕÕÓÒÒÑÐÏÎÍÌËËÉÉÈÇÆÅÄÃÃÁÁÀ¿¾½¼»ºº¸¸·µµ´³²±°¯¯®­«««©¨¨¦¦¥¤£¢¡ ŸŸœœ›š™˜—–••“’‘‘‹ŠŠˆˆ‡†……„‚‚€~}||zìëêêèèçæåäãâáàßßÞÜÜÛÚÚØØÖÕÔÔÓÒÑÐÐÎÍÌÌËÉÉÈÇÆÆÄÃÃÁÁÀ¿¾¾¼¼ºº¸¸·¶µ´³²±°¯¯­­¬«ª©¨¨§¦¥¤£¢¡  žž›šš™˜—–•””’’‘ŽŒŠŠ‰ˆ‡†……ƒƒ‚€~}||{yëêêéèææåäãâáààÞÞÝÜÛÚÙØ××ÖÕÓÒÑÑÐÏÎÍÍËËÉÉÈÇÆÅÄÃÂÁÁÀ¿¾¾¼»ºº¹··¶µµ´²±°¯®®­¬¬ª©©¨¦¦¤¤£¢¢ Ÿžœ›š™˜——–•““’‘ŒŒ‹Š‰ˆ‡‡†…ƒƒ€€~}}{zyyêééççæåäãâáàßßÞÝÜÛÚÙØØ×ÖÕÓÓÒÑÑÏÏÎÍÌÊÊÉÈÇÇÆÄÄÃÂÁÀ¿¾½¼¼»¹¹¸·¶µµ´²±°°®®­¬«ª©¨§§¦¥¤£¢¢ ŸŸžœ›š™™˜—–””“’’ŽŽŒŒ‹Š‰‰‡††„„ƒ‚€~~||{zyxééççååäãââààßÞÝÜÛÚÚØ××ÖÕÔÓÒÑÐÐÎÍÌÌËÊÉÈÇÆÅÄÄÃÂÁÀ¿¾¾½»»º¹¸·¶µµ³³±±¯¯®­­««©©¨§¦¥¥£¢¡¡ŸŸžœœš™™˜—–•”“’’ŽŽŒ‹ŠŠˆ‡††„ƒ‚€}||{zyxwéèçæåääââáàßÞÜÜÛÚÙØØ×ÕÕÔÓÒÒÐÐÏÎÌÌËÊÉÉÇÇÅÅÄÃÂÁÀ¿¾½½»ºº¹¸··¶µ³³²±°¯®®¬««ª©¨§¦¥¤£¢¢ ŸŸžœ›š™˜—––•””“‘ŽŒ‹Š‰ˆ‡†……ƒƒ‚€~~}|{zyxwvèçæåääãáààßÞÝÜÛÚÚÙ×ÖÖÔÔÓÒÑÑÐÎÎÍÌËÊÉÈÇÆÆÄÄÃÂÂÀ¿¿¾½»»º¹¸··µµ³³²±°¯¯®­¬«©¨¨§¦¥¤££¡  Ÿžœ››™˜—––•”“’’‘ŽŒ‹Š‰ˆˆ‡†…„ƒ‚€~}}|{zyxwvuçæåääãáàßßÞÞÜÛÚÚÙØ×ÖÕÔÓÒÒÐÏÏÎÍÌËËÉÈÈÇÅÅÄÃÂÂÀ¿¾¾½¼»º¹¸¸·µ´´³²±°¯®®­««ª©¨§¦¦¤££¡¡ Ÿžœœšš™˜—–•”“’’‘ŽŽŒ‹ŠŠ‰ˆ‡…„„ƒ‚€€~~}{{zyxwwuuçæåãâááàßßÝÜÛÛÚÙØ×ÖÕÔÓÓÒÐÏÏÎÍÌËÊÊÈÈÆÆÅÄÃÂÁÁ¿¿¾½¼»º¹¸·¶¶µ´³²±°¯®­¬¬«ª©¨§¦¦¤¤£¢¡ŸŸžœœšš™˜—–••”’’ŽŽŒ‹‹Š‰ˆ‡†…„ƒ‚€~~||{zyxwwvutæåãâááàßÞÝÜÜÛÚØØ×ÖÖÔÓÒÑÑÐÏÎÍÌËÊÉÉÈÇÆÅÄÃÃÂÁÀ¾¾½¼»º¹¸·¶¶µ´³²±°¯®­¬¬ªª©¨¨¦¥¤¤¢¢¡ Ÿžœ›š˜˜—––””“’‘ŽŒŒŠ‰‰ˆ‡†…„ƒ‚€~}}|{{yxxwvutsääãâáààÞÝÝÛÛÙØØØÖÕÔÓÒÒÑÐÏÎÍÌËËÊÉÈÇÆÅÄÄÂÂÁ¿¾¾½¼»º¹¹·¶¶µ´³²±±¯®®­¬«ª©¨§¦¦¥££¢¡ Ÿžžœ››™™˜——•”““‘‘ŽŒ‹‹‰ˆ‡‡†…„„ƒ€~}|{zyxxwuttsräãâáàßßÝÜÜÛÚÙØ×ÖÖÕÔÓÑÑÐÏÎÍÌËËÊÉÈÇÆÅÄÃÃÁÁ¿¾¾½¼»ºº¹··¶µ´³²±±°¯®­¬«ª©©¨¦¥¥££¢¡ ŸŸœ››š™˜—––”““‘ŒŒ‹‰‰ˆ‡†…„„‚‚~}||{yywvuutsrqãâááßÞÝÜÜÚÚÙØØÖÕÕÓÓÑÑÐÏÎÍÌËÊÊÉÈÇÆÅÅÃÃÁÁ¿¿¾½¼¼º¹¸·¶¶µ´³³²±¯¯®¬¬«ªª©¨§¦¤¤£¢¢ Ÿžžœœ›š™˜˜––””“’‘ŽŒ‹ŠŠ‰‡‡†……ƒ‚€€~}|{zzyxwvutsrqqâáàßÞÞÝÜÛÚÙØ×ÖÕÕÓÒÒÑÐÏÏÍÌÌÊÊÉÈÇÆÅÄÃÂÁÁ¿¿¾¾¼»º¹¹¸·¶µ´³³±°°¯®­¬«ªª©§¦¥¥¤£¢¡ ŸŸœ›š™™—––•”’’‘ŽŽŒ‹‰‰ˆ‡†…„„ƒ‚€€~}||{zxxwvutssqqoáààÞÞÝÜÛÚÙØØÖÖÕÔÓÒÑÐÏÎÎÍÌËÊÉÈÇÆÅÅÄÃÂÀÀ¿¾¾½»º¹¹¸·¶µ´³³±°¯¯®­¬«ª©¨¨§¦¥¤£¢¡¡ŸŸœ›š™˜˜—••”“’‘Ž‹‹Š‰ˆ‡†……„‚€~}|{{yyxwvuttrqppoáßßÞÝÜÛÚÙÙØ×ÖÕÓÓÒÑÑÐÎÎÌËËÊÉÈÇÇÅÄÄÂÂÁÀ¿¾½¼¼»¹¹¸·¶µ´´²²°°¯®­¬«ª©¨¨§¦¥¤£¢¡¡ Ÿž››š™˜˜—••”“’‘ŽŒŒ‹Š‰‰‡††…„‚‚€~}}{zyyxwvutsrrpoonàßÞÝÜÜÚÙÙ××ÖÔÔÓÒÑÑÏÏÍÍÌËÊÊÉÇÆÅÄÄÃÂÁÀ¿¿½¼¼»¹¹¸··µ´³³²°°¯®­¬¬«©©§§¦¥¤£¢¢¡ žžœœš™˜——–””“’‘ŽŒ‹Š‰ˆˆ‡…„„ƒ‚€€}}|{zyxwwuttrrpponmßÝÝÜÜÛÙØ××ÕÕÔÓÒÑÐÏÏÍÍÌËÊÉÈÇÇÆÅÃÃÂÁÀ¿¾¾½»ºº¹¸·¶¶´´²±±°¯®­¬««©©¨§¦¥¥££¢  žœœšš™—––•”“’‘‘ŽŒŒ‹Š‰‰ˆ††…„‚‚‚€~}||{zyxwwuttrqqponmlÝÝÜÛÚÙÙ××ÖÕÔÓÒÑÐÏÏÎÍÌËÊÉÈÇÇÆÅÄÃÂÁÀ¿¾¾½»»¹¹¸··¶µ³²²±°¯¯­¬««©©§§¦¥¤£¢¡¡ Ÿžœ›š™™˜–••”“’‘Œ‹‹‰‰ˆ††…„ƒ‚€}|{{yyxwvvttrrqppomllÞÝÜÚÙØØ×ÖÕÔÓÒÑÑÏÏÎÍÌËÊÊÉÇÆÆÅÄÃÂÁÁ¿¾½¼¼»º¹¸··¶´³²²±°¯®®­¬«ª©¨§¦¦¤£¢¢¡ Ÿžœœ›™˜˜—–•”“’’‘ŽŒŒŠ‰ˆˆ‡…„„ƒ‚‚€}}|{zyxxvvutsrqponmmkkÜÜÛÚØØ×ÖÕÔÓÒÑÑÐÏÎÍÌËËÉÉÇÆÆÅÄÃÃÁÀÀ¾½½¼»º¹¸¸·µµ´³²±°¯¯®­¬«ª©¨§§¥¤£¢¡¡ ŸŸœš™™——–•”““’ŽŒ‹Š‰ˆˆ††…„ƒ‚€~~}|{zyxxwvttsrqpoomlkjjÜÚÚØØ×ÖÕÔÔÓÒÐÐÏÎÍÌËËÊÉÈÆÆÅÄÃÃÁÁÀ¿¾½¼»º¹¸¸·¶µ´³²±°¯®®­«ªª©¨§¦¥¤££¡  Ÿžœœ›š™˜—–••““’‘Ž‹‹‰ˆˆ††…„ƒ‚€~}|{{yxwwvutsrqqpnnmkkjiÛÚØØ×ÖÖÔÓÓÒÐÐÏÎÍÌËËÉÉÈÇÆÅÄÃÂÁÀÀ¿¾½¼»º¹¸¸·¶´´³²±±°¯®¬««ª©©§§¦¤££¢¡ Ÿž››™˜˜——–•”’’‘ŽŒ‹ŠŠ‰ˆ‡†…„ƒ‚‚€~}||zzyxvuutsrqqoonmlkjihÚÙØ×ÖÕÔÓÓÑÑÐÏÎÍÌÌÊÊÉÈÇÆÅÅÃÃÂÀÀ¿¾½¼»º¹¹¸·µ´´³²±°¯¯®­««ª©¨§¦¦¤££¢¡ Ÿžž›šš™˜——–•”“’‘ŽŒŠŠ‰ˆ‡†…„ƒƒ}}|{{yxxwvutsrqponnllkjihgÙØ××ÕÔÔÓÒÐÐÏÎÍÍÌËÊÉÈÇÆÅÄÃÂÂÀÀ¿¾½½»»º¸¸·¶µ´³³²°°¯­­¬«ª©¨¨¦¦¥££¢¡ ŸŸžœšš™˜—–•””“’Œ‹‹Š‰ˆ‡††„ƒ‚€~}}{zyxwwuuttrqqponmlkjiiggØ×ÖÖÔÓÒÒÑÐÏÎÎÌÌÊÉÈÈÇÆÅÄÃÃÁÁÀ¿¾¾¼¼º¹¹¸·¶µµ´³²°¯¯®­¬«ª©©¨§¦¥¤£¢¡ Ÿžžœœ›š™˜——••““’‘ŽŒŒ‹Š‰ˆ‡†…„ƒƒ‚€€~}|{zzywwvuusrrqoonmlkjiigge××ÖÔÓÓÒÑÐÐÎÎÌËËÊÉÈÇÆÆÄÃÃÂÀÀ¿¾½¼¼»¹¹¸·¶µ´³³²±¯¯®­¬««ª©¨¦¥¥¤£¢¡  žžœ›š™™˜—••”“’‘ŒŒŠŠˆˆ‡††„„‚‚€€~~}{zzxxwvutssqqpnmmllkihgffeÖÖÕÔÒÒÑÐÐÎÎÌÌËÊÉÈÇÆÅÄÄÃÂÁÀÀ¾½¼»ºº¹¸·¶µµ´³±±¯®®­¬¬«©¨§§¥¥¤¤¢¡¡ŸŸž››š™˜——••”“’‘ŽŽŒŒ‹Š‰ˆ‡†…„„ƒ‚€}||{zxxwvuttsrqoonmlkjjhhgfedÖÕÔÒÒÑÐÐÎÎÍÌËÊÉÈÈÇÅÅÄÂÁÀÀ¿¾¾½¼ºº¹¸·¶µ´´²±±°¯®­­««©¨¨§¥¥¤¤¢¢  žžœ›š™˜——–””“’‘ŽŽŒ‹Š‰ˆ‡†……„ƒ‚€~}}|{zyxwvuutrrqponmlkkjihgfeecÕÔÓÒÑÐÏÎÎÍÌËÊÉÉÇÆÆÅÄÃÂÁÀ¿¾¾¼»ºº¹¸·¶µ´´³²±°¯®®¬¬«ª©¨§¦¥¤££¢  Ÿžœ›š™™˜––•”“’‘‘ŽŒ‹‹Š‰ˆ‡‡†…„ƒ‚€~}||zzyxwvutssrqponmlkjjihgfeddbÔÓÒÑÐÏÏÍÍÌËÊÉÉÇÇÅÅÄÃÂÁÀ¿¾¾¼¼»º¹¸·¶µ´´³²±°¯®®­««ª©¨§¦¥¤££¡¡ Ÿž›šš˜——–•”“’‘ŽŒŒ‹Š‰ˆ‡‡†…„ƒ‚‚€}|{{zyxwwvttsrqponmlljiihggeeccbÓÒÒÐÏÎÎÍÌËÊÉÉÈÆÆÅÄÃÂÁÁÀ¿¾½¼ºº¹¸·¶µµ´²±±°¯®­­«ªª¨¨§¦¥¤££¡¡ Ÿžœœšš˜˜—–•”“’‘‘ŽŒ‹‹‰ˆ‡‡†…ƒƒ‚€~~}{{zyxwvvtsrrqpponlljjihgfedcca`ÓÑÐÐÎÎÍÌËÊÉÉÇÇÅÄÄÃÂÁÀÀ¾½¼¼»º¹¹¸¶¶µ´²²±°°®­¬««ª©¨§¦¥¥¤£¢¡ Ÿžœ››™™˜—••””’‘‘ŽŒŒŒŠ‰‰‡‡……„ƒ‚€~~}|{zzywvvutsrqpoonllkiihgfedccb``ÑÑÐÏÎÍÍËÊÉÉÈÆÅÅÄÃÃÁÀÀ¿¾½¼»º¹¸··¶µ³³²±°¯®­¬¬«ª©¨§¦¥¤¤£¢¡  žœ›š™™˜—–•”“’‘‘ŽŒ‹‹‰ˆ‡‡……„ƒ‚€~}|{zyxxwuussrqpoonlljjihgfeeccba`_ÑÐÏÎÎÎáòûþüôçÒÄÃÃÁÿÿÿÿýøìؾ¸··¶´´³´ùù±®®¬¬«ªÿÿ§¦¦¥¤¢¢¡ Ÿžžœ›ÿÿÿÿû躔”“’‘•Æêúúêć………„‚„°ÛóüùèÉ—zxwÿÿutss…ïÿ³ml‘ÖõýíÆŠfddcbÿÿ_^ÐÏÎÍÓ÷ÿÿÿÿÿÿÿÿÄÃÂÁÿÿÿÿÿÿÿÿøÆ·¶µ´³²ÍÿÿË®­¬«ª©ÿÿ¦¦¥¤£¢¡ Ÿžž›šÿÿÿÿÿÿÿ»“’‘ òÿÿÿÿÿÿñ™…„ƒ‚äÿÿÿÿÿÿÿÿxwwÿÿtsr‡ðþ­nl›þÿÿÿÿÿÿddbbaÿÿ^]ÏÎÍÏ÷ÿ÷ÜÎÈÈÏÝòÃÁÀ¿ÿÿ½¼½ÃÓôÿù»µ´³²²ìÿÿì­¬«ª©¨ÿÿ¦¥¤£¢¡ Ÿžœššÿÿ——Õÿë’‘’îÿé«Ž©èÿ퉃ƒƒæÿñ²€®àxvvÿÿsrˆòþ¦nllæÿÒ€jsšÙdcbaaÿÿ]]ÎÍÍáÿöËÇÇÆÅÄÄÃÂÁÀ¿ÿÿ¼¼ºº¸»òÿÚ´³³±¾ÿíîÿ¹«ªª¨¨ÿÿ¥¤£¢¡ ŸŸœ›š™ÿÿ–••›ÿü‘¿ÿ튉ˆ‡Œìÿ¸ƒ‚³ÿï‰}}{zzxxwvuÿÿr‹óü nmlküÿshgfeccbba`ÿÿ]\ÎÌËòÿÛÈÇÆÅÅÄÃÂÁÀ¿¾ÿÿ»»¹¹¸·Íÿï³²²°ÜÿÎÌÿÚª©¨¨§ÿÿ¤£¢¡  žž››šš˜ÿÿ••”šÿùŽãÿ²Š‰ˆ‡‡†®ÿàÞÿ­}|{zzyxwvutÿÿŒôûšnmlkjìÿ²rfddcbaa`_ÿÿ\[ÌÌÊûÿÍÇÇÆÿÿÿÿÿÀ¿¾¾ÿÿ»º¹¸·¶¼ÿú³±°³úü±¯ùù¬¨§§¥ÿÿ£¢¢  Ÿžœ››™˜—ÿÿ•“›ÔÿÚŒ÷ÿ”‰ˆ‡‡†…ÿö€õÿ‰|{{yyxwvvttÿÿöù•nmlkjj¢ÿÿþêËea`__^ÿÿ[ZÌÊÊþÿÈÇÅÄÿÿÿÿÿ¿¾¾½ÿÿº¸¸·¶µµÿþ±±°ÌÿᬫÚÿɨ¦¦¥ÿÿ¢¡¡Ÿžžœœš™˜˜—ÿÿÿÿÿÿ皎ŽŒýÿ‹ˆ‡†……ƒ„ÿý€ýÿ~|{yyxwwuutsÿÿüò‡mmkjiihŽÑøÿÿÿão`_^]ùùZYËÊÉûÿÊÆÄÄÃÂÁÿÿ¾½½»ÿÿ¹¸·¶¶µºÿú±°¯îÿÁ¬«¶ÿ짦¥¤ÿÿ¡ ŸŸžœ›š™˜—––ÿÿÿÿÿú±ŽŒ‹÷ÿ“‡††…„ƒÿöõÿ‡zyxxwvuutsqÿÿœýó‡kjjhhgfef}¡éÿÆ^^]]îïZXÊÉÉòÿ×ÅÄÃÂÁÀÿÿ½½»»ÿÿ¸·¶µµ´Ìÿî°¯¾ÿÿÿÿÿÿÿÿ¶¥¥£ÿÿ¡ Ÿžœ›šš™—––•ÿÿ“”³úý¤‹‹Šãÿ¯††…„ƒ‚¬ÿà}Þÿ«zyxwvvttsqqÿÿožýõ‡iihgfeddbavÿô^]\[ãåYWÉÈÇàÿóÅÃÂÁÀÀÿÿ½¼ººÿÿ··¶µ´µñÿׯ®ÝÿÿÿÿÿÿÿÿÚ¤¤£ÿÿ Ÿžœ››š˜˜—–••ÿÿ’¾ÿ茌Š‰¼ÿë‹…„ƒ‚†êÿ¶}|°ÿî„xxwvttsrqpÿÿmm¢þö‰hgffedcb`kÿü^][[ZYWWÉÈÆÉøÿòÔÅÁÇØÿÿ»»º¹ÿÿ¶¶·¼Ïóÿøµ¯±úþ´ª©¨§°þú¨£¢ÿÿŸžœ››š™˜—–••“ÿÿìÿ»Š‰‰Žïÿ祈‡£æÿìƒ}|~åÿð­‡xyŠªßqqoÿÿlkk¥þ÷‹feÞ¤{feÓÿã]\ZYYXWVÇÆÅÅÎøÿÿÿÿÿÿý×»º¹¸ÿÿÿÿÿÿÿÿö¿¯®Íÿç©©¨§¦¦æÿÆ¡ ÿÿÿÿÿÿÿÿ™˜—–•””’ÿÿŽªÿù•‰ˆ‡šòÿÿÿÿÿÿð“}{{{‡äÿÿÿÿÿÿÿÿpooÿÿlkji¨ÿødÿÿÿÿÿÿÿý\ZYYÿÿVUÇÆÅÄÃÆßòüþ÷åÅ»º¹¹·ÿÿÿÿü÷èѳ®­­îÿƪ¨§¦¦¤Âÿì¡ ÿÿÿÿÿÿÿÿ˜—–••”“‘ÿÿŽŒ‹ØÿÚ‡‡†…ŒÂéúúéÀ†}|{{yx{«ÙóýùçÅonmÿÿkjiig¬ÿúŽ‚¹âùüîÊ\[ZYXÿÿVTÆÅÄÃÂÂÀ¿¿¾½½»º¹¹¸·µµ´³²±±°®­¬¬«ª©¨§¦¥¤££¢¡ Ÿžž››š˜˜—––•”“’ŽŒ‹ŠŠ‰ˆ‡†……ƒ‚‚€~}|{zzywvvuttrqppnnmlkjihggeddcbba`^]\\[ZYXXVUTSÅÄÃÂÂÀ¿¾¾½½»ºº¹¸¶µµ´³²±°¯®­¬¬«ª©©§¦¥¤¤£¢¡¡ žž››š™˜—–••“’’‘Ž‹‹Šˆˆ‡†…„ƒƒ~}|{zzywwvutsrrqonmmlkjiigffdccba`__]]\[ZYXXVUUTSÅÄÂÁÀ¿¿¾½¼»ºº¹¸·¶µ´³²²°¯¯®­¬«ª©©§§¥¥¤£¢¡¡ Ÿžœœ›š™˜˜––•“’’ŽŽ‹ŠŠ‰ˆ‡†…„„‚€~}||{yyxvuutsrrqoommlkjiihffedcba``_^\\[ZYXWWUTTSRÄÃÁÀ¿¿¾½½»»º¹¸·¶µ´³²²±¯¯®­¬«ª©©¨§¦¥¤£¢¢ ŸŸœ›š™™˜–•””“‘’Ž‹‹Š‰ˆ‡‡……ƒƒ‚€~~|{{zyxwvutsrqpponmlkjiiggfedccb``_^]\[ZYXWWVTTSRQÃÂÁÀ¿¾½¼»»¹¹¸¶¶µµ´²±±°®®­¬«ª©¨¨§¦¥¤£¢¡ ŸŸžœœ›š™˜—––•”“’‘‘ŽŒ‹‹‰‰ˆ‡††…ƒƒ‚€~}}{zzywwvutsrrqponmlkjjhhgfedcbb``_^]\[ZZXXVVUTSRQPÂÁÀ¿¾½¼¼»¹¹¸·¶µ´³²±°°¯®­­«ª©©¨§¥¥¤£¢¡  Ÿœ›š™™˜––•”“’‘ŽŒ‹Š‰‰ˆ††…„ƒ‚€~}|{zyyxwwuussrqpnnmlkkjihgeedcbb``^^]\[ZYXXVVUTSRRPOÁÀ¿¾½¼»»º¹¸·¶µµ³³²±°¯®­¬««ª¨¨§¦¥¤£¢¡  Ÿœ›š™˜˜—–•”“’‘‘ŽŒ‹ŠŠˆ‡††…„ƒ‚€€~}||{zxxwvutsrrqponmllkiiggfeecbb`__^]\[ZYYWVVUTSSRPOOÀ¿¾¾½¼»º¹¸··µµ³³²±°¯®­¬«ªª©¨¦¦¥¤£¢¢¡ŸŸžœœšš˜——–•”“’‘‘ŽŒ‹Š‰ˆ‡†……ƒƒ‚€~~}|{zyxwwuusrrqponmlljjiggfedccaa_^^]\[ZZYXWUUTTRQQPOMÀ¾½¼»»º¹¸·¶¶´´³±±°¯®­­««ª¨¨§¦¥¥£¢¢¡ Ÿžœ›š™™˜—–•”“’’ŽŒ‹Š‰‰‡††…„ƒ‚€}}|zzyyxvuussqqppnnmlkjihgfeecbba`_^]\[ZZYXWVUUSRQPPONM¿½¼¼»º¹¸¸¶¶´´³²±±¯®®­««ª©¨§¦¦¤£¢¢¡ Ÿžœ›š™™˜—–•””“‘Œ‹ŠŠˆˆ‡†„ƒƒ‚‚€}}|{zyxwvuutsrqponmmkkjihgffedcb```^]\\[YXXWVUTSRQPPONML¾½¼»º¹¸··¶´³³²±°¯¯­­¬«ª©¨§§¥¥¤£¢¡ Ÿžœ›š™——–•””’‘‘ŽŒ‹‹‰ˆˆ‡†…„ƒ‚€~~||{zyywwuttsrqpoonmkjiihgfeeccba``_]\\[ZXXWVUTSSRQPONMML½¼»ºº¹··¶µ´³²±°¯¯®­«ªª©¨§¦¥¤¤¢¢¡ Ÿžœœšš˜˜——••“’’‘ŽŒŒŠŠ‰ˆ‡†…„ƒƒ‚€€~}|{zyxxvvutsrqqpnmmlkjihgfeddcba`_^]][[YYXWVUUSRQQPONMLLK¼»º¹¹··µ´´³²±±°¯­¬¬«ª©¨§§¥¤££¢¡ ŸŸœ›š™˜—–•””“’ŽŒŒ‹‰‰ˆ‡†…„ƒ‚‚€~~}|{zyxwvuutsrrqponmkkjihhffedcba`_^]\\ZZYXWVVTTRRQPONNLKJI»ºº¸¸·µ´´³²±°¯¯­¬¬«ª©©¨¦¦¥¤£¢¡ Ÿžžœ›š™˜˜—•””“’‘ŽŒŒ‹‰‰‡‡††…ƒƒ‚€~}||zyxxwvutsrqppnnmkkkiihgeeccbb``^^\\[YYXXVVTSRRQPONMMKJJIºº¹¸·¶µ´³²±±°¯®­¬¬ª©¨§¦¥¥¤££¡ Ÿžœœšš™˜——•””“’‘Œ‹Š‰‰ˆ‡††„ƒƒ€~}|{{yxxwvutssqqonnmlljiiggeddcbba`^]]\[ZYXWVUTSSRQPPNNMKJJIH¹¹¸·¶µ´³³²±°¯®­¬«ªª¨¨¦¦¥¤£¢¡¡ žžœ›š™˜˜—•””“’‘‘ŽŒŒ‹Š‰ˆ‡†…„„ƒ€~}||zzxxwvutssqpponmlljihggfedcbb`_^^]\[[ZXXWUTSSRQPOOMLKJJIHG¹¸·¶¶´³²±±°¯®­¬«ª©¨¨§¦¥¤£¢¡  žœ›š™™˜—••““’‘ŒŒ‹Š‰ˆ‡†…„ƒ‚‚€€~||{zyxwvuttsqqponmlkjihhffedccb`__]]\[ZYYXVUUTSRQPOONMLKIIHGF¸·¶µ´³³±±°¯®­¬««ª¨§¦¦¥¤£¢¢  Ÿ››š™˜˜—–•”““‘ŽŒ‹Š‰ˆ‡†…„„ƒ‚€€~~}{zzyxwvuusrrpponmlkjjihffeddbba`_^]\[ZYXXWUUTSRQPONNLLKJIHGGF·¶¶µ´³²±°¯¯­¬««©¨¨§¦¥¤££¡¡ŸŸžœ›šš˜˜—–•”“’‘Œ‹Š‰‰‡†…„„ƒ‚€~~||{yyxwvuutsrqponnmkjjiggfeecbba`^^]\\ZZYWWVUTSSQQOONMLKJIHGFFE·¶´´²²±¯¯®­¬««ª©¨§¦¥¤£¢¡¡ Ÿžœœš™™—––•”“’’‘ŽŒ‹‹‰ˆˆ‡……„ƒ‚€~}}{{yyxxvvutsrqpoomllkjhhgfeedcba__^]\[ZYYXVUUTSRQQOONMLKJIHGFFEDµ´³³²±°¯®­­¬«ª©¨§¦¥¤££¡¡ žžœ›šš˜˜—–•”““’Œ‹‹‰ˆ‡‡……„ƒ‚€€~}}{{zyywvuutsrqppnmmlkiihgffecbba`_^]\\ZYYWWVUTSSQPPOMMLKKIIHFFECC´³²²±°¯®­­¬«ª©¨§¦¥¥¤¢¡¡ Ÿžœ›šš™˜—–•”“’’ŽŽŒ‹Š‰ˆˆ‡†„„ƒƒ€~}}{{zyxwvvussrqponmllkjihgfeddcb``_^]\[ZZYXWVUTSSQPPONMLKJJIHGFEDCB³³²±°°®­¬¬«ª©¨§¦¦¤££¡¡ Ÿž››™™——–•””’’ŽŒ‹‹Šˆˆ‡……„ƒƒ‚~~||{zzyxvvttsrqppomlljjihgfeedcba`_^^\\ZZYXWVUTSSRQPONNLKJJHHGFEDCBA³²±°¯®®¬¬«ª©¨¨§¦¤¤£¢¡ ŸŸ››š™˜—–•””“‘‘ŽŒ‹ŠŠˆ‡‡†…„„ƒ‚€~}|{zyxxvvussrqpoonmkkjihhgeddcba`_^]][[ZXXWVUTTRQQPONMMKKJIGGFEECBA@³±°¯®®­¬«ª©¨§§¦¥£¢¢¡ Ÿžœœ›š™˜—––”““’‘ŽŽ‹Š‰ˆˆ‡†…„„‚‚€~}|{zzxwvvttsrqponmlljjjigffedcba`_^]]\[ZYXWVUUTRRQPONNLKJJHHGFEDCBAA@±°°®®­¬«ª©¨§¦¦¤¤£¢¡¡ŸŸžœšš™˜—––””“’‘ŽŒ‹‹‰ˆˆ‡†…„ƒƒ‚€~}|{{yywwuttsrqqponmlkjiihffddcba`_^^]\[ZXXWWUTTSQQPONMLKJJIHGGEDCBA@@?°°®®­¬«ª©¨§¦¦¥¤£¢¡  žœ›š™˜˜–••”’’‘‹ŠŠ‰ˆ‡†…„„‚‚€€~}}|zzyxwvuttrqqpnnmlkjjhggfedcbb`__^]\ZZYXWWVUTSRQPONMLKKJIHGGEECCBA@?>¯¯®­¬«ªª¨§§¦¥¤£¢¡  Ÿžœ››š™˜——–•”“’‘ŒŒŠ‰‰ˆ‡††…„‚€~}|{{zyxwvuttsqpoommlkjiiggfedcca`__]]\[ZYXWWUTTSRQPONNLKJIIHHFEDDCBA@?>>¯®­¬¬ª©©¨§¦¥¤£¢¢¡ŸŸœ›š™™—––•““’‘Œ‹Š‰ˆ‡†……ƒ‚‚€~~||{yyxwvuussqqponmmkjjhggfedcbb`__^]\[ZYYWWVUTSRRPOOMLKKJIHGFFDCBBA@?>><®®¬«ª©©¨§¦¥¤££¡  Ÿžœ››™˜—––•”“’‘ŽŒ‹‹Š‰ˆ‡‡……ƒƒ‚€~~|{zzxxwvutssqqponmlkkihhgfeddcaa`^]]\[[ZXWVVUTSRQPOONMLKJIHHFEDDCBA@?>=<<­¬¬«ª¨§§¥¥¤¤£¡¡ŸŸžœ››™™—––””“’‘ŽŒ‹‹Š‰ˆ‡†……„ƒ‚€~~||{zyxwwuutrrqponnlkjjhhgfedcba``^^]\[[ZYWWVUTSRQQOONMLKJIIGFEECBBA@??=<<:¬««ª©¨§¦¥¤££¢  Ÿžœ›š™™˜—–•”“’‘‘Œ‹Š‰ˆ‡‡†„„ƒ‚‚€€~}}{{zyxxvuussqqponmlkjjhhgfedccba`_^]\\ZZXXWUUTTRQPPONLLKJIHHGFEDCBA@@>>=<;:¬«©©¨§¦¥¤£¢¡¡ Ÿžœ›šš™——•••“’’ŽŽŒ‹Š‰‰ˆ‡……„ƒ‚€}||{zzxwwutssrqponmlljiihgfedccb``_^]][ZYYXVVUUSRRQPONMLKJIIHGFEDCBA@?>=<<;:9«©©¨§¦¥¤¤£¡  Ÿžžœœ›š˜˜—•••““‘ŽŒ‹‹Šˆ‡††…„ƒ‚~}}|{zyywvvutsrqponnmljjhhhffedbba`__]\[[YYXWVUTSSQPPONMLKKJIGGFEDCBA@??>=<;:98ª©¨§¦¦¥£¢¡¡ Ÿžœš™™˜—–••”’‘ŽŒ‹‹‰ˆˆ‡†…„ƒ‚€€~||{zyxwwuutsrqppnmlkkiihgffdccba`_^^\[ZYYXWVUTTSQQONNMLKJJHHGFEDCBBA@>=<<;:997©¨¨¦¥¤¤£¢¡ Ÿž›šš™˜—–••“’’ŽŒ‹Š‰ˆ‡††…„ƒ‚‚€~}}|{zyxwvvutsrqpponmkkjihhgfedcba`_^]][ZYYXWVUTSRQPOONMLKKIIHGFEDCBA@@?>=<<:9977¨§¦¥¤££¢¡ Ÿžœ›š™˜—–•””’’‘ŽŒ‹‹Š‰ˆ‡†…„ƒ‚€€~}||zyxxwvutsrqqonnmlkjihgfeddcbaa_^]]\[ZYXXVUTSSQPPOOMLKJJHHGFEECBAA??>=<;::9866§¦¥¤££¢¡ ŸŸžœœ›š™˜—––”““’ŽŒ‹‹Š‰ˆ††……ƒƒ‚€~}|{zyxxvvutsrqpponmlkjiihgeeccbb`_^]\\[ZYXWVVTTRRQPOOMMLJIIHGFEDCCBA??>==<;:88765§¦¥¤£¢¡ Ÿžžœ›š™˜—––””“’ŽŽ‹ŠŠˆˆ‡†…„ƒ‚€~}|{zzxwwvutsrqqponmlkkiiggeedcba`__^][[ZYXWVVUSSRQPONMMLJJIHGFFDCCBA??>=<;:9877654¦¥¤£¢¡ Ÿžžœœ›š™™˜–••”“’‘‘ŒŒ‹Š‰ˆ‡†…„„ƒ‚€~}}|zzxwvvuttrrppnnmmkjihhgfddcbaa`^^\[[ZYXXVVTTSRQPONMMLKJIHGFEDDCB@@?>==<::9876543¥¤£¢¡  Ÿžœœ›š™˜——••”“’‘‘ŽŒ‹Š‰ˆ‡††…„ƒ€~}|{{yyxwvutssqpoonmlkkjiggfedcbb``_^][[ZZYWWUTTSRQPONMMKKJIIGGFDDCB@??>>=<::88765433¤££¡¡ Ÿžœ›š™™˜––•”“’‘Ž‹‹Š‰ˆ‡†……„ƒ‚€~}}{{zyxwvutssqqponmlljihhgfedccb`_^^]\[ZYYWVVUTSRQQONMMLKJIHGFEDDCB@@??=<;::977654432£¢¢ ŸŸžœ›š™™——–•““’‘ŽŒŒ‹ŠŠˆˆ†…„„ƒ‚€~}|{{yyxwwvttrrqpoomlljjhhffeecba``_^]\[[YYXWVTTSRRPOOMLLKJIHGGEDDCBA@??>=;;99876644321£¡ ŸŸžœ›š™˜˜—–•”““‘‘Ž‹‹Š‰‰ˆ†……ƒƒ‚€}||{zyxwvutssqqpoonlljjihgfedcbb``_^]\[ZZYXWVUTSSQQOONLLKJIHHFEDDCBB@@?>=<:998776443210¡¡ Ÿžœ››š™˜—–•”“’’ŽŒ‹Š‰ˆ‡‡†„„ƒ‚€~}}{{zyxwvvusrrqpoomlkkjhhgfeeccba`_^]\\ZZXXWVUTTRRQPONMLKJIHHFFEDCBA@??><<::98866543210/¡ Ÿž›š™™˜—••””’‘ŽŒ‹Š‰‰ˆ‡†…„ƒ‚€~}}|{zyxwvutssrqpoonmlkjihgfeddcaa`_^]][ZYYXWVUTSRRQPONMLLJIHHFFEDCBA@@?>=<;:98765543210// Ÿžœœ›š™˜—–••““’‘ŽŒ‹‹‰ˆ‡‡……„ƒƒ‚€~}|{zyywwvttsrqppnnmlkjihgfeddcaa`__]\[ZZYWWWUTSRQPPONMLKJIIHGFEDCBAA?>><<;:98865543210//.ŸŸœœ›š™˜—–•””“‘‘ŽŽŒ‹Š‰ˆˆ‡†…„ƒ‚€€~}|{zzxxwvttsrrqpnmmlkjiigffecbba`_^]]\[ZYXWVVTTRRQPONMMKJIHGGFEDCBBA?>>=<<:99876533210/.--žžœ››š˜˜—–•”“’’‘ŽŒ‹Š‰‰‡‡†…„ƒ‚€~~}|{zyywvvutsrqppomllkjjhgfeedcba`_^^\\[ZYXWWUUSSRQPONMMKJJHHGFEDCCBA??>=<;;99876543210/.--,œœ›™™˜—–•””’‘‘ŽŒŒŠ‰‰‡‡†…„ƒƒ‚}}||zyywwvutsrqpponmlkjihgffeccba`__]\\[ZYXWVVUTSRPPPOMMKKJIHGFEDCBBA@?>=<;;:8765544220/..-,+œœ›š™™—––””’’‘‹‹‰‰ˆ‡†…„ƒƒ€~}||{yywwvutsrrqponmlkjihgfeeccba``^]\\ZZYXWVVTTRQQPONNMLKJIHGFEEDBAA@?>=<;;98875554311/..-,,*œ›š™™—––•”’’‘ŽŒŒŠŠ‰ˆ‡††„ƒƒ‚€~}||{yxxwvutsrrqponmlkjihhgfedcba`_^^]\[ZYYXWUUTSRQPONMLLKJIHGGEEDCBA@?>=<<::98765533110/.-,+**›š™™˜––•”“’‘ŽŽŒŠŠ‰ˆ‡†…„ƒ‚€€~}|{{yyxvvutsrqppnmmlkjjhgfeedcbb`_^^]\[ZZXXWUTSSRQQPNNMKKJIHHGEEDCBA@?>=<<:998665433110/.-,,*)(›™˜——–”““’‘ŽŒŒŠŠ‰ˆ‡†……„ƒ€~}}{{zxxwvuutrrpponmmkkiihgeedccba`_]]\[ZYXWWVTTSRQPOONLKKJIHGFFECCBA@?>><<;:98765543210/.-,,+)((™™˜—–•”“’’ŽŽŒŒ‹Š‰ˆˆ‡…„„‚‚€}||{zyxwvutssrqponmmkkjihgfeeccaa_^^]\\ZZYXWVUTSRQPOOMLLKJIHHFEDCCBA@?>><<;:98765542110/.-,,+*)('˜˜––””“’‘ŽŽŒ‹Š‰ˆ‡‡……„ƒ‚€€~}|{yyxwvuutsrqponnlkjiihgffddbba`_^]\[ZYXWWVUTSRRPOONLLKJIIHFEEDCBAA?>==<;999776543210//--,+*(('&——–•”“’‘ŽŒ‹Š‰ˆ‡‡……„ƒ‚€~}|{zyxxvuttrrqpoomllkjhhgfedccaa__^]\[[ZYWWVUTSRQQOOMMLKJIHHFFECCBAA??><<;:987654432100.--,+*(('&%—–•”“’’ŽŽŒ‹‹‰ˆˆ‡…„„ƒ‚€€~||{zyxwvuutsrqpoonmlkjhhgfedcbba`_^]\[ZZXXWVUTTSQQPNNMLKJIHGGFEDCBAA?>=<<;:98765542220//.,,**)('&&%–•”““’‘ŽŽŒŒ‹‰ˆˆ‡†…„ƒ‚~~}|{zyyxwvttsrqppnmmlkiiigfeedcba`__^\[[ZYXWVUTSRRPONNMLKJIHHGFDDCBA@?>>=<;:998665432110/-,,+*)((&&%$–””’‘‘ŽŒ‹Š‰ˆˆ‡†…„ƒ‚€~~}{{zyxwwuttrrqpponmlkjihgfeedcba`__]\[[ZYXWVUTSSRPOONMLLJJHHGFEDCBBA??><;<:98776543210//--,**)(''&$$#”“’’‘ŽŽŒ‹Š‰ˆˆ‡†…„ƒ‚€~}|{zyxwwvttsrqpoommlkjihhfeddcba``_]\\[ZXXWVVTTRQQPONMLKKJIHGFEDCBAA??>=<<:99876443221/.-,,**)('&%$$#"”’‘ŽŽŒŒŠ‰‰‡‡†…„ƒƒ€~}|{zyywvvutsrrqoommlkjihhffedcba`_^]\\ZZXXWVVUTSRQPONMLKKJIHGFEDCCBA@>>=<<:99876543311/..-,+*))''%$$#"!“’‘ŽŒ‹‹Š‰ˆ‡†…„ƒ‚‚€~}}{zyxxwvutsrrqpnnmlkjiiggfddbba`_^]]\[ZYXWVVTTSRQPPNMMLKJIHGFEDCBA@@?>=<;;:88765433200/.-,+**((&%%$#"!!‘‘ŽŽŒŒ‹Š‰ˆ‡†…„ƒ‚‚~~}{zzxwwvuussqpponmlkjjhgffddcba`_^]][[ZYXXVUTTSRQPONNMKJJIHGFFDDBAA@?>=<<;:98765533210..-,+**(('&%###"!‘ŽŒ‹Šˆˆ‡†…„ƒƒ‚€~}}{{zyxwvvutrqqoonmlkjihhgeedcba`_^^]\[ZYXWWVUSSRQPPONMLKJIHGGEECCAA@?>><;::9776544221//.-,+*))(&&$$#"!!ŽŽŒ‹Š‰ˆ‡††…ƒƒ‚€~}}|{zyxwvuttsqpponmmkkiigffedcbba__^]\\ZYXWWUUSSSQPOONMLKJIHGFEDDCBAA@>><<;:88765533200/.--++*((&&%$$#! ŽŒ‹Š‰ˆ‡†……„ƒ‚€€~}{{zywwvvussrqponnmkkjihgfeedcaa__^]\[ZYYWVVTTTRQPOOMMLKJIHHFEDDCBAA??=<<;:98765532210/.-,+**((&&%%#""! ŽŒŒ‹Š‰ˆ‡‡†„„ƒ‚€~~}{{zyxxwvusrrqponnmlkiihffeddcb``^^]\[ZZXXWVUTSSQPOONMLKKIHGFEEDCBA@??==<;:99866543210/.-,,+))('&%$##!!Œ‹Š‰‰ˆ‡†…„ƒ‚€~}}|{zyxwwvttrrqponmlljjihgfedcbaa`_^]\[[YXXWVUTTRRQONNMLKJIHGFFDDCBBA?>><<;:99765543200/.--,**)('&%$##"! ŒŒŠ‰‰ˆ‡†…„ƒ‚€~}||{zyxwwvutrrqponmlkjjihgffddbaa`_^]\[[ZYXWVUTTRRQOOMMLLKIIHFFEDDBA@@?==<;:997654422100/-,++*)(('%$##"! Œ‹Š‰‰‡††…„ƒƒ~}|{zyxxvvutsrqpoonllkjihggfecbba`_^]][ZZYXWVVUSSRQPONMLLKIIGGFEDDCBA??>=<;::87665432100.--++*)('&%$$"" ‹Š‰ˆ‡‡†…„ƒ‚€€~~}|{{yxxwuutsrqqoonmljjihggfddcba`_^^\[ZYYXWVVUTSQQPONMLKKIHHGFEEDCAA@>>=<;::8776432210/.--,+))('&%%$#"! ŠŠ‰ˆ††…„„ƒ‚€€}}||zzxwvuutsrqpoonlkkjihgffecbba`__]][[ZYXWWVTTRRQPOOMLLJJIGGFFDCBBA@?>=<;::88765432100..-++*)('&%$$#"! Š‰ˆ††…„„ƒ€~}|{zzxwwvutssqqpnnmlkjihggfeccba`_^^]\[ZYXWVUUTRRPOONMLKJJIHGFFDCBBA@?>=<;:988765433110/.-,+*)('&%%$#"" ˆˆ‡†…„ƒ‚‚€€~}|{zyyxwuutsrrpponmlkjjhhffedcba``_^\[[ZYXWVVTTRQQPONNLLJJIHGFEEDBBA@?>=<;;:88655432210/.-,+*)('&&%$#"! ˆ‡‡†…„ƒ‚€~}|{zyxwuvttrqqpnmmlkjjhggfedcba`_^^]\[ZYYXVUUTRRQPPNMLKJIIHHFFEDBAA@?>><<::8876543321//.-,+*))''%%$#"!! ‡†…„„‚€~}||{zywwvvtsrqqoonmlkjiihgfedcba``_]]\[ZYXWWVTTSQQPPNMMKKIIHGFEECCAA@?>=<;:988765433200/--,+*)(''&%$#"! ‡…„ƒƒ‚€~~||zzyxwvutssqqponnllkjhhgfedcbaa__^]\[[YXXWUTTSRQPOONMLKJIHGFEECCBA@?>><<:998765432210/.--+*)(('&%$##! …„„‚‚€~}}|zyyxxvuutsrqponmlkjjigffeddcb`_^]]\[[YYWVVTTSRRPONNMKJJIHHFEECCBA@?>><<;:98765533210/.-,,+*(('&%$##!! îííìëêéèçææääãâáàßÞÝÝÜÛÚÙ××ÖÕÔÓÓÒÑÐÏÎÍÍËÊÉÉÈÇÅÅÄÃÂÂÀ¿¿¾¼¼»º¹¸¸·µµ´³³±°°®®­««ª©¨¨§¦¥££¢¡ ŸŸžœœ›š™˜—––”““’ŽŒ‹‹Š‰ˆ††……ƒ‚‚€€~}|íììëêéèèææåäãâáàßÞÞÜÜÚÚÙØ××ÕÔÓÒÒÑÐÏÎÍÍËËÊÉÈÇÆÅÄÄÂÁÀÀ¿¾½¼»º¹¸¸¶µµ´³²±°¯¯­­¬«ª©©§§¥¤¤£¢¡ ŸŸ›šš™˜—–•””’’‘ŽŒ‹Š‰‰ˆ‡††„ƒƒ‚€~}}{íìëêéèççååäãâáàßÞÝÜÛÚÚÙØØ×ÕÕÔÓÒÐÐÏÎÍÌÌËÉÉÈÇÆÅÄÃÂÂÁ¿¿¾½¼¼ºº¹¸·µ´´³²±±°®®­¬«ª©¨¨§¦¥££¢¡ Ÿžž››š™˜˜—••”“’‘Ž‹‹‰‰ˆ‡†…„ƒƒ€~}|{zìëëéèèçæääããáàßßÞÝÜÛÚÙØ×ÖÕÕÓÓÑÑÐÏÎÍÍÌËÉÉÈÇÆÅÄÃÃÂÀÀ¿¾½¼»»º¸¸¶¶µ´³²²°°¯®­¬«ª©¨§¦¦¥¤£¢¡ ŸŸžœ›š™˜—–•””“’‘ŽŽŒŒ‹Š‰ˆ‡†……„ƒ‚€}|{{zëêéèçææåäããááßÞÞÝÜÛÚÙØ×ÖÕÔÔÓÒÑÐÐÏÍÍÌËÊÉÈÈÆÆÄÄÃÁÁÀ¿¾½¼»»º¹··¶µ´³²±±°¯®¬¬««ª©§§¦¥¤£¢¡¡Ÿžžœ›šš˜˜—••”“’‘‘ŽŒ‹Š‰ˆ‡†……ƒ‚‚€~}|{zzyêêéèææåäããáàßßÞÝÜÛÚÚØ××ÖÕÓÓÒÑÐÏÎÍÌÌËÊÉÈÇÇÆÅÃÃÂÁÀ¿¾½½»»¹¹··¶¶´´²±±°¯®­¬«ªª©¨§¥¥¤¤¢¡  Ÿžœ›šš˜˜––””“’‘‘ŽŽŒ‹Š‰ˆ‡†…„„ƒ‚€~}}|{zyxêèèçæåääãááàßÞÝÜÛÚÚÙØ×ÖÕÓÓÒÑÑÏÎÎÌÌËÊÉÈÇÇÅÄÄÃÂÁÀ¿¾½¼¼»¹¹¸·¶µµ³²²°°¯®­­¬«©©¨¦¦¥¤£¢¢ ŸŸžœ›š™˜˜––•”“’‘ŽŽŒ‹Š‰ˆˆ††„„ƒ‚€~}}|{zyxwéèææåäãâáàßßÝÝÜÛÚÙÙØ×ÖÔÔÓÒÒÐÐÏÎÌÌÊÊÉÈÇÇÆÅÄÃÁÁÀ¿¿¾½»»º¹¸·¶µ´´²²±°¯®­¬««ª©§§¦¦¤£¢¡¡Ÿžžœ›š™˜—––•”“’‘‘ŒŒ‹ŠŠˆ‡†……ƒƒ‚€~}}|{zyywvèçæåääãááàÞÞÝÜÛÚÚØØ×ÕÕÔÓÓÑÑÐÏÎÍËËÊÉÉÇÆÅÄÄÃÂÁÀ¿¿¾½¼»º¹¸·¶µ´´²²°°¯®­­««ª©§§§¥¤¤¢¡¡ Ÿžœ››š™˜—–•”“’’ŽŒŒ‹Š‰‰ˆ†……„ƒ‚€€}}|{zyxwvvçææåããâáàßÞÝÜÛÛÚÙØ×ÖÕÔÓÒÑÑÐÏÎÌÌËËÉÈÇÇÆÄÄÃÂÂÀ¿¿½½¼»º¹¸··¶´´²²±°¯®®¬««ª©¨§¦¦¥¤£¢  Ÿžœšš˜——–•”“’‘‘ŽŒ‹Š‰‰ˆ‡†…ƒƒƒ€~}{{zyxwvuuçåääââáàßÞÝÜÛÚÚÙØ×ÖÕÔÓÓÒÐÏÎÎÍÌËËÉÉÇÆÅÅÄÃÂÁÁ¿¾¾¼¼»º¹¸¸¶µ´´³²±°°®®­¬«ª©¨¨§¦¤¤£¢¡ Ÿžœ›šš˜˜—–•””’‘‘ŽŒ‹ŠŠ‰ˆ‡†…„„‚‚€~}|{zyxxwvttæåããááàßÞÝÜÛÛÙÙØ×ÖÕÔÓÓÒÑÐÎÎÍÌËÊÉÈÈÇÆÄÄÃÂÁÀ¿¿¾¼¼»º¹¸·¶¶´´³²±°¯®­­«ªª©¨§¦¥¥¤£¡¡ Ÿžœ›™™˜—–•””’’‘ŽŒ‹‹‰‰‡‡†…„ƒ‚‚~}|{zyxwwvussåäãâàààÞÝÜÛÚÚÙØ×ÖÖÔÓÓÒÑÐÏÎÍÌÌÊÊÈÈÆÆÅÄÄÂÁÁÀ¾¾¼¼»º¹¸·¶¶µ´³²±°°®®­¬«ªª¨§§¦¥¤£¢¡ Ÿžžœ›™™˜—–•”““’‘ŽŒ‹Š‰‡‡†…„ƒƒ€~}|{zyywvvutsräãâááßÞÝÝÛÛÚÙØ×ÖÕÔÔÒÒÑÐÏÎÍÌËËÉÈÈÆÆÅÄÄÂÁÀ¿¿¾½¼»ºº¹¸·µµ´³²±°°®­­¬«ª©¨¨§¥¥¤£¢¡  žœ››š™˜——•”““‘‘ŽŒŠ‰‰ˆ‡††…ƒƒ€~}||zyyxwvutsrrãââààÞÞÝÜÛÚÙØØÖÕÔÓÓÒÑÐÏÎÎÌÌËÊÉÈÇÆÅÄÃÃÁÀ¿¾½½¼¼ºº¹¸·¶µ´³²±±¯®®­¬«ª©¨§¦¥¥¤£¢¡ ŸŸœœ›š™˜——••”“’‘ŽŒŒ‹Š‰ˆ‡†…„ƒƒ~~}|{{yxxwvutssrqâáàßÞÞÜÜÚÙÙÙ×ÖÖÔÓÓÒÑÐÏÎÍÌÌËÊÉÈÇÆÅÅÃÃÁÁÀ¿¾½¼»º¹¹¸·¶µ´³³²±°®­­¬«ª©¨§¦¦¥¤£¢¡  žžœ››š™™˜–••“’’‘ŽŽ‹ŠŠ‰ˆ‡††…„ƒ‚€€~}|{zzxxwvuussqqpáàßßÝÝÜÛÚÙØ×ÖÕÕÔÓÒÑÐÐÎÍÍËËÊÉÈÇÆÅÄÄÃÁÁÀ¿¾½¼»ºº¸¸·¶µ´³²±±¯¯­­¬«ª©¨¨§¦¥¤¤¢¡  Ÿžœ›šš˜——–””“’‘ŒŒ‹Š‰ˆ‡†…„ƒ‚‚€}|{zzxxwvutssqqooáàßÞÝÜÛÚÚØ×ÖÖÕÔÓÒÑÐÏÎÎÍÌËÉÉÈÇÆÅÅÄÂÂÁÀ¿¾¾½¼»º¸¸·¶µµ³³²±°¯®­­¬ª©¨¨§¥¥¤£¢¢  žžœ››™˜˜––””“’’ŽŒŒ‹Š‰ˆˆ†……ƒƒ‚€~~||{zyxwvuutrrqpnnßßÞÝÜÛÚÚØØ×ÖÕÔÓÒÑÐÏÏÎÌÌËÊÉÈÈÇÅÄÃÂÂÁÀÀ¾½¼»ºº¹¸·¶µµ³³²±°¯®®¬««©¨¨§¦¥¤£¢¡¡ Ÿžœ›š™˜—––•”“’’ŒŒŠŠ‰ˆ‡‡†…„ƒ‚€~}|{{zyxwvuttrrqponmßÞÝÜÛÚÙÙ×ÖÖÕÔÓÒÑÐÐÏÎÍÌËÊÉÈÈÆÆÄÃÂÂÁÁ¿¾½¼¼ºº¹¸·¶µ´´²±°¯¯®­¬««ª¨¨§¦¥¤£¢¡  Ÿžœ››™˜˜—–•”“’‘ŽŒ‹ŠŠˆ‡†……ƒƒ‚€€~}}|{zyxwvvttsqpponmlÞÝÜÛÛÙØ××ÖÕÔÓÓÑÐÐÏÎÍÌËÊÉÉÇÇÅÅÃÃÂÁÀ¿¾½½»»º¹¸·¶µµ³³±°°¯®­¬«ª©©¨§¦¥¤£¢¢  Ÿžœœ›™™—––•””’‘ŽŽŒ‹Š‰‰‡‡†…„ƒ‚‚€~~}|{zyxwvutssrqponmmkÝÜÛÚÙÙ××ÖÕÔÓÓÑÑÐÎÎÍÌËÊÉÈÈÇÅÅÄÃÂÁÁÀ¾¾½¼»º¹¸·¶µµ³³²±°¯®­­¬«ª©¨§¦¦¤¤£¢¡ Ÿž›šš™˜––•”““‘‘ŽŒ‹ŠŠˆ‡††„„ƒ‚€€~~}|{zyyxwvtsrrqppnmmlkÜÜÚÙØØ×ÖÖÔÓÓÑÑÏÏÎÍÌËÊÉÉÈÇÆÅÄÃÂÁÁÀ¿½¼¼»º¹¸··µµ³³²±°¯®®¬¬ªª¨¨§¦¥¥££¢¡ Ÿžœ›š˜˜—–•”“’‘‘Œ‹ŠŠ‰ˆ‡†…„ƒ‚€~}|{zyywwuutsrqponmmlkjÛÚÚÙØ×ÖÕÔÔÓÑÐÏÏÎÍÍËÊÉÉÈÇÆÅÄÄÂÁÀÀ¿¾½»»º¹¸··¶µ´²²±°°¯­­¬«ª©¨§¦¦¥££¢¡ Ÿžœšš˜˜—–•”“’‘ŽŽŒ‹‹‰‰ˆ‡†…„ƒƒ‚~}|{{yxxvuutsrqppnmllkjiÛÚÙØ×ÖÕÔÔÓÒÐÐÎÎÎÌËÊÊÉÇÇÆÅÄÃÃÁÀ¿¿¾½¼»ºº¸·¶¶µ´³²±°°®®­¬«ª©¨¨§¥¤££¢¡ Ÿžœœšš™˜—–•”““‘‘ŽŒŒŠŠ‰ˆ‡†…„ƒ‚‚€~}|{zzyxvuutsrqqpnmlkkjjhÙÙØ×ÖÕÔÓÓÒÐÐÏÎÍÌËËÉÉÈÇÆÅÄÃÂÂÁ¿¿¾½¼»º¹¸·¶¶µ´³³±°°¯­­««ª©¨§¦¥¤¤£¢¡ Ÿžœœšš™˜—––•“’‘‘ŽŒŒ‹Š‰ˆ‡†…„ƒ‚‚€€~}|{{zyxvvutsrrqpnnmlkjihgÙØ×ÖÖÕÔÒÒÐÐÏÎÎÌÌÊÊÉÇÇÆÅÄÄÂÂÀÀ¿¾½¼»ºº¸··¶µ´³²±°¯¯®¬¬«ª©©§¦¥¥¤£¢¡  Ÿžœ›š™˜—––•““’‘ŽŒ‹ŠŠ‰ˆ‡†……ƒ‚€~~|{zzyxwvutssrqponmlkjihgfØ××ÕÔÔÓÒÑÐÏÎÍÌËËÊÉÈÇÆÅÄÄÃÂÀÀ¿¾½¼¼ºº¹··¶µ´³³±°°¯®­¬«ª©¨§§¦¥££¢¡  žžœœ›š™˜—–••“’’‘ŽŒ‹‹Š‰ˆ‡†…„ƒƒ‚€~}|{zzxxvvutsrqpoonmlkjihggf×ÖÖÔÔÓÒÑÐÏÏÍÌÌËÊÉÈÇÆÅÄÃÃÂÁÀ¿¾½¼»»¹¹¸·¶µ´³³±°°¯®­¬¬ª©©¨§¦¥¤£¢¡ ŸŸžœ›š™˜˜—••”“’‘ŽŽŒŒ‹Š‰ˆ‡†…„ƒƒ‚€~}|{{yxxwvuttrqqoonmlkjiiggfeÖÖÕÔÓÒÑÐÏÎÍÌÌËÊÉÈÇÇÅÄÃÃÂÁÀ¿¾½½»»¹¹¸·¶µ´´³²±°®®®¬¬ª©¨¨¦¦¥¤¤¢¡¡ Ÿžœ›š™™——••”“’‘‘‹‹Š‰ˆ‡‡……„‚€}||{zyxwvuutsrqoonmmkjihggeedÕÕÔÓÒÑÐÏÎÎÌËËÊÉÈÈÆÆÅÃÂÂÁÀ¿¿¾½¼º¹¹¸·¶µ´³³²°°¯®­¬«ªª©§§¦¥¤£¢¡ ŸŸžœ›š™™˜—••”“’‘ŽŽŒ‹Š‰ˆˆ††…ƒƒ‚€€}}|zzyxwvvtsrqqponmlljiiggfedcÕÔÓÒÒÑÏÎÎÍÌËÊÉÈÇÆÆÅÄÃÂÁÀ¿¿¾¼»»º¹¸¸¶¶µ´³±°°¯®­­¬ªª©§§¦¦¤££¡¡ Ÿœœ›š™˜——–•””’’‘ŽŽŒ‹ŠŠˆ‡††„ƒƒ‚€~~}{{zyxwvvussrqpoommkjiiggfeeccÔÓÒÑÑÐÏÎÍÌËÊÊÉÇÇÅÅÄÃÂÁÀ¿¿½¼¼ºº¹¹¸·µ´³³²±°¯®®¬¬ªª©¨§¦¦¤££¡¡ Ÿžœšš˜——–•”“’‘ŽŒ‹Š‰ˆˆ‡……„ƒ‚€€}|{{zyxwwvutsqqpoomlkkiiggffdcbaÓÒÒÐÐÏÎÍÌËÊÉÉÇÆÅÅÄÃÂÁÀ¿¾½¼¼»º¹¸¸¶¶µ³³²±°¯®­¬¬ª©©¨§¦¥¤££¡  Ÿžœ›™™˜–••”“’‘‘ŽŒ‹Š‰‰ˆ††„„ƒƒ€~}|{zyxwvutssrqpoonlljjihgfeeccbaÒÒÑÐÏÎÍÌËËÉÈÇÇÆÅÄÃÂÁÀ¿¿¾¼¼»º¹¸·¶¶´´³²±°°®­­««ª©¨¨¦¥¤¤£¢¡ Ÿžœ››š™˜—–•”“’‘ŽŒ‹Š‰‰‡‡†…„ƒ‚€~~}|{zyxxvuttsrqqonnlljjihgffedbba`ÑÑÐÏÎÍÍËÊÊÉÇÇÅÅÄÃÂÂÀÀ¿¾½¼»º¹¸·¶¶µ´³²±°°®®¬¬ªª©¨§¦¥¤¤£¢¡ Ÿžœ››™™˜—–•”“’‘‘ŽŒ‹‹Š‰‡†……„ƒƒ€€~}|{zyxwvvussrqppnnllkjihgfedccba`_ÐÏÏÎÍÅs2 %T›ÄÃÂÂ4j°¸¸·¶µ´³­ «¯®¬¬«ª§¦¦¥££¢  Ÿžžœ› a”“’’†FC‡†…„ƒƒ€P$ 3`zyxutsrb :mmP 'Oeedca__ÐÏÎΰÃÃÂÀ’·¶µ´³²rq®­««ª©§¥¥¤¢¢¡ Ÿžœœš]’’wp…„ƒƒtyxwtsr` ?mlJedcba^]ÏÏÍÄ€³Ä½£s+ÂÁÁ¿½¼¶¤t¨µ´³²±))­¬«ª©¨¥¥¤£¢¢ Ÿžœ›š—–‰:’ˆd„ƒbƒ‚KmzwfIxwuss^ Enml We_Ddcbb`^]ÎÎÍt ¾ÈÇÆÅÄÄÂÂÀÀ¿¼¼ºº¹°![´³³²“'#¬«©©§¥¤¢¢¡  žœ›™™–••‹‘ŽP„Š‰ˆ‡€Kƒ‚Ns}||zyxwvvur] Jnmlkaggfeccbb`_]\ÍÍË1…ÈÇÆÅÄÄÂÁÁÀ¿¾¼º¹¹··{'´²²°LjkK«©¨¨§££¢¡  žœ›š™˜–•“‰Ž"\Š‰ˆ‡†…V ‚!P}|{{zxxwvut[Nnmllj 5^fedcbaa`^\[ÌË˸ÇÆÅÀ¿¾½»º¸··¶¦ ³±°ª ¤¦ ¤¨§§¦£¢¡¡ŸŸœ›š™™—•”‡91Ž +~‰ˆ‡‡…„w +€€ s|{{zyxwvuutRnmlkkj@"?aa`_^^[ZÌËÊÄÇÆÅ¿¾¾½º¸¸·¶¶±±±°m@¬«Ki§§¦¥¢¢ ŸŸžœ›š™™˜– ‚ŽŒŒ‡‰‡††„„€€{|zzyxwvutss +\mlljjihMW__^]ZYËÊÉ ·ÅÄÄÂÂÁ¿½½»¹¸··¶´¤ ±°¯&««%§¦¥¤¡  Ÿžœœ›šš˜——–dŽŽŒ‹ +}‡‡†…„ƒv +~ q{zyxwvuussrM YljihhgfedS; "_^]\ ZXÊÉÈ.‰ÅÄÃÂÁÀ½¼»º¸·¶¶µ´y'°¯ˆ¥¤£  Ÿœ›šš™˜—–”’cqŒ‹Š!Y††…„ƒ‚U~} NyyxwvvttsqqnHVihhgfeedcbS^]][XXÉÈÇl*ÀÃÂÂÁÀ½¼»º¸¶µ´³«Y¯®GE¥¤¢ žžœœš™™˜—–•”‘‘T‹‹Š‰L€…ƒƒ‚{H~}JoxwwuutsrqpmmDRggffddbb`Y]\[ZYXXWÈÈÇ»,‹µ¿«r¼»º¹·¶±q¢®¥ +˜ª¨¨§“ £¢Ÿžžœ››™™˜—–•”“‘ŒR‹Šˆ`}|_y}|xGitpbFqpomkj@Pfe:S^_M][ZZYXWVÈÇÆÅ¡p»»¹¸Œ®®h0ª©¨¨§¥.c¢¡™˜—–•””“ŽŽŽh{‰ˆ‡oj}|{zlponlkji<Ke@\[ZYVUÇÆÅÄ÷d' K£»º¹¹¸3h¨®®­"q©¨§§¦¥m ¡ ˜—–•”“’’ŽŒŒ.+ˆ‡†…{@>u}|{zyxuJ +/Woomkjihg8HP+ +H[[ZYXUUÆÅÄÃÃÁÁÀ¿¾¼½»»¹¸¸·¶µ´´²±°¯¯®¬««ª©¨§¦¥¥¤£¢¡¡Ÿžœœ›™™˜˜–•””’‘‘ŽŒ‹‹‰‰‡‡†…„ƒ‚€~}|{zyywwvutsrqppnmmlkjjhgffddcba`__]\[[ZYXWVUUSÅÅÄÂÂÀÀ¾¾½¼»ºº¹¸·¶µ´³²±°¯¯®­¬«ª©¨§§¦¥¤£¢¡¡Ÿž›šš™˜—––•”“’‘ŽŒŒ‹‰‰ˆ‡†……ƒƒ‚€€~}||zyywwvuttrqqonnmlkjihhgfeccbba_^^][[ZYXWVUTSSÅÃÃÂÁÀ¿¾½¼»º¹¸¸·¶µ´³³±±¯®®¬¬«ª©¨§¦¥¥¤£¢¡¡ žžœ›š™˜—–••““’‘Ž‹‹Š‰ˆ‡†……„ƒ‚€€~}|{{zxxwvutsrrqonnmlljjigffedcba`__^\\[ZYXXVVUTSQÄÃÂÀÀ¾¾¾¼»ºº¹¸·¶µ´³²±±°¯®­¬«ªª¨§§¥¥¤¤£¢¡ žžœ›š™˜——–”““’‘ŽŒ‹ŠŠ‰ˆ‡†……„ƒ‚€~}|{zzyxwvutsrrqponmlkjiigffedcbb`__]]\[ZYXWVVUSSRRÃÁÁ¿¿¾¾¼»ºº¹¸·¶µ´´³²±°®®­¬«ªª©¨§¥¥¤£¢¡¡ žœ›š™™—––””“’‘ŽŒ‹Š‰ˆ‡†……„‚‚€~}}{zzyxwvvttsrqponmlkkiihgeeddcaa`_]]\[ZYYXVVUTSRQPÂÁÀ¿¾¾¼»»º¹¸·¶¶´³³±±¯®®­¬««©©¨¦¦¥¤£¢¢¡ žœ›š™˜˜—–•”“’‘‘ŽŽŒŠŠ‰ˆ‡‡…„ƒƒ‚€€}|{{zxxwvutsrqpponmlkjiihgeedcbaa`_^]\[[YXWWUUTSRQPOÁÀ¿¿½¼»»º¹··¶¶µ´²²°°¯®­¬¬ªª©¨§¦¥¥£¢¢¡ Ÿžœ›šš˜—––•”“’‘‘ŽŒ‹ŠŠ‰ˆ†……„‚‚€~}|{zyxwvutsrrqponmlkkiiggfedccba__]]\[ZZYWWVUTSRRPOOÀ¿¾¾½»ºº¹¸··µ´´³±±°¯®­­¬ª©¨¨§¦¥¤¤£¢¡ Ÿžœ›šš™˜—••””“‘‘ŽŒ‹Š‰ˆ‡††…„ƒ‚€~}}|{zyxxvuttsrqponmmlkiihgfeecbba`_^^\[ZYXXWVUTSRQQPOM¿¿½½»»¹¹¸¸¶µµ´³²±°¯®­¬««ª©¨§¦¥¤££¢¡ Ÿžœ›š™˜˜—–•”““‘ŽŒ‹Š‰ˆ‡†……„ƒ‚~||{zyxwvvutsrqponmllkjhhgfedccb``_^]\[ZZYWWVUTSRQQOONM¿¾½¼»º¹¸·¶µµ³³²±°¯®­­¬«©©¨§¦¥¥¤¢¢  Ÿžœ››™˜——–•”“’’ŽŽŒŒŠŠˆ‡‡†…„ƒƒ€€~~||{zzxwvvttrrqppnnmlkiihggeddbba`_^]\[[YXXWVVUSRRPPONML¾½¼»ºº¸¸¶¶µ´³±±°¯®®¬¬«©¨¨§¦¦¥¤£¢¡ Ÿžœ›šš™˜—–•””’’ŽŒ‹‹‰ˆ‡††…„ƒ‚€~}|{zyywwuussrqponnllkjihgffeccba`_^]\[[ZYXWVVUTSRPPONMLK½»»º¹¹··¶´´³²±°¯®®­««ª©¨§§¥¥¤£¢  Ÿžœ›™˜——–••““‘ŽŒ‹‹‰‰ˆ‡†…„ƒƒ€~~}|{zyxxvvutsrrponmmlkjihgffedcba`_^^\\[ZYXWVVUSSRPPONMLLJ¼»ºº¹¸¶¶µ´³²²±°®­­¬«ª©¨¨¦¥¤££¢¡ Ÿž››š™˜——•”““’‘ŽŒŒŠ‰‰ˆ‡†…„ƒƒ~}|{zyxxwuutssqpoonmlkjihgfedccba`_^^\\[ZYXWVUUTSRPOONMLKKJ»ºº¹¸·¶µ´³²±°°®®­««ª©¨§§¦¥¤£¢¡  Ÿžœœ›š™˜—–••““’‘ŽŒŒ‹‰‰ˆ‡††„ƒ‚~~}||zyxwwvutsrqppomllkjiigffecbbb`__]][[ZYXWVVTTSRQPONMLLJJH»¹¹¸·¶µ´³²²°¯¯®­¬«ª©¨¨§¥¥¤££¢  žœ›š™˜—–••““’‘Ž‹‹Š‰ˆˆ‡…„„‚‚€~}||zyxwwvutssqpponmlkjihggfedcca``^]\\[ZYXWWUTTSQQQONNLKKIIH¹¹¸·¶µ´³²±°°¯®­¬¬ª©¨¨¦¥¥¤£¢¡  žœ›š™˜——•”““’‘ŽŽŒŒ‹Š‰ˆ‡†…„„‚€~}}{{yyxwvutsrrqonnmlljjiggfedcbb``_^]\[ZYXXWVUSSRQPONNMLKJIHG¹¸·¶¶´³²±°°¯®­¬«ªª¨§¦¦¥¤£¢¡¡ Ÿžœ›š™™—––•““’‘ŽŒŠŠ‰‰ˆ‡†„„‚‚€~}}{{zxxwvvttsqqpnnmlkkjihgeedcbba__^]\[ZYYWVVUTSRQPPNMLLKJIHGG¸·¶¶´´³²±°¯®­¬««©¨¨¦¦¥¤£¢¡¡ Ÿžœ›š™™˜—••”“’‘ŽŽ‹‹Š‰ˆ‡‡†…ƒ‚‚€~}}{zzyxwvuttrqqpoomlkkiihffedccb``_^]\\[ZYWVVUTSRQPPONMLKJIHHFE·¶µ´³³²±°¯®­¬¬ª©©¨§¦¥¤£¢¢  Ÿžœ›š™™——–•”“’‘‘ŽŽŒ‹Š‰ˆ‡‡†…„ƒ‚€}}|{zyxwvuutsrpoonmlkkiiggfedcbba__^]\\ZYXXWVUTSRQPONNMLKJIHGFFE¶µµ³²²±°¯®­¬««©¨¨§¦¥¤££¡¡ žžœ›š™™——–•”“’‘ŒŒ‹Š‰‰ˆ††…„ƒ‚€~}}|{zyxwvuutsrpponmllkjihgfeecbb`__^]][ZZXXWVUTSRRQPNMMLKJJIHFFED¶´³³²±°°®­¬¬ª©©¨§¦¥¤£¢¢¡ŸŸžœ›š™™——–•”““‘ŽŒŒ‹Š‰ˆ‡‡†…ƒƒ‚‚€~~}{{zyxwwuutsrqpoonlkkjhhgfeedbba`_^]\[ZZXWWVUTSRQQOONMLKJIHGFFEDCµ´³±±°¯®­¬¬ª©¨¨§¦¥¥££¢¡ Ÿžœœšš™˜—–•””’‘ŽŒ‹ŠŠˆˆ‡……„ƒ‚€~~}|{zyxwwuttsrqqoonlljjihgfeedcba`_^^\[[ZYXWVVUSSRQONNMLKJJIHFEEDDB´³²±°¯®®¬««ª¨¨§¦¦¤¤£¡¡ ŸŸžœœš™˜˜—–•”““‘‘ŽŒ‹Š‰ˆˆ‡†…„„ƒ‚€}}|{zyxwwvussrqpoommkkjihggfeccba`_^]\\ZZYXWVUTSRRQPONMLKJIIHGFEDCBA³²±°¯¯®¬¬«©©¨§§¥¤¤¢¢¡ ŸŸ››š™˜—–•”““’‘ŽŒ‹ŠŠ‰ˆ‡†…„ƒ‚‚€}}|{{yxxwuttsrqpoommkkjihgffedca``_^]\\[YYXWVUTSSRPPONNLLJIIHGFEDDCB@²±°¯®®­¬«ª©¨§§¥¤¤¢¢¡ Ÿžœ››™™˜—–•””“‘‘ŽŒ‹ŠŠ‰‡‡†…„„‚€~}|{zzxxvuttsrqqoommljjihhgfecbba`_^]\\[YXXWVUUTRRQPOOMLKKJHHFFFDCBB@@±±¯®®­¬ªª©¨§¦¦¥¤£¢¡  žœ›š™˜——–””’’‘ŽŒ‹‹Šˆˆ‡†……ƒƒ‚€~~}|{zyywwvttsrrponmmlkjjhhgeedbba`_^]\\ZZYXWVUTTSRQPONMMKKJIHGFFDCBBA@?°¯¯®­¬««ª©§§¥¥¤£¢¢¡Ÿžœ›š™˜˜—–•““’‘ŽŒ‹Šˆˆ‡†…„ƒ‚‚€~}|{zzyxvuuusrqqoonllkjihggfedcba``^]]\[ZYYWVVTSSRQPOONMKKJIHGGEDCCBA@?>¯¯®­¬«ª©¨§§¦¥¤££¡¡ŸŸžœššš˜—––””“’‘ŽŒ‹Š‰‰ˆ‡†……ƒƒ~}|{zyxxwvuussqqponmlkjiihgfedcba``^]]\[ZYYXWUUTSRQPPONMLKJIHGFEEDBBA??>=¯®­¬««©©§§¦¤¤£¢¡  žžœ›š™˜—––•”’’‘ŽŒŒ‹‰‰ˆ‡†…„ƒƒ€~}}{zzyxwvuutrrqpnmmlkjjihfeedcbb``^^]\[ZZXWWUUTSRQPOONMLJJIHGFEDDCBA@?>==®­¬«ªª¨§¦¦¥¤¤£¢¡ žœ›š™˜˜––”““’‘ŽŽŒ‹Š‰ˆ‡‡…„„ƒ‚€~}|{{zywwvutsrrqpnnmllkiihgeedccba__]]\[[YXWVUTTSRQPONNMLKJJHGGEECCBA@?>==<­¬¬«ª©¨§¦¥¤£¢¢ ŸŸžœ›š™™——••”““’ŽŒ‹Š‰ˆ‡†……ƒƒ‚€~}}{{zyxwvuusrrpponmlkjjhhgfedcbba`_^]\[ZYYXWVUTSRQPPOMMLKJIHGFFEDCBA@?>==;;¬««ª©¨§¦¥¤¤£¢¡ Ÿžœ›š™˜˜—–•”“’’‘ŽŒ‹‹‰‰‡††…„ƒ‚€~||{zyxwwvutsrpponmmljjhggfeddcb`__^]\[ZZYWVUUTSRQQPONMLKJJIGGFECBBA@@>=<;::¬ªª©¨§¦¥¤¤¢¢  Ÿž›šš™—––•””’’‘ŽŒ‹ŠŠ‰‡‡†…„ƒ‚€~~||{zyxwvuussrqponmlkjjihgfedccb``_^]\[ZZXXWVUTTSRQONNMLKJIHGFEEDCBBA@>=<;;:9«ª©§¨§¥¤££¡ ŸŸŸ››š™˜—–•”“’’Œ‹Š‰‰ˆ‡†„„ƒ‚€€~}|{zyywvuttsrqponmmlkjhhgffddcba__^^\[ZYXXWVUTSRRPPONMLKJJHHGFEDCBB@??>=<;:98ª¨¨§§¥¥£¢¢¡ Ÿžžœœš™™˜—–•””’‘‘ŽŒ‹ŠŠ‰ˆ‡†„„ƒ‚~}|{zyxxwuttsrqponnmlkjihhffedbb``__]\[[ZYWWVUUTSRPPONMLKJIIHGFEDCCA@??==<;:988©¨¨¦¥¥¤£¢¡ Ÿžžœœ›š™˜—–•””“’‘ŽŒ‹ŠŠ‰ˆ‡†…„ƒ‚‚€~}|{{yywvuussrqponnllkjihggfedcba`_^]\\ZZYXWVUTTRRQPONMLLJJHHGFEECBB@@>>=<;:9876¨§¦¥¥¤£¢¡  žœœ›š™˜—–••”’’‘ŽŽŒ‹‹‰‰ˆ‡†…„ƒƒ~~}|{zyyxvvutsrqpoonmljjihggeddcaa``^]\\[ZXXWVUUSSRQPONMLKKJIHGFEDCBBA@>==<<::9776§§¦¤¤£¢¡ ŸŸœœ›™™˜—–•””’’‘Ž‹‹Š‰ˆ‡†…„ƒ‚€~}|{zyxxwuutsrrqoonmlkjihhgfeccba`_^^][[ZYXWWUUSSRQPONMLLKJIHGFEEDBAA@?>=<;;:87665§¥¥££¢¡  Ÿœšš™˜——•””“’‘ŽŒŠ‰‰ˆ‡†……„ƒ‚~}}|{zyxwvutsrrqoonmlkjihggeedcba`__]][[ZYXXWVUTRRQPPNMMLKJIHGFEDCCAA@?>=<<;:987554¦¥¤£¢¡ ŸŸžœ›š™™—––””“‘‘ŽŒ‹‹Š‰ˆ‡†…„„‚‚€~}|{zyxxwvutsrqpponlllkjigfeedcba`__^][[ZYXXWVUSSRQPPOMLLJJIHGFEECCA@@?>=<;:99876553¥¤£¢¡  žž››š™˜—–••““’‘‘ŽŒŒŠŠ‰ˆ‡‡†„„ƒ‚€€~}}|{zyxwvuussqqponmlkkjhhgfedcba`_^^]\[ZYXWVUUTSRQPPNNMKJJHHGFEEDCBA@?>=<;;:98765442¤£¢¡  žž››š™˜—––•”“’‘‘ŽŒŒ‹Š‰ˆ‡‡…„„‚‚€~}||{yyxwvvtsrrpponmlljiiggfedcba``_]]\[ZYXXWVUTSRRPPNNMKKJIHGFFECCBA@??><<;:987654432£¢¡ Ÿžœ›š™™˜—–•”“’‘ŽŽŒŠŠ‰ˆ‡‡†…„ƒ‚€}}|{zyxwwuusrrqponnlkkjihgfeddbaa__^]\[ZZYWWVUTSRQPPONMLKJIHHFEDDCBB@@>><;;:9877554320¢¡¡ Ÿžœ›š™™˜—–•”“’‘Ž‹‹‹‰ˆˆ†……„‚‚€€~~||{zyxwwvutsrqpoommkkiihgfedcba``^^]\[ZZXWVVUTSRQQPONMLKJJHGGEEDCBA@@>>=<;:98766433210¢  Ÿžœ›š™™——–•”“’‘Œ‹‹‰‰ˆ‡……„ƒ‚}}|{zyxwvvutsrqponnllkiihgfedcbba`_^]\[ZYYWWVUTSRQQPNMLLLKJIHGEEDCBAA?>==<;:98876443210/¡ Ÿžœœš™™˜—–•”“’’ŽŽŒ‹ŠŠˆ‡‡…„„ƒ‚€€~}|{zyxwvuutsrqpoomllkjhhhffedcaa`_^]\\ZZXXWVUUSRQQOOMMLLJJIHGEEDCBA@??>=<;:98765543210/. Ÿžžœ›šš˜˜—–•””’’‘ŽŒ‹Š‰‰‡‡……„ƒ‚€€~~}|{zyxxvuutsrqqponmlkjihgfeedcba`_^]][[ZYWWVUTSSQQPONMLKKIIGGFEDCCB@??>=<;:98766542210/.-Ÿžœœ›™˜˜—–••”“‘ŽŒŒŠ‰ˆˆ‡†…„ƒ‚‚~||{zyxwwutssrqponmmlkjihggfdcbba`_^]\[[YYXWWUTSRRQPNNMLLJIHHGFEDDCBA?>==<;;:97764432100.--žžœ›š™˜—–•””’‘‘ŽŒ‹‹Š‰ˆ‡†…„„‚€~}|{zyyxvvutsrqpponmlkjihgffddcaa`_^]][ZZYXWVVTSSRQPONMLKKIIHGFEDCBBA@>==<;::88665432110..-,››š™˜—–••”“’‘ŽŽŒŒ‹‰‰ˆ‡††„„ƒ€~}|{{zxwwvutsrqqpnmmlkjiigffedbbaa_^]]\[ZYXWVUUTSRQPOOMMKJJIHGFFECBA@@?>==;;998765432100/--,+œšš™˜—–•”““’‘Ž‹‹Š‰ˆ‡‡…„ƒ‚‚€~~}||zzxxwvutsrrpponmlkjjhhfeeccca`__]]\[ZYYWVVUTRRQPONMLKJJHHGFEDDCBA@?>=<;::98665433100/.-,+*œ›š™˜—––•”“’‘‘ŽŽŒ‹‹Š‰ˆ‡††„ƒƒ‚€€~}||{yyxwvutssrqpnnmlljiihffedcbaa_^^]\[ZYYXVVUSSRQPONMMLKJIHGFEDCBAA@?>==<:998765432100/.--+*)›š™˜——–•“’’‘ŽŽŒŒ‹Š‰ˆ‡†……„ƒ‚€€}}{{zyxwvuttrqqpommlkjjhggfedcba`__]]\[[YYWVUUSSRQPONNLLJJIHGFFDCCBA@?>==<::98765532210/.-,+**(š™™—––•”“’‘ŽŽŒŒ‹Š‰ˆ‡††…ƒƒ‚€~~|{zzyxwvvutrrqponnlkjjihffedcbaa__^]\\ZYXWVVTSSRQPONNLKKJIHGFEEDBBA@??>=<;998765432100/.-,+**)(™˜—––””“’‘‘ŽŒ‹Š‰ˆ‡††„ƒƒ‚€€~~||{zyxwvvtsrrqponnlkjihhgfedcbba__^]\\ZYYXWUUTSRQPPOMLLKJIIGFFEDCBAA?>=<;;:98865432210/.-,,*))('™˜––•””’’Œ‹Š‰ˆˆ‡†…„‚‚€~}||{zyxwwutssrqponmmlkjihgfeddcba`^^]\[ZYYXVVUTSRRPONMMLKJIHGGFEDCBA@?>>=<;:99766432200/.--++))('&—––•”““‘‘ŽŒ‹Š‰‰ˆ††…„ƒƒ‚€}|{{zyxwvvutrrpponnlkjjihgfedccba__^]][ZYXWWVUTSRQPOONMLKKIHGFEEDCBA@??><<;:99776443210//.-++))('&%—–•”““‘ŽŽŒ‹Š‰‰ˆ‡……„ƒ‚€~}}|zzyxwvuutsrqponmmkjjihhfeecbaa`__]\\ZYXXWVUTSSQPONNMLKJJIGFFEDDBAA@?>=;;:99776433210/.-,++*))'&&%–•”“’’‘ŽŒ‹Š‰‰ˆ††…ƒƒ‚‚~~}|{zyyxvuussrqponmllkjihggedccba`_^]\\[ZYWWVVUSRRPPONMLKJIHGGFEDCBA@?>=<<;;:87765432100..,++*))'&%$$•””’’‘ŽŒ‹Š‰‰‡††…„ƒ‚‚€~~}|{zzywvuutsrqqonnllkjihhgfddcba``^^\\ZYYXWVVTTSRPPONMLKJJIHFFEDCBBA@?><<;:987765432100..-,**)(('&$##”““’‘ŽŒ‹Š‰‰‡††…„ƒ‚‚€€~~}|{zyxwwvttsrqponmmlkjihgfeeccba`_^]\[[YYXWWUUTSQQPONMLKJJHHGFEDCCA@??>=<;;998754432100..-,+*)('&%$#""”“’‘ŽŒŒŠŠ‰ˆ††…„ƒ‚‚€~}|{zyywwvuttrqppnnmlkjihgffedcba`_^]]\[YYXWVUUTSRQPONMMKJJIHGFEDCBB@@?>=<;:997765442110/.-,+*))''&%$#"!“’‘ŽŒ‹‹‰‰‡‡†…„„ƒ‚~}||zyywvuuttrqqponmlkjihhgeeccba`_^]\[[ZYXWVVUTRRPPPNNLKKJIHGFEEDBBA@?>=<<::87765442100.--,+**)''%%$#"!!’‘ŽŒŠŠ‰ˆˆ†…„„ƒ‚€~}|{zzyxwvuttrqpponllkjiigffedcbaa__^]\[ZYXWVUUTSRQPPNNLLJJIHGFFEDCBA@?>==<::97765442110/.--++))('&%$#"! ‘Œ‹Šˆˆˆ††…ƒƒ€€~}|{{zyxwvutssrqoonmlkkiihffddcbaa`_^][[ZYXWWUUTSRQQONNMLKJIHGGEDCCBA??>><;;:8876653210//.-,+*))''&%%##! ‘ŽŒŒ‹Š‰ˆ‡††„„‚‚€}}{zyyxwvvtssrqponmllkihggfedcbb``_^]\[ZYYWWVUTSRQPPNMMKKJIHGFFECCBA@??>=<;:8776554221//.--+**)('%%$$#!! ŽŒ‹Š‰ˆ‡†…„ƒƒ‚€~}||{zyxwvuttsrqpoomlkkiihgeedcba``_^]\[ZYXXWUUTSRRPPNNMLKJIHGFEDDCBA@?>==<;:9876643321//.--,+*(('&%$#"!!ŽŒ‹Š‰‰ˆ†……„ƒ‚€€}}|{yyxwvuusrqqpoomlkkjhhgfedcbaa__]]\[[YYXWVUTSSQQONNLLKJJHGGEEDCBAA??=<<;:98865443210/.-,++*)('&%%#""! Ž‹‹Š‰ˆ‡†……„ƒ‚€~~||{zyxwvuussrqponmlkjjihgfeddcaa`_^]\\ZZXWWVUTSRQQONNMLKJIHHGEDDBBA@?>==<;:98766443100/..,+**)('&%$#"" Œ‹‹Šˆˆ‡……„ƒƒ~~}|zzzyxwuutsrqponmlkkjihggeddbba__^^\[[ZYXWVUUSSQQOONMLKJIIGGFEDCCA@??>=<;:98776543210//-,,+*)(''&%$#!! Œ‹ŠŠˆ‡‡†…„ƒƒ€~}|{zzxwvvttsrqppnnmlkjihgfeedbaa`__]][[ZYWWVUTTRQQOONMLLKIHGGFEDCBAA??==<;:99775542210/.-,,+*)((&&$$#"! ŒŠ‰‰ˆ‡†„„ƒƒ€}}|{zyyxwvutrrqqonnmkkjihgfeecca``_^]\[ZZYXWVUTSSRQPNNMLLKIIHGFEDCBA@@>>=<;:98775533210//--++*)('&%%$#"! ‹‰ˆˆ††…„ƒƒ‚€~}|{zzxwvvutsrqqoonmkjjihggeddcba`_^]\[[ZYXWVVTSRRQPONMLKKJIHGFFDCBAA@>>=<;:997665432100.--,+*)(('%$##"! Šˆˆ‡†…„ƒƒ‚€~~}|{zyxxwuutsrqqonmllkjihgfeedcba``_^\\ZZYXWWVTTRRPPONMLLKJIHGFEDCCAA??>=<<:98775543321//.,,+*)((&&%$#"! ‰ˆ‡†……ƒ‚€~}|{zyyxwvutssqqponmlkjjigffedcba``_^\\[ZYXWVUUTRQQPONNLLKJIHGFEDCBBA@?>=<;::8776544210//.-,++*)'&%%$#"!!ˆ‡†…„ƒƒ‚€~}|{{zxxvvutsrqpponmmkjihhgfedcbb`__]]\ZZYXXWUTSSRQPOOMMLKJIHGFEDCBAA@?>==;:99876543220//.,,++)(''&%$#"! ˆ††…ƒƒ‚€~~}|{yyxwvvutsrpponmlkjiihgeedcba``_^]\[ZZXXVVUSSRQPPONLKJJIHGGFDCCBA@?>><;::98765532100/.-,+*)(('&%$#"!!††…„‚‚€}}|zzywwvutsrrpoonmlljiiggfedcbba`^^]\[ZZXWWVUTSRRPOONMLKJIHGGEDDCBA@?>=<;:99776553211//.-,+**)('&%$$"! ……„‚‚€~}}{{yyxwwuttrrqponmllkjhhgfeeccba__^]\[[ZYXVVUTSRRPPONMLKJIHGGFEDCAA@?>><;::98775443200/..,,*)(('&%$##!! îííìëêéèçæåäããâáàßßÝÝÜÚÙÙØ×ÖÕÔÓÒÑÐÐÏÎÍÌÌËÉÈÈÆÆÅÄÃÃÂÀÀ¿½½¼»º¹¹·¶¶µ´³²±±¯®­­¬«ª©¨¨§¥¤££¡¡ Ÿžœœ›š™˜——•””“’‘ŽŽŒŒ‹‰‰ˆ‡†…„ƒƒ‚~}}ííìëëéèçæåääââáàßÞÝÝÛÚÚÙØ××ÕÕÔÒÑÑÐÏÎÍÍËÊÉÉÈÇÆÆÅÃÂÂÀÀ¿¾½¼»º¹¹¸¶¶´´³²±°°®­­¬«ªª¨§¦¥¤¤£¢¡  žžœœ›š™˜—–•””’’‘ŽŒ‹‹‰‰ˆ‡†……„ƒ‚~}}{ììëêééçææåäãâáàßßÝÜÜÛÚÙØ××ÖÕÓÓÒÑÐÏÎÍÌËÊÉÈÈÇÆÅÄÃÃÁÁÀ¿¾½½¼ºº¸¸¶¶µ´³²±±°¯®­¬««©¨¨¦¦¥££¢¡ ŸŸžœ›š™˜—–••”“’‘ŽŽŒ‹‹‰‰ˆ‡†……„‚€~}|{zìëêêèèæååäãâáàßÞÞÜÜÛÚÙÙ×ÖÕÕÔÒÒÑÐÏÎÍÍËËÊÉÈÇÆÅÄÃÂÁÁÀ¿¾¾¼»»º¹¸¶µµ´³²²°¯¯®­­«ª©¨§§¦¥¤£¢¡ Ÿžžœ›š™™—–•””“’‘ŽŒ‹‰‰ˆ‡††…„ƒ€€~}||{zëëéèèææåääâááàßÞÝÜÛÚÙÙØÖÕÕÓÒÒÑÐÏÎÍÌÌËÊÉÈÇÆÅÅÄÃÁÁÀ¿¾¾½¼ºº¸¸·¶µ´³²±°°®®­¬««©©§§¦¥¤£¢¡ Ÿžžœœ›š™˜˜––•”“’‘ŽŒ‹Š‰ˆ‡††„ƒ‚‚€€~~||{zyêéèçææåääâááàÞÞÝÜÛÚÙÙØ×ÖÔÔÓÒÑÐÏÏÍÌËËÊÉÉÇÇÆÅÃÂÂÁÀ¿¾½½¼»º¸¸··µµ³³²°°¯®­¬««©©¨§¦¥¤£¢¡  žžœ›š™˜˜—–”““’‘‘ŽŒ‹Š‰ˆˆ‡……ƒƒ€}}{{zxxéèèçæåääâááßßÞÝÜÜÚÙØØÖÕÔÓÓÒÑÐÏÎÎÍËÊÊÉÈÇÆÅÄÄÂÁÁÀÀ¿¾¼¼º¹¹¸·¶µµ´³²±°®®­¬«ªª©¨§¦¥¥££¢¡Ÿžžœ›šš˜——–•”“’‘Œ‹Š‰ˆ‡†…„ƒƒ‚€~|{zzyxwéèçæååããâáßÞÞÝÜÛÚÚØ××ÖÕÔÓÒÑÐÐÎÎÍËËÊÊÉÈÆÅÅÄÃÂÁÀ¿¾½½¼ºº¹¸¸¶µ´´³²±°¯®­¬««©¨§§¦¥¤£¢¡¡ žžœ›š™˜——–•”““‘ŽŒ‹Š‰ˆˆ‡†…„ƒ€}|{{zxywvçææåääâááßÞÞÝÜÜÛÙØ××ÖÕÔÓÒÑÑÏÎÎÌÌËÊÉÉÈÆÅÅÄÃÂÁÀ¿¾¾½¼ºº¹¸··µ´´³²±°°®­¬¬ªª©§§¦¥¤£¢¢¡ žžœ››š˜——–•”“’‘‘ŽŽŒ‹ŠŠˆˆ††…„ƒ‚€~}{zzyxwvvççååããááàßÞÝÜÛÛÚÙØ×ÕÕÔÓÓÑÑÏÏÎÌÌËÊÊÈÈÆÆÅÄÃÃÁÁ¿¾½¼¼»º¹¸¸¶µµ´³²±°°®­¬¬«ª©¨§¦¥¤¤£¡¡ ŸŸžœœšš˜˜–••””’’‘ŽŒ‹‹Šˆ‡†……„ƒ‚‚~~}|{zyxwvvtæåäãâáààßÞÝÜÜÚÚÙ××ÖÕÔÔÒÑÐÐÏÎÍÌËÊÊÈÈÇÆÅÄÃÂÁÁÀ¿¾½»»ºº¸¸¶µµ´³²±°¯¯­­¬ªª©¨§¦¦¤¤¢¡¡ŸŸžžœœšš™——––”“’‘‘ŽŽŒ‹‹‰‰ˆ‡†…„ƒƒ‚€€~~||{zyxxwuusæääãâáàßÞÞÝÛÚÙÙØ×ÖÕÔÓÓÑÑÐÎÎÍÌËÊÉÉÇÇÆÅÄÃÃÂÀ¿¿¾½¼»ºº¸·¶¶µ´³²±°¯¯®­¬ªª©©§¦¥¥¤£¢¡ Ÿžœ›š˜˜—–•””“‘‘ŽŽŒ‹ŠŠˆ‡‡……„ƒ‚‚€~}|{{yywvvutsåäãâáàßÞÝÜÛÛÙÙØ×ÖÖÕÓÓÑÑÐÏÎÍÌÌÊÊÉÇÇÆÅÄÃÂÁÀ¿¿½½¼»º¹¸··¶µ´³²±°°¯®­¬ªª©¨§¦¥¥££¢¡ Ÿžœ›š™˜˜–•”“’’‘Ž‹‹Š‰ˆ‡†…„„‚€€~}|{zyyxwvttsräãâáàßÞÞÜÜÛÙØØØÖÕÕÓÒÑÑÐÏÎÍÍËÊÊÉÈÇÆÅÄÃÃÁÁÀ¿½¼¼»º¹¹··¶´´³²±°¯®®¬¬«ª©¨¨§¥¥££¢¡ Ÿžžœ›š™˜—–••”“’ŽŒ‹ŠŠ‰ˆ‡†…„ƒ‚‚€~}|{zzywvvutsrqãâáàßÞÝÜÜÛÙÙØ×ÖÖÔÔÒÑÑÐÏÎÍÌËËÊÈÇÇÆÅÅÃÂÁÁÀ¿¾½¼¼»º¸·¶¶µ´´²±°°¯®­¬««©©§¦¦¥£¢¢¡ ŸŸž››š™˜—–••”’‘‘ŽŒŒŠŠ‰ˆ‡†……ƒƒ‚€~~}|{zyyxwvutsrrqâáàßßÞÝÜÛÚÚØ×ÖÕÔÔÓÒÑÑÏÎÍÌËËÊÉÈÇÇÅÄÃÃÂÁ¿¿¾¾¼»º¹¹··¶µ´´²±°¯¯­­¬«ªª¨§¦¦¥¤£¢¡ Ÿžœ›š™˜˜––””“’‘ŽŒ‹‹Š‰ˆ‡†…„„ƒ‚~}|{zyxxwvuttrqpoáàßßÞÝÜÛÚÙØ×ÖÖÔÔÓÒÑÐÏÎÍÌËÊÉÉÈÇÆÅÄÄÃÁÁÀ¿¾½½¼»¹¹¸¶¶µ´´²±±¯¯®­¬«ªª¨§¦¦¥¤£¢¢  žž››š™™—–•””’’‘ŽŒŒ‹Šˆˆ‡‡……„ƒ‚€€~~||{zywwvutsrrppoáßÞÞÝÜÛÛÙÙ×ÖÕÕÔÓÒÑÑÐÎÎÍÌËÉÉÈÇÆÅÅÄÃÂÁÀ¿¾½½»º¹¹··¶¶´³²²±°®®­¬«ªª©¨¦¦¥¤££¢¡ Ÿžœœ›šš˜——••”“’’ŽŽŒ‹Š‰ˆ‡†…„„‚‚€~~}|zzyxwvuussqqponßßÞÝÜÛÚÚØ××ÖÕÔÓÒÑÐÏÏÍÍÌËÊÉÈÈÆÅÅÃÂÂÁÀ¿¾½½»ºº¹¸·¶¶´³³²±°¯®®¬¬«ª¨§§¦¥¤£¢¡¡ Ÿžœœšš˜——–•”“’‘‘Œ‹Š‰ˆ‡††„„‚‚€~~|{{zyxwwvttrrpoonnßÞÝÜÛÛÚØ×ÖÖÕÔÓÒÒÐÐÏÎÍÌËÊÉÈÈÇÆÅÃÃÂÁÀ¿¾½½»»º¸¸·¶µ´´²²±°¯®­¬«ªª©§§¦¥¤£¢¢¡ žžœ›šš˜˜—–•”“’‘ŽŒ‹Š‰ˆ‡‡……„ƒ‚€~~||{zyxwwuttsrqponmmÞÝÜÛÚÙÙØ×ÖÕÔÓÒÑÑÐÎÎÌÌËÊÊÈÈÇÆÅÄÃÂÁÀ¿¾¾½¼ºº¹¸¸¶µµ³³±±°¯®­¬¬«ª¨¨¦¦¥¤££¢¡ Ÿžœ››š™˜—–•”“’‘‘ŽŒ‹ŠŠˆˆ‡†…„ƒ‚~}||{zyxwvuussqqponmllÝÜÛÛÙÙØ×ÖÕÔÓÒÑÐÐÎÍÍÌËËÉÉÇÇÆÅÄÃÂÁÀ¿¾½½¼ºº¹¸·¶¶´³³²±±¯¯­¬««ª©¨§¦¥¥£¢¢  Ÿžžœ›šš˜˜—–•”“’‘‘ŽŒ‹ŠŠ‰ˆ††…ƒƒ‚€}||{zyxwwuttrrqponmlkjÜÛÚÙÙØ×ÖÕÔÓÒÑÑÐÏÍÍÌËÊÉÉÇÇÆÄÄÃÂÁÀ¿¾½¼¼»º¹¸··¶µ´³²±°¯®®­¬«ª©¨§¦¥¤¤£¢¡ Ÿžžœ››š™˜—–•”““’‘ŽŒŒŠŠˆ‡‡†…„ƒ‚~}}|{zyxwwuussrqponnmlkjÛÚÚÙØ×ÖÕÔÔÒÒÑÏÏÎÍÌËÊÊÉÈÇÆÅÄÃÃÁÁÀ¾¾½¼»º¹¸·¶¶µ´³²±°¯®­¬¬«ª©¨§¦¥¤¤£¢¡ Ÿž››š™˜—–•”“’’‘ŽŒŒŠ‰ˆ‡‡†…„ƒ‚€€}}|{zyxxwuutsrqpoonlkjjiÛÚØØ×ÖÕÕÓÓÒÐÐÏÎÍÌÌËÊÉÈÆÆÅÄÄÂÁÀ¿¿¾½¼»ºº¸¸·µ´´³²±°¯®®¬¬«ª©¨¨¦¦¥££¢¡ Ÿž››š™˜—–•”“’’‘ŽŒ‹Š‰‰ˆ‡†…„ƒƒ€~~||{zyywwvutsrqpoomlkjjihÚÙØ×ÖÕÕÔÓÑÐÐÏÎÍÌËËÊÈÈÇÆÅÄÄÂÁÁÀ¿¾½¼»º¹¹¸·¶µ´³²±±°¯­¬««ªª©¨¦¥¥¤¢¢¡  žœ›š™˜—–••““’‘ŽŒ‹ŠŠ‰ˆ‡†……ƒƒ‚€€~~}||zzxwvvutsrqpponmlkjihhÙØ×ÖÕÔÓÓÒÑÐÏÎÍÌÌÊÉÈÈÇÆÅÅÄÂÁÀÀ¿¾½¼»ºº¸¸·µµ´³²²°°®­­¬«ª©©¨¦¦¥¤£¢¡¡Ÿžœšš™˜—–•””’’‘ŽŒŒ‹Š‰ˆ‡†…„„ƒ‚€€~~}|{{yyxvuutsrqpoommlkjiiggØ×ÖÖÔÓÓÒÐÐÏÎÎÍÌÊÊÉÈÇÆÅÄÃÃÂÁÀ¾¾½¼¼º¹¹·¶¶µ´³²²±°¯­­¬¬«©¨¨§¦¥¤£¢¡ ŸŸžœšš™™—––”““’‘ŽŒ‹Šˆˆ‡‡…„ƒ‚‚€€~}|{{yyxwvvtsrqqpnmllkkiihgf××ÕÕÔÓÑÑÐÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÂÀÀ¿¾½¼»ºº¸¸·¶µ´³³±±¯®®­¬«ªª¨¨§¦¥¤£¢¢ Ÿžžœ›š™˜˜––•““’‘ŽŽ‹‹Š‰ˆ‡†…„ƒ‚‚€~}}{zyxxwvutssqqponmlkjihggfdÖÕÕÔÒÒÑÐÐÏÍÍËËÊÉÈÇÆÅÄÃÃÁÁÀ¿¾½¼»º¹¹¸·¶µµ³³±±°¯®­­««ª¨§§¦¥¤££¡  Ÿžœ›š™˜˜–••“’’‘ŽŽŒ‹Š‰ˆ‡‡†„ƒƒ‚€~}|{zzyxwvutsrrqponmlkkiihfeedÕÕÔÓÒÑÐÏÎÍÍÌËÊÉÉÇÆÆÅÄÃÂÁÀ¿¾½¼»ºº¹¸·¶µ´´³²±°¯®®¬¬ª©©§¦¦¥¤£¢¢¡ Ÿžœ›šš˜˜—–•”“’‘‘ŽŽŒŠŠ‰ˆˆ‡…„ƒƒ‚€~~}{{zyxwvuusrqqponmllkiihgfedcÔÔÓÒÑÑÏÏÎÍËËÊÉÈÇÆÆÅÄÃÂÁÀ¿¾¾¼»»º¹¸·¶µµ³³²±°¯®­¬««ª©¨¦¦¥¤££¡¡ Ÿžœœšš˜——–•”“’‘ŽŒŒ‹Š‰ˆ‡‡†„„ƒ‚€~}}{{yyxwvuussrqponnlljjihgfedccÔÓÒÑÐÐÎÍÌÌËÊÉÈÇÆÆÅÄÂÂÁÀ¿¾½¼¼»º¹¸·¶¶´³²±±°¯®®­¬ªª©§§¦¥¥££¢  Ÿžœœ›š™—––•”“’‘ŽŽŒ‹Š‰ˆˆ‡……„‚‚€~}}|{zyxwwvttsqqponmmlkjihgfedccbÓÒÒÑÐÏÎÌÌËÊÉÈÈÇÅÅÃÃÂÁÀÀ¾¾¼»»º¹¸·¶µ´´²²±°°®­­¬«ª©¨¨¦¥¤£¢¡¡ Ÿž›š™˜—––•”“’‘‘ŽŒ‹Š‰‰ˆ‡……„ƒ‚€€~~}|{zyxwvvttsrqponmmlkiihggedccbaÒÒÑÐÏÎÍÌËÊÉÉÇÇÆÅÄÃÂÁÀ¿¾½¼»»º¹¸·¶¶´´³²±±¯®®­¬ªª©¨§§¥¤¤£¢¡ŸŸžžœœ›™™˜—–•””’‘‘ŽŒ‹Š‰‰ˆ††…„ƒ‚€~||{zyywvvutsrqpoonmkkjihggeeccba`ÑÑÐÏÎÍÌËËÊÈÈÆÆÅÄÃÂÁÀÀ¿¾½¼»º¹¸¸·¶µ³³²±°°®®­¬«ª©¨§¦¥¤£¢¢  Ÿž›šš™˜—–•”““‘ŽŽŒ‹‹‰‰‡‡†…„ƒƒ‚€€~~}|{zzyxwuutsrrpoommkkiihggfeccaa`_ÐÐÏÎÍÄt2 %T›ÄÃÂÁ4j°¹·¶¶µ³³­ ª®­­¬«ª§¦¦¤¤£¢¡ Ÿžœ› a”““’†FC‡†…„ƒƒQ$ 3`yxwussra :mmP 'Ofdcbb`^ÐÏÎÍ°ÄÂÁÀ’¶¶µ´³²rq®­¬«ª©§¥¥££¢¡ Ÿžœ››^’’‘wp…„ƒƒtyxvtsr` ?nlJedcba^^ÏÎÍÅ€²Ä½£s+ÂÂÁÀ½¼¶¤u¨µ´³²²)*­««ª©¨¥¤££¢¢ Ÿžœœ›š—–Š:’‘ˆd„ƒc„ƒKmzwfIxvvsr^ Enml Wf^Ddcba`]\ÎÍÌs ¾ÈÇÆÅÅÄÂÂÁÀ¿½»»¹¸°![´³³²”'#««ª¨¨¥¤£¢¡¡ŸŸžœ›š™––”Š‘P„Š‰ˆ‡JƒMs~}{{zyxwvur] Inmlkbhgfedcba``\\ÍÍÌ1…ÈÇÆÅÅÄÂÁÀÀ¿¾»º¹¸¸·{'³²²±LjkKªª©§¦¤£¢¡¡ žžœ›šš˜••”ˆŽ"\Š‰ˆ‡††W !P~|{{yywwvut\Nnmlkj 5_fedcba`_^\[ÌÌ˸ÇÆÅÀ¿¾¾»º¸¸·¶¦ ³±±ª ¤¦ ¤¨§¦¦££¢ Ÿžœ›š™™—•“‡91ŽŽŒ +~‰ˆ‡†……w +€ +r|{{zyxwvuttRnmmlki@"?`aa__][ZÌËÊÅÆÅÄÀ¾½½º¸¸·¶µ±²°°m@¬¬Kj§¦¦¥¢¡  Ÿœ›š™™˜— ‚Ž‹‡ˆ‡††„ƒ€€z{zzxxwvvttr +\mlkjiihMX`^^]ZYËÊÊ ¶ÅÅÄÃÂÁ¾¾¼¼¹¸··µ´¤ ±°¯&¬«%§¦¥¥¢  Ÿžœ›šš˜˜—–eŽŒ‹ +|‡††…„ƒv +€~ qzzyxwvutssqM YkkiihgfedS; "^^]\ ZYÊÉÈ.‰ÅÃÃÂÁÀ¾¼¼»¹¸¶¶´³y'°¯Žˆ¥¤£¡ Ÿœœšš™˜––•’bpŒŒ‹Š!Y††„„ƒ‚U ~} NzyxwvvussrqnHViihgfeedbbT^]\[XXÉÉÇl*ÀÃÃÁÀÀ½¼»º·¶µ´´«Y¯®GE¤£¢ Ÿžžœ››š˜˜—–•”‘‘S‹‹Š‰M…„ƒ‚|H}|JoxxwuttsrqpmmDRhgfeeccbaY^]\[YXXWÈÈƼ,‹¶¾«r¼»º¹¶¶°žq¢¯¦ +˜©¨¨§” œ£¡Ÿžœœšš™˜—–•”“‘ŽŒQŠ‰ˆ‚`}}_y}|xGhsqbFqqolkk@Ofe:S__M\\ZZYXWVÈÇÆÅ¡o»»¹¸‹¯­h0ª©¨§¦¦.c¢¡˜˜—–••“’Žh{‰‡‡oi||{zlpoolkji<Ke?[ZZYWUÆÆÅÄÄ·d' +J£»ºº¸¸3h§®®­"q©¨¨§¥¥m ¡ ˜—–•””“’Ž‹.,ˆ‡†…{@>v}||zyxuJ +/Woonkjiig8IP+ +H\[ZYXUUÆÅÄÄÂÂÁ¿¿½½¼»º¹¹¸·¶µ´³²±±°®®¬¬«ª©¨§§¦¤££¢¡  žž››š™˜—–•”“’’‘ŒŒ‹‰‰ˆ‡†…„ƒ‚€€}}|{{yywvvutsrrqoonmlkjihgffedcba`_^^]\[ZYXWVVTTÆÄÃÃÁÁÀ¿¾½¼¼ºº¸¸·¶µ´³³±°¯¯®­¬«ª©¨¨¦¥¥¤£¢¡  žœ›š™˜—–•”“’’ŽŒŒŠŠ‰ˆ‡†……ƒƒ‚~}|{{yyxwvutsrqpoonllkkihhgfedcba`__^\\[ZYYWVVUTRÄÃÃÂÁ¿¿¾½¼»º¹¸¸·¶´´´³²±°®®­««ª©¨§§¥¥¤£¢¡¡Ÿžž›šš™˜—––”““’‘ŽŒ‹Š‰ˆ‡†……„ƒ‚€€~}|{{yywvvutsrqpponmlkjihgffddcba`__^\[[ZYXWVUUTSRÃÂÂÁÀ¿¿½¼»º¹¸··¶¶´³²²°°¯®­¬«ª©©¨¦¦¤¤£¢¡ Ÿžœœ›š™˜—––•”“’‘Ž‹‹‰ˆˆ‡†……„‚‚€~}||zyyxwvuusrrpoonmmkjjhggfedcbaa__^]\[ZZXWVVUTSRQÃÁÀÀ¿¾½½»»¹¸¸·¶µ´´³²°¯¯®­¬««©¨§§¦¥¤¤¢¡  žžœ›š™˜——–””“’‘ŽŒ‹Š‰ˆˆ†……ƒƒ‚€~}||zyyxwvuttrrqoonmlkkihggfeddba`__^]\[ZYXWVUUTRRQPÂÁÀ¿¾½½»»¹¹¸·¶µ´³³±°°¯®­¬«ªª©§¦¦¥¤£¢¡¡ Ÿžœ››™˜˜—–””“’‘ŽŽŒ‹‹Š‰ˆ‡†……„ƒ€~~}{{zyxwvuutrqqponmlljiihgfedcbb`_^]]\[ZYXWVVUTSRQQPÁÀ¿¾¾¼»»¹¹¸·¶¶µ³²±±°®®­¬«ªª¨§§¦¥¥££¡¡ žœ›š™™˜—–””“’’‘ŽŒŠŠ‰ˆ‡†……ƒƒ‚€~~}|{zyxwvutssqqponmlkjjiggfedccba__^]\[ZYYXWVUTSSQQPNÀ¿¾½½¼»º¹¸¸¶µµ³³±±°¯®­¬¬ªª©¨§¦¦¤¤¢¢  Ÿžœœšš˜˜––””“’‘Œ‹Š‰ˆˆ††„„‚‚€~}|{zyxwvuussrqponnmlkiihggfddbaa`_^]\[ZYYXVVUTSRRQPON¿¾½¼¼»º¹¸¸¶µµ´³²°°¯®­­«ªª©¨§§¥¥£¢¢¡ Ÿžœ›šš˜—––•”““’‘ŽŒ‹ŠŠˆ‡‡†„„ƒ‚€~}}|zzyxxvvutsrqpoomlkkjiggfeedbaa__^]\[ZZXXVVUUTRRQPONM¾¾½¼»º¹¹·¶¶µ´³²±°¯®®¬««ª©¨§¦¥¤¤£¢  ŸŸœ›šš˜˜—–••“’’‘ŽŒ‹ŠŠ‰ˆ‡†…„ƒƒ‚€€~~||{zyxwwuutrrqppnmlkjiihgfedcbba`_^]\[[ZYXVVVTSSQPPONML¾½¼»º¹¸¸·¶µ³³²±°°¯­¬¬«©©¨§¦¦¤¤£¢  Ÿžžœ››™™˜—–•”“’’‘Ž‹Š‰ˆ‡‡†…„„‚€~}}|{zyxxvvttsrqponnmlkiihggfedbb``_^]][[ZYXWVVUSSQPPONMLK½¼»ºº¹··¶´´³²±°°®­¬¬«ª©©§¦¥¥£¢¡¡ ŸŸœœšš™˜—–•”“’‘‘ŽŒ‹‹Š‰‡‡†……ƒ‚‚€~~}||zyyxvvutsrqppnnllkjihgfeddcba`__]\\[YYXXVUTSRQQPONMLKK¼»»¹¹··¶µ´³²±±°¯­­¬«ª©¨§¦¦¤¤£¢¡¡Ÿžœ››š™˜—–•””’‘ŽŒ‹‹‰‰‡‡†…„ƒ‚‚€}}||zyyxwvutsrqppnnmlkjihgffedcba``_^\\[ZYXWVVUTSRPPONNLLKJ»º¹¸¸·µµ´³²±°°¯­­¬«ª©¨§§¦¥¤¢¢¡¡ŸŸžœ›š™™˜—–•””“’‘ŽŒŒ‹Šˆˆ‡†…„„‚€~~}|{{zxxwvutsrrpoonmkkjihhffddcba`_^]][[ZYXWVUUTSQQPONMMKJJIº¹¹¸¶¶´´³²±°°¯­¬¬«ª©©§§¦¥¤£¢¡¡ŸŸžœ›š™˜—–•”““‘‘ŽŒŒŠŠ‰‡‡†…„ƒ‚‚€€~}|{{zyxwuutssqqoonmlkjiigfedccbaa`^]]\[ZZYWWUTTSRQPPNMLLJJHHº¹·¶¶µµ³³²°°¯®­¬«ªª¨§§¦¥¤££¡¡Ÿžžœ›š™™˜—•””“’‘ŽŒ‹Š‰ˆ‡†…„„ƒ‚€~}|{{yyxwvutssqppnnmmkjjiggfedcca``^]\\[ZYYWWUTTSRQQONNMKKJIHG¹¸·¶µ´´²±±°¯®­¬«ªª©¨§¦¥¤£¢¢  Ÿžœ›šš˜˜––•““’’ŒŒ‹Š‰ˆ‡†……„ƒ‚€~}|{{yyxwvutssqqoonmlkjjhggfedcbaa_^^]\[ZYXWWUUTSRQPOONMKKJIIGG¸·¶µ´³²±±°¯®­¬««©©¨§¦¥¥¤¢¡  Ÿžœ›šš˜——–•““’‘‘‹‹Š‰ˆ‡†……„ƒ€~}|{{zyxwvvtssrqponnlkjihhgfedcbaa`^^]\[ZYYWVVTTSRQQOOMMLKJIIGGF·¶¶´´²²±°¯®­­¬«©©¨§¦¥¤¤¢¡ Ÿžžœ›šš˜˜–••”“’‘‘ŽŒ‹Š‰ˆ‡††…„ƒ‚€~}||zyxxwvuusrqqponmlkkihhgfedccba_^^]\\[YXWVVUTSRQQOOMLLKJJIGFFE¶µ´³³²±°¯®®¬««ª©¨§¦¦¤£¢¢  Ÿžœ›šš˜˜—••”“’‘‘ŒŒ‹Š‰‰ˆ‡……„ƒ‚‚€}||{zxxwvuussrqponnlkkjihgfeddbba`_^]\[ZYXXWVUTSRQPPONMLKJJIGGFED¶µ³³²±°¯¯­­¬ª©¨¨§¦¥¤¤¢¢¡ Ÿžœ›šš˜˜—–•””’‘ŽŒ‹Š‰ˆ‡‡……„ƒ‚€}}|{zyxwwuttsrqponnllkihhgfedcca``_^]\[ZYYXVVUTSRQPPONMLKJJIHGEDDC´´³²±°¯®®­¬«©©¨§¦¦¥¤¢¡¡ Ÿžœ›šš™˜—–•”“’‘‘ŽŽŒ‹Š‰ˆˆ††…„ƒ‚€€~~}|{{yxwwuutrrqponmmlkjihgfeddcba`__]\[ZZXXWVUUSRRPPONMLLJIHGFEEDCB´³²±°¯¯­¬¬«ª©¨§§¦¥££¢  Ÿž››š™˜—–•””“’ŽŽŒŒŠŠˆ‡‡†…„ƒ‚‚€~}|{zyxxvvussrqpoonmlkjihgffeccba`_^]\[ZZYXWVUTSSRQOONMLKJIIHFFEDCBB³²²°°®®­¬«ª©¨§¦¦¥¤£¢¡  ž›šš™———••”’’‘ŽŒ‹‹‰ˆ‡‡†…„ƒ‚~}|{{yyxwvutsrqppnnlkkjihhffddcba`_^^\[[ZYXWWVTTSQQONNMLLKIIGGFEDCCA@²±°¯®­¬¬«ª©¨§§¥¥¤£¡¡ Ÿžœ›š™˜—–••““’‘ŽŒŒ‹Šˆ‡††…„ƒ‚‚€~}||zyywwvutsrrqoommlkjihgffedcba`_^^]\[ZYXWVUTSSRQOONMLKJJIHGFEDDCA@@±°¯®®­¬«ª©¨§¦¦¥¤£¢¡ ŸŸœšš™™—–•””“’‘ŽŒŒŠ‰‰ˆ‡‡……ƒƒ€€~}||zzywvvutsrrqponmkkjjiggeddbbaa`^^]\[YYXWWUUTRRQPONMMKJJIGGFEDDBA@@?°¯¯®­¬«ª©©§¦¥¥¤£¢¢ ŸŸœ›š™˜˜––•”’’‘ŽŒŠ‰‰ˆ‡†…„ƒƒ‚€€~}|{zzxxwvutsrqpoonmlljjihffddcba``_^][[ZYXXVUTTSRQPONMLKKIIHGFEEDCBA@?>°¯®¬¬««ª¨¨¦¥¥¤£¢¡ ŸŸžœœ›š™˜——–•”“’‘ŽŒŒ‹Š‰ˆˆ†…„ƒƒ‚€~}||zzxxwvuttrqqonnmlkjjhhgfddcbaa__^]\[ZYXWVVUTSRQPONNLKKIIHGFEEDCBA@?>=¯®­¬«ªª©¨¦¦¤¤£¢¡¡ žž››š™˜—––•”“’‘‘ŽŽŒŒ‹‰‰ˆ‡††…„ƒ‚€~}||{yxxwvutsrrqponmlkkiihffedcbb`__]]\[[YXXVVUSSRRPOONMKKJIHGFEEDBBA@?>><®­¬«ª©¨¨§¥¥¤££¢  žœ››š˜˜–••”“’‘ŽŽŒ‹ŠŠ‰‰‡‡†…„‚‚€~~|{zzyxwvuutrqqponmlljjhggfeecbba`^]]\\[ZYWVVUTSRQPOONMLKJIHGFEEDCBA@?>>=;­¬««©©¨§¦¥¤£¢¡ ŸŸœ›š™™˜––•”“’’ŽŒ‹Š‰ˆ‡‡†…ƒ‚‚€~}}|{yxxwvuusrrqponmlkkjhgffedccaa`_^]\[ZYYWWUUTSRQPPNMLLKJJHGFEEDCAA@@>=<<:­«ªª©¨§¦¥¤££¡¡ŸŸžœ›š™™˜––•”“’‘ŽŽŒ‹‹‰‰‡‡†„„ƒ‚~~}|{zyxwvuutrqqponmlkjjihgfeecbba__^]\\ZZXXWUUTSRQPONNMLKJIHGGEEDCBA@@>>=<;:¬ªª©¨§¦¥¤£¢¢¡ Ÿžœ›š™™—–••”“’‘ŽŽŒ‹Š‰‰ˆ††…ƒƒ‚€~}{zzyxwvuutsqqponnmkkiihgfedcbba`_^]\[[YXXVVUTSRRPPONMLKKIHGFEDDCCA@??>=<;:9«ª©¨§¦¥¥££¢  Ÿž›šš™——–•”“’’Œ‹Š‰ˆ‡††…„ƒ‚€~}}{{zyyxvvussrqppnmlkjjihgfeeccba`_^]\[[ZYXVVUTSRRPPOMMLKKJIHFFEDCBA@??==<;:98©©¨§§¥¥¤£¢¡ Ÿžœ››™™˜—––””“‘ŽŒ‹‹Š‰ˆ‡†…„„‚‚€}||{{zxwwvutsrqppnnmlkjihgfeedba```^]\\[ZYXWVUTTRQQOONMLLJJIHGFEDCBB@@>=<<;:988©¨§¦¦¤£¢¢¡ Ÿžœœ›™™——––”““’‘ŽŒŒŠ‰ˆˆ‡†…„ƒƒ‚€}}|{zyxxvvussrqppnmmlkjihgfeddcba`_^^][ZZYXWVUTTSRQPONMLKJIHHGFEDDBAA??==<;:9976©¨¦¦¥¤£¢¡  žœœ›š™˜—–••”“’‘ŽŒ‹‹‰‰ˆ‡††„„ƒ‚~}|{zzxxwuttsrrpoonmlkjihhffdccba`_^]\[ZZYXWWUUSSRQPONMLLKIHHGFEDCCB@@?==<;:99876§¦¦¤¤£¢¡ ŸŸž››š™˜—––•”“’‘ŽŒ‹‰ˆˆ‡†……„‚‚€~}||{yywvvutsrqponnmlkjihhffdccba`_^^\\[ZXXXVUUTRRQPONNLKJJHHGFEDCBAA@?>=<;;:87765¦¦¥¤£¢¡¡Ÿžœœ›š™˜—–••”“‘‘ŽŒŒŠŠ‰ˆ‡†…„„‚~}|{zzxxwvutsrrqonnmlkjjhhfeedccaa_^^][[ZYXXWVUTSQPPONMMLJJIGGFEDCBAA@?>=<;::986654¦¥¤£¢¡¡ŸŸžœ›š™˜˜—–””“’‘ŽŒ‹Š‰ˆ‡†…„„‚‚€~}||{zyxwvuttrrqpnnmlljjhhgeedcbaa`_]][[ZYXWWUUSSRQPONMMKJJIHGFEDCBAA@?>==<::8876554¥¤££¢¡ žžœ›š™˜˜–••”“’‘ŽŒ‹Š‰ˆ‡†…„ƒƒ€~~|{zyyxwvutssqqonnmlljjigfeedccaa`^^\\[ZYXWWVUTSRQPOOMLKJJIHGFEEDCBA@?>==;:988765432¤£¢¡¡Ÿžžœ››š˜—–••”“’‘ŽŒ‹Š‰ˆˆ†……„ƒ‚€~~}{{zyxwvutsrqpponmmljiiggfedccaa`^^]\[ZYYWWUUSSRQPOONLLKJIHGFEECCBA@?>=<;;:987764322¤¢¢¡ žžœ›š™˜˜—••”“’‘‘ŽŒŒ‹Š‰‰ˆ††„ƒƒ‚€}}{{zyxwvvusrrqoonmlljiihgfeddba``_^]\[ZZYXWVUTSRRQONNLLKJIHHGEEDCBA@?>>=<;99876553210¢¡¡Ÿžœœšš˜—––•”“’‘ŽŒ‹Š‰ˆ‡†……ƒƒ‚€~~|{{zyxwvvutsrppoonmkkjihggeecca``^^]\[[YXXVUUTSRQPPONLLKJIHGFEECCBA@??>=<;:98765533210¡ ŸŸžœ››™˜˜––•”“’‘ŽŽŒ‹‹‰‰‡‡†„ƒƒ‚€€}}|{zyxwvvutsqqponmllkjihgfeddbb``_^]\[ZYYXWVUTSRQPPNNMLKKJHGFEEDCBB@?>=<<;:98776533210/¡ Ÿžœ›š™™˜—–•”“’‘Œ‹‹Š‰‡‡†…„ƒ‚€~}|{zzxwwuttrrqqonmmlkjihgfeeccba__^]\\ZZYXWVUUSRQPPNNMLKJIHHGFEDCBAA?>>=<;:98776543211// Ÿž››š™——–•”“’‘ŽŒ‹Š‰ˆ‡‡†…„ƒ‚~}||{zyywwvutsrqponnmlkjihgffedcba`__]\[[ZYXWVUTTSRQPNNMMKKIHGGEEDCBAA?>>=<;:987655432100.-Ÿžœ››š˜˜—–••”“’‘ŽŒ‹‰‰ˆ‡†„„ƒ‚€~}|{zzxxwvutsrqppnnmkkjihgfedccba`__]\[[ZYXWVUTSSQQPONNMKJIIGFFEDCBB@@?>=<;:987765432200.-,žž›šš™˜—––”““‘‘ŽŽŒŒ‹‰ˆˆ‡†…„ƒ‚~}|{{yxwwvutsrqqonnmlkjihggeddbbaa_^^\\[ZYXWWVTTSQQPONMLKJJHHFFEDCCBA@>>=<;:98866543211/.--,žœ›šš™˜—––”““’‘ŽŒŠŠ‰ˆ‡†…„„‚‚€~}}{zyxwwvttsrrqoonllkjihgffeccba``_^][[YYYXVVUTSRQOONMLKJJIHGFEDCBB@@?>=<;;988765443100/--,+œœšš™˜—––•““’‘ŒŒŠ‰‰ˆ‡†…„ƒƒ‚€~}|{zyxwwvuttrrqoonmlkjiihgfedcbba_^]]\[ZYXWWVUSSRQPONNLKKJHHGFEDDCBA??>=<;:998665432100/.-,+*œššš˜——–””’’‘Ž‹‹‰‰ˆ‡†……ƒƒ‚€~}|{{yywwvutsrqpponmlkjihhfeedcbba`_^][[ZYXWVUTSSRQPONMMKJIIHGFEDDBBA@?>=<<;:88765533200/--,+**›š™˜˜–••”“’‘ŽŽ‹‹Š‰ˆ‡‡……„ƒ‚€~}|{zyyxwvutsrqpoonmmkjiihgfedcbb`__^]\[ZYXXVVTTSRQPONNMKKJIHGFEDCCBA@?>=<<:988765432210..-,,+*(š™˜˜––•”“’‘Œ‹Š‰ˆ‡††…ƒ‚‚€~}}|{yyxwvutsrrqponmlkkihhfeedccaa__^]\[ZYXXVVUSSRQPONMLLKJIHGGFEDBBA@?>>=;;:98765533100/..,,**)(š™˜––•”“’‘‘‹‹Š‰ˆ‡‡…„„‚‚€~~||{zyxwwvttsrqpoommkjiihffeddbaa`_]]\[ZYXXWUUTSRQQOONMLJJIHHFFEDCBA@@?=<;;:98765543200/.--++*)('™˜––•”“’’ŽŒ‹Š‰ˆˆ††…ƒƒ‚€~~}|{zyxwvvtsrqpponmlkkiihgffdcbba`_^]\[[YXWVUUTSSQQPOMMLKJIHHFFEDCBB@@>==<::98765543210/.--,*))(''——–•”““’ŽŒ‹Š‰ˆ‡†……„ƒ‚€~~||{zyxwvuutsrpponmlljjihgfeedcaa__^]\[[YXXWVTTSSQQPONMLKJIHHFFEDCBA@@>=<<;:99765542200/..,++*)('&%––•”““‘‘ŽŒ‹Š‰‰ˆ‡†…„ƒ‚€~~}|{zyywwuttrrqponmmkjjihggeddcba`_^]][[YYXWVUTSSRPOOMMLKKJIGFFEDCBAA?>==<;:99766543210/.-,,+*)('&%$–•”““‘ŽŒ‹Š‰‰ˆ‡……ƒƒ‚€€~}|{zyyxwvutsrqponnmkjjihgfeddcba``^^][[ZYXWVUTSRQQPOMMLKJIIGFFEDCBA@??=<<;:98765543210/.--++*)(''%%$•”““’ŽŒ‹ŠŠ‰‡‡†…„ƒ‚}||{zyxwwvutsrqppnmllkjihhffdccba`_^^\\ZZYXWWUTSSQQPONNMKJJIHFFEDCBAA@?>=<;:988764432110.-,,+*)(''&%$#”““’‘ŽŒ‹Š‰‰ˆ‡††„ƒƒ€€~~}|{{zyxwvutsrqppomlljjihgfeedcbaa__]\\[ZYXWVUTSRQQPONMLKJJIHGFEEDBBA@?>=<<:997765433110..-++*)(''&$##"”“‘‘ŽŒ‹ŠŠ‰ˆ‡†…„„‚€€~}||zyxxwvutssqqoommkkjihhffedcbaa_^]\\ZYYXWWUTTSRQPONMMKKJHGGFEDCBB@@?>=<;::9876543210/.--,+*))'&&%$#"!“’ŽŽŒ‹ŠŠˆˆ‡†……„‚€~}}|zzyxvvutsrqpoonmllkjigfeedbbaa_^^]\[ZYXWWVTTSRQPONMMKKJIHGGEDCCAA??>==;:998765432100/.-,+*))''%%##"! ’‘‹‹‰ˆˆ‡†…„„‚‚€~}|{{yxxwvutssrpponmlkjihggfedcbaa`^^\\[ZYXXVUTTSRQPONNMLKJIHGFEDCBBA@?>=<;;98876543221//.-,+**((&&%$#"" ‘ŒŒ‹Š‰ˆ‡‡†„ƒƒ€~}|{{zyxwvutssrppommlkjihhfeedcbba__^\\[ZYYWVVUSSRQQONNMKKIIHGFFDCCAA@?>><;;998765432100..-,+*))(&&%$#"!! Ž‹‹Š‰‰ˆ†……„ƒ‚€~}|{{yyxwvutssrpponmlkjiiggfedcbba__^]\[ZZXWVUUTSRQPONNLLKJJHGFEDCCBA@@>=<;;:98765432200/.--+*)(('&%$#"! ŽŽŒ‹ŠŠ‰‰ˆ‡…„ƒƒ‚€~}|{{zxxwvutsrrpponmlkjiihffedccaa__^]\[ZYYWWVUTSRQPONMMLKJIHGGEEDCBAA??>=;;:98765433110/.-,,+*)('&%$#"! ŽŒ‹ŠŠ‰‡††…ƒƒ‚€€~~||{yyxwvutssrqponmmkjiihgfeddca`__^]\[ZZXWWVTTSRQQPNNMLKJJHHGFECCBA@??>=<;:98775543210/.-,++)(('&&%$#"! ŽŒŒŠŠˆ‡†……„ƒ‚}}|{zyxwwuttrrqponnlkjjihgfeddbb``_^]\[ZZYXVVUTSRQQONNMLKJIIGGFEDCBAA@>=<<;998776443200//--,+*)(''%$#"! Œ‹Š‰‰‡‡…„„ƒ‚€€~}|{zyxwvvutsqqpoommlkihhggfeccba`_^]\\ZZYXWVUUSRRQPONMLKKIHHFFEDCBB@??==<;:99866533210/..-,+*)('&&$$#!!Œ‹‹Šˆ‡††…„ƒ‚‚€~}}|{zzyxvuttsrqponmmlkiihggeedcba`_^^\[ZZYXWVUTSSQPPONMLKJJIGFFEDCBB@?>>=<;:99775543211/..-++))('&%$##"! ŒŠŠ‰‡†…„„„‚‚€~~}|{{yxwvuttsrqponmmljjihgfeddcba`_^^][[ZYXWWUTSSQQPONMLKJJHGGFEDCCAA@?==<;:988765432100.--,+*))(&%%$#"! ŠŠ‰ˆ†……„ƒ‚~~}|{zyxxwuttsrqponnmlkjiihffddcba`_^]]\ZZYXWWUTTRRQPONMMLKJIHFFEDCBAA@?><<;:99866543311//-,,+*))''%$$#"!!Šˆˆ‡†…„„ƒ}}|{{yyxwvutsrqponmllkjihggeddcba`_^^]\[ZYXXWUUTRQPPONMMKKJIHGFEEDBAA@?>=<;;:9876544211//.-,+*)('&&%#""! ‰ˆ‡†…„ƒ‚‚€~}|{zzxxwvuttsqqponmlkjihgffecbba`_^^]\[ZYXWVVTSSRQPONMMKKJIHGFEDDBA@@?>==;;98776443210/..,,+**)''&$##"! ˆ‡††„ƒ‚€€~}|{zyxwwvutsrqpoonmlkjihhffddcba``^^]\[ZYXXWVTTSQQPPNMMKJJIHGFEDDBAA@?>=<<:99876544311//.,,+*)(('%$$#"! ‡†…„ƒƒ€€~}|{{yyxwvutssqqpnnmlkjihhgeedcbba`_^]\[ZYXXVVTSSQQPOONMKKJIHGFEDDBAA@?>>=<;:98765433200/.-,+**)''&%$#""! †…„„ƒ‚€~}|{{zxxwvutsrrqponmmkjjiggfedcba``_^]\[ZYYWVUUTSRQPPOMLLKJIIGFEEDBBA@?>=<;;998776542210/..,,+))''%%%#"! †…„ƒ‚€~~|{{zyxwvuussrpponmlljiihgfeddbba`_^]\[ZYYXVVUTSRQPPOMMLKJJHGGEEDCBA@?>=<<;:98866533200/.--++))('&%$##!  \ No newline at end of file diff --git a/autotest/gdrivers/data/blx/s4103.blx b/autotest/gdrivers/data/blx/s4103.blx deleted file mode 100644 index c8a3fe4bca1f..000000000000 Binary files a/autotest/gdrivers/data/blx/s4103.blx and /dev/null differ diff --git a/autotest/gdrivers/data/blx/s4103.xlb b/autotest/gdrivers/data/blx/s4103.xlb deleted file mode 100644 index 86a9f49fa127..000000000000 Binary files a/autotest/gdrivers/data/blx/s4103.xlb and /dev/null differ diff --git a/autotest/gdrivers/data/elas/byte_elas.bin b/autotest/gdrivers/data/elas/byte_elas.bin deleted file mode 100644 index 873a904bfcfb..000000000000 Binary files a/autotest/gdrivers/data/elas/byte_elas.bin and /dev/null differ diff --git a/autotest/gdrivers/data/gsg/gsg_ascii.grd b/autotest/gdrivers/data/gsg/gsg_ascii.grd deleted file mode 100644 index 73e272d3a7a3..000000000000 --- a/autotest/gdrivers/data/gsg/gsg_ascii.grd +++ /dev/null @@ -1,65 +0,0 @@ -DSAA -20 20 -440750 441890 -3750150 3751290 -74 255 -181 181 156 148 156 156 156 181 132 148 -115 132 107 107 107 107 107 115 99 107 - -173 247 255 206 132 107 140 123 148 132 -165 165 148 140 132 123 107 123 107 123 - -156 181 140 173 123 132 99 115 123 74 -115 99 123 140 156 132 165 140 140 99 - -189 173 140 140 165 115 132 90 99 115 -90 99 99 107 99 132 99 107 132 132 - -165 148 156 123 107 107 107 115 140 99 -115 99 99 107 115 132 115 90 123 115 - -140 107 140 90 107 115 107 90 99 123 -115 115 115 123 123 148 115 148 99 132 - -148 132 132 107 123 99 99 115 99 132 -99 140 115 148 123 99 132 123 148 140 - -173 148 99 123 123 107 123 99 107 189 -173 107 115 115 107 99 140 107 173 140 - -123 123 123 107 140 123 123 115 115 90 -107 173 107 107 107 107 99 132 123 115 - -132 132 132 123 99 132 123 107 148 99 -115 123 140 173 123 107 123 123 123 107 - -140 140 99 140 99 115 123 107 132 107 -115 107 115 123 132 123 107 123 132 132 - -123 115 132 115 123 132 115 132 132 123 -123 132 99 115 99 123 132 115 115 107 - -148 123 148 115 148 123 140 123 107 115 -132 115 107 115 99 123 99 181 99 107 - -197 173 148 140 140 132 99 132 123 115 -140 132 132 99 132 123 132 173 123 115 - -189 173 173 148 148 115 148 123 107 132 -115 132 156 99 123 115 132 132 206 107 - -132 156 132 140 132 132 115 115 115 123 -148 123 165 123 132 107 107 132 156 123 - -148 132 123 123 115 132 132 123 115 123 -115 123 107 115 148 107 115 140 115 132 - -115 132 140 132 123 115 140 107 140 115 -132 123 107 132 132 115 115 107 115 107 - -115 132 107 123 148 115 165 115 140 107 -123 123 99 132 123 132 132 132 99 156 - -107 123 132 115 132 132 140 132 132 132 -107 132 107 132 132 107 123 115 156 148 - diff --git a/autotest/gdrivers/data/gsg/gsg_binary.grd b/autotest/gdrivers/data/gsg/gsg_binary.grd deleted file mode 100644 index 2deff0e48842..000000000000 Binary files a/autotest/gdrivers/data/gsg/gsg_binary.grd and /dev/null differ diff --git a/autotest/gdrivers/data/r/r_test.asc b/autotest/gdrivers/data/r/r_test.asc deleted file mode 100644 index b151184ec205..000000000000 --- a/autotest/gdrivers/data/r/r_test.asc +++ /dev/null @@ -1,64 +0,0 @@ -RDA2 -A -2 -133377 -131840 -1026 -1 -4105 -2 -gg -526 -40 -107 -123 -132 -115 -115 -132 -107 -123 -115 -132 -140 -132 -148 -132 -123 -123 -132 -156 -132 -140 -107 -123 -132 -115 -115 -132 -107 -123 -115 -132 -140 -132 -148 -132 -123 -123 -132 -156 -132 -140 -1026 -1 -4105 -3 -dim -13 -3 -4 -5 -2 -254 -254 diff --git a/autotest/gdrivers/data/r/r_test.rdb b/autotest/gdrivers/data/r/r_test.rdb deleted file mode 100644 index 177a2e9d8fca..000000000000 Binary files a/autotest/gdrivers/data/r/r_test.rdb and /dev/null differ diff --git a/autotest/gdrivers/data/rasterlite/byte.rasterlite b/autotest/gdrivers/data/rasterlite/byte.rasterlite deleted file mode 100644 index 127347c31bcd..000000000000 Binary files a/autotest/gdrivers/data/rasterlite/byte.rasterlite and /dev/null differ diff --git a/autotest/gdrivers/data/rasterlite/byte.rasterlite.sql b/autotest/gdrivers/data/rasterlite/byte.rasterlite.sql deleted file mode 100644 index 8e9a39ed6a0b..000000000000 --- a/autotest/gdrivers/data/rasterlite/byte.rasterlite.sql +++ /dev/null @@ -1,11 +0,0 @@ --- SQL RASTERLITE -CREATE TABLE spatial_ref_sys (srid INTEGER PRIMARY KEY,auth_name,auth_srid,ref_sys_name,proj4text,srtext); -INSERT INTO spatial_ref_sys VALUES(26711,'epsg',26711,'NAD27 / UTM zone 11N','+proj=utm +zone=11 +datum=NAD27 +units=m +no_defs','PROJCS["NAD27 / UTM zone 11N",GEOGCS[NAD27,DATUM[North_American_Datum_1927,SPHEROID["Clarke 1866",6378206.4,294.9786982138982]],UNIT[degree,0.0174532925199433]],PROJECTION[Transverse_Mercator],PARAMETER[central_meridian,-117],PARAMETER[scale_factor,0.9996],PARAMETER[false_easting,500000],AUTHORITY[EPSG,26711]]'); -CREATE TABLE geometry_columns (f_table_name,f_geometry_column,geometry_type,coord_dimension,srid,spatial_index_enabled); -INSERT INTO geometry_columns VALUES('byte_metadata','geometry',3,2,26711,1); -CREATE TABLE byte_rasters (id INTEGER PRIMARY KEY,raster); -INSERT INTO byte_rasters VALUES(1,X'49492A00080000000B000001030001000000140000000101030001000000140000000201030001000000080000000301030001000000010000000601030001000000010000001101040001000000920000001501030001000000010000001601030001000000140000001701040001000000900100001C0103000100000001000000530103000100000001000000000000006B7B847384848C8484846B846B84846B7B739C9473846B7B9473A5738C6B7B7B63847B848484639C73848C847B738C6B8C73847B6B848473736B736B94847B7B7384847B737B737B6B73946B738C7384849C848C84847373737B947BA57B846B6B849C7BBDADAD949473947B6B8473849C637B738484CE6BC5AD948C8C8463847B738C848463847B84AD7B73947B9473947B8C7B6B7384736B73637B63B5636B7B7384737B847384847B7B846373637B8473736B8C8C638C63737B6B846B736B737B847B6B7B84848484847B63847B6B9463737B8CAD7B6B7B7B7B6B7B7B7B6B8C7B7B73735A6BAD6B6B6B6B63847B73AD94637B7B6B7B636BBDAD6B73736B638C6BAD8C9484846B7B6363736384638C73947B63847B948C8C6B8C5A6B736B5A637B7373737B7B9473946384A5949C7B6B6B6B738C637363636B7384735A7B73BDAD8C8CA573845A63735A63636B6384636B84849CB58CAD7B8463737B4A73637B8C9C84A58C8C63ADF7FFCE846B8C7B9484A5A5948C847B6B7B6B7BB5B59C949C9C9CB5849473846B6B6B6B6B73636B'); -CREATE TABLE byte_metadata (id INTEGER PRIMARY KEY,tile_id,width,height,pixel_x_size,pixel_y_size,geometry POLYGON); -INSERT INTO byte_metadata VALUES(1,0,20,20,60.0,60.0,X'0001576800000000000040E61A4100000000749C4C410000000000F91A4100000000CC9E4C417C0300000001000000050000000000000040E61A4100000000749C4C410000000040E61A4100000000CC9E4C410000000000F91A4100000000CC9E4C410000000000F91A4100000000749C4C410000000040E61A4100000000749C4C41FE'); -CREATE VIRTUAL TABLE idx_byte_metadata_geometry USING rtree(pkid, xmin, xmax, ymin, ymax); -INSERT INTO idx_byte_metadata_geometry SELECT rowid, ST_MinX(geometry), ST_MaxX(geometry), ST_MinY(geometry), ST_MaxY(geometry) FROM byte_metadata; diff --git a/autotest/gdrivers/data/rasterlite/rasterlite.sqlite b/autotest/gdrivers/data/rasterlite/rasterlite.sqlite deleted file mode 100644 index bc9bacbec793..000000000000 Binary files a/autotest/gdrivers/data/rasterlite/rasterlite.sqlite and /dev/null differ diff --git a/autotest/gdrivers/data/rasterlite/rasterlite_pct.sqlite b/autotest/gdrivers/data/rasterlite/rasterlite_pct.sqlite deleted file mode 100644 index b24fb9eab839..000000000000 Binary files a/autotest/gdrivers/data/rasterlite/rasterlite_pct.sqlite and /dev/null differ diff --git a/autotest/gdrivers/data/rasterlite/rasterlite_pyramids.sqlite b/autotest/gdrivers/data/rasterlite/rasterlite_pyramids.sqlite deleted file mode 100644 index 8d0ac323b97b..000000000000 Binary files a/autotest/gdrivers/data/rasterlite/rasterlite_pyramids.sqlite and /dev/null differ diff --git a/autotest/gdrivers/data/sgi/byte.sgi b/autotest/gdrivers/data/sgi/byte.sgi deleted file mode 100644 index 241038682446..000000000000 Binary files a/autotest/gdrivers/data/sgi/byte.sgi and /dev/null differ diff --git a/autotest/gdrivers/data/zarr/generate_test_files.py b/autotest/gdrivers/data/zarr/generate_test_files.py index 73d41ce15ce0..978efb80c070 100644 --- a/autotest/gdrivers/data/zarr/generate_test_files.py +++ b/autotest/gdrivers/data/zarr/generate_test_files.py @@ -16,7 +16,7 @@ import numpy as np import zarr -from numcodecs import LZ4, LZMA, Blosc, GZip, Zlib, Zstd +from numcodecs import LZ4, LZMA, Blosc, GZip, Shuffle, Zlib, Zstd os.chdir(os.path.dirname(__file__)) @@ -69,6 +69,17 @@ ) z[:] = [1, 2] +z = zarr.open( + "shuffle.zarr", + mode="w", + dtype="u2", + shape=(2,), + chunks=(2,), + compressor=None, + filters=[Shuffle(elementsize=2)], +) +z[:] = [1, 2] + z = zarr.open( "order_f_u1.zarr", diff --git a/autotest/gdrivers/data/zarr/shuffle.zarr/.zarray b/autotest/gdrivers/data/zarr/shuffle.zarr/.zarray new file mode 100644 index 000000000000..39be4ee62653 --- /dev/null +++ b/autotest/gdrivers/data/zarr/shuffle.zarr/.zarray @@ -0,0 +1,19 @@ +{ + "chunks": [ + 2 + ], + "compressor": null, + "dtype": " -# -############################################################################### -# Copyright (c) 2009, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - -import gdaltest -import pytest - -pytestmark = pytest.mark.require_driver("DIPEx") - -############################################################################### -# Test a fake DIPex dataset - - -def test_dipex_1(): - - tst = gdaltest.GDALTest("DIPEx", "dipex/fakedipex.dat", 1, 1) - tst.testOpen() diff --git a/autotest/gdrivers/elas.py b/autotest/gdrivers/elas.py deleted file mode 100755 index baff705655a6..000000000000 --- a/autotest/gdrivers/elas.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test ELAS driver -# Author: Even Rouault, -# -############################################################################### -# Copyright (c) 2009, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - - -import gdaltest - -############################################################################### -# Test a dataset generated by Create() - - -def test_elas_1(): - - tst = gdaltest.GDALTest("ELAS", "elas/byte_elas.bin", 1, 4672) - tst.testOpen() - - -############################################################################### -# Test Create() - - -def test_elas_2(): - - tst = gdaltest.GDALTest("ELAS", "elas/byte_elas.bin", 1, 4672) - tst.testCreate() diff --git a/autotest/gdrivers/fit.py b/autotest/gdrivers/fit.py deleted file mode 100755 index 654f8cf19732..000000000000 --- a/autotest/gdrivers/fit.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test read functionality for FIT driver. -# Author: Even Rouault -# -############################################################################### -# Copyright (c) 2008, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - -import pytest - -from osgeo import gdal - -pytestmark = pytest.mark.require_driver("FIT") - - -@pytest.mark.parametrize( - "filename", ["byte", "int16", "uint16", "int32", "uint32", "float32", "float64"] -) -def test_fit(filename): - fitDriver = gdal.GetDriverByName("FIT") - - ds = gdal.Open("../gcore/data/" + filename + ".tif") - fitDriver.CreateCopy("tmp/" + filename + ".fit", ds, options=["PAGESIZE=2,2"]) - - ds2 = gdal.Open("tmp/" + filename + ".fit") - assert ds2.GetRasterBand(1).Checksum() == ds.GetRasterBand(1).Checksum() - - assert ds2.GetRasterBand(1).DataType == ds.GetRasterBand(1).DataType - ds2 = None diff --git a/autotest/gdrivers/gsg.py b/autotest/gdrivers/gsg.py index 8773e5e1b671..6fb025393bae 100755 --- a/autotest/gdrivers/gsg.py +++ b/autotest/gdrivers/gsg.py @@ -18,49 +18,12 @@ # Perform simple read tests. -def test_gsg_1(): - - tst = gdaltest.GDALTest("gsbg", "gsg/gsg_binary.grd", 1, 4672) - tst.testOpen(check_gt=(440720, 60, 0, 3751320, 0, -60)) - - -def test_gsg_2(): - - tst = gdaltest.GDALTest("gsag", "gsg/gsg_ascii.grd", 1, 4672) - tst.testOpen(check_gt=(440720, 60, 0, 3751320, 0, -60)) - - def test_gsg_3(): tst = gdaltest.GDALTest("gs7bg", "gsg/gsg_7binary.grd", 1, 4672) tst.testOpen(check_gt=(440720, 60, 0, 3751320, 0, -60)) -############################################################################### -# Create simple copy and check. - - -def test_gsg_4(): - - tst = gdaltest.GDALTest("gsbg", "gsg/gsg_binary.grd", 1, 4672) - - tst.testCreateCopy(check_gt=1) - - -def test_gsg_5(): - - tst = gdaltest.GDALTest("gsag", "gsg/gsg_ascii.grd", 1, 4672) - - tst.testCreateCopy(check_gt=1) - - -def test_gsg_6(): - - tst = gdaltest.GDALTest("gsbg", "gsg/gsg_binary.grd", 1, 4672) - - tst.testCreate(out_bands=1) - - def test_gsg_7(): tst = gdaltest.GDALTest("gs7bg", "gsg/gsg_7binary.grd", 1, 4672) diff --git a/autotest/gdrivers/isis2.py b/autotest/gdrivers/isis2.py index 94657211d39b..56845f8fd4a5 100755 --- a/autotest/gdrivers/isis2.py +++ b/autotest/gdrivers/isis2.py @@ -47,31 +47,3 @@ def test_isis2_1(): -1200.0000476837158, ) tst.testOpen(check_prj=expected_prj, check_gt=expected_gt) - - -############################################################################### -# Test simple creation on disk. - - -def test_isis2_2(): - - tst = gdaltest.GDALTest("ISIS2", "byte.tif", 1, 4672) - - tst.testCreate() - - -############################################################################### -# Test a different data type with some options. - - -def test_isis2_3(): - - tst = gdaltest.GDALTest( - "ISIS2", - "float32.tif", - 1, - 4672, - options=["LABELING_METHOD=DETACHED", "IMAGE_EXTENSION=qub"], - ) - - tst.testCreateCopy(vsimem=1) diff --git a/autotest/gdrivers/mff2.py b/autotest/gdrivers/mff2.py index f6c096387438..7c57ad4b5ec7 100755 --- a/autotest/gdrivers/mff2.py +++ b/autotest/gdrivers/mff2.py @@ -24,14 +24,3 @@ def test_mff2_1(): tst = gdaltest.GDALTest("MFF2", "mff2/bytemff2", 1, 4672) tst.testOpen() - - -############################################################################### -# Test writing a MFF2 file - - -def test_mff2_write(): - - with gdaltest.config_option("GDAL_PAM_ENABLED", "NO"): - tst = gdaltest.GDALTest("MFF2", "mff2/bytemff2", 1, 4672) - tst.testCreateCopy(check_srs=True) diff --git a/autotest/gdrivers/ntv2.py b/autotest/gdrivers/ntv2.py index 8f930746c3a9..08d109c2d46a 100755 --- a/autotest/gdrivers/ntv2.py +++ b/autotest/gdrivers/ntv2.py @@ -16,8 +16,6 @@ import gdaltest import pytest -from osgeo import gdal - pytestmark = pytest.mark.require_driver("NTV2") ############################################################################### @@ -42,95 +40,6 @@ def test_ntv2_2(): tst.testOpen(check_gt=gt, check_prj="WGS84") -############################################################################### -# Test creating a little-endian NTv2 grid - - -def test_ntv2_3(): - - tst = gdaltest.GDALTest( - "NTV2", "ntv2/test_ntv2_le.gsb", 2, 10, options=["ENDIANNESS=LE"] - ) - tst.testCreateCopy(vsimem=1) - - -############################################################################### -# Test creating a big-endian NTv2 grid - - -def test_ntv2_4(): - - tst = gdaltest.GDALTest( - "NTV2", "ntv2/test_ntv2_le.gsb", 2, 10, options=["ENDIANNESS=BE"] - ) - tst.testCreateCopy(vsimem=1) - - -############################################################################### -# Test appending to a little-endian NTv2 grid - - -def test_ntv2_5(): - - src_ds = gdal.Open("data/ntv2/test_ntv2_le.gsb") - gdal.GetDriverByName("NTv2").Create( - "/vsimem/ntv2_5.gsb", 1, 1, 4, gdal.GDT_Float32, options=["ENDIANNESS=LE"] - ) - ds = gdal.GetDriverByName("NTv2").CreateCopy( - "/vsimem/ntv2_5.gsb", src_ds, options=["APPEND_SUBDATASET=YES"] - ) - assert ds.FlushCache() == gdal.CE_None - assert ds.GetRasterBand(2).Checksum() == 10 - ds = None - ds = gdal.Open("NTv2:1:/vsimem/ntv2_5.gsb") - assert ds.GetRasterBand(2).Checksum() == 10 - ds = None - gdal.GetDriverByName("NTv2").Delete("/vsimem/ntv2_5.gsb") - - -############################################################################### -# Test appending to a big-endian NTv2 grid - - -def test_ntv2_6(): - - src_ds = gdal.Open("data/ntv2/test_ntv2_le.gsb") - gdal.GetDriverByName("NTv2").Create( - "/vsimem/ntv2_6.gsb", 1, 1, 4, gdal.GDT_Float32, options=["ENDIANNESS=BE"] - ) - ds = gdal.GetDriverByName("NTv2").CreateCopy( - "/vsimem/ntv2_6.gsb", src_ds, options=["APPEND_SUBDATASET=YES"] - ) - assert ds.GetRasterBand(2).Checksum() == 10 - ds = None - ds = gdal.Open("NTv2:1:/vsimem/ntv2_6.gsb") - assert ds.GetRasterBand(2).Checksum() == 10 - ds = None - gdal.GetDriverByName("NTv2").Delete("/vsimem/ntv2_6.gsb") - - -############################################################################### -# Test creating a file with invalid filename - - -def test_ntv2_7(): - - with pytest.raises(Exception): - gdal.GetDriverByName("NTv2").Create( - "/does/not/exist.gsb", 1, 1, 4, gdal.GDT_Float32 - ) - - with pytest.raises(Exception): - gdal.GetDriverByName("NTv2").Create( - "/does/not/exist.gsb", - 1, - 1, - 4, - gdal.GDT_Float32, - options=["APPEND_SUBDATASET=YES"], - ) - - ############################################################################### @@ -150,35 +59,3 @@ def test_ntv2_online_1(): ) gt = (165.95, 0.1, 0.0, -33.95, 0.0, -0.1) tst.testOpen(check_gt=gt, check_prj="WGS84") - - -############################################################################### - - -def test_ntv2_online_2(): - - try: - os.stat("tmp/cache/nzgd2kgrid0005.gsb") - except OSError: - pytest.skip() - - tst = gdaltest.GDALTest( - "NTV2", "tmp/cache/nzgd2kgrid0005.gsb", 1, 54971, filename_absolute=1 - ) - tst.testCreateCopy(vsimem=1) - - -############################################################################### - - -def test_ntv2_online_3(): - - try: - os.stat("tmp/cache/nzgd2kgrid0005.gsb") - except OSError: - pytest.skip() - - tst = gdaltest.GDALTest( - "NTV2", "tmp/cache/nzgd2kgrid0005.gsb", 1, 54971, filename_absolute=1 - ) - tst.testCreate(vsimem=1, out_bands=4) diff --git a/autotest/gdrivers/paux.py b/autotest/gdrivers/paux.py index eb27fa7edc22..c3095354e569 100755 --- a/autotest/gdrivers/paux.py +++ b/autotest/gdrivers/paux.py @@ -14,8 +14,6 @@ import gdaltest import pytest -from osgeo import gdal - pytestmark = pytest.mark.require_driver("PAUX") ############################################################################### @@ -26,35 +24,3 @@ def test_paux_1(): tst = gdaltest.GDALTest("PAux", "paux/small16.raw", 2, 12816) tst.testOpen() - - -############################################################################### -# Test copying. - - -def test_paux_2(): - - tst = gdaltest.GDALTest("PAux", "byte.tif", 1, 4672) - - tst.testCreateCopy(check_gt=1) - - -############################################################################### -# Test /vsimem based. - - -def test_paux_3(): - - tst = gdaltest.GDALTest("PAux", "byte.tif", 1, 4672) - - tst.testCreateCopy(vsimem=1) - - -############################################################################### -# Cleanup. - - -def test_paux_cleanup(): - gdaltest.clean_tmp() - if gdal.VSIStatL("/vsimem/byte.tif.tst.aux.xml") is not None: - gdal.Unlink("/vsimem/byte.tif.tst.aux.xml") diff --git a/autotest/gdrivers/r.py b/autotest/gdrivers/r.py deleted file mode 100755 index ec02766b8abe..000000000000 --- a/autotest/gdrivers/r.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test R driver support. -# Author: Frank Warmerdam -# -############################################################################### -# Copyright (c) 2009, Frank Warmerdam -# -# SPDX-License-Identifier: MIT -############################################################################### - - -import gdaltest - -############################################################################### -# Perform simple read test on an ascii file. - - -def test_r_1(): - - tst = gdaltest.GDALTest("R", "r/r_test.asc", 2, 202) - - tst.testOpen() - - -############################################################################### -# Perform a simple read test on a binary (uncompressed) file. - - -def test_r_2(): - - tst = gdaltest.GDALTest("R", "r/r_test.rdb", 1, 202) - tst.testOpen() - - -############################################################################### -# Verify a simple createcopy operation with 16bit data. - - -def test_r_3(): - - tst = gdaltest.GDALTest("R", "byte.tif", 1, 4672, options=["ASCII=YES"]) - tst.testCreateCopy() - - -############################################################################### -# Test creating a compressed binary stream and reading it back. - - -def test_r_4(): - - tst = gdaltest.GDALTest("R", "byte.tif", 1, 4672) - return tst.testCreateCopy(new_filename="tmp/r_4.rda") - - -############################################################################### diff --git a/autotest/gdrivers/rasterlite.py b/autotest/gdrivers/rasterlite.py deleted file mode 100755 index 2f9f8d1ce5aa..000000000000 --- a/autotest/gdrivers/rasterlite.py +++ /dev/null @@ -1,355 +0,0 @@ -#!/usr/bin/env pytest -# -*- coding: utf-8 -*- -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test read functionality for Rasterlite driver. -# Author: Even Rouault, -# -############################################################################### -# Copyright (c) 2009-2013, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - -import gdaltest -import pytest - -from osgeo import gdal, ogr - -pytestmark = pytest.mark.require_driver("RASTERLITE") - - -@pytest.fixture(scope="module", autouse=True) -def setup(): - - # This is to speed-up the runtime of tests on EXT4 filesystems - # Do not use this for production environment if you care about data safety - # w.r.t system/OS crashes, unless you know what you are doing. - with gdal.config_option("OGR_SQLITE_SYNCHRONOUS", "OFF"): - yield - - -def has_spatialite(): - drv = ogr.GetDriverByName("SQLite") - return drv is not None and "SPATIALITE" in drv.GetMetadataItem( - "DMD_CREATIONOPTIONLIST" - ) - - -def sqlite_supports_rtree(tmp_path): - # Test if SQLite3 supports rtrees - ds2 = ogr.GetDriverByName("SQLite").CreateDataSource( - str(tmp_path / "testrtree.sqlite") - ) - gdal.ErrorReset() - ds2.ExecuteSQL("CREATE VIRTUAL TABLE testrtree USING rtree(id,minX,maxX,minY,maxY)") - - return "rtree" not in gdal.GetLastErrorMsg() - - -def sqlite_supports_rasterlite(): - - gdal.ErrorReset() - gdal.Open("data/rasterlite/rasterlite.sqlite") - - return "unsupported file format" not in gdal.GetLastErrorMsg() - - -############################################################################### -# Test opening a rasterlite DB without overviews - - -def test_rasterlite_2(tmp_path): - - if not sqlite_supports_rtree(tmp_path): - pytest.skip( - "Please upgrade your sqlite3 library to be able to read Rasterlite DBs (needs rtree support)!" - ) - - if not sqlite_supports_rasterlite(): - pytest.skip( - "Please upgrade your sqlite3 library to be able to read Rasterlite DBs!" - ) - - ds = gdal.Open("data/rasterlite/rasterlite.sqlite") - - if ds is None: - pytest.fail() - - assert ds.RasterCount == 3, "expected 3 bands" - - assert ds.GetRasterBand(1).GetOverviewCount() == 0, "did not expect overview" - - cs = ds.GetRasterBand(1).Checksum() - expected_cs = 11746 - assert ( - cs == expected_cs or cs == 11751 - ), "for band 1, cs = %d, different from expected_cs = %d" % (cs, expected_cs) - - cs = ds.GetRasterBand(2).Checksum() - expected_cs = 19843 - assert ( - cs == expected_cs or cs == 20088 or cs == 20083 - ), "for band 2, cs = %d, different from expected_cs = %d" % (cs, expected_cs) - - cs = ds.GetRasterBand(3).Checksum() - expected_cs = 48911 - assert ( - cs == expected_cs or cs == 47978 - ), "for band 3, cs = %d, different from expected_cs = %d" % (cs, expected_cs) - - assert ds.GetProjectionRef().find("WGS_1984") != -1, ( - "projection_ref = %s" % ds.GetProjectionRef() - ) - - gt = ds.GetGeoTransform() - expected_gt = ( - -180.0, - 360.0 / ds.RasterXSize, - 0.0, - 90.0, - 0.0, - -180.0 / ds.RasterYSize, - ) - - gdaltest.check_geotransform(gt, expected_gt, 1e-15) - - ds = None - - -############################################################################### -# Test opening a rasterlite DB with overviews - - -def test_rasterlite_3(): - - ds = gdal.Open("RASTERLITE:data/rasterlite/rasterlite_pyramids.sqlite,table=test") - - assert ds.RasterCount == 3, "expected 3 bands" - - assert ds.GetRasterBand(1).GetOverviewCount() == 1, "expected 1 overview" - - cs = ds.GetRasterBand(1).GetOverview(0).Checksum() - expected_cs = 59551 - assert ( - cs == expected_cs or cs == 59833 - ), "for overview of band 1, cs = %d, different from expected_cs = %d" % ( - cs, - expected_cs, - ) - - cs = ds.GetRasterBand(2).GetOverview(0).Checksum() - expected_cs = 59603 - assert ( - cs == expected_cs or cs == 59588 - ), "for overview of band 2, cs = %d, different from expected_cs = %d" % ( - cs, - expected_cs, - ) - - cs = ds.GetRasterBand(3).GetOverview(0).Checksum() - expected_cs = 42173 - assert ( - cs == expected_cs or cs == 42361 - ), "for overview of band 3, cs = %d, different from expected_cs = %d" % ( - cs, - expected_cs, - ) - - ds = None - - -############################################################################### -# Test opening a rasterlite DB with color table and user-defined spatial extent - - -def test_rasterlite_4(): - - ds = gdal.Open( - "RASTERLITE:data/rasterlite/rasterlite_pct.sqlite,minx=0,miny=0,maxx=180,maxy=90" - ) - - assert ds.RasterCount == 1, "expected 1 band" - - assert ds.RasterXSize == 169 and ds.RasterYSize == 85 - - ct = ds.GetRasterBand(1).GetRasterColorTable() - assert ct is not None, "did not get color table" - - cs = ds.GetRasterBand(1).Checksum() - expected_cs = 36473 - assert cs == expected_cs, "for band 1, cs = %d, different from expected_cs = %d" % ( - cs, - expected_cs, - ) - - ds = None - - -############################################################################### -# Test opening a rasterlite DB with color table and do color table expansion - - -def test_rasterlite_5(): - - ds = gdal.Open("RASTERLITE:data/rasterlite/rasterlite_pct.sqlite,bands=3") - - assert ds.RasterCount == 3, "expected 3 bands" - - ct = ds.GetRasterBand(1).GetRasterColorTable() - assert ct is None, "did not expect color table" - - cs = ds.GetRasterBand(1).Checksum() - expected_cs = 506 - assert cs == expected_cs, "for band 1, cs = %d, different from expected_cs = %d" % ( - cs, - expected_cs, - ) - - cs = ds.GetRasterBand(2).Checksum() - expected_cs = 3842 - assert cs == expected_cs, "for band 2, cs = %d, different from expected_cs = %d" % ( - cs, - expected_cs, - ) - - cs = ds.GetRasterBand(3).Checksum() - expected_cs = 59282 - assert cs == expected_cs, "for band 3, cs = %d, different from expected_cs = %d" % ( - cs, - expected_cs, - ) - - ds = None - - -############################################################################### -# Test CreateCopy() - - -@pytest.fixture() -def byte_sqlite(tmp_path): - byte_sqlite_path = str(tmp_path / "byte.sqlite") - byte_sqlite_dsn = f"RASTERLITE:{byte_sqlite_path},table=byte" - - with gdal.Open("data/byte.tif") as src_ds: - ds = gdal.GetDriverByName("RASTERLITE").CreateCopy(byte_sqlite_dsn, src_ds) - assert ds is not None - del ds - - return byte_sqlite_dsn - - -@pytest.mark.skipif(not has_spatialite(), reason="spatialite not available") -def test_rasterlite_6(byte_sqlite): - - # Test result of CreateCopy() - ds = gdal.Open(byte_sqlite) - assert ds is not None - - with gdal.Open("data/byte.tif") as src_ds: - assert ( - ds.GetRasterBand(1).Checksum() == src_ds.GetRasterBand(1).Checksum() - ), "Wrong checksum" - - expected_gt = src_ds.GetGeoTransform() - gt = ds.GetGeoTransform() - - gdaltest.check_geotransform(gt, expected_gt, 1e-5) - - assert "NAD27 / UTM zone 11N" in ds.GetProjectionRef(), "Wrong SRS" - - ds = None - - -############################################################################### -# Test BuildOverviews() - - -@pytest.mark.skipif(not has_spatialite(), reason="spatialite not available") -def test_rasterlite_7(byte_sqlite): - - ds = gdal.Open(byte_sqlite, gdal.GA_Update) - - # Resampling method is not taken into account - ds.BuildOverviews("NEAREST", overviewlist=[2, 4]) - - assert ( - ds.GetRasterBand(1).GetOverview(0).Checksum() == 1192 - ), "Wrong checksum for overview 0" - - assert ( - ds.GetRasterBand(1).GetOverview(1).Checksum() == 233 - ), "Wrong checksum for overview 1" - - # Reopen and test - ds = None - ds = gdal.Open(byte_sqlite) - - assert ( - ds.GetRasterBand(1).GetOverview(0).Checksum() == 1192 - ), "Wrong checksum for overview 0" - - assert ( - ds.GetRasterBand(1).GetOverview(1).Checksum() == 233 - ), "Wrong checksum for overview 1" - - ############################################################################### - # Test CleanOverviews() - - ds = gdal.Open(byte_sqlite, gdal.GA_Update) - - ds.BuildOverviews(overviewlist=[]) - - assert ds.GetRasterBand(1).GetOverviewCount() == 0 - - -############################################################################### -# Test BuildOverviews() with AVERAGE resampling - - -@pytest.mark.skipif(not has_spatialite(), reason="spatialite not available") -def test_rasterlite_11(byte_sqlite): - - ds = gdal.Open(byte_sqlite, gdal.GA_Update) - - # Resampling method is not taken into account - ds.BuildOverviews("AVERAGE", overviewlist=[2, 4]) - - # Reopen and test - ds = None - ds = gdal.Open(byte_sqlite) - - assert ( - ds.GetRasterBand(1).GetOverview(0).Checksum() == 1152 - ), "Wrong checksum for overview 0" - - assert ( - ds.GetRasterBand(1).GetOverview(1).Checksum() == 215 - ), "Wrong checksum for overview 1" - - -############################################################################### -# Test opening a .rasterlite file - - -@pytest.mark.skipif(not has_spatialite(), reason="spatialite not available") -def test_rasterlite_12(): - - ds = gdal.Open("data/rasterlite/byte.rasterlite") - assert ds.GetRasterBand(1).Checksum() == 4672, "validation failed" - - -############################################################################### -# Test opening a .rasterlite.sql file - - -@pytest.mark.skipif(not has_spatialite(), reason="spatialite not available") -def test_rasterlite_13(): - - if gdaltest.rasterlite_drv.GetMetadataItem("ENABLE_SQL_SQLITE_FORMAT") != "YES": - pytest.skip() - - ds = gdal.Open("data/rasterlite/byte.rasterlite.sql") - assert ds.GetRasterBand(1).Checksum() == 4672, "validation failed" diff --git a/autotest/gdrivers/sdts.py b/autotest/gdrivers/sdts.py deleted file mode 100755 index 958c7bd212ea..000000000000 --- a/autotest/gdrivers/sdts.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test read/write functionality for SDTS driver. -# Author: Even Rouault -# -############################################################################### -# Copyright (c) 2008, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - -import gdaltest - -from osgeo import gdal, osr - -############################################################################### -# Test a truncated version of an SDTS DEM downloaded at -# http://thor-f5.er.usgs.gov/sdts/datasets/raster/dem/dem_oct_2001/1107834.dem.sdts.tar.gz - - -def test_sdts_1(): - - tst = gdaltest.GDALTest("SDTS", "STDS_1107834_truncated/1107CATD.DDF", 1, 61672) - srs = osr.SpatialReference() - srs.SetWellKnownGeogCS("NAD27") - srs.SetUTM(16) - tst.testOpen( - check_prj=srs.ExportToWkt(), - check_gt=(666015, 30, 0, 5040735, 0, -30), - check_filelist=False, - ) - - ds = gdal.Open("data/STDS_1107834_truncated/1107CATD.DDF") - md = ds.GetMetadata() - - assert md["TITLE"] == "ALANSON, MI-24000" diff --git a/autotest/gdrivers/sgi.py b/autotest/gdrivers/sgi.py deleted file mode 100755 index 5b4343e23f3c..000000000000 --- a/autotest/gdrivers/sgi.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: PNM (Portable Anyware Map) Testing. -# Author: Frank Warmerdam -# -############################################################################### -# Copyright (c) 2007, Frank Warmerdam -# -# SPDX-License-Identifier: MIT -############################################################################### - - -import gdaltest - -############################################################################### -# Read existing simple 1 band SGI file. - - -def test_sgi_1(): - - tst = gdaltest.GDALTest("SGI", "sgi/byte.sgi", 1, 4672) - - tst.testOpen() - - -############################################################################### -# Write Test grayscale - - -def test_sgi_2(): - - tst = gdaltest.GDALTest("SGI", "byte.tif", 1, 4672) - - tst.testCreate() - - -############################################################################### -# Write Test rgb - - -def test_sgi_3(): - - tst = gdaltest.GDALTest("SGI", "rgbsmall.tif", 2, 21053) - - tst.testCreate() diff --git a/autotest/gdrivers/usgsdem.py b/autotest/gdrivers/usgsdem.py index 87494d5dc63d..1379e8ff8ae7 100755 --- a/autotest/gdrivers/usgsdem.py +++ b/autotest/gdrivers/usgsdem.py @@ -16,7 +16,7 @@ import gdaltest import pytest -from osgeo import gdal, osr +from osgeo import osr pytestmark = pytest.mark.require_driver("USGSDEM") @@ -75,148 +75,6 @@ def test_usgsdem_3(): ) -############################################################################### -# Test CreateCopy() - - -def test_usgsdem_4(): - - tst = gdaltest.GDALTest( - "USGSDEM", - "usgsdem/39079G6_truncated.dem", - 1, - 61424, - options=["RESAMPLE=Nearest"], - ) - tst.testCreateCopy(check_gt=1, check_srs=1, vsimem=1) - - -############################################################################### -# Test CreateCopy() without any creation options - - -@pytest.mark.require_driver("DTED") -def test_usgsdem_5(): - - ds = gdal.Open("data/n43.dt0") - ds2 = gdal.GetDriverByName("USGSDEM").CreateCopy( - "tmp/n43.dem", ds, options=["RESAMPLE=Nearest"] - ) - - if ds.GetRasterBand(1).Checksum() != ds2.GetRasterBand(1).Checksum(): - print(ds2.GetRasterBand(1).Checksum()) - print(ds.GetRasterBand(1).Checksum()) - ds2 = None - print(open("tmp/n43.dem", "rb").read()) - pytest.fail("Bad checksum.") - - gt1 = ds.GetGeoTransform() - gt2 = ds2.GetGeoTransform() - for i in range(6): - if gt1[i] != pytest.approx(gt2[i], abs=1e-5): - print("") - print("old = ", gt1) - print("new = ", gt2) - pytest.fail("Geotransform differs.") - - srs = osr.SpatialReference() - srs.SetWellKnownGeogCS("WGS84") - assert ds2.GetProjectionRef() == srs.ExportToWkt(), "Bad SRS." - - ds2 = None - - -############################################################################### -# Test CreateCopy() without a few creation options. Then create a new copy with TEMPLATE -# creation option and check that both files are binary identical. - - -@pytest.mark.require_driver("DTED") -def test_usgsdem_6(): - - ds = gdal.Open("data/n43.dt0") - ds2 = gdal.GetDriverByName("USGSDEM").CreateCopy( - "tmp/file_1.dem", - ds, - options=[ - "PRODUCER=GDAL", - "OriginCode=GDAL", - "ProcessCode=A", - "RESAMPLE=Nearest", - ], - ) - - ds3 = gdal.GetDriverByName("USGSDEM").CreateCopy( - "tmp/file_2.dem", ds2, options=["TEMPLATE=tmp/file_1.dem", "RESAMPLE=Nearest"] - ) - - del ds2 - del ds3 - - f1 = open("tmp/file_1.dem", "rb") - f2 = open("tmp/file_2.dem", "rb") - - # Skip the 40 first bytes because the dataset name will differ - f1.seek(40, 0) - f2.seek(40, 0) - - data1 = f1.read() - data2 = f2.read() - - assert data1 == data2 - - f1.close() - f2.close() - - -############################################################################### -# Test CreateCopy() with CDED50K profile - - -@pytest.mark.require_driver("DTED") -def test_usgsdem_7(): - - ds = gdal.Open("data/n43.dt0") - - # To avoid warning about 'Unable to find NTS mapsheet lookup file: NTS-50kindex.csv' - with gdal.quiet_errors(): - ds2 = gdal.GetDriverByName("USGSDEM").CreateCopy( - "tmp/000a00DEMz", - ds, - options=[ - "PRODUCT=CDED50K", - "TOPLEFT=80w,44n", - "RESAMPLE=Nearest", - "ZRESOLUTION=1.1", - "INTERNALNAME=GDAL", - ], - ) - - assert ds2.RasterXSize == 1201 and ds2.RasterYSize == 1201, "Bad image dimensions." - - expected_gt = ( - -80.000104166666674, - 0.000208333333333, - 0, - 44.000104166666667, - 0, - -0.000208333333333, - ) - got_gt = ds2.GetGeoTransform() - for i in range(6): - if expected_gt[i] != pytest.approx(got_gt[i], abs=1e-5): - print("") - print("expected = ", expected_gt) - print("got = ", got_gt) - pytest.fail("Geotransform differs.") - - srs = osr.SpatialReference() - srs.SetWellKnownGeogCS("NAD83") - assert ds2.GetProjectionRef() == srs.ExportToWkt(), "Bad SRS." - - ds2 = None - - ############################################################################### # Test truncated version of http://download.osgeo.org/gdal/data/usgsdem/various.zip/39109h1.dem # Undocumented format diff --git a/autotest/gdrivers/xpm.py b/autotest/gdrivers/xpm.py deleted file mode 100755 index ae67f81158ba..000000000000 --- a/autotest/gdrivers/xpm.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test read/write functionality for XPM driver. -# Author: Even Rouault -# -############################################################################### -# Copyright (c) 2008, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - - -import gdaltest -import pytest - -from osgeo import gdal - -xpm_list = [("http://download.osgeo.org/gdal/data/xpm", "utm.xpm", 44206, -1)] - -pytestmark = pytest.mark.require_driver("XPM") - - -@pytest.mark.parametrize( - "downloadURL,fileName,checksum,download_size", - xpm_list, - ids=[item[1] for item in xpm_list], -) -def test_xpm(downloadURL, fileName, checksum, download_size): - gdaltest.download_or_skip(downloadURL + "/" + fileName, fileName, download_size) - - ds = gdal.Open("tmp/cache/" + fileName) - - assert ( - ds.GetRasterBand(1).Checksum() == checksum - ), "Bad checksum. Expected %d, got %d" % (checksum, ds.GetRasterBand(1).Checksum()) - - -def test_xpm_1(): - tst = gdaltest.GDALTest("XPM", "byte.tif", 1, 4583) - tst.testCreateCopy(vsimem=1, check_minmax=False) diff --git a/autotest/gdrivers/zarr_driver.py b/autotest/gdrivers/zarr_driver.py index a0587b58e9b4..4f9384d97442 100644 --- a/autotest/gdrivers/zarr_driver.py +++ b/autotest/gdrivers/zarr_driver.py @@ -16,6 +16,7 @@ import json import math import os +import shutil import struct import sys @@ -535,6 +536,36 @@ def test_zarr_read_compression_methods(datasetname, compressor): assert ar.Read() == array.array("b", [1, 2]) +def test_zarr_read_shuffle_filter(): + + filename = "data/zarr/shuffle.zarr" + ds = gdal.OpenEx(filename, gdal.OF_MULTIDIM_RASTER) + rg = ds.GetRootGroup() + assert rg + ar = rg.OpenMDArray(rg.GetMDArrayNames()[0]) + assert ar + assert ar.Read() == array.array("h", [1, 2]) + + +def test_zarr_read_shuffle_filter_update(tmp_path): + + out_filename = tmp_path / "filter_update.zarr" + shutil.copytree("data/zarr/shuffle.zarr", out_filename) + + def write(): + ds = gdal.OpenEx(out_filename, gdal.OF_MULTIDIM_RASTER | gdal.OF_UPDATE) + rg = ds.GetRootGroup() + ar = rg.OpenMDArray(rg.GetMDArrayNames()[0]) + ar.Write([3, 4]) + + write() + + ds = gdal.OpenEx(out_filename, gdal.OF_MULTIDIM_RASTER) + rg = ds.GetRootGroup() + ar = rg.OpenMDArray(rg.GetMDArrayNames()[0]) + assert ar.Read() == array.array("h", [3, 4]) + + @pytest.mark.parametrize("name", ["u1", "u2", "u4", "u8"]) def test_zarr_read_fortran_order(name): diff --git a/autotest/ogr/data/filegdb/testopenfilegdb.zip b/autotest/ogr/data/filegdb/testopenfilegdb.zip new file mode 100644 index 000000000000..0580aedda64b Binary files /dev/null and b/autotest/ogr/data/filegdb/testopenfilegdb.zip differ diff --git a/autotest/ogr/data/geoconcept/expected_000_GRD.gxt b/autotest/ogr/data/geoconcept/expected_000_GRD.gxt deleted file mode 100644 index d017b5c01651..000000000000 --- a/autotest/ogr/data/geoconcept/expected_000_GRD.gxt +++ /dev/null @@ -1,17 +0,0 @@ -//$DELIMITER " " -//$QUOTED-TEXT "no" -//$CHARSET ANSI -//$UNIT Distance:m -//$FORMAT 2 -//$SYSCOORD {Type: 1006} -//$FIELDS Class=000_GRD;Subclass=000_GRD;Kind=4;Fields=Private#Identifier Private#Class Private#Subclass Private#Name Private#NbFields idSel nom withdata Private#X Private#Y Private#Graphics --1 000_GRD 000_GRD 000_GRD 3 000-2007-0050-7130-LAMB93 0 50000.00 7130000.00 4 600000.00 7130000.00 600000.00 6580000.00 50000.00 6580000.00 50000.00 7130000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0595-7130-LAMB93 0 595000.00 7130000.00 4 1145000.00 7130000.00 1145000.00 6580000.00 595000.00 6580000.00 595000.00 7130000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0595-6585-LAMB93 0 595000.00 6585000.00 4 1145000.00 6585000.00 1145000.00 6035000.00 595000.00 6035000.00 595000.00 6585000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-1145-6250-LAMB93 0 1145000.00 6250000.00 4 1265000.00 6250000.00 1265000.00 6030000.00 1145000.00 6030000.00 1145000.00 6250000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0050-6585-LAMB93 0 50000.00 6585000.00 4 600000.00 6585000.00 600000.00 6035000.00 50000.00 6035000.00 50000.00 6585000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0050-7130-LAMB93 0 50000.00 7130000.00 4 600000.00 7130000.00 600000.00 6580000.00 50000.00 6580000.00 50000.00 7130000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0595-7130-LAMB93 0 595000.00 7130000.00 4 1145000.00 7130000.00 1145000.00 6580000.00 595000.00 6580000.00 595000.00 7130000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0595-6585-LAMB93 0 595000.00 6585000.00 4 1145000.00 6585000.00 1145000.00 6035000.00 595000.00 6035000.00 595000.00 6585000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-1145-6250-LAMB93 0 1145000.00 6250000.00 4 1265000.00 6250000.00 1265000.00 6030000.00 1145000.00 6030000.00 1145000.00 6250000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0050-6585-LAMB93 0 50000.00 6585000.00 4 600000.00 6585000.00 600000.00 6035000.00 50000.00 6035000.00 50000.00 6585000.00 diff --git a/autotest/ogr/data/geoconcept/expected_000_GRD.txt b/autotest/ogr/data/geoconcept/expected_000_GRD.txt deleted file mode 100644 index 400068e26566..000000000000 --- a/autotest/ogr/data/geoconcept/expected_000_GRD.txt +++ /dev/null @@ -1,12 +0,0 @@ -//$DELIMITER " " -//$QUOTED-TEXT "no" -//$CHARSET ANSI -//$UNIT Distance:m -//$FORMAT 2 -//$SYSCOORD {Type: 1006} -//$FIELDS Class=000_GRD;Subclass=000_GRD;Kind=4;Fields=Private#Identifier Private#Class Private#Subclass Private#Name Private#NbFields idSel nom withdata Private#X Private#Y Private#Graphics --1 000_GRD 000_GRD 000_GRD 3 000-2007-0050-7130-LAMB93 0 50000.00 7130000.00 4 600000.00 7130000.00 600000.00 6580000.00 50000.00 6580000.00 50000.00 7130000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0595-7130-LAMB93 0 595000.00 7130000.00 4 1145000.00 7130000.00 1145000.00 6580000.00 595000.00 6580000.00 595000.00 7130000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0595-6585-LAMB93 0 595000.00 6585000.00 4 1145000.00 6585000.00 1145000.00 6035000.00 595000.00 6035000.00 595000.00 6585000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-1145-6250-LAMB93 0 1145000.00 6250000.00 4 1265000.00 6250000.00 1265000.00 6030000.00 1145000.00 6030000.00 1145000.00 6250000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0050-6585-LAMB93 0 50000.00 6585000.00 4 600000.00 6585000.00 600000.00 6035000.00 50000.00 6035000.00 50000.00 6585000.00 diff --git a/autotest/ogr/data/geoconcept/expected_000_GRD_TAB.txt b/autotest/ogr/data/geoconcept/expected_000_GRD_TAB.txt deleted file mode 100644 index 122f2d4ff3a1..000000000000 --- a/autotest/ogr/data/geoconcept/expected_000_GRD_TAB.txt +++ /dev/null @@ -1,12 +0,0 @@ -//$DELIMITER "tab" -//$QUOTED-TEXT "no" -//$CHARSET ANSI -//$UNIT Distance:m -//$FORMAT 2 -//$SYSCOORD {Type: 1006} -//$FIELDS Class=000_GRD;Subclass=000_GRD;Kind=4;Fields=Private#Identifier Private#Class Private#Subclass Private#Name Private#NbFields idSel nom withdata Private#X Private#Y Private#Graphics --1 000_GRD 000_GRD 000_GRD 3 000-2007-0050-7130-LAMB93 0 50000.00 7130000.00 4 600000.00 7130000.00 600000.00 6580000.00 50000.00 6580000.00 50000.00 7130000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0595-7130-LAMB93 0 595000.00 7130000.00 4 1145000.00 7130000.00 1145000.00 6580000.00 595000.00 6580000.00 595000.00 7130000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0595-6585-LAMB93 0 595000.00 6585000.00 4 1145000.00 6585000.00 1145000.00 6035000.00 595000.00 6035000.00 595000.00 6585000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-1145-6250-LAMB93 0 1145000.00 6250000.00 4 1265000.00 6250000.00 1265000.00 6030000.00 1145000.00 6030000.00 1145000.00 6250000.00 --1 000_GRD 000_GRD 000_GRD 3 000-2007-0050-6585-LAMB93 0 50000.00 6585000.00 4 600000.00 6585000.00 600000.00 6035000.00 50000.00 6035000.00 50000.00 6585000.00 diff --git a/autotest/ogr/data/geoconcept/expected_tile.gxt b/autotest/ogr/data/geoconcept/expected_tile.gxt deleted file mode 100644 index 52148b65072c..000000000000 --- a/autotest/ogr/data/geoconcept/expected_tile.gxt +++ /dev/null @@ -1,17 +0,0 @@ -//$DELIMITER " " -//$QUOTED-TEXT "no" -//$CHARSET ANSI -//$UNIT Distance:m -//$FORMAT 2 -//$SYSCOORD {Type: 2001} -//$FIELDS Class=TILE;Subclass=TILE;Kind=4;Fields=Private#Identifier Private#Class Private#Subclass Private#Name Private#NbFields IDSEL NOM WITHDATA Private#X Private#Y Private#Graphics --1 TILE TILE TILE 3 000-2007-0050-7130-LAMB93 0 50000.00 7130000.00 4 600000.00 7130000.00 600000.00 6580000.00 50000.00 6580000.00 50000.00 7130000.00 --1 TILE TILE TILE 3 000-2007-0595-7130-LAMB93 0 595000.00 7130000.00 4 1145000.00 7130000.00 1145000.00 6580000.00 595000.00 6580000.00 595000.00 7130000.00 --1 TILE TILE TILE 3 000-2007-0595-6585-LAMB93 0 595000.00 6585000.00 4 1145000.00 6585000.00 1145000.00 6035000.00 595000.00 6035000.00 595000.00 6585000.00 --1 TILE TILE TILE 3 000-2007-1145-6250-LAMB93 0 1145000.00 6250000.00 4 1265000.00 6250000.00 1265000.00 6030000.00 1145000.00 6030000.00 1145000.00 6250000.00 --1 TILE TILE TILE 3 000-2007-0050-6585-LAMB93 0 50000.00 6585000.00 4 600000.00 6585000.00 600000.00 6035000.00 50000.00 6035000.00 50000.00 6585000.00 --1 TILE TILE TILE 3 000-2007-0050-7130-LAMB93 0 50000.00 7130000.00 4 600000.00 7130000.00 600000.00 6580000.00 50000.00 6580000.00 50000.00 7130000.00 --1 TILE TILE TILE 3 000-2007-0595-7130-LAMB93 0 595000.00 7130000.00 4 1145000.00 7130000.00 1145000.00 6580000.00 595000.00 6580000.00 595000.00 7130000.00 --1 TILE TILE TILE 3 000-2007-0595-6585-LAMB93 0 595000.00 6585000.00 4 1145000.00 6585000.00 1145000.00 6035000.00 595000.00 6035000.00 595000.00 6585000.00 --1 TILE TILE TILE 3 000-2007-1145-6250-LAMB93 0 1145000.00 6250000.00 4 1265000.00 6250000.00 1265000.00 6030000.00 1145000.00 6030000.00 1145000.00 6250000.00 --1 TILE TILE TILE 3 000-2007-0050-6585-LAMB93 0 50000.00 6585000.00 4 600000.00 6585000.00 600000.00 6035000.00 50000.00 6035000.00 50000.00 6585000.00 diff --git a/autotest/ogr/data/geoconcept/expected_tile.txt b/autotest/ogr/data/geoconcept/expected_tile.txt deleted file mode 100644 index 86e5636d9b45..000000000000 --- a/autotest/ogr/data/geoconcept/expected_tile.txt +++ /dev/null @@ -1,12 +0,0 @@ -//$DELIMITER " " -//$QUOTED-TEXT "no" -//$CHARSET ANSI -//$UNIT Distance:m -//$FORMAT 2 -//$SYSCOORD {Type: 2001} -//$FIELDS Class=TILE;Subclass=TILE;Kind=4;Fields=Private#Identifier Private#Class Private#Subclass Private#Name Private#NbFields IDSEL NOM WITHDATA Private#X Private#Y Private#Graphics --1 TILE TILE TILE 3 000-2007-0050-7130-LAMB93 0 50000.00 7130000.00 4 600000.00 7130000.00 600000.00 6580000.00 50000.00 6580000.00 50000.00 7130000.00 --1 TILE TILE TILE 3 000-2007-0595-7130-LAMB93 0 595000.00 7130000.00 4 1145000.00 7130000.00 1145000.00 6580000.00 595000.00 6580000.00 595000.00 7130000.00 --1 TILE TILE TILE 3 000-2007-0595-6585-LAMB93 0 595000.00 6585000.00 4 1145000.00 6585000.00 1145000.00 6035000.00 595000.00 6035000.00 595000.00 6585000.00 --1 TILE TILE TILE 3 000-2007-1145-6250-LAMB93 0 1145000.00 6250000.00 4 1265000.00 6250000.00 1265000.00 6030000.00 1145000.00 6030000.00 1145000.00 6250000.00 --1 TILE TILE TILE 3 000-2007-0050-6585-LAMB93 0 50000.00 6585000.00 4 600000.00 6585000.00 600000.00 6035000.00 50000.00 6035000.00 50000.00 6585000.00 diff --git a/autotest/ogr/data/geoconcept/geoconcept_multipolygon_singlepart_hole.txt b/autotest/ogr/data/geoconcept/geoconcept_multipolygon_singlepart_hole.txt deleted file mode 100644 index 9c2410d32929..000000000000 --- a/autotest/ogr/data/geoconcept/geoconcept_multipolygon_singlepart_hole.txt +++ /dev/null @@ -1,8 +0,0 @@ -//$DELIMITER "tab" -//$QUOTED-TEXT "no" -//$CHARSET ANSI -//$UNIT Distance:m -//$FORMAT 2 -//$SYSCOORD {Type: 17};{TimeZone: 31} -//$FIELDS Class=test;Subclass=test;Kind=4;Fields=Private#Identifier Private#Class Private#Subclass Private#Name Private#NbFields id Private#X Private#Y Private#Graphics --1 test test test 1 1 0.00 0.00 4 0.00 1.00 1.00 1.00 1.00 0.00 0.00 0.00 1 0.10 0.10 3 0.10 0.90 0.90 0.90 0.10 0.10 diff --git a/autotest/ogr/data/geoconcept/geoconcept_multipolygon_singlepart_nohole.txt b/autotest/ogr/data/geoconcept/geoconcept_multipolygon_singlepart_nohole.txt deleted file mode 100644 index e5f2595c75d3..000000000000 --- a/autotest/ogr/data/geoconcept/geoconcept_multipolygon_singlepart_nohole.txt +++ /dev/null @@ -1,8 +0,0 @@ -//$DELIMITER "tab" -//$QUOTED-TEXT "no" -//$CHARSET ANSI -//$UNIT Distance:m -//$FORMAT 2 -//$SYSCOORD {Type: 17};{TimeZone: 31} -//$FIELDS Class=test;Subclass=test;Kind=4;Fields=Private#Identifier Private#Class Private#Subclass Private#Name Private#NbFields id Private#X Private#Y Private#Graphics --1 test test test 1 1 0.00 0.00 4 0.00 1.00 1.00 1.00 1.00 0.00 0.00 0.00 diff --git a/autotest/ogr/data/geoconcept/geoconcept_multipolygon_twoparts_second_with_hole.txt b/autotest/ogr/data/geoconcept/geoconcept_multipolygon_twoparts_second_with_hole.txt deleted file mode 100644 index 2348ee1ca0fb..000000000000 --- a/autotest/ogr/data/geoconcept/geoconcept_multipolygon_twoparts_second_with_hole.txt +++ /dev/null @@ -1,8 +0,0 @@ -//$DELIMITER "tab" -//$QUOTED-TEXT "no" -//$CHARSET ANSI -//$UNIT Distance:m -//$FORMAT 2 -//$SYSCOORD {Type: 17};{TimeZone: 31} -//$FIELDS Class=test;Subclass=test;Kind=4;Fields=Private#Identifier Private#Class Private#Subclass Private#Name Private#NbFields id Private#X Private#Y Private#Graphics --1 test test test 1 1 -10.00 -10.00 3 -10.00 -9.00 -9.00 -9.00 -10.00 -10.00 2 0.00 0.00 4 0.00 1.00 1.00 1.00 1.00 0.00 0.00 0.00 0.10 0.10 3 0.10 0.90 0.90 0.90 0.10 0.10 diff --git a/autotest/ogr/data/geoconcept/line.gxt b/autotest/ogr/data/geoconcept/line.gxt deleted file mode 100644 index 2704eb583864..000000000000 --- a/autotest/ogr/data/geoconcept/line.gxt +++ /dev/null @@ -1,8 +0,0 @@ -//$DELIMITER "tab" -//$QUOTED-TEXT "no" -//$CHARSET ANSI -//$UNIT Distance:m -//$FORMAT 2 -//$SYSCOORD {Type: 17};{TimeZone: 31} -//$FIELDS Class=test;Subclass=test;Kind=2;Fields=Private#Identifier Private#Class Private#Subclass Private#Name Private#NbFields id Private#X Private#Y Private#XP Private#YP Private#Graphics --1 test test test 1 1 440720.00 3751320.00 441920.00 3750120.00 1 441920.00 3750120.00 diff --git a/autotest/ogr/data/geoconcept/points.gxt b/autotest/ogr/data/geoconcept/points.gxt deleted file mode 100644 index b28ef1b3de6b..000000000000 --- a/autotest/ogr/data/geoconcept/points.gxt +++ /dev/null @@ -1,9 +0,0 @@ -//$DELIMITER " " -//$QUOTED-TEXT "no" -//$CHARSET ANSI -//$UNIT Distance:m -//$FORMAT 2 -//$SYSCOORD {Type: 101} -//$FIELDS Class=points;Subclass=points;Kind=1;Fields=Private#Identifier Private#Class Private#Subclass Private#Name Private#NbFields Primary_ID Secondary_ID Third_ID Private#X Private#Y --1 points points points 3 PID1 SID1 TID1 0 1 --1 points points points 3 PID2 SID2 2 3 diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/README b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/README deleted file mode 100644 index bd33586d5819..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/README +++ /dev/null @@ -1,17 +0,0 @@ -Dataset originally downloaded at wget http://thor-f5.er.usgs.gov/sdts/datasets/tvp/dlg3/24K/martin_point/D3607551_rd0s_1_sdts.tar.gz - -This is an extract to make it small. - -The following files have been removed as unncesseray for the OGR SDTS driver : - 3961 TR01CATS.DDF - 4709 TR01DDSH.DDF - 1177 TR01DQAA.DDF - 983 TR01DQCG.DDF - 3637 TR01DQHL.DDF - 2369 TR01DQLC.DDF - 2202 TR01DQPA.DDF - 1629 TR01STAT.DDF - -And the following files have been truncated to be smaller : (original size below) - 41420 TR01LE01.DDF - 11684 TR01NO01.DDF diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01AHDR.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01AHDR.DDF deleted file mode 100644 index 48fdf0f33785..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01AHDR.DDF +++ /dev/null @@ -1 +0,0 @@ -007112L 0600061 3204000001500000102815ATPR04043ATTP567830000;&TR01AHDR0100;&DDF RECORD IDENTIFIER1600;&ATTRIBUTE PRIMARYMODN!RCID(A,I)1600;&PRIMARY ATTRIBUTESBANNER !SOURCE_DATE !DATE_QUALIFIER !QUAD_NUMBER !L_PRIM_INTERVAL !L_PB_INTERVAL !S_PRIM_INTERVAL !S_PB_INTERVAL !CODED_FLAG !EDGEWS !EDGEWR !EDGENS !EDGENR !EDGEES !EDGEER !EDGESS !EDGESR !VERTICAL_DATUM !SW_LATITUDE !SW_LONGITUDE !NW_LATITUDE !NW_LONGITUDE !NE_LATITUDE !NE_LONGITUDE !SE_LATITUDE !SE_LONGITUDE (A(72),A(4),A(1),A(3),4R(5),9A(1),A(20),8R(12))00297 R 00052 3204000100700ATPR01207ATTP22619 1AHDR 1USGS-NMD DLG DATA - CHARACTER FORMAT - 09-29-87 VERSION 1982 60 4 40 NGVD 36.125000 -75.750000 36.250000 -75.750000 36.250000 -75.625000 36.125000 -75.625000 \ No newline at end of file diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01ARDF.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01ARDF.DDF deleted file mode 100644 index 61bf74d5798e..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01ARDF.DDF +++ /dev/null @@ -1 +0,0 @@ -005132L 0600061 3204000001500000102815ATPR04643ATTP363890000;&TR01ARDF0100;&DDF RECORD IDENTIFIER1600;&ATTRIBUTE PRIMARYMODN!RCID(A(4),I(6))1600;&PRIMARY ATTRIBUTESENTITY_LABEL !ARBITRARY_EXT !RELATION_TO_GROUND!VERTICAL_RELATION !OPERATIONAL_STATUS!ACCESS_RESTRICTION!OLD_RAILROAD_GRADE!WITH_RAILROAD !COVERED !HISTORICAL !LIMITED_ACCESS !PHOTOREVISED !LANES !ROAD_WIDTH !BEST_ESTIMATE !FUNCTIONAL_CLASS (A(7),11A(1),I(2),I(3),A(1),A(2))00094 R 00049 220400010700ATPR1107ATTP2718 1ARDF 11700005 -9-99  2ARDF 21700005 -9-99  3ARDF 31700005 -9-99  4ARDF 41700209 -9-99  5ARDF 51700209 -9-99  6ARDF 61700209 -9-99  7ARDF 71700209 -9-99  8ARDF 81700209 -9-99  9ARDF 91700209 -9-99  10ARDF 101700209 -9-99  11ARDF 111700209 -9-99  12ARDF 121700209 -9-99  13ARDF 131700209 -9-99  14ARDF 141700209 -9-99  15ARDF 151700209 -9-99  16ARDF 161700209 -9-99  17ARDF 171700005 -9-99  18ARDF 181700209 -9-99  19ARDF 191700005 -9-99  20ARDF 201700210 -9-99  21ARDF 211700005 -9-99  22ARDF 221700405 -9-99  23ARDF 231700405 -9-99  24ARDF 241700210 -9-99  25ARDF 251700210 -9-99  26ARDF 261700205 -9-99  27ARDF 271700205 -9-99  28ARDF 281700205 -9-99  29ARDF 291700205 -9-99  30ARDF 301700205 -9-99  31ARDF 311700205 -9-99  32ARDF 321700205 -9-99  33ARDF 331700205 -9-99  34ARDF 341700205 -9-99  35ARDF 351700205 -9-99  36ARDF 361700205 -9-99  37ARDF 371700205 -9-99  38ARDF 381700205 -9-99  39ARDF 391700205 -9-99  40ARDF 401700205 -9-99  41ARDF 411700205 -9-99  42ARDF 421700205 -9-99  43ARDF 431700205 -9-99  44ARDF 441700205 -9-99  45ARDF 451700205 -9-99  46ARDF 461700205 -9-99  47ARDF 471700209 -9-99  48ARDF 481700209 -9-99  49ARDF 491700209 -9-99  50ARDF 501700209 -9-99  51ARDF 511700209 -9-99  52ARDF 521700209 -9-99  53ARDF 531700209 -9-99  54ARDF 541700209 -9-99  55ARDF 551700209 -9-99  56ARDF 561700209 -9-99  57ARDF 571700209 -9-99  58ARDF 581700209 -9-99  59ARDF 591700209 -9-99  60ARDF 601700209 -9-99  61ARDF 611700209 -9-99  62ARDF 621700209 -9-99  63ARDF 631700209 -9-99  64ARDF 641700209 -9-99  65ARDF 651700209 -9-99  66ARDF 661700209 -9-99  67ARDF 671700209 -9-99  68ARDF 681700209 -9-99  69ARDF 691700209 -9-99  70ARDF 701700209 -9-99  71ARDF 711700209 -9-99  72ARDF 721700209 -9-99  73ARDF 731700209 -9-99  74ARDF 741700209 -9-99  75ARDF 751700209 -9-99  76ARDF 761700209 -9-99  77ARDF 771700209 -9-99  78ARDF 781700209 -9-99  79ARDF 791700209 -9-99  80ARDF 801700209 -9-99  81ARDF 811700209 -9-99  82ARDF 821700209 -9-99  83ARDF 831700209 -9-99  84ARDF 841700209 -9-99  85ARDF 851700209 -9-99  86ARDF 861700209 -9-99  87ARDF 871700209 -9-99  88ARDF 881700209 -9-99  89ARDF 891700209 -9-99  90ARDF 901700209 -9-99  91ARDF 911700209 -9-99  92ARDF 921700209 -9-99  93ARDF 931700209 -9-99  94ARDF 941700209 -9-99  95ARDF 951700209 -9-99  96ARDF 961700209 -9-99  97ARDF 971700209 -9-99  98ARDF 981700209 -9-99  99ARDF 991700209 -9-99  100ARDF 1001700209 -9-99  101ARDF 1011700209 -9-99  102ARDF 1021700209 -9-99  103ARDF 1031700209 -9-99  104ARDF 1041700209 -9-99  105ARDF 1051700209 -9-99  106ARDF 1061700209 -9-99  107ARDF 1071700209 -9-99  108ARDF 1081700209 -9-99  109ARDF 1091700209 -9-99  110ARDF 1101700209 -9-99  111ARDF 1111700209 -9-99  112ARDF 1121700209 -9-99  113ARDF 1131700209 -9-99  114ARDF 1141700209 -9-99  115ARDF 1151700209 -9-99  116ARDF 1161700209 -9-99  117ARDF 1171700209 -9-99  118ARDF 1181700209 -9-99  119ARDF 1191700209 -9-99  120ARDF 1201700209 -9-99  121ARDF 1211700209 -9-99  122ARDF 1221700209 -9-99  123ARDF 1231700209 -9-99  124ARDF 1241700209 -9-99  125ARDF 1251700209 -9-99  126ARDF 1261700209 -9-99  127ARDF 1271700209 -9-99  128ARDF 1281700209 -9-99  129ARDF 1291700209 -9-99  130ARDF 1301700209 -9-99  131ARDF 1311700209 -9-99  132ARDF 1321700209 -9-99  133ARDF 1331700209 -9-99  134ARDF 1341700209 -9-99  135ARDF 1351700209 -9-99  136ARDF 1361700209 -9-99  137ARDF 1371700209 -9-99  138ARDF 1381700209 -9-99  139ARDF 1391700209 -9-99  140ARDF 1401700209 -9-99  141ARDF 1411700209 -9-99  142ARDF 1421700209 -9-99  143ARDF 1431700209 -9-99  144ARDF 1441700209 -9-99  145ARDF 1451700209 -9-99  146ARDF 1461700209 -9-99  147ARDF 1471700209 -9-99  148ARDF 1481700209 -9-99  149ARDF 1491700209 -9-99  150ARDF 1501700209 -9-99  151ARDF 1511700209 -9-99  152ARDF 1521700209 -9-99  153ARDF 1531700209 -9-99  154ARDF 1541700209 -9-99  155ARDF 1551700209 -9-99  156ARDF 1561700209 -9-99  157ARDF 1571700218 -9-99  158ARDF 1581700218 -9-99  159ARDF 1591700218 -9-99  160ARDF 1601700218 -9-99  161ARDF 1611700218 -9-99  162ARDF 1621700218 -9-99  163ARDF 1631700218 -9-99  164ARDF 1641700218 -9-99  \ No newline at end of file diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01ARDM.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01ARDM.DDF deleted file mode 100644 index 47e21d1dbb16..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01ARDM.DDF +++ /dev/null @@ -1 +0,0 @@ -002212L 0600057 22040000150000012815ATPR4643ATTP75890000;&TR01ARDM0100;&DDF RECORD IDENTIFIER1600;&ATTRIBUTE PRIMARYMODN!RCID(A(4),I(6))1600;&PRIMARY ATTRIBUTESROUTE_NUMBER !ROUTE_TYPE (A(7),A(9))00084 R 00049 220400010700ATPR1107ATTP1718 1ARDM 1SR 1200  2ARDM 2SR 1200  3ARDM 3SR 1200  4ARDM 4SR 1200  5ARDM 5SR 1200  6ARDM 6SR 1200  7ARDM 7SR 1200  8ARDM 8SR 1200  9ARDM 9SR 1200  10ARDM 10SR 1200  11ARDM 11SR 1200  12ARDM 12SR 1200  13ARDM 13SR 1200  14ARDM 14SR 1200  15ARDM 15SR 1200  16ARDM 16SR 1200  17ARDM 17SR 1200  18ARDM 18SR 1200  19ARDM 19SR 1200  20ARDM 20SR 1200  21ARDM 21SR 1200  \ No newline at end of file diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01CATD.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01CATD.DDF deleted file mode 100644 index 7adb3e4d2784..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01CATD.DDF +++ /dev/null @@ -1 +0,0 @@ -001602L 0600049 22040000150000012815CATD68430000;&TR01CATD0100;&DDF RECORD IDENTIFIER1600;&CATALOG/DIRECTORYMODN!RCID!NAME!TYPE!FILE!EXTR!MVER(A,I,5A)00111 R 00039 21040001070CATD657 1CATD 1IDENIdentification TR01IDEN.DDFN  2CATD 2CATDCatalog/Directory TR01CATD.DDFN  3CATD 3CATXCatalog/Cross-Reference TR01CATX.DDFN  4CATD 4CATSCatalog/Spatial Domain TR01CATS.DDFN  5CATD 5IREFInternal Spatial ReferenceTR01IREF.DDFN  6CATD 6XREFExternal Spatial ReferenceTR01XREF.DDFN  7CATD 7MDEFData Dictionary/DefinitionDLG3MDEF.DDFY 3.00 8CATD 8MDOMData Dictionary/Domain DLG3MDOM.DDFY 3.00 9CATD 9DDSHData Dictionary/Schema TR01DDSH.DDFN  10CATD 10STATTransfer Statistics TR01STAT.DDFN  11CATD 11DQHLLineage TR01DQHL.DDFN  12CATD 12DQPAPositional Accuracy TR01DQPA.DDFN  13CATD 13DQAAAttribute Accuracy TR01DQAA.DDFN  14CATD 14DQLCLogical Consistency TR01DQLC.DDFN  15CATD 15DQCGCompleteness TR01DQCG.DDFN  16CATD 16ARDFAttribute Primary TR01ARDF.DDFN  17CATD 17ARDMAttribute Primary TR01ARDM.DDFN  18CATD 18AHDRAttribute Primary TR01AHDR.DDFN  19CATD 19FF01Composite TR01FF01.DDFN  20CATD 20NP01Point-Node TR01NP01.DDFN  21CATD 21NA01Point-Node TR01NA01.DDFN  22CATD 22NO01Point-Node TR01NO01.DDFN  23CATD 23LE01Line TR01LE01.DDFN  24CATD 24PC01Polygon TR01PC01.DDFN  \ No newline at end of file diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01CATX.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01CATX.DDF deleted file mode 100644 index 24757fd5df78..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01CATX.DDF +++ /dev/null @@ -1 +0,0 @@ -001662L 0600049 22040000150000012815CATX74430000;&TR01CATX0100;&DDF RECORD IDENTIFIER1600;&CATALOG/CROSS-REFERENCEMODN!RCID!NAM1!TYP1!NAM2!TYP2!COMT(A,I,5A)00264 D 00041 310400010070CATX2167 1CATX 1DQHLLineageNP*Point-NodeThe modules starting with "NP" are part of the Data Quality/Lineage report. The NP modules contain control points used for transformations in the DLG data collection process.00279 D 00041 310400010070CATX2317 2CATX 2DQLCLogical ConsistencyA*Attribute PrimaryThe attribute modules (all modules with the name starting with "A") use the null scheme for fixed length subfields mentioned in the Data Quality/Logical Consistency report. \ No newline at end of file diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01FF01.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01FF01.DDF deleted file mode 100644 index dbd1e3e4a805..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01FF01.DDF +++ /dev/null @@ -1 +0,0 @@ -002432L 0600070 2304000015000000128015COMP48043ATID42091FRID401330000;&TR01FF010100;&DDF RECORD IDENTIFIER1600;&COMPOSITEMODN!RCID!OBRP(A(4),I(6),A(2))2600;&ATTRIBUTE ID*MODN!RCID(A(4),I(6))2600;&FOREIGN ID*MODN!RCID(A(4),I(6))00139 D 00057 220400010700COMP1307ATID1120FRID5131 1FF01 1FFAHDR 1NP01 -4NA01 -35NO01 -146LE01 -179PC01 -35 \ No newline at end of file diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01IDEN.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01IDEN.DDF deleted file mode 100644 index 0267136d6171..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01IDEN.DDF +++ /dev/null @@ -1 +0,0 @@ -002692L 0600065 330400000150000001028015IDEN105043CONF0561480000;&TR01IDEN0100;&DDF RECORD IDENTIFIER1600;&IDENTIFICATIONMODN!RCID!STID!STVS!DOCU!PRID!PRVS!PDOC!TITL!DAST!MPDT!DCDT!SCAL!COMT(A,I,10A,I,A)1600;&CONFORMANCEFFYN!VGYN!GTYN!RCYN!EXSP!FTLV(4A,2I)00449 R 00055 33040001007000IDEN375007CONF012382 1IDEN 1SPATIAL DATA TRANSFER STANDARD1994 JUNE 10FIPS PUB 173-1SDTS TOPOLOGICAL VECTOR PROFILEVERSION 1.0 JUNE 10, 1994FIPS 173-1 PART 4MARTIN POINT, NC / TRANSPORTATIONDLG-3198219960815 24000This transfer requires an external data dictionary from the U.S. Geological Survey, National Mapping Division, with a 4-character code of DLG3, version number 3.00YYYN14 \ No newline at end of file diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01IREF.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01IREF.DDF deleted file mode 100644 index 8e639577cf2f..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01IREF.DDF +++ /dev/null @@ -1 +0,0 @@ -002002L 0600052 3204000001500000102815IREF105430000;&TR01IREF0100;&DDF RECORD IDENTIFIER1600;&INTERNAL SPATIAL REFERENCEMODN!RCID!SATP!XLBL!YLBL!HFMT!SFAX!SFAY!XORG!YORG!XHRS!YHRS(A,I,4A,6R)00124 D 00039 21040001070IREF787 1IREF 12-TUPLEEASTINGNORTHINGBI320.010.010.00.00.6100000.610000 \ No newline at end of file diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01LE01.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01LE01.DDF deleted file mode 100644 index 641b27a00b2f..000000000000 Binary files a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01LE01.DDF and /dev/null differ diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01NA01.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01NA01.DDF deleted file mode 100644 index e97cbfe8feab..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01NA01.DDF +++ /dev/null @@ -1 +0,0 @@ -002332L 0600070 2304000015000000128015PNTS49043SADR35092ARID361270000;&TR01NA010100;&DDF RECORD IDENTIFIER1600;&POINT-NODEMODN!RCID!OBRP(A(4),I(6),A(2))1600;&SPATIAL ADDRESSX!Y(2B(32))1600;&AREA IDMODN!RCID(A(4),I(6))00097 R 00057 220400010700PNTS1307SADR0920ARID1129 1NA01 2NAœÂ+ÞïrPC01 2 2NA01 3NA—.ÔOPC01 3 3NA01 4NA–ëÝÔEPC01 4 4NA01 5NA–½­Ô‰ËPC01 5 5NA01 6NA–TÔtePC01 6 6NA01 7NA•¿ÔdÇPC01 7 7NA01 8NA•}jÔPC01 8 8NA01 9NA•0Ô•.PC01 9 9NA01 10NA”‘¨ÖÈJPC01 10 10NA01 11NA”ó ÔG¾PC01 11 11NA01 12NA”-Ü!PC01 12 12NA01 13NA”3~ÛüYPC01 13 13NA01 14NA–aUÕ÷PC01 14 14NA01 15NA–´ Õ"ûPC01 15 15NA01 16NA–õ×Ô¦sPC01 16 16NA01 17NA•“6Ö¹œPC01 17 17NA01 18NA•[Ö¥ÄPC01 18 18NA01 19NA–>´Õ±úPC01 19 19NA01 20NA–4KÕV^PC01 20 20NA01 21NA–aÕAøPC01 21 21NA01 22NA•ßÙÕõPC01 22 22NA01 23NA•’ÕÖPC01 23 23NA01 24NA•,Ö”=PC01 24 24NA01 25NA–iÔÁàPC01 25 25NA01 26NA–\ÔˆâPC01 26 26NA01 27NA•ÕÕ@PC01 27 27NA01 28NA–•¹ÔÔ`PC01 28 28NA01 29NA–7YÔ¨ PC01 29 29NA01 30NA•$±ÙÝÙPC01 30 30NA01 31NA•ìðמKPC01 31 31NA01 32NA•d’Øú±PC01 32 32NA01 33NA”g/Û»6PC01 33 33NA01 34NA•föÕÔ PC01 34 34NA01 35NA•ÌpÔ©PC01 35 \ No newline at end of file diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01NO01.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01NO01.DDF deleted file mode 100644 index 7e1636e5b8b3..000000000000 Binary files a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01NO01.DDF and /dev/null differ diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01NP01.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01NP01.DDF deleted file mode 100644 index 96d7dffe21e3..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01NP01.DDF +++ /dev/null @@ -1 +0,0 @@ -001842L 0600057 22040000150000012815PNTS4943SADR35920000;&TR01NP010100;&DDF RECORD IDENTIFIER1600;&POINT-NODEMODN!RCID!OBRP(A(4),I(6),A(2))1600;&SPATIAL ADDRESSX!Y(2B(32))00078 R 00049 220400010700PNTS1307SADR0920 1NP01 1NP“ô³ÔE 2NP01 2NP”–élÈ 3NP01 3NP¥A³éM¿ 4NP01 4NP¥¸Ô%î \ No newline at end of file diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01PC01.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01PC01.DDF deleted file mode 100644 index 946651e741df..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01PC01.DDF +++ /dev/null @@ -1 +0,0 @@ -001882L 0600057 22040000150000012815POLY4643ATID42890000;&TR01PC010100;&DDF RECORD IDENTIFIER1600;&POLYGONMODN!RCID!OBRP(A(4),I(6),A(2))2600;&ATTRIBUTE ID*MODN!RCID(A(4),I(6))00059 D 00039 21040001070POLY137 1PC01 1PW00059 D 00039 21040001070POLY137 2PC01 2PC00059 D 00039 21040001070POLY137 3PC01 3PC00059 D 00039 21040001070POLY137 4PC01 4PC00059 D 00039 21040001070POLY137 5PC01 5PC00059 D 00039 21040001070POLY137 6PC01 6PC00059 D 00039 21040001070POLY137 7PC01 7PC00059 D 00039 21040001070POLY137 8PC01 8PC00059 D 00039 21040001070POLY137 9PC01 9PC00059 D 00039 21040001070POLY137 10PC01 10PC00059 D 00039 21040001070POLY137 11PC01 11PC00059 D 00039 21040001070POLY137 12PC01 12PC00059 D 00039 21040001070POLY137 13PC01 13PC00059 D 00039 21040001070POLY137 14PC01 14PC00059 D 00039 21040001070POLY137 15PC01 15PC00059 D 00039 21040001070POLY137 16PC01 16PC00059 D 00039 21040001070POLY137 17PC01 17PC00059 D 00039 21040001070POLY137 18PC01 18PC00059 D 00039 21040001070POLY137 19PC01 19PC00059 D 00039 21040001070POLY137 20PC01 20PC00059 D 00039 21040001070POLY137 21PC01 21PC00059 D 00039 21040001070POLY137 22PC01 22PC00059 D 00039 21040001070POLY137 23PC01 23PC00059 D 00039 21040001070POLY137 24PC01 24PC00059 D 00039 21040001070POLY137 25PC01 25PC00059 D 00039 21040001070POLY137 26PC01 26PC00059 D 00039 21040001070POLY137 27PC01 27PC00059 D 00039 21040001070POLY137 28PC01 28PC00059 D 00039 21040001070POLY137 29PC01 29PC00059 D 00039 21040001070POLY137 30PC01 30PC00059 D 00039 21040001070POLY137 31PC01 31PC00059 D 00039 21040001070POLY137 32PC01 32PC00059 D 00039 21040001070POLY137 33PC01 33PC00059 D 00039 21040001070POLY137 34PC01 34PC00059 D 00039 21040001070POLY137 35PC01 35PC \ No newline at end of file diff --git a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01XREF.DDF b/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01XREF.DDF deleted file mode 100644 index 3222aaf5fc95..000000000000 --- a/autotest/ogr/data/sdts/D3607551_rd0s_1_sdts_truncated/TR01XREF.DDF +++ /dev/null @@ -1 +0,0 @@ -001592L 0600049 22040000150000012815XREF67430000;&TR01XREF0100;&DDF RECORD IDENTIFIER1600;&EXTERNAL SPATIAL REFERENCEMODN!RCID!RSNM!HDAT!ZONE(A,I,3A)00069 D 00039 21040001070XREF237 1XREF 1UTMNAS18 \ No newline at end of file diff --git a/autotest/ogr/data/svg/test.svg b/autotest/ogr/data/svg/test.svg deleted file mode 100644 index f9d4c444a4ca..000000000000 --- a/autotest/ogr/data/svg/test.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - 2009-11-10 03:44:57+00:00 - residential - 1988060.0 - 44075465 - - - 24024676 - footway - 2008-04-29 07:30:01+01:00 - - - yes - 2009-06-28 10:18:25+01:00 - Northwest Animal Facility - 368166329 - - - - \ No newline at end of file diff --git a/autotest/ogr/data/vm2alv2_texash/README b/autotest/ogr/data/vm2alv2_texash/README deleted file mode 100644 index d7760da4cb6b..000000000000 --- a/autotest/ogr/data/vm2alv2_texash/README +++ /dev/null @@ -1,2 +0,0 @@ -This is an extract of a few coverages from the vpf/vm2alv2 dataset of -http://freefr.dl.sourceforge.net/project/ogdi/OGDI_Test_Suite/3.1/ogdits-3.1.0.zip diff --git a/autotest/ogr/data/vm2alv2_texash/dht b/autotest/ogr/data/vm2alv2_texash/dht deleted file mode 100644 index f46eaafa9668..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/dht and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/lat b/autotest/ogr/data/vm2alv2_texash/lat deleted file mode 100644 index 44fcd6b6d294..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/lat and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/bndtxt.tft b/autotest/ogr/data/vm2alv2_texash/texash/bnd/bndtxt.tft deleted file mode 100644 index 351ddca23478..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/bndtxt.tft and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/char.vdt b/autotest/ogr/data/vm2alv2_texash/texash/bnd/char.vdt deleted file mode 100644 index 1ccbc909e4c0..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/char.vdt and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/edg.fit b/autotest/ogr/data/vm2alv2_texash/texash/bnd/edg.fit deleted file mode 100644 index 78f6511049c4..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/edg.fit and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/edg3_id.lti b/autotest/ogr/data/vm2alv2_texash/texash/bnd/edg3_id.lti deleted file mode 100644 index caed0f272df8..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/edg3_id.lti and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/end.fit b/autotest/ogr/data/vm2alv2_texash/texash/bnd/end.fit deleted file mode 100644 index b0245dcf73ab..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/end.fit and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/end1_id.pti b/autotest/ogr/data/vm2alv2_texash/texash/bnd/end1_id.pti deleted file mode 100644 index cb99ee61eef0..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/end1_id.pti and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/cnd b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/cnd deleted file mode 100644 index e27e79af56e9..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/cnd and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/ebr b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/ebr deleted file mode 100644 index 5a30267df603..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/ebr and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/edg b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/edg deleted file mode 100644 index cb3c81f8e584..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/edg and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/edx b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/edx deleted file mode 100644 index 61582542f7a3..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/edx and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/end b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/end deleted file mode 100644 index 08f0af57a378..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/end and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/esi b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/esi deleted file mode 100644 index 8366c4c088c8..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/esi and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/fac b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/fac deleted file mode 100644 index 819ccf349263..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/fac and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/fbr b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/fbr deleted file mode 100644 index 4bb7c3ea8bc0..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/fbr and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/fsi b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/fsi deleted file mode 100644 index 13d53adf56cc..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/fsi and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/nsi b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/nsi deleted file mode 100644 index 32ac11e9ecbf..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/nsi and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/rng b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/rng deleted file mode 100644 index 23d3854befa3..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/rng and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/txt b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/txt deleted file mode 100644 index fc916a48ed74..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/txt and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/txx b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/txx deleted file mode 100644 index 4ef95f6ba0c1..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f/j/hb/1500/txx and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f_code.tti b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f_code.tti deleted file mode 100644 index 1e35d15e7f82..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f_code.tti and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f_code1.ati b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f_code1.ati deleted file mode 100644 index dcf57fb2ceda..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f_code1.ati and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f_code3.lti b/autotest/ogr/data/vm2alv2_texash/texash/bnd/f_code3.lti deleted file mode 100644 index b3c38c074380..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/f_code3.lti and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/fac.fit b/autotest/ogr/data/vm2alv2_texash/texash/bnd/fac.fit deleted file mode 100644 index df7ebc557194..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/fac.fit and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/fac1_id.ati b/autotest/ogr/data/vm2alv2_texash/texash/bnd/fac1_id.ati deleted file mode 100644 index 85a71995b696..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/fac1_id.ati and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/fca b/autotest/ogr/data/vm2alv2_texash/texash/bnd/fca deleted file mode 100644 index 4c901f5533ab..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/fca and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/fcs b/autotest/ogr/data/vm2alv2_texash/texash/bnd/fcs deleted file mode 100644 index b738b547e6fd..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/fcs and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/fcx b/autotest/ogr/data/vm2alv2_texash/texash/bnd/fcx deleted file mode 100644 index deb912714e48..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/fcx and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/int.vdt b/autotest/ogr/data/vm2alv2_texash/texash/bnd/int.vdt deleted file mode 100644 index 2e708a7b2075..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/int.vdt and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/markersp.pft b/autotest/ogr/data/vm2alv2_texash/texash/bnd/markersp.pft deleted file mode 100644 index 425ca7ff7794..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/markersp.pft and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/markersp.pfx b/autotest/ogr/data/vm2alv2_texash/texash/bnd/markersp.pfx deleted file mode 100644 index 91676e22d3d6..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/markersp.pfx and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/polbnda.aft b/autotest/ogr/data/vm2alv2_texash/texash/bnd/polbnda.aft deleted file mode 100644 index f69ecc4f40c0..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/polbnda.aft and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/polbnda.afx b/autotest/ogr/data/vm2alv2_texash/texash/bnd/polbnda.afx deleted file mode 100644 index ae73a853dc2f..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/polbnda.afx and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/polbndl.lft b/autotest/ogr/data/vm2alv2_texash/texash/bnd/polbndl.lft deleted file mode 100644 index 51f6b452bda7..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/polbndl.lft and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/polbndl.lfx b/autotest/ogr/data/vm2alv2_texash/texash/bnd/polbndl.lfx deleted file mode 100644 index 23fe4bd3c284..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/polbndl.lfx and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/symbol.rat b/autotest/ogr/data/vm2alv2_texash/texash/bnd/symbol.rat deleted file mode 100644 index c3a77d670503..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/symbol.rat and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/tile1_id.ati b/autotest/ogr/data/vm2alv2_texash/texash/bnd/tile1_id.ati deleted file mode 100644 index 14386ffa2881..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/tile1_id.ati and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/tile3_id.lti b/autotest/ogr/data/vm2alv2_texash/texash/bnd/tile3_id.lti deleted file mode 100644 index f4e4c83c57d8..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/tile3_id.lti and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/tile_id.tti b/autotest/ogr/data/vm2alv2_texash/texash/bnd/tile_id.tti deleted file mode 100644 index 3d499e74a885..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/tile_id.tti and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/txt.fit b/autotest/ogr/data/vm2alv2_texash/texash/bnd/txt.fit deleted file mode 100644 index c4abcb51f9f2..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/txt.fit and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/bnd/txt_id.tti b/autotest/ogr/data/vm2alv2_texash/texash/bnd/txt_id.tti deleted file mode 100644 index a0d42c7fbf4d..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/bnd/txt_id.tti and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/cat b/autotest/ogr/data/vm2alv2_texash/texash/cat deleted file mode 100644 index 3665c6aabe6d..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/cat and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/dqt b/autotest/ogr/data/vm2alv2_texash/texash/dqt deleted file mode 100644 index 60cb4d40516a..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/dqt and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/dqx b/autotest/ogr/data/vm2alv2_texash/texash/dqx deleted file mode 100644 index f65e60b03a54..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/dqx and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/grt b/autotest/ogr/data/vm2alv2_texash/texash/grt deleted file mode 100644 index a2b97f885042..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/grt and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/lht b/autotest/ogr/data/vm2alv2_texash/texash/lht deleted file mode 100644 index 4990566347e3..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/lht and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/cnd b/autotest/ogr/data/vm2alv2_texash/texash/tileref/cnd deleted file mode 100644 index 0e5577430a55..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/cnd and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/ebr b/autotest/ogr/data/vm2alv2_texash/texash/tileref/ebr deleted file mode 100644 index 3ad7b169b6e0..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/ebr and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/edg b/autotest/ogr/data/vm2alv2_texash/texash/tileref/edg deleted file mode 100644 index 8a9557daec55..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/edg and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/edx b/autotest/ogr/data/vm2alv2_texash/texash/tileref/edx deleted file mode 100644 index 3729198801aa..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/edx and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/esi b/autotest/ogr/data/vm2alv2_texash/texash/tileref/esi deleted file mode 100644 index b9c75404e924..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/esi and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/fac b/autotest/ogr/data/vm2alv2_texash/texash/tileref/fac deleted file mode 100644 index e1c76310af1a..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/fac and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/fbr b/autotest/ogr/data/vm2alv2_texash/texash/tileref/fbr deleted file mode 100644 index a7dcbdeb96ee..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/fbr and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/fca b/autotest/ogr/data/vm2alv2_texash/texash/tileref/fca deleted file mode 100644 index f18b4b62d7ea..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/fca and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/fcs b/autotest/ogr/data/vm2alv2_texash/texash/tileref/fcs deleted file mode 100644 index ac5eeb046111..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/fcs and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/fcx b/autotest/ogr/data/vm2alv2_texash/texash/tileref/fcx deleted file mode 100644 index 884bc64cd611..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/fcx and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/fsi b/autotest/ogr/data/vm2alv2_texash/texash/tileref/fsi deleted file mode 100644 index 512179438965..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/fsi and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/nsi b/autotest/ogr/data/vm2alv2_texash/texash/tileref/nsi deleted file mode 100644 index 429dd476d308..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/nsi and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/rng b/autotest/ogr/data/vm2alv2_texash/texash/tileref/rng deleted file mode 100644 index d70a7b49b266..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/rng and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/tileref.aft b/autotest/ogr/data/vm2alv2_texash/texash/tileref/tileref.aft deleted file mode 100644 index b07d7f9a3ba5..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/tileref.aft and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/tilereft.tft b/autotest/ogr/data/vm2alv2_texash/texash/tileref/tilereft.tft deleted file mode 100644 index c55098ee64f2..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/tilereft.tft and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/tsi b/autotest/ogr/data/vm2alv2_texash/texash/tileref/tsi deleted file mode 100644 index 68e64f961854..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/tsi and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/txt b/autotest/ogr/data/vm2alv2_texash/texash/tileref/txt deleted file mode 100644 index ad98d8a0c1a3..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/txt and /dev/null differ diff --git a/autotest/ogr/data/vm2alv2_texash/texash/tileref/txx b/autotest/ogr/data/vm2alv2_texash/texash/tileref/txx deleted file mode 100644 index b1c316fb4adb..000000000000 Binary files a/autotest/ogr/data/vm2alv2_texash/texash/tileref/txx and /dev/null differ diff --git a/autotest/ogr/ogr_geoconcept.py b/autotest/ogr/ogr_geoconcept.py deleted file mode 100755 index efac45717588..000000000000 --- a/autotest/ogr/ogr_geoconcept.py +++ /dev/null @@ -1,256 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test OGR Geoconcept driver functionality. -# Author: Frank Warmerdam -# -############################################################################### -# Copyright (c) 2008, Frank Warmerdam -# Copyright (c) 2008, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - -import ogrtest -import pytest - -from osgeo import ogr, osr - -pytestmark = pytest.mark.require_driver("Geoconcept") - -############################################################################### - - -@pytest.fixture(autouse=True, scope="module") -def startup_and_cleanup(): - yield - - -############################################################################### -# Simple read test of known file. - - -def test_ogr_gxt_1(): - - ds = ogr.Open("data/geoconcept/expected_000_GRD.gxt") - - assert ds is not None - - assert ds.GetLayerCount() == 1, "Got wrong layer count." - - lyr = ds.GetLayer(0) - assert lyr.GetName() == "000_GRD.000_GRD", "got unexpected layer name." - - assert lyr.GetFeatureCount() == 10, "got wrong feature count." - - expect = [ - "000-2007-0050-7130-LAMB93", - "000-2007-0595-7130-LAMB93", - "000-2007-0595-6585-LAMB93", - "000-2007-1145-6250-LAMB93", - "000-2007-0050-6585-LAMB93", - "000-2007-0050-7130-LAMB93", - "000-2007-0595-7130-LAMB93", - "000-2007-0595-6585-LAMB93", - "000-2007-1145-6250-LAMB93", - "000-2007-0050-6585-LAMB93", - ] - - ogrtest.check_features_against_list(lyr, "idSel", expect) - - lyr.ResetReading() - - feat = lyr.GetNextFeature() - - ogrtest.check_feature_geometry( - feat, - "MULTIPOLYGON (((50000 7130000,600000 7130000,600000 6580000,50000 6580000,50000 7130000)))", - max_error=0.000000001, - ) - - srs = osr.SpatialReference() - srs.SetFromUserInput( - 'PROJCS["Lambert 93",GEOGCS["unnamed",DATUM["ITRS-89",SPHEROID["GRS 80",6378137,298.257222099657],TOWGS84[0,0,0,0,0,0,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",49],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",3],PARAMETER["false_easting",700000],PARAMETER["false_northing",6600000],UNIT["metre",1]]' - ) - - assert lyr.GetSpatialRef().IsSame(srs), "SRS is not the one expected." - - -############################################################################### -# Similar test than previous one with TAB separator. - - -def test_ogr_gxt_2(): - - ds = ogr.Open("data/geoconcept/expected_000_GRD_TAB.txt") - - assert ds is not None - - assert ds.GetLayerCount() == 1, "Got wrong layer count." - - lyr = ds.GetLayer(0) - assert lyr.GetName() == "000_GRD.000_GRD", "got unexpected layer name." - - assert lyr.GetFeatureCount() == 5, "got wrong feature count." - - expect = [ - "000-2007-0050-7130-LAMB93", - "000-2007-0595-7130-LAMB93", - "000-2007-0595-6585-LAMB93", - "000-2007-1145-6250-LAMB93", - "000-2007-0050-6585-LAMB93", - ] - - ogrtest.check_features_against_list(lyr, "idSel", expect) - - lyr.ResetReading() - - feat = lyr.GetNextFeature() - - ogrtest.check_feature_geometry( - feat, - "MULTIPOLYGON (((50000 7130000,600000 7130000,600000 6580000,50000 6580000,50000 7130000)))", - max_error=0.000000001, - ) - - -############################################################################### -# Read a GXT file containing 2 points, duplicate it, and check the newly written file - - -def test_ogr_gxt_3(tmp_path): - - ds = None - - src_ds = ogr.Open("data/geoconcept/points.gxt") - - # Duplicate all the points from the source GXT - src_lyr = src_ds.GetLayerByName("points.points") - - ds = ogr.GetDriverByName("Geoconcept").CreateDataSource(tmp_path / "tmp.gxt") - - srs = osr.SpatialReference() - srs.SetWellKnownGeogCS("WGS84") - - gxt_lyr = ds.CreateLayer("points", srs, geom_type=ogr.wkbPoint) - - src_lyr.ResetReading() - - for i in range(src_lyr.GetLayerDefn().GetFieldCount()): - field_defn = src_lyr.GetLayerDefn().GetFieldDefn(i) - gxt_lyr.CreateField(field_defn) - - dst_feat = ogr.Feature(feature_def=gxt_lyr.GetLayerDefn()) - - feat = src_lyr.GetNextFeature() - while feat is not None: - dst_feat.SetFrom(feat) - assert gxt_lyr.CreateFeature(dst_feat) == 0, "CreateFeature failed." - - feat = src_lyr.GetNextFeature() - - ds = None - - # Read the newly written GXT file and check its features and geometries - ds = ogr.Open(tmp_path / "tmp.gxt") - gxt_lyr = ds.GetLayerByName("points.points") - - assert gxt_lyr.GetSpatialRef().IsSame( - srs, options=["IGNORE_DATA_AXIS_TO_SRS_AXIS_MAPPING=YES"] - ), "Output SRS is not the one expected." - - expect = ["PID1", "PID2"] - - ogrtest.check_features_against_list(gxt_lyr, "Primary_ID", expect) - - gxt_lyr.ResetReading() - - expect = ["SID1", "SID2"] - - ogrtest.check_features_against_list(gxt_lyr, "Secondary_ID", expect) - - gxt_lyr.ResetReading() - - expect = ["TID1", None] - - ogrtest.check_features_against_list(gxt_lyr, "Third_ID", expect) - - gxt_lyr.ResetReading() - - feat = gxt_lyr.GetNextFeature() - - ogrtest.check_feature_geometry(feat, "POINT(0 1)", max_error=0.000000001) - - feat = gxt_lyr.GetNextFeature() - - ogrtest.check_feature_geometry(feat, "POINT(2 3)", max_error=0.000000001) - - -############################################################################### -# - - -def test_ogr_gxt_multipolygon_singlepart_nohole(): - - ds = ogr.Open("data/geoconcept/geoconcept_multipolygon_singlepart_nohole.txt") - lyr = ds.GetLayer(0) - feat = lyr.GetNextFeature() - - ogrtest.check_feature_geometry( - feat, "MULTIPOLYGON (((0 0,0 1,1 1,1 0,0 0)))", max_error=0.000000001 - ) - - -############################################################################### -# - - -@pytest.mark.require_geos -def test_ogr_gxt_multipolygon_singlepart_hole(): - - ds = ogr.Open("data/geoconcept/geoconcept_multipolygon_singlepart_hole.txt") - lyr = ds.GetLayer(0) - feat = lyr.GetNextFeature() - - ogrtest.check_feature_geometry( - feat, - "MULTIPOLYGON (((0 0,0 1,1 1,1 0,0 0),(0.1 0.1,0.1 0.9,0.9 0.9,0.1 0.1)))", - max_error=0.000000001, - ) - - -############################################################################### -# - - -@pytest.mark.require_geos -def test_ogr_gxt_multipolygon_twoparts_second_with_hole(): - - ds = ogr.Open( - "data/geoconcept/geoconcept_multipolygon_twoparts_second_with_hole.txt" - ) - lyr = ds.GetLayer(0) - feat = lyr.GetNextFeature() - - ogrtest.check_feature_geometry( - feat, - "MULTIPOLYGON (((-10 -10,-10 -9,-9 -9,-10 -10)),((0 0,0 1,1 1,1 0,0 0),(0.1 0.1,0.1 0.9,0.9 0.9,0.1 0.1)))", - max_error=0.000000001, - ) - - -############################################################################### -# - - -@pytest.mark.require_geos -def test_ogr_gxt_line(): - - ds = ogr.Open("data/geoconcept/line.gxt") - lyr = ds.GetLayer(0) - feat = lyr.GetNextFeature() - - ogrtest.check_feature_geometry( - feat, "LINESTRING (440720 3751320,441920 3750120)", max_error=0.000000001 - ) diff --git a/autotest/ogr/ogr_ntf.py b/autotest/ogr/ogr_ntf.py deleted file mode 100755 index 0ed29c805724..000000000000 --- a/autotest/ogr/ogr_ntf.py +++ /dev/null @@ -1,163 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test read functionality for OGR NTF driver. -# Author: Even Rouault -# -############################################################################### -# Copyright (c) 2009-2010, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - -# The following tests will download sample data from -# http://www.ordnancesurvey.co.uk/oswebsite/products/meridian2/sampledata/meridian2ntf.exe -# and http://www.ordnancesurvey.co.uk/oswebsite/products/strategi/sampledata/stratntf.exe -# -# That data is subject to the terms of the 'Discover' Data License, that can be found here : -# http://www.ordnancesurvey.co.uk/oswebsite/products/sampledata/discoverdatalicense.html -# -# Verbatim copy of it : - -############################################################################### -# 'Discover' Data License -# -# Thank you for your interest in this Sample Data. The terms and conditions below set out a legal agreement -# between you and Ordnance Survey for your use of the Sample Data. Please read these terms carefully. If you do -# not agree to these terms and conditions, you should not use, download or access the Sample Data. -# -# 1 The Sample Data belongs to the Crown (or its suppliers). -# -# 2 Ordnance Survey grants you a limited, personal, non-exclusive, non-transferable, free-of-charge and fully terminable -# licence to use the Sample Data for the purpose of internal testing and evaluation only. By way of example, this means -# that you are not permitted to (i) sub-license, transfer, share or otherwise #distribute the Sample Data to any other -# person; (ii) incorporate the Sample Data into your products or services (unless solely for the purposes of internal -# testing and evaluation); or (iii) commercially exploit the Sample Data. -# -# 3 The Sample Data is provided "as is" and without any warranty as to quality, fitness for purpose, accuracy, availability -# or otherwise. You acknowledge that it is your responsibility to ensure that the Sample Data is suitable for your intended -# purposes. -# -# 4 To the fullest extent permitted by law, Ordnance Survey excludes all liability for any loss or damage of whatever nature -# arising from any use of the Sample Data. -# -# 5 You agree that Ordnance Survey (and its suppliers) shall retain all rights, title and interest in the Sample Data, including -# but not limited to any and all copyrights, patents, trade marks, trade secrets and all other intellectual property rights. -# -# 6 You agree not to tamper with or remove any copyright, trade mark, trade mark symbol or other proprietary notice of -# Ordnance Survey (or its suppliers) contained in the Sample Data. -# -# 7 Ordnance Survey may terminate this agreement immediately if you breach any of the terms and conditions. -# Ordnance Survey also reserves the right to terminate the agreement at any time on giving you thirty (30) days written -# notice (which may be given by email or by posting a notification on Ordnance Survey's website). -# -# 8 These terms and conditions are governed by English law, and you agree to the exclusive jurisdiction of the English courts. -# (C) Crown copyright and/or database right 2009 Ordnance Survey -# -# v1.0 May 2009 -############################################################################### - - -import os - -import gdaltest -import pytest - -from osgeo import ogr - -pytestmark = pytest.mark.require_driver("UK .NTF") - -############################################################################### - - -def test_ogr_ntf_1(): - - gdaltest.download_or_skip( - "http://www.ordnancesurvey.co.uk/oswebsite/products/strategi/sampledata/stratntf.exe", - "stratntf.exe", - ) - - try: - os.stat("tmp/cache/SS.ntf") - except OSError: - try: - gdaltest.unzip("tmp/cache", "tmp/cache/stratntf.exe") - try: - os.stat("tmp/cache/SS.ntf") - except OSError: - pytest.skip() - except OSError: - pytest.skip() - - ds = ogr.Open("tmp/cache/SS.ntf") - assert ds.GetLayerCount() == 5 - - layers = [ - ("STRATEGI_POINT", ogr.wkbPoint, 9193), - ("STRATEGI_LINE", ogr.wkbLineString, 8369), - ("STRATEGI_TEXT", ogr.wkbPoint, 1335), - ("STRATEGI_NODE", ogr.wkbNone, 10991), - ("FEATURE_CLASSES", ogr.wkbNone, 224), - ] - - for l in layers: - lyr = ds.GetLayerByName(l[0]) - assert lyr.GetLayerDefn().GetGeomType() == l[1] - assert lyr.GetFeatureCount() == l[2] - if l[1] != ogr.wkbNone: - assert lyr.GetSpatialRef().ExportToWkt().find("OSGB 1936") != -1 - - lyr = ds.GetLayerByName("STRATEGI_POINT") - feat = lyr.GetNextFeature() - assert feat.GetGeometryRef().ExportToWkt() == "POINT (222904 127850)" - - -############################################################################### -def test_ogr_ntf_2(): - - gdaltest.download_or_skip( - "http://www.ordnancesurvey.co.uk/oswebsite/products/meridian2/sampledata/meridian2ntf.exe", - "meridian2ntf.exe", - ) - - try: - os.stat("tmp/cache/Port_Talbot_NTF/SS78.ntf") - except OSError: - try: - gdaltest.unzip("tmp/cache", "tmp/cache/meridian2ntf.exe") - try: - os.stat("tmp/cache/Port_Talbot_NTF/SS78.ntf") - except OSError: - pytest.skip() - except OSError: - pytest.skip() - - ds = ogr.Open("tmp/cache/Port_Talbot_NTF/SS78.ntf") - assert ds.GetLayerCount() == 5 - - layers = [ - ("MERIDIAN2_POINT", ogr.wkbPoint, 408), - ("MERIDIAN2_LINE", ogr.wkbLineString, 513), - ("MERIDIAN2_TEXT", ogr.wkbPoint, 7), - ("MERIDIAN2_NODE", ogr.wkbNone, 397), - ("FEATURE_CLASSES", ogr.wkbNone, 50), - ] - - for l in layers: - lyr = ds.GetLayerByName(l[0]) - assert lyr.GetLayerDefn().GetGeomType() == l[1] - assert lyr.GetFeatureCount() == l[2] - if l[1] != ogr.wkbNone: - assert lyr.GetSpatialRef().ExportToWkt().find("OSGB 1936") != -1 - - lyr = ds.GetLayerByName("MERIDIAN2_POINT") - feat = lyr.GetNextFeature() - assert feat.GetGeometryRef().ExportToWkt() == "POINT (275324 189274)" - - lyr = ds.GetLayerByName("MERIDIAN2_LINE") - feat = lyr.GetNextFeature() - assert ( - feat.GetGeometryRef().ExportToWkt() - == "LINESTRING (275324 189274,275233 189114,275153 189048)" - ) diff --git a/autotest/ogr/ogr_ogdi.py b/autotest/ogr/ogr_ogdi.py deleted file mode 100755 index 9e8883b7d866..000000000000 --- a/autotest/ogr/ogr_ogdi.py +++ /dev/null @@ -1,204 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test read functionality for OGR OGDI driver. -# Author: Even Rouault -# -############################################################################### -# Copyright (c) 2010-2011, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - -import os - -import gdaltest -import ogrtest -import pytest - -from osgeo import ogr - -pytestmark = pytest.mark.require_driver("OGDI") - -############################################################################### - - -@pytest.fixture(scope="module", autouse=True) -def setup_and_cleanup(): - - # Skip tests when -fsanitize is used because of memleaks in libogdi - if gdaltest.is_travis_branch("sanitize"): - ogrtest.ogdi_drv = None - pytest.skip("Skipping because of memory leaks in OGDI") - - ogrtest.ogdi_drv = ogr.GetDriverByName("OGDI") - - -@pytest.fixture() -def ogdi_ds(): - - gdaltest.download_or_skip( - "http://freefr.dl.sourceforge.net/project/ogdi/OGDI_Test_Suite/3.1/ogdits-3.1.0.zip", - "ogdits-3.1.0.zip", - ) - - if not os.path.exists("tmp/cache/ogdits-3.1"): - gdaltest.unzip("tmp/cache", "tmp/cache/ogdits-3.1.0.zip") - - if not os.path.exists("tmp/cache/ogdits-3.1"): - pytest.skip("Could not extract test data") - - url_name = ( - "gltp:/vrf/" + os.getcwd() + "/tmp/cache/ogdits-3.1/data/vpf/vm2alv2/texash" - ) - - ds = ogr.Open(url_name) - assert ds is not None, "cannot open " + url_name - - return ds - - -def test_ogr_ogdi_1(ogdi_ds): - - assert ogdi_ds.GetLayerCount() == 57, "did not get expected layer count" - - layers = [ - ("libref@libref(*)_line", ogr.wkbLineString, 15), - ("libreft@libref(*)_text", ogr.wkbPoint, 4), - ("markersp@bnd(*)_point", ogr.wkbPoint, 40), - ("polbnda@bnd(*)_area", ogr.wkbPolygon, 6), - ] - - for l in layers: - lyr = ogdi_ds.GetLayerByName(l[0]) - assert lyr.GetLayerDefn().GetGeomType() == l[1] - assert lyr.GetFeatureCount() == l[2] - # if l[1] != ogr.wkbNone: - # if lyr.GetSpatialRef().ExportToWkt().find('WGS 84') == -1: - # return 'fail' - - lyr = ogdi_ds.GetLayerByName("libref@libref(*)_line") - feat = lyr.GetNextFeature() - - wkt = "LINESTRING (-97.570159912109375 31.242000579833984,-97.569938659667969 31.242116928100586,-97.562828063964844 31.245765686035156,-97.558868408203125 31.247797012329102,-97.555778503417969 31.249361038208008,-97.55413818359375 31.250171661376953)" - ref_geom = ogr.CreateGeometryFromWkt(wkt) - - ogrtest.check_feature_geometry(feat, ref_geom) - - -############################################################################### -# Run test_ogrsf - - -def test_ogr_ogdi_2(ogdi_ds): - - import test_cli_utilities - - if test_cli_utilities.get_test_ogrsf_path() is None: - pytest.skip() - - ret = gdaltest.runexternal( - test_cli_utilities.get_test_ogrsf_path() - + ' --config OGR_OGDI_LAUNDER_LAYER_NAMES YES -ro "' - + ogdi_ds.GetDescription() - + '" markersp_bnd contourl_elev polbnda_bnd extractp_ind' - ) - - assert ret.find("INFO") != -1 and ret.find("ERROR") == -1 - - -############################################################################### -# Test GetFeature() - - -def test_ogr_ogdi_3(ogdi_ds): - - lyr0 = ogdi_ds.GetLayer(0) - lyr0.ResetReading() - feat00_ref = lyr0.GetNextFeature() - feat01_ref = lyr0.GetNextFeature() - feat02_ref = lyr0.GetNextFeature() - - lyr1 = ogdi_ds.GetLayer(1) - lyr1.ResetReading() - feat10_ref = lyr1.GetNextFeature() - feat11_ref = lyr1.GetNextFeature() - - feat02 = lyr0.GetFeature(2) - feat00 = lyr0.GetFeature(0) - feat01 = lyr0.GetFeature(1) - feat10 = lyr1.GetFeature(0) - feat11 = lyr1.GetFeature(1) - - assert feat00.Equal(feat00_ref), "features not equal" - - assert feat01.Equal(feat01_ref), "features not equal" - - assert feat02.Equal(feat02_ref), "features not equal" - - assert feat10.Equal(feat10_ref), "features not equal" - - assert feat11.Equal(feat11_ref), "features not equal" - - -############################################################################### -# Extract of full dataset - - -def test_ogr_ogdi_4(): - - url_name = "gltp:/vrf/" + os.getcwd() + "/data/vm2alv2_texash/texash" - ds = ogr.Open(url_name) - assert ds is not None, "cannot open dataset" - - assert ds.GetLayerCount() == 6, "did not get expected layer count" - - layers = [("polbnda@bnd(*)_area", ogr.wkbPolygon, 6)] - - for l in layers: - lyr = ds.GetLayerByName(l[0]) - assert lyr.GetLayerDefn().GetGeomType() == l[1] - assert lyr.GetFeatureCount() == l[2] - - lyr = ds.GetLayerByName("polbnda@bnd(*)_area") - feat = lyr.GetNextFeature() - - if feat["id"] != 1 or feat["f_code"] != "FA001" or feat["acc"] != 1: - feat.DumpReadable() - pytest.fail("bad attributes") - - wkt = "POLYGON ((-97.6672973632812 31.250171661377,-97.5832977294922 31.250171661377,-97.5780029296875 31.250171661377,-97.5780029296875 31.250171661377,-97.5780944824219 31.2494583129883,-97.5779724121094 31.2492084503174,-97.577751159668 31.24880027771,-97.5776443481445 31.2484683990479,-97.5775451660156 31.2482070922852,-97.5774078369141 31.2479457855225,-97.5772705078125 31.2477989196777,-97.5771331787109 31.2477321624756,-97.5768661499023 31.2476787567139,-97.5766830444336 31.2476959228516,-97.5763168334961 31.2477016448975,-97.576042175293 31.247673034668,-97.5757141113281 31.2475509643555,-97.5754852294922 31.2473278045654,-97.5752792358398 31.2470207214356,-97.5751190185547 31.2467250823975,-97.5750122070312 31.2465076446533,-97.5748443603516 31.2462825775147,-97.5746002197266 31.2460918426514,-97.5742874145508 31.2459144592285,-97.5739288330078 31.2458171844482,-97.5736083984375 31.2457542419434,-97.5731201171875 31.2456817626953,-97.5728302001953 31.245641708374,-97.5724792480469 31.2455806732178,-97.5721817016602 31.2454471588135,-97.5719223022461 31.2453022003174,-97.5717086791992 31.2450218200684,-97.5715408325195 31.2446899414062,-97.5713882446289 31.2445201873779,-97.5711669921875 31.2442722320557,-97.5710678100586 31.2440910339355,-97.5711975097656 31.2438926696777,-97.5713577270508 31.2437191009521,-97.5718154907227 31.2434253692627,-97.5724258422852 31.2431831359863,-97.5726470947266 31.2430419921875,-97.5728530883789 31.2427291870117,-97.5728759765625 31.2424869537354,-97.57275390625 31.2423858642578,-97.5727996826172 31.2423534393311,-97.5712738037109 31.2422771453857,-97.5710067749023 31.2422466278076,-97.5707092285156 31.2421951293945,-97.5702285766602 31.2420444488525,-97.5701599121094 31.242000579834,-97.5701599121094 31.242000579834,-97.5794296264648 31.2372093200684,-97.5909194946289 31.2314224243164,-97.6050415039062 31.2241363525391,-97.6213302612305 31.2157878875732,-97.6490707397461 31.201566696167,-97.6662445068359 31.1928386688232,-97.6803207397461 31.1855792999268,-97.6936721801758 31.1787204742432,-97.7042617797852 31.1732997894287,-97.7107391357422 31.1699485778809,-97.7178192138672 31.1663246154785,-97.7325134277344 31.1587982177734,-97.7502975463867 31.1499614715576,-97.7502975463867 31.1499614715576,-97.7502975463867 31.1671733856201,-97.7502975463867 31.1671733856201,-97.7502975463867 31.250171661377,-97.6672973632812 31.250171661377))" - ref_geom = ogr.CreateGeometryFromWkt(wkt) - - ogrtest.check_feature_geometry(feat, ref_geom) - - ds = None - - # Test opening one single layer - ds = ogr.Open(url_name + ":polbnda@bnd(*):area") - assert ds is not None, "cannot open dataset" - assert ds.GetLayerCount() == 1, "did not get expected layer count" - - -############################################################################### -# Run test_ogrsf - - -def test_ogr_ogdi_5(): - - import test_cli_utilities - - if test_cli_utilities.get_test_ogrsf_path() is None: - pytest.skip() - - url_name = "gltp:/vrf/" + os.getcwd() + "/data/vm2alv2_texash/texash" - - ret = gdaltest.runexternal( - test_cli_utilities.get_test_ogrsf_path() - + ' --config OGR_OGDI_LAUNDER_LAYER_NAMES YES -ro "' - + url_name - + '"' - ) - - assert ret.find("INFO") != -1 and ret.find("ERROR") == -1 diff --git a/autotest/ogr/ogr_openfilegdb.py b/autotest/ogr/ogr_openfilegdb.py index e93bb7789f95..dc056eb15369 100755 --- a/autotest/ogr/ogr_openfilegdb.py +++ b/autotest/ogr/ogr_openfilegdb.py @@ -2958,3 +2958,12 @@ def test_ogr_openfilegdb_weird_gdbindexes(): lyr.SetAttributeFilter("id = '1'") f = lyr.GetNextFeature() assert f + + +############################################################################### + + +def test_ogr_openfilegdb_vsizip_random_zip_name_and_no_gdb_subdir(): + + with ogr.Open("/vsizip/data/filegdb/testopenfilegdb.zip") as ds: + assert ds.GetLayerCount() == 37 diff --git a/autotest/ogr/ogr_sdts.py b/autotest/ogr/ogr_sdts.py deleted file mode 100755 index 3fd0bd4bd838..000000000000 --- a/autotest/ogr/ogr_sdts.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test OGR SDTS driver functionality. -# Author: Even Rouault -# -############################################################################### -# Copyright (c) 2008-2009, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - - -import gdaltest -import pytest - -from osgeo import gdal, ogr - -pytestmark = pytest.mark.require_driver("OGR_SDTS") - -############################################################################### -@pytest.fixture(autouse=True, scope="module") -def module_disable_exceptions(): - with gdaltest.disable_exceptions(): - yield - - -############################################################################### -# Test reading - - -def test_ogr_sdts_1(): - - ds = ogr.Open("data/sdts/D3607551_rd0s_1_sdts_truncated/TR01CATD.DDF") - - assert ds is not None - - layers = [ - ("ARDF", 164, ogr.wkbNone, [("ENTITY_LABEL", "1700005")]), - ("ARDM", 21, ogr.wkbNone, [("ROUTE_NUMBER", "SR 1200")]), - ( - "AHDR", - 1, - ogr.wkbNone, - [ - ( - "BANNER", - "USGS-NMD DLG DATA - CHARACTER FORMAT - 09-29-87 VERSION ", - ) - ], - ), - ("NP01", 4, ogr.wkbPoint, [("RCID", "1")]), - ("NA01", 34, ogr.wkbPoint, [("RCID", "2")]), - ("NO01", 88, ogr.wkbPoint, [("RCID", "1")]), - ("LE01", 27, ogr.wkbLineString, [("RCID", "1")]), - ("PC01", 35, ogr.wkbPolygon, [("RCID", "1")]), - ] - - for layer in layers: - lyr = ds.GetLayerByName(layer[0]) - assert lyr is not None, "could not get layer %s" % (layer[0]) - with gdal.quiet_errors(): - assert ( - lyr.GetFeatureCount() == layer[1] - ), "wrong number of features for layer %s : %d. %d were expected " % ( - layer[0], - lyr.GetFeatureCount(), - layer[1], - ) - assert lyr.GetLayerDefn().GetGeomType() == layer[2] - feat_read = lyr.GetNextFeature() - for item in layer[3]: - if feat_read.GetFieldAsString(item[0]) != item[1]: - print(layer[0]) - print('"%s"' % (item[1])) - pytest.fail('"%s"' % (feat_read.GetField(item[0]))) - - # Check that we get non-empty polygons - lyr = ds.GetLayerByName("PC01") - with gdal.quiet_errors(): - f = lyr.GetNextFeature() - g = f.GetGeometryRef() - assert g - assert g.GetGeometryType() == ogr.wkbPolygon25D - assert not g.IsEmpty() - - ds = None - - -############################################################################### -# diff --git a/autotest/ogr/ogr_svg.py b/autotest/ogr/ogr_svg.py deleted file mode 100755 index 34f4d48ea6f5..000000000000 --- a/autotest/ogr/ogr_svg.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test SVG driver functionality. -# Author: Even Rouault -# -############################################################################### -# Copyright (c) 2011, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - - -import ogrtest -import pytest - -from osgeo import ogr - -pytestmark = pytest.mark.require_driver("SVG") - - -def test_ogr_svg_1(): - - svg_ds = ogr.Open("data/svg/test.svg") - - assert svg_ds is not None - - assert svg_ds.GetLayerCount() == 3, "wrong number of layers" - - lyr = svg_ds.GetLayerByName("points") - assert lyr.GetFeatureCount() == 1, "wrong number of features" - - feat = lyr.GetNextFeature() - - if feat.GetFieldAsString("building") != "yes": - feat.DumpReadable() - pytest.fail() - - ogrtest.check_feature_geometry( - feat, - "POINT (-13610535.695141600444913 4561593.930507560260594)", - max_error=0.0001, - ) - - lyr = svg_ds.GetLayerByName("lines") - assert lyr.GetFeatureCount() == 1, "wrong number of features" - - feat = lyr.GetNextFeature() - - ogrtest.check_feature_geometry( - feat, - "LINESTRING (-13609855.59 4561479.26,-13609856.21 4561474.27,-13609860.03 4561468.87,-13609865.74 4561465.69,-13609869.54 4561465.06)", - max_error=0.0001, - ) - - lyr = svg_ds.GetLayerByName("polygons") - assert lyr.GetFeatureCount() == 1, "wrong number of features" - - feat = lyr.GetNextFeature() - - ogrtest.check_feature_geometry( - feat, - "POLYGON ((-13610027.72 4562403.66,-13609661.58 4562462.95,-13609671.33 4562516.4,-13609676.11 4562532.65,-13609692.36 4562552.71,-13609711.46 4562609.08,-13609721.97 4562634.89,-13609727.7 4562650.16,-13609727.7 4562666.41,-13609716.23 4562699.85,-13609698.09 4562758.14,-13609697.13 4562771.51,-13609706.68 4562811.64,-13609720.06 4562843.18,-13609723.88 4562863.23,-13609725.8 4562891.91,-13609721.02 4562919.61,-13609713.37 4562938.72,-13609701.91 4562954.97,-13609688.53 4562968.34,-13609668.47 4562979.8,-13609614.96 4562993.17,-13609589.16 4563005.6,-13609552.85 4563037.14,-13609530.88 4563053.37,-13609474.5 4563076.3,-13609487.81 4563109.75,-13609491.89 4563149.38,-13609478.48 4563157.66,-13609467.67 4563171.31,-13609462.25 4563189.21,-13609420.46 4563189.32,-13609401.89 4563191.92,-13609395.2 4563201.47,-13609287.23 4563264.53,-13609303.48 4563291.29,-13609330.23 4563313.26,-13609339.78 4563326.63,-13609342.66 4563340.96,-13609344.56 4563458.48,-13609341.7 4563482.38,-13609322.59 4563518.68,-13609304.43 4563574.1,-13609290.1 4563592.26,-13609289.15 4563615.19,-13609290.1 4563655.32,-13609287.23 4563675.38,-13609271.95 4563703.09,-13609263.35 4563739.4,-13609258.57 4563762.32,-13609250.73 4563760.48,-13609226.84 4563718.43,-13609214.42 4563688.81,-13609204.87 4563661.1,-13609191.49 4563641.03,-13609170.47 4563629.56,-13609137.03 4563632.44,-13609109.32 4563648.68,-13609097.85 4563676.39,-13609100.72 4563712.7,-13609102.63 4563800.59,-13609116.0 4563819.7,-13609156.13 4563850.28,-13609151.55 4563861.7,-13609044.54 4563885.58,-13609057.92 4563945.78,-13609058.88 4563959.15,-13609031.17 4563987.81,-13609014.93 4563969.66,-13608988.17 4563981.13,-13608918.43 4563946.74,-13608834.46 4563870.62,-13608756.43 4563811.52,-13608716.02 4563488.23,-13608439.74 4563228.22,-13608483.69 4563167.08,-13608471.27 4563156.56,-13608461.72 4563132.68,-13608457.89 4563102.1,-13608460.76 4563077.26,-13608464.58 4563054.33,-13608444.52 4563044.78,-13608428.02 4562925.57,-13608408.91 4562672.38,-13608471.97 4562671.42,-13608514.96 4562653.27,-13608586.63 4562653.27,-13608728.76 4562628.85,-13609304.17 4562530.01,-13609354.81 4562401.98,-13609349.2 4562281.92,-13609401.52 4562278.13,-13609426.46 4562253.26,-13609385.39 4562165.98,-13609374.88 4561992.09,-13609361.7 4561946.97,-13609413.36 4561935.48,-13609402.85 4561884.85,-13609429.6 4561890.57,-13609487.88 4561880.07,-13609495.53 4561931.65,-13609442.02 4561942.18,-13609454.44 4562017.65,-13609601.59 4561997.59,-13609881.1 4561949.97,-13609858.97 4561817.17,-13609878.07 4561814.31,-13609891.08 4561883.51,-13609912.1 4561880.63,-13609918.79 4561924.59,-13609922.03 4561942.33,-13609949.37 4561938.35,-13609971.5 4562072.19,-13610108.74 4562049.23,-13610117.33 4562098.92,-13610151.73 4562094.14,-13610154.59 4562109.42,-13610224.34 4562097.96,-13610222.43 4562079.81,-13610381.03 4562053.05,-13610401.1 4562051.15,-13610386.77 4561907.82,-13610286.45 4561921.2,-13610210.01 4561869.6,-13610188.04 4561873.42,-13610173.7 4561778.84,-13610177.52 4561770.24,-13610184.21 4561764.51,-13610403.97 4561729.15,-13610429.77 4561711.0,-13610442.18 4561704.31,-13610574.04 4561683.29,-13610579.77 4561748.26,-13610620.86 4561745.4,-13610652.39 4562062.61,-13610802.4 4562037.77,-13610765.13 4561654.62,-13610860.68 4561641.25,-13610892.21 4562001.46,-13610848.26 4562007.19,-13610850.37 4562027.78,-13610870.24 4562264.22,-13610821.87 4562270.93,-13610819.96 4562245.14,-13610749.26 4562250.86,-13610754.03 4562306.29,-13610861.04 4562285.26,-13610864.69 4562319.19,-13610873.3 4562318.24,-13610882.85 4562463.47,-13610835.12 4562470.5,-13610816.0 4562473.37,-13610816.96 4562481.96,-13610737.66 4562493.43,-13610746.26 4562564.13,-13610782.56 4562558.4,-13610784.48 4562580.38,-13610826.52 4562575.6,-13610828.43 4562590.89,-13610845.63 4562588.98,-13610891.49 4562583.24,-13610895.3 4562621.46,-13610829.38 4562629.11,-13610844.67 4562786.76,-13610613.45 4562823.06,-13610570.46 4562334.82,-13610699.56 4562312.97,-13610695.75 4562293.86,-13610689.66 4562256.58,-13610543.47 4562263.26,-13610548.25 4562316.77,-13610487.1 4562326.32,-13610483.27 4562297.66,-13610443.14 4562303.38,-13610446.97 4562333.96,-13610027.72 4562403.66))", - max_error=0.0001, - ) diff --git a/autotest/ogr/ogr_tiger.py b/autotest/ogr/ogr_tiger.py deleted file mode 100755 index e24371d11087..000000000000 --- a/autotest/ogr/ogr_tiger.py +++ /dev/null @@ -1,156 +0,0 @@ -#!/usr/bin/env pytest -############################################################################### -# -# Project: GDAL/OGR Test Suite -# Purpose: Test read functionality for OGR TIGER driver. -# Author: Even Rouault -# -############################################################################### -# Copyright (c) 2011-2012, Even Rouault -# -# SPDX-License-Identifier: MIT -############################################################################### - -import os -import pathlib - -import gdaltest -import ogrtest -import pytest - -from osgeo import gdal, ogr - -pytestmark = pytest.mark.require_driver("Tiger") - -############################################################################### - - -@pytest.fixture(scope="module") -def TGR01001_dir(): - - gdaltest.download_or_skip( - "http://www2.census.gov/geo/tiger/tiger2006se/AL/TGR01001.ZIP", "TGR01001.ZIP" - ) - - dirname = pathlib.Path("tmp") / "cache" / "TGR01001" - - try: - os.stat("tmp/cache/TGR01001/TGR01001.MET") - except OSError: - try: - try: - os.stat("tmp/cache/TGR01001") - except OSError: - os.mkdir("tmp/cache/TGR01001") - gdaltest.unzip("tmp/cache/TGR01001", "tmp/cache/TGR01001.ZIP") - try: - os.stat("tmp/cache/TGR01001/TGR01001.MET") - except OSError: - pytest.skip() - except Exception: - pytest.skip() - - return dirname - - -def test_ogr_tiger_1(TGR01001_dir): - - tiger_ds = ogr.Open(TGR01001_dir) - assert tiger_ds is not None - - tiger_ds = None - # also test opening with a filename (#4443) - tiger_ds = ogr.Open(TGR01001_dir / "TGR01001.RT1") - assert tiger_ds is not None - - # Check a few features. - cc_layer = tiger_ds.GetLayerByName("CompleteChain") - assert cc_layer.GetFeatureCount() == 19289, "wrong cc feature count" - - feat = cc_layer.GetNextFeature() - feat = cc_layer.GetNextFeature() - feat = cc_layer.GetNextFeature() - - assert ( - feat.TLID == 2833200 and feat.FRIADDL is None and feat.BLOCKL == 5000 - ), "wrong attribute on cc feature." - - ogrtest.check_feature_geometry( - feat, - "LINESTRING (-86.4402 32.504137,-86.440313 32.504009,-86.440434 32.503884,-86.440491 32.503805,-86.44053 32.503757,-86.440578 32.503641,-86.440593 32.503515,-86.440588 32.503252,-86.440596 32.50298)", - max_error=0.000001, - ) - - feat = tiger_ds.GetLayerByName("TLIDRange").GetNextFeature() - assert ( - feat.MODULE == "TGR01001" and feat.TLMINID == 2822718 - ), "got wrong TLIDRange attributes" - - -############################################################################### -# Run test_ogrsf - - -def test_ogr_tiger_2(TGR01001_dir): - - import test_cli_utilities - - if test_cli_utilities.get_test_ogrsf_path() is None: - pytest.skip() - - ret = gdaltest.runexternal( - test_cli_utilities.get_test_ogrsf_path() + f" -ro {TGR01001_dir}" - ) - - assert ret.find("INFO") != -1 and ret.find("ERROR") == -1 - - -############################################################################### -# Load into a /vsimem instance to test virtualization. - - -def test_ogr_tiger_4(tmp_vsimem, TGR01001_dir): - - # load all the files into memory. - for filename in gdal.ReadDir(TGR01001_dir): - - if filename.startswith("."): - continue - - data = open(TGR01001_dir / filename, "r").read() - - f = gdal.VSIFOpenL(tmp_vsimem / filename, "wb") - gdal.VSIFWriteL(data, 1, len(data), f) - gdal.VSIFCloseL(f) - - # Try reading. - ogrtest.tiger_ds = ogr.Open(tmp_vsimem / "TGR01001.RT1") - assert ogrtest.tiger_ds is not None, "fail to open." - - ogrtest.tiger_ds = None - # also test opening with a filename (#4443) - ogrtest.tiger_ds = ogr.Open(tmp_vsimem / "TGR01001.RT1") - assert ogrtest.tiger_ds is not None - - # Check a few features. - cc_layer = ogrtest.tiger_ds.GetLayerByName("CompleteChain") - assert cc_layer.GetFeatureCount() == 19289, "wrong cc feature count" - - feat = cc_layer.GetNextFeature() - feat = cc_layer.GetNextFeature() - feat = cc_layer.GetNextFeature() - - assert ( - feat.TLID == 2833200 and feat.FRIADDL is None and feat.BLOCKL == 5000 - ), "wrong attribute on cc feature." - - ogrtest.check_feature_geometry( - feat, - "LINESTRING (-86.4402 32.504137,-86.440313 32.504009,-86.440434 32.503884,-86.440491 32.503805,-86.44053 32.503757,-86.440578 32.503641,-86.440593 32.503515,-86.440588 32.503252,-86.440596 32.50298)", - max_error=0.000001, - ) - - feat = ogrtest.tiger_ds.GetLayerByName("TLIDRange").GetNextFeature() - assert ( - feat.MODULE == "TGR01001" and feat.TLMINID == 2822718 - ), "got wrong TLIDRange attributes" diff --git a/cmake/helpers/CheckDependentLibraries.cmake b/cmake/helpers/CheckDependentLibraries.cmake index 09cf2536d907..3eaf1a074ea1 100644 --- a/cmake/helpers/CheckDependentLibraries.cmake +++ b/cmake/helpers/CheckDependentLibraries.cmake @@ -409,7 +409,6 @@ gdal_check_package(NetCDF "Enable netCDF driver" CAN_DISABLE NAMES netCDF TARGETS netCDF::netcdf NETCDF::netCDF VERSION "4.7") -gdal_check_package(OGDI "Enable ogr_OGDI driver" CAN_DISABLE) gdal_check_package(OpenCL "Enable OpenCL (may be used for warping)" CAN_DISABLE) set(PostgreSQL_ADDITIONAL_VERSIONS "14" CACHE STRING "Additional PostgreSQL versions to check") @@ -440,7 +439,6 @@ gdal_check_package(JXL_THREADS "JPEG-XL threading" CAN_DISABLE) gdal_check_package(Crnlib "enable gdal_DDS driver" CAN_DISABLE) gdal_check_package(basisu "Enable BASISU driver" CONFIG CAN_DISABLE) gdal_check_package(IDB "enable ogr_IDB driver" CAN_DISABLE) -gdal_check_package(rdb "enable RIEGL RDB library" CONFIG CAN_DISABLE) include(CheckDependentLibrariesTileDB) gdal_check_package(ExprTk "Enable C++ Mathematical Expression Tooklit Library (ExprTk) for VRT expressions" DISABLED_BY_DEFAULT) diff --git a/cmake/modules/packages/FindOGDI.cmake b/cmake/modules/packages/FindOGDI.cmake deleted file mode 100644 index 2077341f353f..000000000000 --- a/cmake/modules/packages/FindOGDI.cmake +++ /dev/null @@ -1,63 +0,0 @@ -# FindOGDI -# ~~~~~~~~~ -# -# Copyright (c) 2017, Hiroshi Miura -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. -# -# If it's found it sets OGDI_FOUND to TRUE -# and following variables are set: -# OGDI_INCLUDE_DIRS -# OGDI_LIBRARIES -# OGDI_VERSION -# - -find_package(PkgConfig QUIET) -if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_OGDI QUIET ogdi) - set(OGDI_VERSION_STRING ${PC_OGDI_VERSION}) - set(OGDI_INCLUDE_DIRS ${PC_OGDI_INCLUDE_DIRS}) -endif() - -find_path(OGDI_INCLUDE_DIR ecs.h - HINTS ${PC_OGDI_INCLUDE_DIRS} - PATH_SUFFIXES ogdi) -mark_as_advanced(OGDI_INCLUDE_DIR) - -find_library(OGDI_LIBRARY NAMES ogdi libogdi NAMES_PER_DIR) -mark_as_advanced(OGDI_LIBRARY) - -if(OGDI_INCLUDE_DIR AND OGDI_LIBRARY) - find_program(OGDI_CONFIG_EXE ogdi-config) - mark_as_advanced(OGDI_CONFIG_EXE) - execute_process(COMMAND ${OGDI_CONFIG_EXE} --version - OUTPUT_VARIABLE OGDI_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - execute_process(COMMAND ${OGDI_CONFIG_EXE} --cflags - OUTPUT_VARIABLE _cflags OUTPUT_STRIP_TRAILING_WHITESPACE - ) - # Collect paths of include directories from CFLAGS - separate_arguments(_cflags NATIVE_COMMAND "${_cflags}") - foreach(arg IN LISTS _cflags) - if("${arg}" MATCHES "^-I(.*)$") - list(APPEND OGDI_INCLUDE_DIRS "${CMAKE_MATCH_1}") - endif() - endforeach() - unset(_cflags) -endif() - -find_package_handle_standard_args(OGDI REQUIRED_VARS OGDI_LIBRARY OGDI_INCLUDE_DIRS - VERSION_VAR OGDI_VERSION) - -if(OGDI_FOUND) - set(OGDI_LIBRARIES ${OGDI_LIBRARY}) - set(OGDI_INCLUDE_DIRS ${OGDI_INCLUDE_DIRS}) - if(NOT TARGET OGDI::OGDI) - add_library(OGDI::OGDI UNKNOWN IMPORTED) - set_target_properties(OGDI::OGDI PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${OGDI_INCLUDE_DIRS}" - IMPORTED_LINK_INTERFACE_LANGUAGES "C" - IMPORTED_LOCATION "${OGDI_LIBRARY}") - endif() -endif() diff --git a/doc/source/development/building_from_source.rst b/doc/source/development/building_from_source.rst index 12ad5c15f594..d97eaf9c0fcf 100644 --- a/doc/source/development/building_from_source.rst +++ b/doc/source/development/building_from_source.rst @@ -1492,25 +1492,6 @@ the :ref:`vector.hana` driver. Control whether to use ODBC-CPP. Defaults to ON when ODBC-CPP is found. -OGDI -**** - -The `OGDI `_ library is required for the :ref:`vector.ogdi` -driver. It can be detected with pkg-config. - -.. option:: OGDI_INCLUDE_DIR - - Path to an include directory with the ``ecs.h`` header file. - -.. option:: OGDI_LIBRARY - - Path to a shared or static library file. - -.. option:: GDAL_USE_OGDI=ON/OFF - - Control whether to use OGDI. Defaults to ON when OGDI is found. - - OpenCAD ******* @@ -1851,18 +1832,6 @@ It can be detected with pkg-config. Control whether to use RasterLite2. Defaults to ON when RasterLite2 is found. -rdb -*** - -The `RDB ` -(closed source/proprietary) library is required for the :ref:`raster.rdb` driver. -Specify install prefix in the ``CMAKE_PREFIX_PATH`` variable. - -.. option:: GDAL_USE_RDB=ON/OFF - - Control whether to use rdb. Defaults to ON when rdb is found. - - SPATIALITE ********** diff --git a/doc/source/development/rfc/rfc33_gtiff_pixelispoint.rst b/doc/source/development/rfc/rfc33_gtiff_pixelispoint.rst index 99c85e7dcc3e..1434888ef6ed 100644 --- a/doc/source/development/rfc/rfc33_gtiff_pixelispoint.rst +++ b/doc/source/development/rfc/rfc33_gtiff_pixelispoint.rst @@ -37,7 +37,7 @@ software developers and data producers. This was based on the authors interpretation of something said once by the GeoTIFF author. However, a recent review of section [`section 2.5.2.2 `__] -of the GeoTIFF specificaiton has made it clear that GDAL behavior is +of the GeoTIFF specification has made it clear that GDAL behavior is incorrect and that PixelIsPoint georeferencing needs to be offset by a half a pixel when transformed to the GDAL georeferencing model. This issue is documented in the following tickets including #3837, #3838, diff --git a/doc/source/development/rfc/rfc3_commiters.rst b/doc/source/development/rfc/rfc3_commiters.rst index 39dccabde0a5..ea682623c03b 100644 --- a/doc/source/development/rfc/rfc3_commiters.rst +++ b/doc/source/development/rfc/rfc3_commiters.rst @@ -201,8 +201,8 @@ repository: contribute to the code base, please seek more information from the project steering committee, or the foundation legal counsel. -Bootstraping ------------- +Bootstrapping +------------- The following existing committers will be considered authorized GDAL/OGR committers as long as they each review the committer guidelines, and diff --git a/doc/source/development/rfc/rfc40_enhanced_rat_support.rst b/doc/source/development/rfc/rfc40_enhanced_rat_support.rst index e94502549dcd..131ab035b9e4 100644 --- a/doc/source/development/rfc/rfc40_enhanced_rat_support.rst +++ b/doc/source/development/rfc/rfc40_enhanced_rat_support.rst @@ -7,7 +7,7 @@ RFC 40: Improving performance of Raster Attribute Table implementation for large Summary: -------- -Raster Attrbute Tables from some applications (notably segmentation) can +Raster Attribute Tables from some applications (notably segmentation) can be very large and are slow to access with the current API due to the way only one element can get read or written at a time. Also, when an attribute table is requested by the application the whole table must be diff --git a/doc/source/development/rfc/rfc46_gdal_ogr_unification.rst b/doc/source/development/rfc/rfc46_gdal_ogr_unification.rst index 7c7dbba22985..a9022b32b9b4 100644 --- a/doc/source/development/rfc/rfc46_gdal_ogr_unification.rst +++ b/doc/source/development/rfc/rfc46_gdal_ogr_unification.rst @@ -252,7 +252,7 @@ Drivers and driver registration "group of the S-57 file" default="YES" />