{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Reducing data-cubes using geometry objects" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# If first time running, uncomment the line below to install any additional dependencies\n", "# !bash requirements-for-notebooks.sh" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "from earthkit.transforms import aggregate as ek_aggregate\n", "from earthkit import data as ek_data\n", "\n", "from earthkit.data.testing import earthkit_remote_test_data_file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load some test data\n", "\n", "All `earthkit-transforms` methods can be called with `earthkit-data` objects (Readers and Wrappers) or with the \n", "pre-loaded `xarray` or `geopandas` objects.\n", "\n", "In this example we will use hourly ERA5 2m temperature data on a 0.5x0.5 spatial grid for the year 2015 as\n", "our physical data; and we will use the NUTS geometries which are stored in a geojson file.\n", "\n", "First we lazily load the ERA5 data and NUTS geometries from our test-data repository.\n", "\n", "Note the data is only downloaded when\n", "we use it, e.g. at the `.to_xarray` line, additionally, the download is cached so the next time you run this\n", "cell you will not need to re-download the file (unless it has been a very long time since you have run the\n", "code, please see tutorials in `earthkit-data` for more details in cache management)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 5MB\n",
       "Dimensions:     (number: 1, time: 24, step: 1, surface: 1, latitude: 201,\n",
       "                 longitude: 281)\n",
       "Coordinates:\n",
       "  * number      (number) int64 8B 0\n",
       "  * time        (time) datetime64[ns] 192B 2015-01-01 ... 2015-01-01T23:00:00\n",
       "  * step        (step) timedelta64[ns] 8B 00:00:00\n",
       "  * surface     (surface) float64 8B 0.0\n",
       "  * latitude    (latitude) float64 2kB 80.0 79.75 79.5 79.25 ... 30.5 30.25 30.0\n",
       "  * longitude   (longitude) float64 2kB -10.0 -9.75 -9.5 ... 59.5 59.75 60.0\n",
       "    valid_time  (time, step) datetime64[ns] 192B ...\n",
       "Data variables:\n",
       "    t2m         (number, time, step, surface, latitude, longitude) float32 5MB ...\n",
       "Attributes:\n",
       "    GRIB_edition:            1\n",
       "    GRIB_centre:             ecmf\n",
       "    GRIB_centreDescription:  European Centre for Medium-Range Weather Forecasts\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             European Centre for Medium-Range Weather Forecasts\n",
       "    history:                 2024-10-15T14:00 GRIB to CDM+CF via cfgrib-0.9.1...
" ], "text/plain": [ " Size: 5MB\n", "Dimensions: (number: 1, time: 24, step: 1, surface: 1, latitude: 201,\n", " longitude: 281)\n", "Coordinates:\n", " * number (number) int64 8B 0\n", " * time (time) datetime64[ns] 192B 2015-01-01 ... 2015-01-01T23:00:00\n", " * step (step) timedelta64[ns] 8B 00:00:00\n", " * surface (surface) float64 8B 0.0\n", " * latitude (latitude) float64 2kB 80.0 79.75 79.5 79.25 ... 30.5 30.25 30.0\n", " * longitude (longitude) float64 2kB -10.0 -9.75 -9.5 ... 59.5 59.75 60.0\n", " valid_time (time, step) datetime64[ns] 192B ...\n", "Data variables:\n", " t2m (number, time, step, surface, latitude, longitude) float32 5MB ...\n", "Attributes:\n", " GRIB_edition: 1\n", " GRIB_centre: ecmf\n", " GRIB_centreDescription: European Centre for Medium-Range Weather Forecasts\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: European Centre for Medium-Range Weather Forecasts\n", " history: 2024-10-15T14:00 GRIB to CDM+CF via cfgrib-0.9.1..." ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get some demonstration ERA5 data, this could be any url or path to an ERA5 grib or netCDF file.\n", "# remote_era5_file = earthkit_remote_test_data_file(\"test-data\", \"era5_temperature_europe_2015.grib\") # Large file\n", "remote_era5_file = earthkit_remote_test_data_file(\"test-data\", \"era5_temperature_europe_20150101.grib\")\n", "era5_data = ek_data.from_source(\"url\", remote_era5_file)\n", "era5_data.to_xarray()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idNUTS_IDLEVL_CODECNTR_CODENAME_LATNNUTS_NAMEMOUNT_TYPEURBN_TYPECOAST_TYPEFIDgeometry
0DKDK0DKDanmarkDanmark000DKMULTIPOLYGON (((15.1629 55.0937, 15.094 54.996...
1RSRS0RSSerbiaSrbija/Сpбија000RSPOLYGON ((21.4792 45.193, 21.3585 44.8216, 22....
2EEEE0EEEestiEesti000EEMULTIPOLYGON (((27.357 58.7871, 27.6449 57.981...
3ELEL0ELElládaΕλλάδα000ELMULTIPOLYGON (((28.0777 36.1182, 27.8606 35.92...
4ESES0ESEspañaEspaña000ESMULTIPOLYGON (((4.391 39.8617, 4.1907 39.7981,...
\n", "
" ], "text/plain": [ " id NUTS_ID LEVL_CODE CNTR_CODE NAME_LATN NUTS_NAME MOUNT_TYPE \\\n", "0 DK DK 0 DK Danmark Danmark 0 \n", "1 RS RS 0 RS Serbia Srbija/Сpбија 0 \n", "2 EE EE 0 EE Eesti Eesti 0 \n", "3 EL EL 0 EL Elláda Ελλάδα 0 \n", "4 ES ES 0 ES España España 0 \n", "\n", " URBN_TYPE COAST_TYPE FID \\\n", "0 0 0 DK \n", "1 0 0 RS \n", "2 0 0 EE \n", "3 0 0 EL \n", "4 0 0 ES \n", "\n", " geometry \n", "0 MULTIPOLYGON (((15.1629 55.0937, 15.094 54.996... \n", "1 POLYGON ((21.4792 45.193, 21.3585 44.8216, 22.... \n", "2 MULTIPOLYGON (((27.357 58.7871, 27.6449 57.981... \n", "3 MULTIPOLYGON (((28.0777 36.1182, 27.8606 35.92... \n", "4 MULTIPOLYGON (((4.391 39.8617, 4.1907 39.7981,... " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Use some demonstration polygons stored, this could be any url or path to geojson file\n", "remote_nuts_url = earthkit_remote_test_data_file(\"test-data\", \"NUTS_RG_60M_2021_4326_LEVL_0.geojson\")\n", "nuts_data = ek_data.from_source(\"url\", remote_nuts_url)\n", "\n", "nuts_data.to_pandas()[:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reduce data\n", "### Default behaviour\n", "\n", "The default behaviour is to reduce the data along the spatial dimensions, only, and return the reduced data\n", "in the Xarray format it was provided, i.e. `xr.DataArray` or `xr.Dataset`.\n", "\n", "The returned object has a new dimension `FID` (feature id) which has a coordinate variable with the values\n", "of the `FID` column in the input `geodataframe`.\n", "\n", "The new variable name is made up of the original variable name and the method used to reduce, e.g. `t2m_mean`" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 4kB\n",
       "Dimensions:     (time: 24, index: 37)\n",
       "Coordinates:\n",
       "    number      int64 8B 0\n",
       "  * time        (time) datetime64[ns] 192B 2015-01-01 ... 2015-01-01T23:00:00\n",
       "    step        timedelta64[ns] 8B 00:00:00\n",
       "    surface     float64 8B 0.0\n",
       "    valid_time  (time) datetime64[ns] 192B 2015-01-01 ... 2015-01-01T23:00:00\n",
       "  * index       (index) int64 296B 0 1 2 3 4 5 6 7 8 ... 29 30 31 32 33 34 35 36\n",
       "Data variables:\n",
       "    t2m         (index, time) float32 4kB 278.7 278.9 279.1 ... 272.7 272.6\n",
       "Attributes:\n",
       "    GRIB_edition:            1\n",
       "    GRIB_centre:             ecmf\n",
       "    GRIB_centreDescription:  European Centre for Medium-Range Weather Forecasts\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             European Centre for Medium-Range Weather Forecasts\n",
       "    history:                 2024-10-15T14:01 GRIB to CDM+CF via cfgrib-0.9.1...
" ], "text/plain": [ " Size: 4kB\n", "Dimensions: (time: 24, index: 37)\n", "Coordinates:\n", " number int64 8B 0\n", " * time (time) datetime64[ns] 192B 2015-01-01 ... 2015-01-01T23:00:00\n", " step timedelta64[ns] 8B 00:00:00\n", " surface float64 8B 0.0\n", " valid_time (time) datetime64[ns] 192B 2015-01-01 ... 2015-01-01T23:00:00\n", " * index (index) int64 296B 0 1 2 3 4 5 6 7 8 ... 29 30 31 32 33 34 35 36\n", "Data variables:\n", " t2m (index, time) float32 4kB 278.7 278.9 279.1 ... 272.7 272.6\n", "Attributes:\n", " GRIB_edition: 1\n", " GRIB_centre: ecmf\n", " GRIB_centreDescription: European Centre for Medium-Range Weather Forecasts\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: European Centre for Medium-Range Weather Forecasts\n", " history: 2024-10-15T14:01 GRIB to CDM+CF via cfgrib-0.9.1..." ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reduced_data = ek_aggregate.spatial.reduce(era5_data, nuts_data)\n", "reduced_data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Reduce along additional dimension\n", "\n", "For example, any time dimension, this is advisable as it ensures correct handling missing values and weights.\n", "\n", "The extra_reduce_dims argument takes a single string or a list of strings corresponding to dimensions to\n", "include in the reduction.\n", "\n", "It is also possible to select a column in the geodataframe to use to populate the dimension and coordinate \n", "variable created by the reduction using the `mask_dim` kwarg, here we choose the `\"FID\"` column." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 468B\n",
       "Dimensions:  (FID: 37)\n",
       "Coordinates:\n",
       "    number   int64 8B 0\n",
       "    step     timedelta64[ns] 8B 00:00:00\n",
       "    surface  float64 8B 0.0\n",
       "  * FID      (FID) object 296B 'DK' 'RS' 'EE' 'EL' 'ES' ... 'CY' 'CZ' 'DE' 'NO'\n",
       "Data variables:\n",
       "    t2m      (FID) float32 148B 279.5 261.7 276.3 275.9 ... 272.7 274.4 273.1\n",
       "Attributes:\n",
       "    GRIB_edition:            1\n",
       "    GRIB_centre:             ecmf\n",
       "    GRIB_centreDescription:  European Centre for Medium-Range Weather Forecasts\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             European Centre for Medium-Range Weather Forecasts\n",
       "    history:                 2024-10-15T14:01 GRIB to CDM+CF via cfgrib-0.9.1...
" ], "text/plain": [ " Size: 468B\n", "Dimensions: (FID: 37)\n", "Coordinates:\n", " number int64 8B 0\n", " step timedelta64[ns] 8B 00:00:00\n", " surface float64 8B 0.0\n", " * FID (FID) object 296B 'DK' 'RS' 'EE' 'EL' 'ES' ... 'CY' 'CZ' 'DE' 'NO'\n", "Data variables:\n", " t2m (FID) float32 148B 279.5 261.7 276.3 275.9 ... 272.7 274.4 273.1\n", "Attributes:\n", " GRIB_edition: 1\n", " GRIB_centre: ecmf\n", " GRIB_centreDescription: European Centre for Medium-Range Weather Forecasts\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: European Centre for Medium-Range Weather Forecasts\n", " history: 2024-10-15T14:01 GRIB to CDM+CF via cfgrib-0.9.1..." ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reduced_data = ek_aggregate.spatial.reduce(\n", " era5_data, nuts_data,\n", " mask_dim=\"FID\", extra_reduce_dims='time', all_touched=True\n", ")\n", "reduced_data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Weighted reduction\n", "\n", "Provide numpy/xarray arrays of weights, or use predefined weights options, i.e. `latitude`:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 616B\n",
       "Dimensions:  (FID: 37)\n",
       "Coordinates:\n",
       "    number   int64 8B 0\n",
       "    step     timedelta64[ns] 8B 00:00:00\n",
       "    surface  float64 8B 0.0\n",
       "  * FID      (FID) object 296B 'DK' 'RS' 'EE' 'EL' 'ES' ... 'CY' 'CZ' 'DE' 'NO'\n",
       "Data variables:\n",
       "    t2m      (FID) float64 296B 279.5 261.6 276.3 276.0 ... 272.7 274.3 274.3\n",
       "Attributes:\n",
       "    GRIB_edition:            1\n",
       "    GRIB_centre:             ecmf\n",
       "    GRIB_centreDescription:  European Centre for Medium-Range Weather Forecasts\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             European Centre for Medium-Range Weather Forecasts\n",
       "    history:                 2024-10-15T14:01 GRIB to CDM+CF via cfgrib-0.9.1...
" ], "text/plain": [ " Size: 616B\n", "Dimensions: (FID: 37)\n", "Coordinates:\n", " number int64 8B 0\n", " step timedelta64[ns] 8B 00:00:00\n", " surface float64 8B 0.0\n", " * FID (FID) object 296B 'DK' 'RS' 'EE' 'EL' 'ES' ... 'CY' 'CZ' 'DE' 'NO'\n", "Data variables:\n", " t2m (FID) float64 296B 279.5 261.6 276.3 276.0 ... 272.7 274.3 274.3\n", "Attributes:\n", " GRIB_edition: 1\n", " GRIB_centre: ecmf\n", " GRIB_centreDescription: European Centre for Medium-Range Weather Forecasts\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: European Centre for Medium-Range Weather Forecasts\n", " history: 2024-10-15T14:01 GRIB to CDM+CF via cfgrib-0.9.1..." ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reduced_data_xr = ek_aggregate.spatial.reduce(\n", " era5_data, nuts_data, weights='latitude', mask_dim=\"FID\", extra_reduce_dims='time', \n", " all_touched=True\n", ")\n", "reduced_data_xr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Return as a pandas dataframe\n", "\n", "**WARNING: Returning reduced data in pandas format is considered experimental and may change in futureversions of earthkit** \n", "\n", "It is possible to return the reduced data in a fully expanded geopandas dataframe which contains the geometry \n", "and aggregated data.\n", "Additional columns for the data values and rows and indexes added to fully describe the reduced data.\n", "\n", "The returned object fully supports pandas indexing and in-built convenience methods (e.g. plotting),\n", "but it comes with memory usage cost, hence in this example we reduce along all dimensions." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Returning reduced data in pandas format is considered experimental and may change in futureversions of earthkit\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idNUTS_IDLEVL_CODECNTR_CODENAME_LATNNUTS_NAMEMOUNT_TYPEURBN_TYPECOAST_TYPEFIDgeometrynumberstepsurfacet2m
FID
DKDKDK0DKDanmarkDanmark000DKMULTIPOLYGON (((15.1629 55.0937, 15.094 54.996...00 days0.0279.547363
RSRSRS0RSSerbiaSrbija/Сpбија000RSPOLYGON ((21.4792 45.193, 21.3585 44.8216, 22....00 days0.0261.353851
EEEEEE0EEEestiEesti000EEMULTIPOLYGON (((27.357 58.7871, 27.6449 57.981...00 days0.0276.197968
ELELEL0ELElládaΕλλάδα000ELMULTIPOLYGON (((28.0777 36.1182, 27.8606 35.92...00 days0.0274.270966
ESESES0ESEspañaEspaña000ESMULTIPOLYGON (((4.391 39.8617, 4.1907 39.7981,...00 days0.0277.095337
FIFIFI0FISuomi/FinlandSuomi/Finland000FIMULTIPOLYGON (((28.8967 69.0426, 28.4782 68.51...00 days0.0273.923889
FRFRFR0FRFranceFrance000FRMULTIPOLYGON (((55.8498 -21.1858, 55.7858 -21....00 days0.0272.965454
HRHRHR0HRHrvatskaHrvatska000HRMULTIPOLYGON (((17.6515 45.8478, 17.9121 45.79...00 days0.0267.700714
HUHUHU0HUMagyarországMagyarország000HUPOLYGON ((22.1211 48.3783, 22.1553 48.4034, 22...00 days0.0268.251129
IEIEIE0IEÉire/IrelandÉire/Ireland000IEPOLYGON ((-7.1885 54.3377, -6.8642 54.3302, -6...00 days0.0283.832977
\n", "
" ], "text/plain": [ " id NUTS_ID LEVL_CODE CNTR_CODE NAME_LATN NUTS_NAME \\\n", "FID \n", "DK DK DK 0 DK Danmark Danmark \n", "RS RS RS 0 RS Serbia Srbija/Сpбија \n", "EE EE EE 0 EE Eesti Eesti \n", "EL EL EL 0 EL Elláda Ελλάδα \n", "ES ES ES 0 ES España España \n", "FI FI FI 0 FI Suomi/Finland Suomi/Finland \n", "FR FR FR 0 FR France France \n", "HR HR HR 0 HR Hrvatska Hrvatska \n", "HU HU HU 0 HU Magyarország Magyarország \n", "IE IE IE 0 IE Éire/Ireland Éire/Ireland \n", "\n", " MOUNT_TYPE URBN_TYPE COAST_TYPE FID \\\n", "FID \n", "DK 0 0 0 DK \n", "RS 0 0 0 RS \n", "EE 0 0 0 EE \n", "EL 0 0 0 EL \n", "ES 0 0 0 ES \n", "FI 0 0 0 FI \n", "FR 0 0 0 FR \n", "HR 0 0 0 HR \n", "HU 0 0 0 HU \n", "IE 0 0 0 IE \n", "\n", " geometry number step \\\n", "FID \n", "DK MULTIPOLYGON (((15.1629 55.0937, 15.094 54.996... 0 0 days \n", "RS POLYGON ((21.4792 45.193, 21.3585 44.8216, 22.... 0 0 days \n", "EE MULTIPOLYGON (((27.357 58.7871, 27.6449 57.981... 0 0 days \n", "EL MULTIPOLYGON (((28.0777 36.1182, 27.8606 35.92... 0 0 days \n", "ES MULTIPOLYGON (((4.391 39.8617, 4.1907 39.7981,... 0 0 days \n", "FI MULTIPOLYGON (((28.8967 69.0426, 28.4782 68.51... 0 0 days \n", "FR MULTIPOLYGON (((55.8498 -21.1858, 55.7858 -21.... 0 0 days \n", "HR MULTIPOLYGON (((17.6515 45.8478, 17.9121 45.79... 0 0 days \n", "HU POLYGON ((22.1211 48.3783, 22.1553 48.4034, 22... 0 0 days \n", "IE POLYGON ((-7.1885 54.3377, -6.8642 54.3302, -6... 0 0 days \n", "\n", " surface t2m \n", "FID \n", "DK 0.0 279.547363 \n", "RS 0.0 261.353851 \n", "EE 0.0 276.197968 \n", "EL 0.0 274.270966 \n", "ES 0.0 277.095337 \n", "FI 0.0 273.923889 \n", "FR 0.0 272.965454 \n", "HR 0.0 267.700714 \n", "HU 0.0 268.251129 \n", "IE 0.0 283.832977 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reduced_data_pd = ek_aggregate.spatial.reduce(era5_data, nuts_data, return_as=\"pandas\", mask_dim=\"FID\", extra_reduce_dims=\"time\")\n", "reduced_data_pd[:10]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# Note that the NUTS regions include French foreign territories, hence the extent of the figure.\n" ] }, { "data": { "image/png": "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RH1x9PO7t4ujyD7AbDYbACAxMXGQS0JERP1hs9lgMpl6fLzs1wPzeDyoqKiA0WiE5Mclra1WKxITE1FaWjps1xljHYeP06GerOPw0FUdhRCw2WyIi4uDQtHzN1uyb4EpFIpOKz77U0hIyLD9D+ko1nH4OB3qyToODyfWsTctr6PYiYOIiGSJAUZERLLEAOuGVqvFAw88AK1WO9hFCRjWcfg4HerJOg4P/qyj7DtxEBHR6YktMCIikiUGGBERyRIDjIiIZIkBRkREssQA68ann36KGTNmQK/XIyIiApdeeqnP/pKSElx44YUICgpCREQE7r77bjgcjkEqbd/Z7XZMmjQJkiRh9+7dPvvkXMeioiLcfPPNSE1NhV6vR1paGh544IFO5ZdzHY969tlnkZqaCp1Oh6lTp+L7778f7CL12erVqzF9+nQYjUZERUVh2bJlOHjwoM8xQgg8+OCDiIuLg16vx4IFC7Bv375BKnH/rV69GpIkYcWKFd5tw6GO5eXluP766xEeHg6DwYBJkyZh586d3v1+qaOgTt555x0RGhoq1qxZIw4ePCgOHDgg3n77be9+l8slMjMzxVlnnSWys7PFxo0bRVxcnLjrrrsGsdR9c/fdd4vzzjtPABC7du3ybpd7HT///HOxfPlysX79epGfny8+/PBDERUVJX796197j5F7HYUQ4o033hBqtVq88MILIi8vT9xzzz0iKChIFBcXD3bR+mTx4sVi3bp1Ijc3V+zevVssXbpUJCUliebmZu8xf/vb34TRaBTvvvuuyMnJEVdddZWIjY0VVqt1EEveN9u2bRMpKSliwoQJ4p577vFul3sdGxoaRHJysli+fLnYunWrKCwsFF9++aU4cuSI9xh/1JEBdgKn0yni4+PFv//9726P+eyzz4RCoRDl5eXeba+//rrQarXCYrEMRDH94rPPPhMZGRli3759nQJsuNTxeI899phITU31/j4c6njGGWeI2267zWdbRkaG+P3vfz9IJfKvmpoaAUBs2rRJCCGEx+MRMTEx4m9/+5v3mPb2dmEymcRzzz03WMXsE5vNJtLT08XGjRvF/PnzvQE2HOr4u9/9TsyZM6fb/f6qIx8hniA7Oxvl5eVQKBSYPHkyYmNjcd555/k0bbds2YLMzEzExcV5ty1evBh2u92niTyUVVdX45ZbbsH//vc/GAyGTvuHQx1PZLFYEBYW5v1d7nV0OBzYuXMnFi1a5LN90aJFyMrKGqRS+ZfFYgEA779bYWEhqqqqfOqs1Woxf/582dX5zjvvxNKlS3Huuef6bB8Odfzoo48wbdo0XHHFFYiKisLkyZPxwgsvePf7q44MsBMUFBQAAB588EH88Y9/xCeffILQ0FDMnz8fDQ0NAICqqipER0f7nBcaGgqNRoOqqqoBL3NvCSGwfPly3HbbbZg2bVqXx8i9jifKz8/HU089hdtuu827Te51rKurg9vt7lSH6OhoWZT/VIQQuO+++zBnzhxkZmYCgLdecq/zG2+8gezsbKxevbrTvuFQx4KCAqxZswbp6elYv349brvtNtx99914+eWXAfivjqdNgD344IOQJOmkPzt27IDH4wEA3H///bjsssswdepUrFu3DpIk4e233/Zer6ulW4QQfl3Spbd6WsennnoKVqsVK1euPOn15FzH41VUVGDJkiW44oor8Itf/MJn31CsY2+dWFa5lb87d911F/bu3YvXX3+90z4517m0tBT33HMPXnnlFeh0um6Pk3MdPR4PpkyZglWrVmHy5Mm49dZbccstt2DNmjU+x/W3jrJfTqWn7rrrLlx99dUnPSYlJcW7QObYsWO927VaLUaMGIGSkhIAQExMDLZu3epzbmNjI5xOZ6dvFAOpp3V8+OGH8eOPP3aai2zatGm47rrr8NJLL8m+jkdVVFTgrLPOwsyZM7F27Vqf44ZqHXsqIiICSqWy0zfWmpoaWZT/ZH71q1/ho48+wnfffeezXFJMTAyAjm/wsbGx3u1yqvPOnTtRU1ODqVOnere53W589913ePrpp729LuVcx9jYWJ/PUAAYM2YM3n33XQB+/Hfsywu64cxisQitVuvTicPhcIioqCjx/PPPCyGOvfyvqKjwHvPGG2/I5uV/cXGxyMnJ8f6sX79eABDvvPOOKC0tFULIv45CCFFWVibS09PF1VdfLVwuV6f9w6GOZ5xxhrj99tt9to0ZM0a2nTg8Ho+48847RVxcnDh06FCX+2NiYsSjjz7q3Wa322XVwcFqtfr8/y8nJ0dMmzZNXH/99SInJ2dY1PGaa67p1IljxYoVYubMmUII//07MsC6cM8994j4+Hixfv16ceDAAXHzzTeLqKgo0dDQIIQ41v36nHPOEdnZ2eLLL78UCQkJsup+fbzCwsJuu9HLtY7l5eVi5MiR4uyzzxZlZWWisrLS+3OU3OsoxLFu9C+++KLIy8sTK1asEEFBQaKoqGiwi9Ynt99+uzCZTOLbb7/1+TdrbW31HvO3v/1NmEwm8d5774mcnBxxzTXXyKqLeVeO74UohPzruG3bNqFSqcQjjzwiDh8+LF599VVhMBjEK6+84j3GH3VkgHXB4XCIX//61yIqKkoYjUZx7rnnitzcXJ9jiouLxdKlS4VerxdhYWHirrvuEu3t7YNU4v7pKsCEkHcd161bJwB0+XM8OdfxqGeeeUYkJycLjUYjpkyZ4u1yLkfd/ZutW7fOe4zH4xEPPPCAiImJEVqtVsybN0/k5OQMXqH94MQAGw51/Pjjj0VmZqbQarUiIyNDrF271me/P+rI5VSIiEiWTpteiERENLwwwIiISJYYYEREJEsMMCIikiUGGBERyRIDjIiIZIkBRkREssQAIyIiWWKAERGRLDHAiIhIlhhgREQkSwwwIiKSpf8Piqp7D8f4QvEAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "reduced_data_pd.plot(\"t2m\")\n", "print('# Note that the NUTS regions include French foreign territories, hence the extent of the figure.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Appendix\n", "\n", "### Unadvised: return_as = 'pandas' for time-series\n", "\n", "This results in very heavy memory usage but may be useful" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Returning reduced data in pandas format is considered experimental and may change in futureversions of earthkit\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idNUTS_IDLEVL_CODECNTR_CODENAME_LATNNUTS_NAMEMOUNT_TYPEURBN_TYPECOAST_TYPEFIDgeometrynumberstepsurfacevalid_timet2m
FIDtime
DK2015-01-01 00:00:00DKDK0DKDanmarkDanmark000DKMULTIPOLYGON (((15.1629 55.0937, 15.094 54.996...00 days0.02015-01-01 00:00:00278.709229
2015-01-01 01:00:00DKDK0DKDanmarkDanmark000DKMULTIPOLYGON (((15.1629 55.0937, 15.094 54.996...00 days0.02015-01-01 01:00:00278.938873
2015-01-01 02:00:00DKDK0DKDanmarkDanmark000DKMULTIPOLYGON (((15.1629 55.0937, 15.094 54.996...00 days0.02015-01-01 02:00:00279.068481
2015-01-01 03:00:00DKDK0DKDanmarkDanmark000DKMULTIPOLYGON (((15.1629 55.0937, 15.094 54.996...00 days0.02015-01-01 03:00:00279.241272
2015-01-01 04:00:00DKDK0DKDanmarkDanmark000DKMULTIPOLYGON (((15.1629 55.0937, 15.094 54.996...00 days0.02015-01-01 04:00:00279.418610
\n", "
" ], "text/plain": [ " id NUTS_ID LEVL_CODE CNTR_CODE NAME_LATN NUTS_NAME \\\n", "FID time \n", "DK 2015-01-01 00:00:00 DK DK 0 DK Danmark Danmark \n", " 2015-01-01 01:00:00 DK DK 0 DK Danmark Danmark \n", " 2015-01-01 02:00:00 DK DK 0 DK Danmark Danmark \n", " 2015-01-01 03:00:00 DK DK 0 DK Danmark Danmark \n", " 2015-01-01 04:00:00 DK DK 0 DK Danmark Danmark \n", "\n", " MOUNT_TYPE URBN_TYPE COAST_TYPE FID \\\n", "FID time \n", "DK 2015-01-01 00:00:00 0 0 0 DK \n", " 2015-01-01 01:00:00 0 0 0 DK \n", " 2015-01-01 02:00:00 0 0 0 DK \n", " 2015-01-01 03:00:00 0 0 0 DK \n", " 2015-01-01 04:00:00 0 0 0 DK \n", "\n", " geometry \\\n", "FID time \n", "DK 2015-01-01 00:00:00 MULTIPOLYGON (((15.1629 55.0937, 15.094 54.996... \n", " 2015-01-01 01:00:00 MULTIPOLYGON (((15.1629 55.0937, 15.094 54.996... \n", " 2015-01-01 02:00:00 MULTIPOLYGON (((15.1629 55.0937, 15.094 54.996... \n", " 2015-01-01 03:00:00 MULTIPOLYGON (((15.1629 55.0937, 15.094 54.996... \n", " 2015-01-01 04:00:00 MULTIPOLYGON (((15.1629 55.0937, 15.094 54.996... \n", "\n", " number step surface valid_time \\\n", "FID time \n", "DK 2015-01-01 00:00:00 0 0 days 0.0 2015-01-01 00:00:00 \n", " 2015-01-01 01:00:00 0 0 days 0.0 2015-01-01 01:00:00 \n", " 2015-01-01 02:00:00 0 0 days 0.0 2015-01-01 02:00:00 \n", " 2015-01-01 03:00:00 0 0 days 0.0 2015-01-01 03:00:00 \n", " 2015-01-01 04:00:00 0 0 days 0.0 2015-01-01 04:00:00 \n", "\n", " t2m \n", "FID time \n", "DK 2015-01-01 00:00:00 278.709229 \n", " 2015-01-01 01:00:00 278.938873 \n", " 2015-01-01 02:00:00 279.068481 \n", " 2015-01-01 03:00:00 279.241272 \n", " 2015-01-01 04:00:00 279.418610 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reduced_data_pd = ek_aggregate.spatial.reduce(era5_data, nuts_data, return_as=\"pandas\", mask_dim=\"FID\")\n", "reduced_data_pd[:5]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAIDCAYAAABMyckaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACHQ0lEQVR4nOzdeXwU5eE/8M/svZtsNvdFTu5wn4KIgIocoohHRW1VWm1rBSxqtaK1Hq1i/Vqrth71QqtS+rOKoiKKchdB7kNuSICQhNy7ufac5/fHbDZZkgA5J5t83q/XvHZ2Znb2mQlkPnmeZ56RhBACRERERNShNGoXgIiIiKg7YggjIiIiUgFDGBEREZEKGMKIiIiIVKBTuwBERETUdciyDLfbrXYxOgWDwQCNpun6LoYwIiIiahNutxvZ2dmQZVntonQKGo0GmZmZMBgMja6XOEQFERERtZYQAidPnoTH40FycvI5a4C6A1mWkZeXB71ej7S0NEiS1GAb1oQRERFRq3m9XlRXVyM5ORkWi0Xt4nQKcXFxyMvLg9frhV6vb7C+e8dUIiIiahM+nw8Ammx6645qz0XtuTkbQxgRERG1mcaa3bqr850LhjAiIiIiFTCEEREREamAIYyIiIhIBQxhRERE1G3NmTMHkiRBkiTo9XokJCTgyiuvxDvvvBM03llGRgZefPHFwHshBB544AFYrVasXr26Rd/NEEZERETd2rRp05Cfn4+cnBx89dVXuOyyy/Db3/4WV199Nbxeb4PtfT4f7rzzTvzrX//C6tWrcfnll7foezlOGBEREbU5IQRqPI0PzdDezHpts+7SNBqNSExMBAD06NEDI0aMwNixY3HFFVfg3XffxV133RXY1uVy4ZZbbsHWrVuxfv16ZGVltbicDGFERETU5mo8Pgz449eqfPf+p6bCYmhdxLn88ssxdOhQfPLJJ4EQVllZiRkzZuDUqVP43//+h7S0tFZ9B0MYERERUSP69++PPXv2BN7/6U9/gtVqxf79+xEfH9/q/TOEERERUZsz67XY/9RU1b67LQghgpo1p0yZgm+//RbPPPNMUCf9lmIIIyIiojYnSVKrmwTVduDAAWRmZgbeX3HFFbj33ntx7bXXwufz4e9//3ur9s+7I4mIiIjOsnr1auzduxc33HBD0PIrr7wSX3zxBd555x3MnTsXQogWf0doR1QiIiKiVnK5XCgoKIDP58OZM2ewcuVKLFq0CFdffTVuv/32Bttffvnl+PLLL3H11VdDCIFXXnmlRc/MZAgjIiKibm3lypVISkqCTqdDVFQUhg4dipdffhl33HEHNJrGGw0nTZqEFStWYMaMGZBlGa+99lqzg5gkWlOPRkRERATA6XQiOzsbmZmZMJlMahenUzjfOWGfMCIiIiIVMIQRERERqYAhjIiIiEgFDGFEREREKmAIIyIiIlIBQxgRERGRChjCiIiIiFTAEEZERESkAoYwIiIiIhUwhBEREVG3NWfOHEiSBEmSoNPpkJaWht/85jcoKysLbLNz505cffXViI+Ph8lkQkZGBmbPno3i4uJWfTdDGBEREXVr06ZNQ35+PnJycvDWW2/h888/xz333AMAKCwsxOTJkxEbG4uvv/4aBw4cwDvvvIOkpCRUV1e36nv5AG8iIiLq1oxGIxITEwEAKSkpmD17Nt59910AwKZNm+BwOPDWW29Bp1NiU2ZmJi6//PJWfy9DGBEREbU9IQBP62qKWkxvASSpRR89fvw4Vq5cCb1eDwBITEyE1+vFsmXLcOONN0Jq4X4bwxBGREREbc9TDTyTrM53P5IHGMIuePMvvvgC4eHh8Pl8cDqdAIAXXngBADB27Fg88sgjuPXWW3H33XfjoosuwuWXX47bb78dCQkJrSom+4QRERFRt3bZZZdh165d2LJlC+bPn4+pU6di/vz5gfVPP/00CgoK8Prrr2PAgAF4/fXX0b9/f+zdu7dV3ysJIURrC09ERETdm9PpRHZ2NjIzM2EymUKmOXLOnDkoLy/Hp59+Glh22WWXYfz48fjTn/7U6GfcbjeGDx+OUaNG4b333mty3w3OyVnYHElERERtT5Ka1STYmTz++OOYPn06fvOb3yA5uWGTqsFgQK9evVBVVdWq72EIIyIiIqpn0qRJGDhwIJ555hlMmzYNS5cuxc0334y+fftCCIHPP/8cK1aswOLFi1v1PQxhRERERGe5//778fOf/xw/+clPYLFY8MADD+DUqVMwGo3o06cP3nrrLdx2222t+g72CSMiIqJWO1//p+7ofOeEd0cSERERqYAhjIiIiEgFDGFEREREKmAIIyIiIlIBQxgRERGRChjCiIiIiFTAEEZERESkAoYwIiIiIhUwhBERERGpgCGMiIiISAUMYURERNRtzZkzB5IkNZimTZsGAMjIyGh0/bPPPtvq7+YDvImIiKhbmzZtGhYvXhy0zGg0Buafeuop/PKXvwxab7VaW/29DGFERETUrRmNRiQmJja53mq1nnN9SzGEERERUZsTQqDGW6PKd5t1ZkiSpMp3N0dIhjBZlpGXlwer1RoSJ5mIiKirc7vdkGUZPp8PPp8PNd4aXLz0YlXKsuXWLbDoLRe8/RdffIHw8PCgZb///e/x2GOPBeb/8Ic/NPjMpEmTWlXOkAxheXl5SE1NVbsYRERE5Jeeno7XX38dNTVK7ZdLdqlcogt32WWX4bXXXgtaFh0dHZh/8MEHMWfOnKD1PXr0aPX3hmQIq+0Md+rUKURERKhcGiIiInK73Thz5gwyMjJgMpkghMD3Q78P2sbn82Hfvn0YMmQItFptu5XFrDM3a/uwsDD07t27yfWxsbHnXN9SIRnCapsgIyIiGMKIiIg6AafTiaKiImi12kDACtcFN/H5fD4YNUZY9JZ2DWGhIiRDGBEREVFbcblcKCgoCFqm0+kQGxsLAKioqGiw3mKxtLoiiIO1EhERUbe2cuVKJCUlBU3jx48PrP/jH//YYP1DDz3U6u9lTRgRERF1W++++y7efffdJtfn5OS023ezJoyIiIhIBQxhRERERCpgCCMiIiJSAUMYERERkQoYwoiIiIhUwBBGREREpAKGMCIiIiIVNCuELVq0CKNHj4bVakV8fDxmzZqFQ4cOBW1TWVmJefPmISUlBWazGVlZWQ0eijlp0iRIkhQ03Xzzza0/GiIiIqIQ0awQtm7dOsydOxebN2/GqlWr4PV6MWXKFFRVVQW2ue+++7By5Up88MEHOHDgAO677z7Mnz8fn332WdC+fvnLXyI/Pz8w/fOf/2ybIyIiIiIKAc0aMX/lypVB7xcvXoz4+Hhs374dEyZMAAB8//33uOOOOzBp0iQAwK9+9Sv885//xLZt23DttdcGPmuxWJCYmNjK4hMRdT9upxf2whqUF1bDUVyD6ORwZAyKgaSR1C4aETVDqx5bZLfbAQDR0dGBZePHj8fy5cvxi1/8AsnJyVi7di0OHz6Ml156KeizH374IT744AMkJCRg+vTpePzxx2G1Whv9HpfLBZfLFXjvcDhaU2wiok7P4/bBXlgDe2E1ygurA6GrvLAGNQ53g+2jk8Mwcno6eo9MgIZhjOiCzZkzB++9916D5VOnTsXKlSuRkZGBBQsWYMGCBW3+3S0OYUII3H///Rg/fjwGDRoUWP7yyy/jl7/8JVJSUqDT6aDRaPDWW28FPQjzpz/9KTIzM5GYmIh9+/Zh4cKF2L17N1atWtXody1atAhPPvlkS4tKRNQp+Twy7MU1KD/jD1lF1bD7A1dlmeucnzVb9YiMtyAs0oiTP5agNK8Kq97ejx+WZ2PEtHT0G5MIrY73XhFdiGnTpmHx4sVBy4xGY7t/b4tD2Lx587Bnzx5s3LgxaPnLL7+MzZs3Y/ny5UhPT8f69etxzz33ICkpCZMnTwag9AerNWjQIPTp0wejRo3Cjh07MGLEiAbftXDhQtx///2B9w6HA6mpqS0tOhFRh6sodeL4ziJ/rZZSo1VZ6oQQTX/GaNEhMsECW7wZkfH1Xy0wmut+fbuqPdi7Nhe7vjsFe1EN1rx/EFu/yMbwKekYcEkSdAZtBxwhUegyGo2qdJFqUQibP38+li9fjvXr1yMlJSWwvKamBo888giWLVuGGTNmAACGDBmCXbt24fnnnw+EsLONGDECer0eR44caTSEGY3GDkmkRETt4cjWM1jz4UF4nL4G6/QmbVDAiow3wxZvQWS8BaZw/QXt32jRY9RVmRhyeSp+3JCHXatOorLMhQ3/OYxtX+Vg2ORUDJrQAwZTq3qgEDWLEAKipiZomezzAU4n5OpqSNr2++NAMpshSZ2/Wb5Z/yOFEJg/fz6WLVuGtWvXIjMzM2i9x+OBx+OBRhNcBa7VaiHLcpP7/fHHH+HxeJCUlNSc4hARdWoelw8b/t9hHPhfPgAgPt2KlP7RdYErwQKzVd9mFwuDSYfhV6Zh8KQeOLgpH9u/PoHKUhe+/+QYdqw8gaFXpGLwpBSYwi4s3BG1hqipwaERIxssDwNwtJ2/u9+O7ZAslgve/osvvkB4eHjQst///vd47LHH2rpoQZoVwubOnYslS5bgs88+g9VqRUFBAQDAZrPBbDYjIiICEydOxIMPPgiz2Yz09HSsW7cO//rXv/DCCy8AAI4dO4YPP/wQV111FWJjY7F//3488MADGD58OC655JK2P0IiIhWUnK7E12/uQ1lBNSABo6ZnYPSMDGi07d9PS6fXYtDEFGSNT8bhLWewfWUO7IU1+OHzbOxcdRKDJ6Zg6BWpsEQY2r0sRKHgsssuazCmaf2bDttLs0JYbQFrh5+otXjxYsyZMwcAsHTpUixcuBA//elPUVpaivT0dDz99NO4++67AQAGgwHfffcdXnrpJVRWViI1NRUzZszA448/Dm07Vk0SEXUEIQR+3JCHjR8dgc8jw2Iz4MpfDERKv6gOL4tWq0HWuCT0G5uIYzsKsf2rHJScrsKOr09gz+pTGDA+GcOnpCE8ytThZaOuTzKb0W/H9qBlPp8Pu3fvxtChQ9v1mi+Zzc3aPiwsDL17926n0jSt2c2R55OYmNjgDoP6UlNTsW7duuZ8LRFRSHBVe7Dmg0M4tqMQAJA2MAZX3JGleo2TRiOhz6gE9B4Rj5y9xdj21QkU5jiwZ00u9q0/jf4XJ2HE1DTY4i68+YbofCRJatAkKHw+wGSCxmKBhhUvrRsnjIiIFAXZdnzz1o+oKHFCo5Ew9rpeGHZFaqcaQFXSSMgcGoeMIbHIPVCGbV/lIO9IOfZvzMOB/+Whz0UJGDk1A9HJYWoXlahDuVyuQBerWjqdDrGxsQCA06dPY9euXUHr09LSWt1kyRBGRNQKQhbY+e1JbPn0OGRZICLWhCl3DkJCZoTaRWuSJElIHRCN1AHRyDtaju1f5eDkj6U4vOUMDv9wBj2HxWHU9AzEpTU+gDZRV7Ny5coGNwf269cPBw8eBAA8//zzeP7554PW1++K1VKSuJA2xk7G4XDAZrPBbrcjIqLz/qIjoq6t2uHGd+/tx8kfSwEAvUbE47Lb+geN4RUqCk84sH3lCRzfWaQskIDpvx6MnsPi1C0YhQyn04ns7GxkZmbCZGq8n6HP58POnTsxfPjwbtEP/HznJPR+UxARdQKnDpbi23f2o9rhhlavwaU39cGA8ckhMTZRY+LTIzD914NRkleJzcuOIWdvCb5fdgwZQ2L5GCSidsJnWhARNYPsk7H5s2NY/tIuVDvciEoKw08eHoWBl/YI2QBWX0xyOK78xUAYw3QoP1ONI1vPqF0koi6LIYyI6AJVlDrx6d92YvtXJwABDLgkCT9ZOAoxPcLP/+EQYjArg74CwNYvsiH7mh5sm4hajiGMiOgCHN9VhP/8+QfkH7VDb9Jiyp0DcdltWdB30ecyDp6UAlO4HvaiGhz+gbVhRO2BIYyI6Bx8Hhnr/3MYX72+F65qL+LTrZj96Gj0GZ2gdtHalcGkw/Ap/tqwL7PhY20YUZtjCCMiakL5mWr897lt2LsmFwAwdHIqrn9wZLcZ1HTwxBSYrXo4ip04tLng/B8gomZhCCMiasShzfn4zzNbUXyqEqYwPWbMHYLxN/aBVtd9fm3qjVqMmJoOANi2Igc+L2vDiNoSh6ggIqrHUVyDH77IDtT8JPeJxJW/GIjwKKPKJVPHwAk9sOObk6goceLg9/kYeGkPtYtE1GUwhBFRt+fzyji+qwj7N+Yh92AZAECSgFEzMjHqqoxuPU6W3qDFyKnp2PjREWz7Kgf9xyZBq+8+tYFE7YkhjIi6rbKCKuzfmIeDmwvgrPQElqdmRWHUVZlI7hOpXuE6kYGXJmPnNydQWerCgU15GDQxRe0iEXUJ/HOGiLoVr9uHQ5vz8cnz27HkiS3Y9e0pOCs9CLMZMHJ6Om7788WY+dvhDGD16AxajJiWAQDYvvIEvB6fugUiakNz5syBJEkNpmnTpgEAdu7ciauvvhrx8fEwmUzIyMjA7NmzUVxc3OrvZk0YEXULxbmV2L8xD4d/KICr2gtAaXJMHxSDAeOTkT4oBhot/y5tyoDxSUptWJkL+zfmY8hlrA2jrmPatGlYvHhx0DKj0YjCwkJMnjwZ11xzDb7++mtERkYiOzsby5cvR3V1dau/lyGMiLost9OLo9sK8ePGPBTmOALLrdEmZF2ShKxxSQiPavxBwxRMp9di5LR0rPv3YexYmYMBlyRB10UHqqW2IYSA1x18R63P54PPI+Bx+SC34z8fnUHTrMeIGY1GJCYmNlj+6aefwuFw4K233oJOp0SmzMxMXH755W1TzjbZCxFRJyGEQOGJCuzfmIcjW8/A41KazjQaCZnDYjFgfDJS+0dD6sad7Vsqa1wytn+t9A37cUMehl6RqnaRqBPzumW88dt1ja7bho3t+t2/emki9MbWp7zExER4vV4sW7YMN954Y5s/H5YhjIi6BFe1B4d/OIMfN+ahJLcysNwWb8aA8cnoPzYJlgiDiiUMfVq9BqOmZ2Dth4ew4+sTGHBpcpd9bBN1L1988QXCw4OfAfv73/8ejz32GB555BHceuutuPvuu3HRRRfh8ssvx+23346EhNY/NUMSQohW76WDORwO2Gw22O12REREqF0cIlKJEAL5x+zYvzEPx7YXwutRmj60Og16jYjDgPHJSO4T2eZ/vXZnPq+MDx/fjIoSJy65sTeGTU5Tu0jUSTidTmRnZyMzMxMmk6nJ5sjdu3dj6NCh0GrbL8A3pzlyzpw5OH36NF577bWg5dHR0YiOjgYAlJSUYPXq1di8eTM+/fRTlJaWYv369Rg8ePA59332OWlQzgs8HiKiTqXK7sLXb+5D/lF7YFl0chgGjE9GvzGJMIXpVSxd16XVaTDqqgysef8gdnx9AgMv7dEmzT7U9UiS1ODfhsYHaPXK8vYMYc0VFhaG3r17N7k+JiYGP/nJT/CTn/wEixYtwvDhw/H888/jvffea9X3MoQRUcgpPOHAV6/vRWWZCzqDBn1GJWDA+GQkZEaw1qsD9BubiO1f5cBR7MTedbkYMSVd7SIRdRiDwYBevXqhqqqq1ftiCCOikHJk6xl8968D8HlkRCVacNVvhiAyoXs8ULuz0Go1GD0jE9+9dwA7vzmJQRN6wGDi5YRCl8vlQkFB8EPqdTodNm/ejKVLl+Lmm29G3759IYTA559/jhUrVjQY0qIl+L+GiEKCkAW2LD+O7StPAFDG97ryzoEwmvlrTA19L0rAtq9yYC+swd61uRjpH8yVKBStXLkSSUlJQcv69euHFStWwGKx4IEHHsCpU6dgNBrRp08fvPXWW7jtttta/b387UVEnZ7b6cWqd/YjZ48yQvXwKWkYO6tXt36mo9o0/tqwbxfvx85VJzF4YgoMDMQUgt599128++67Ta5/44032u27OTw0EXVq9qIafPzcduTsKYZWp8Hknw/AuOt7M4B1An1GJyAywQJXlRd71pxSuzhEIYchjIg6rdxDZfjo2a0ozauCxWbAdQ+MQL8xDUe1JnVoNBJGX50BANj17Sm4arzqFogoxDCEEVGnI4TA3rW5WP7SLriqvIhPt+KmhaORkMlxATub3iMTEJVogavai93fsTaMqDkYwoioU/F5Zaxbcgjrlx6GkAX6jknAdQ+MQFikUe2iUSOU2rBMAMDu707BWeVRuUREoYMhjIg6jZoKN5a/tAs/bsgDJODi63th8pwBfFB0J9d7RDyik8PgrmFtGCk12aQ437lgCCOiTqE4txIfLdqGvCPlMJi0mHHPEIyYks7BV0OApJFwUW1t2GrWhnVXtSPgu91ulUvSedSei6aeDsD7iYlIdcd2FuLbdw/A6/LBFmfGVfcMQXRSmNrFomboOSwOMSnhKMmtxK5VJzF2Vi+1i0QdTKfTwWKxoKioCHq9HhpNw3oen88HQHmmYmd6bFF7kGUZRUVFsFgs0Okaj1sMYUSkGiELbPsqBz98ng0ASM2KwpS7BvG5jyGotjbsq9f3Ys+aXAydnApzuEHtYlEHkiQJSUlJyM7OxokTJxrdRpZlFBcXIycnp9GQ1tVoNBqkpaU1WaPPEEZEqvC4fPjuvf04tqMIADD08lSMu6EXNNqu/4u5q8ocGovY1HAUn1Jqwy6+rukHIlPXZDAY0KdPnyabJCsrKzFjxgxs27YN4eHhHVy6jmcwGM4ZNhnCiKjDOUpqsOK1vSjJrYRGK2Hirf0w4JJktYtFrSRJEi66pidWvLpHqQ27Ig2WCNaGdTcajQYmk6nRdW63GydOnIDBYGhym+6Ef3ISUYfKO1qO/z67DSW5lTBb9Zh133AGsC4kY3AM4tOt8Lpl7Fx1Uu3iEHVqDGFE1GH2b8zDZ3/biZoKD2JTw/GThaOR1DtS7WJRG5KkunHD9q3NRZXdpXKJiDovhjAianeyT8b6/xzGmg8OQvYJ9BoRj+t/NxLWaDZHdEXpg2KQkBkBr0fGzm9YG0bUFIYwImpXHpcPK17fi71rcgEAY2ZmYuovB0Jv7Nq3p3dnSt8wf23Y+tOoKmdtGFFjGMKIqN3UVLjx6d924sTeEuj0Gkz/9WCMuiqTA7B2A6lZ0UjsaYPPI2P7140PV0DU3TGEEVG7cBTX4OP/247CHAeMYTpce99w9Bwep3axqINIkoSLZiq1Yfs35KGyzKlyiYg6H4YwImpzRScr8N/ntsNeWANrtAk3PDgSiT1taheLOlhKvygk9bbB55WxfSVrw4jOxhBGRG3q1P5SLPvrDtQ43IhJCccND41EVCIfQdQdSZKEMdf0BADs/18eKkpZG0ZUH0MYEbWZQ1sK8MU/dsPj8qFHv0hc98AIhEUa1S4WqahHvyj06BsJ2Suw/asctYtD1KkwhBFRm9i56iS+XbwfsizQe1Q8rpk3DEYzH8pBCNwpeeB/+XAU16hcGqLOgyGMiFpFyAIbPzqCTR8fBQAMvSIVU34xEFo9f72QIrlPFFL6R0H2P7CdiBT8LUlELebzyFj1zo/Y/d0pAMC4G3pj/E/6QNJwCAoKdpG/b9iB/+VzAFciP4YwImoRV40Xn/9jF45sK4RGK2Hyzwdg+JVpaheLOqmkXjaMnJYOANj0yVFsWX4cQgiVS0WkLnbYIKJmqyp34fO/70bJ6UrojVpMv3swUrOi1S4WdXJjZ/WC3qTF5k+PY9uKHLidXqXmlIP3UjfVrJqwRYsWYfTo0bBarYiPj8esWbNw6NChoG0qKysxb948pKSkwGw2IysrC6+99lrQNi6XC/Pnz0dsbCzCwsIwc+ZM5Obmtv5oiKjdlRVU4ePntqPkdCXMEQZc98AIBjC6YCOnZWDCzX0BAHtW5yrPE5VZI0bdU7NC2Lp16zB37lxs3rwZq1atgtfrxZQpU1BVVRXY5r777sPKlSvxwQcf4MCBA7jvvvswf/58fPbZZ4FtFixYgGXLlmHp0qXYuHEjKisrcfXVV8Pn87XdkRFRmys4bsfH/7cdFaVO2OLNuOHBkYhLs6pdLAoxgyel4Io7siBJSh+xVW//CJ9XVrtYRB1OEq1olC8qKkJ8fDzWrVuHCRMmAAAGDRqE2bNn47HHHgtsN3LkSFx11VX405/+BLvdjri4OLz//vuYPXs2ACAvLw+pqalYsWIFpk6det7vdTgcsNlssNvtiIiIaGnxiagZsvcU45s398HrkRGfEYGr5w6B2WpQu1gUwo7tKMQ3b/8I2SeQPigG0341CDoDH+zelfH6HaxVHfPtdjsAIDq6rili/PjxWL58OU6fPg0hBNasWYPDhw8HwtX27dvh8XgwZcqUwGeSk5MxaNAgbNq0qdHvcblccDgcQRMRdZz9G/Pw1Wt74PXISB8Ug1n3DWcAo1brNSIeV90zBDq9Bif2leCLf+yG2+lVu1hEHabFHfOFELj//vsxfvx4DBo0KLD85Zdfxi9/+UukpKRAp9NBo9Hgrbfewvjx4wEABQUFMBgMiIqKCtpfQkICCgoKGv2uRYsW4cknn2xpUYkAKP9mvbKA1yfgkWXl1SfD41PmvbIMj0/AJwtoNRI0kgStBv5XKfAaNC9J0GgQWFa3LRrtbCzLAm6fDKfHB5e3iVePDKc3+LWxbV0eH1w+WflOSSmnpl6Z6pdbmfzl9JdPK9XO199O2UY5X4BPliHvs0PsU/7gEplhON7PjFc3HIcsBIQQEABkISAL5TOBZbJ/GURguUGngUmvhbH2td68SaeBsf6rXgOTTguj/7X2c5oWDH8hhPJz9fonn//nXbus7rXu34BGkqDTStBpJOg0GmVeW2++drn/nFLLpA+MwTX3DsMXr+zG6cPl+OzFXbhm/lCYwvRqF42o3bU4hM2bNw979uzBxo0bg5a//PLL2Lx5M5YvX4709HSsX78e99xzD5KSkjB58uQm9yeEaPIOmYULF+L+++8PvHc4HEhNTW1p0akTk2WBCpcX9moP7DUelNe4Ue6fr53Kq+uWubwyvPUClVcW8HhleGQBrz9c1QYubwd3/g2EHn/I8coC7hDq9yIJ4MoaPYa6lV8Tm4we/K+0GPiuWNVyGbQaGOsFNZ3/3AZClv/fQf2A5Wvnn71GQiCcaTUS9FqN8qqRoNMqZdRpJRh0GoQbdYgw6WE16WE16RBh0sFq0iPCrAsss5r0geVWkw4mfdduokvuE4lZ9w3H5y/vRmGOA5++sAPX3DsMYTY+8oq6thb1CZs/fz4+/fRTrF+/HpmZmYHlNTU1sNlsWLZsGWbMmBFYftdddyE3NxcrV67E6tWrccUVV6C0tDSoNmzo0KGYNWvWBdV4sU05NAghUFLlxumyGhRWuFBe7a4XpGpDlgd2//LyGg8cNR50ZFbSSIBOqwlcLPVaJTTJQqnd8ckCsizgq50PvLbNd5v02uCaIX+4MJ5VY6TUDgXXDBn1Ghi0mkBZlbL55/1l9AXmRb15BI4l8JmztpF8AkkHqhBW7IEAUNo/DFUpZmg0AKDUmGkkCVK9Vwm1NYC1y2rXK+8BwN1E7Z/TI8PlVV7rav/qagM9vvb5R1Fbs6mr96rTaqCVJMj+mlOPz19j5q89U+NGPoNWowQ2c21I08FqrAtsRr0GEhCozZTq/Wwae1/78wi810iQoGxXv0Y03KhDuEmHcGNdIAw36mAxaNtlWImSvEosf2kXqu1u2OLNuHbBcFijTW3+PaQeXr+DNasmTAiB+fPnY9myZVi7dm1QAAMAj8cDj8cDjSa4q5lWq4UsKzUAI0eOhF6vx6pVq3DTTTcBAPLz87Fv3z4899xzrTkW6mAen4wCuxOny2twuqwGeeU1yrz//enyGrhaWPNj1mthM+sRadHDZtYHzUdaDIFlJr0WOq0Evb8WQl+vuUjvr4HQazWBZiS9ti5s6TUta9oClP8LDcOMgCyjQWCrndf5a3Bqw5Ve2znHSnZWevDlq7tRUOyBVqfBlDsHoufwOFXL5JNFXUg7K8R5fXKgtkmphZKg1WiCgpXW33SoDTQjKstaEiTkQLOmHGjerq19qw1qjc77lGblCpcXjhoPKpxeVDjrXh1B771wOD2odHkhBOD2ySipcqOkyt0OZ7f5NBICwUx5bTys1a5T3ivLtRrprGZgpaa6dlnszFSc/vQE7IU1+ODpH2Cbngxh1QcF4bomZf//MSGgr60hrf1DRqv84aIsU/7PGWrnG12uga6T/p/szIQQqHL74KjxwOH0wFHjhd3/B3Xte+VVeV9Sale7yJ1Ks0LY3LlzsWTJEnz22WewWq2BPlw2mw1msxkRERGYOHEiHnzwQZjNZqSnp2PdunX417/+hRdeeCGw7Z133okHHngAMTExiI6Oxu9+9zsMHjz4nM2V1PGq3V7kldcgtyw4WNUGrgKH87y1ApIExFuNSIwwIdJiqAtSZj0i/IEq0qyHzaIPvNrMehh1nbv5RfL3w9K2MMR1VrJPxqcv7kRJbiWMFh2uumcIkntHql0saDUSLAYdLJ3gXgCNRoJBI8HQAQ8ckWWBSrc3KLDVD3AOf2Dz+GR/H726PxBkf988IZQ/Dmrf125X14+v/vvaecAry6hyeQOhsNKlTLU1wQ6nF4526kQfLgE3aYyIqfIi9+MT+CjchSJt+1dBajVSXZBrJKzVr4UOLGukFjvwWm8/9WuvdVql76ZUrw9pUJ9Of+2k0t9TgqTx9+Gs39+ztga63h8Sol7treesPq9uX3A/WI//D4Og5f7uHF5ZhtunzFe5vMFhyunxh6y6cNWc2mHZVd0OP7nQ1azmyKb+aly8eDHmzJkDQOl4v3DhQnzzzTcoLS1Feno6fvWrX+G+++4LfN7pdOLBBx/EkiVLUFNTgyuuuAKvvvrqBffzYnVm6/hkgZJKFworXCiscKLQ4UJRhfL+jMOJPLsStMqqPefdl0GrQXKkCT2izOgRaUZypPLaI8qMlEgLEm0mGHT86zJU5Owtxpev7IHRosN1vxuBmORwtYtEnYgQAjUeHyqdXlT4A1ql04tKlxIIK/1hrcJfi1cReK+sq3B64BNCqZUMNP8G11zq/f3qTD4JA444EVYtw6sDTg0MhztSX1ezWa/2UyNJ8MpyXTO2V/ZPPrhr589a5/avb6+m7o5Sv3m5o/u91qfXSrCZ9Up/R7PSp9Hm/2M7wt/nMcKkh87nxC3j+/P67deqccLUwhDWOKfH5w9TzkCoKnT4g1Zg3oXSKtcF/+ViNemUUOUPVrWvyZFmpESaERtu5J1hXcjKN/bi2I4iDL08FeNv6qN2caibc1V78MU/dqPguAN6oxYz7hmCHv2izv/BZvD5b5gJBDSPDLevrp9igwBXr/9i/VBXe2dzg2Xeuv6Ntcvks7sz1OvDKUTb9TsFEOiiofd30ajtnlFbI6e818BQu51O6SNbu124UemLaPMHq7NDVW3QMuo0F9S8z+t3MD47spMTQqC82oOiSqW2qrGQVVTpQqHD2aymAY0ExIQbEW+tnUyIj1Dmk2z+wBVlRoSJt4l3F85KD7L3KHc+9h+XqHJpiACjRY9r7h2Gr17fi9yDZfj8H7sx7VeDkDE4ts2+Q6uRYDZoYe6Eg8TWv2FGBIU21N1I438PIBCq9PX6xPK5nJ0bQ5hKzq61CkxBYcuF4kpXs6rLDTpNg2AVF270BywT4qzKfEyYscv1Z6LWOby1ALJXIDY1HLEpfBQRdQ4Gkw4z5g7BN2/9iOzdxfjqtb2Y/IsB6DMqQe2itTuNRoIGEi/UXRh/tm1AlgUqnN7AmFbl/rGsaodiKK1yo9jfB6vYH7AqXM3r0Bpp0SPeakScVQlVcf75eKtJCVwRRsSFmxBh1vEvH2qRA5vyAQBZ45JULglRMJ1ei6m/GoTv3j2AI1vPYNXbP8Lj8mHAJclqF42oVRjC6vHJAo6auhBVXm9g0MC4VoHlyvuyaneLx7Yy6jSBmqr6oersoBUTbuj0dwtSaCvOrUDxqUpotBL6jmZTJHU+Wq0Gk38+AHqTFvs35GHN+wfhcfow9AoO3E2hq1uFMJ8sUFjhRG5ZDXLLqpFbqgy/kFtejVz/sAutuVPGYtAiyj+GVaSldlwrZViG4KClvIYbWWtFncPBTcpwM5lDYmEKZz9A6pw0GgmTbu0Hg0mHXatOYuNHR+B2ejHqqgz+LqWQ1KVCmCwLFFa4lIBVVoNTpdUtClnhRl0gREWaDYExrGrfK+v8ryE0thVRY3xeGYd+UEJYfzZFUicnSRLGXd8LRrMWW5Zn44fPs+F2+jDu+l4MYhRyQjqE/XPdMZS4tYGarbxyJ9y+c4/QrtVISI40ISXSgtRoM1KiLEiJqnuNsxo77UjmRO3hxN4SOCs9sNgMSBsQrXZxiM5LkiSMuioTeqMOGz86gl2rTqLkdCUmzO6LyASL2sUjumAhHcL+vvooNMbg/3BajYQkmwkpUWakRlnqhSwzUqItSLAa+WgKonoOfK90yO83JhEa/t+gEDL0ilQYzFqsXXIIp/aX4t9/2oLhk9MwcnoG9Ea2TFDnF9Ih7NphyejVIy4oaCVGmBiyiC5Qld2FE/tKAAD9L2ZTJIWerHHJSOodiQ3/OYKTP5Zg+8oTOLSlAONv6oOew+LYREmdGkfMJ+rGdq46iU0fH0VCZgRu/P0otYtD1GJCCGTvLsbG/3cEFaVOAEDqgGg2UXYyvH4HY5URUTclhMBBf1Mka8Eo1EmShJ7D4nDLE2Mw6qoMaHSS0kT51BZ8/+kxeFw+tYtI1ABDGFE3VXiiAqV5VdDqNegzuuuPPk7dg96gxZiZPXHLH8cgbWAMZJ/AjpUnsOSJzTi2oxAh2PhDXRhDGFE3ddA/Qn7PYXEwmkO6eyhRA5HxFlw9bwim3z0Y1mgTKstcWPnGPnz+990oP1OtdvGIADCEEXVLXo8PR7adAQBksSmSuqizmyi1Og2bKKlTYQgj6oaydxfDVe1FeJQRPfpHqV0conZV20R58x8vQvogNlFS58EQRtQN1TZF9r84CRoNb+Gn7iEy3oIZc4fgqt8MhjWmXhPly7tQVlCldvGoG2III+pmKsucOHmgFADQ/2I+rJu6F0mSkDk0Drc+PgajZvibKA+UYemffsD3y9hESR2LIYyomzm4uQAQQHKfSNjiOH4SdU86gxZjrumJWx6v10T5tdJEeXQ7myipYzCEEXUjwWODsRaMyBbXsIny6zf3YflLbKKk9scQRtSNFByzw15YA51Ri14j4tUuDlGn0FgTZe7BMvznz1txaHO+2sWjLoyDAxF1I7UP6+49Ig4GE//7E9VX20TZf2wi1v37ME7tL8W37x5A0clKjLuhV7d6wL3dZUdeZR58wgej1giT1gSjzqjM60wwaAx8Lmcb4G9hom7C4/Lh6LZCAEDWOI4NRtQUW5wF18wbih++yMa2FTnYvfoUik9XYuovB8IcblC7eG3C7XPjdOVpnK48jdyK3AavFZ6Kc35eggSj1lgXzPwhzaQ1BZbXzpt0psA2wsm+dvUxhBF1E8d2FsLj8iEi1oSk3pFqF4eoU5M0EsbM7InY1HB8++4BnD5Uho+e2YbpvxmMuFSr2sU7L1nIKK4pDgpWuZW5gdei6iIInDsQxZhioNfq4fK64PQ54fK5IAsZACAg4PQ54fQ5m1UuXw3vPq2PIYyom6j/sG42IxBdmF7D4xEZb8GK1/fCUVSDT57bjstvz2rR81Yr3ZU4Un4ENd4aCCEgICALOXgeAkI0Pl8bgGQhB89DRrWnOhCwTleexumK03DL7nOWx6KzoIe1B1LCU9AjvAdSrClItaaiR3gPJIcnw6wzB20vhIBX9gYCmdPrf/U564Ka19VwWb1t7Q47nsbTzT53XZUkQvA+XIfDAZvNBrvdjoiICLWLQ9TpOYpr8P4fvgck4Panx8EabVK7SEQhxVnlwap3fsTJH5Ux9oZfmYax1/VqcrBjj+zBkbIj2Fe8D3uL92Jv0V4ctx8/b+1TW9JKWiSGJSIlPAUp1rqglRKegh7WHogyRnX4H2S8fgdjTRhRN1BbC5bSL4oBjKgFTGF6zJg7FFs+O44dX5/AzlUnUXy6ElPuHAijRYfcilwlbPmng6UH4fK5GuwnMSwRNoMNkiRBggRJkqCBBhpJA0iomwegkTSB9bXb1y47e96kNaGHtUdQ0EoIS4Beo+/oU0XNwBBG1MUJWeDg9wUAlKZIImoZjUbCxdf1gjkR2LTkBE7tL8Vrf/wK32W9hxP6ww22txqsGBw7GINiB2FI7BAMjB2IWHOsCiWnzoohjKiLO324DBWlThhMWvQcHqd2cYhCSo23BgdLD2Jv0d5A02JuZS5ispIx9dBdiKiKweQdd2F9n//A3NeDQbGDlNAVNwRp1jT2v6RzYggj6uJqa8F6j06A3qBVuTRE53bezt9eZ4N1Lp8LPuGDLGT4ZP+rqHsVQgS9D3ptZPva1zNVZ3C47DB8ouEdfRHJRlT124fozWOBU0Zcceh2jMxMx0WjezbZT4zobAxhRF2Yu8aLYzv8Y4OxKZI6mEf2ILciF9n2bBy3H0e2PRvlrvIGd82dfSdd7Z1/nUWsORaDYwcHmhYHxg5EhEHpVC5PkvH9smPY9e0pbF95AsW5lbjyFwNgtLAvFp0fQxhRF3Z0eyG8HhlRiRYkZPJOJGofFe4K5NhzkO3IxvFyJWxlO7JxynEKXuFt1b6DRmqvNyBo/QFADVoDdBodNJIGWkkLjaQJmtdKWmg0we8lSQpe38j2UcYoDIodhARLQpPNihqtBpfc2AexqVas+eAgTuwrwUfPbsNVdw9BdHJYq46duj6GMKIu7MAmjg1GbUMIgTPVZwI1WvWnopqiJj9n1pmRactUpohMxFvizzmieqg+GqffmEREJ4Vhxet7YC+swX//sg2Tfz4APYexHyY1jSGMqIsqP1ONguN2SJJygSAC/H2uhBdunxsunyvwevZ8/dqt2rBV461pcr/x5nhk2jKRYcsIhK6etp7nrEXqauLSrLhp4Wh8/eY+nD5cjq9e34vRMzIwekYmJPYTo0YwhBF1UbUP604bGIOwSKPKpaGWqA1DDpcDDrdDmfe/1p+v8dacM1S5fW645Lr3Le1zpZN0SItIq6vZ8tduZdgyYDV0/kf5dASz1YBrfjsMm/57FHvW5GLrlzkoOlWJK38+AAYzL7kUjP8iiLogWRY4tJljg3UWHtmDvMo85Fflw+EKDlG109nBqsJd0ehgn21Nr9HDqDXCoDUozYT+eYvOgvSI9KDAlWJN4eCfF0Cr1eDS2X0Rm2rFuiWHkLOnGP/9yzZMv3swohLZT4zqMIQRdUGnDpSiqtwFY5gOmUM4OGRHkIWMwupC5DhycMJ+AicqTuCEQ5lOV5xucQd1CRKsBiusBisiDBGIMEQEvQ83hMOiszQapM63zKA1BEZnp7aXNS4J0Ulh+Oqfe1FWUI3/PrsNV945EBmD+X+SFAxhRF3QQX+H/L6jE6HV8yLbVoQQKHWW4mTFSeTYc3DCcUKZd+TgpOPkOWuuTFoTeoT3gM1oCwSo+mEqELKMEUHLwvRhDEohLCEzAj9ZOApfv7kP+Uft+PLVPeg/JhEDxicjsZet2/SXo8YxhBF1Mc4qD47vVu5WyxrX8U2RQgjIdju8RUXBU1kZtOHh0EZFQRsVDW1UJHTR0cr7yEhI2s4xkKwQAg63A7mVuUqNlsNfq+Wfr/BUNPlZnaRDijUF6RHpDaZ4SzzDVDcVZjPi2gXDsfH/HcG+9adxcHMBDm4uQFSiBVnjktFvbCIsEQa1i0kqYAgj6mKObD0D2SsQ0yMcsanhbbZf4fPBW1LSMFydNfmKiiE8nubtXJKgjYiAtjaURUdBFwhrUcGBLSoauqhISBbLBdUi1HhrUO4sR5mrrO7VVY4yp/Ja6iwNel/uLD9n06EECUlhSUiPSEdaRBoyIjICQSs5PBk6DX+tUkNanQYTb+2HvmMSsX/jaRzdXoiygmps+uQoNn96DBlDY5E1LglpA2M44n43wt8WRF3MQf9dkVnjmj82mBACVRs2oHrHjnrBqlgJV6WlgHzhd9VpbDbo4mKhi42DLi4Ouugo+Kqq4Csrh6+0FL6yMnjLyiDb7YAQ8Nnt8NntQHb2hZXVoIcvwgKvxQCPBvBqZLil2skHFzxwwguPRoZXA8gawKsBfFrA5583aIBYLRClAdI0Erzauu28UVboU3ogIqMPEpN6I8OWifSIdKRGpMKo5d2m1DJJvWxI6mXDpTf1xZFtZ7D/f/kozHHg+M4iHN9ZhPAoI/pfnISscUmIiDWrXVxqZ5IQQqhdiOZyOByw2Wyw2+2IiOAo4ES1Sk5XYumffoBGI2HOXy6B2XrhTRyeM2dQ8ORTqFy9uumNNBpoY6KVUFU7xSpBS46xwRtlhTsqDE6bGU6tDzXemgZTtaca1d5qVHuqlWWuSsjlDkh2BzSOKujs1dBX1MBY4YKp0gNrtQxrNRBRI5TXasDQ8FF+7UpjsUDfowf0KSn+1x4wpKQE3mutHJ6BWq7kdCX2/y8Ph7YUwFVVVwvbo18UBoxPQs9hcdDpO0dzfWvx+h0spEPYw988DFO4CRpoAn/xayQNJEiQJCnotXY5JAS2P3s7DTQw6UyINEYiwhgBm8GGSGMkbEYbbEYbDFq22VPntvG/R7D721PIHBqLq34z5Lzbu31ulFaXoPyjjyC/8i6kqhrIOg0Kx2ehIs6Cygg9HOEa2MMllIYBpWYfqmUnqr3VDcJVezNoDLDoLbBozYgUZkS7dIiu0cHm1SNCGwarNgxWjQnhGjPCJBPCYIJFY4RFMkIvS4DXB+H1Aj4vhMcL4fU2+l54PRBuD7xnzsCTmwtvUdOjwdfS2Gww9OhRF9RqQ5p/mcbMGg06P59HxvHdRTjwvzycOlgG+K/ORosOfS9KxIDxSYhNCe3AzxAWLKRDWNZrWdCaO+6vA7PODJvRH8wMNkQYI+pCmsEWCGv1g5vNYINey3F1qP25PR78a+H3cFV60fcWCzQZVYH+T6XO0gb9osqcZYgorMKvv/Jh4EllH0eSgNdnaHEqruV9UkxaE8w6c/CkV14tOgssekuj82a9f1kT26jV10p2ueA5nQfP6Vx4Tp+GJzcX7tzTgXlfWdl596GNjVVCWkoKDD0zYezZE4aePWFIT4fGZOqAo6BQ4yipwcFN+TiwKR+VZXV33calWTHgkiT0GZ0Qkg8JZwgLFtIh7G8b/wZTuAkCAkKIwGvtaNACyryAAAQC841tXztf461BuascdrcdDpcD5a5yONyOFo8wDSjhTStp62rczqqtq/++sXW1d1QFrZMk6CQd9Fo99Bo9DBoD9Nq6V71GD4PWcP51WoOyXKMPrKu9cNZeGM06M0xaE7SarlEd3lZq/73YXXalQ7ervMl5h8sBjxzcWb32Zwyg7rXesroXKWh9/e19whf4nsj8FEw79EtU6yvwwYg/QtY0/W9WIwtc/YPATRtkGLyASw+smhqPA5dnItISDavB2jBINTF1938nvsoqJZD5Q5nndC7cp0/Dk6u8lysrm/6wJEGfnAxDz54w9syEITMThkxlXhsby+ELCLIskHugFPv/l4/s3UWQfcolW6vXoPeIeGRdkoTkPpEh82+FISxYSIewjvohykJGpacSdqcddrc9cIENTG574ELocDkC2zhcDiUAdhFGrbHxi7C/puJ809nBz6CtC4dnL9NJujb/pVL7zDyv7IVH9sDj8wTmA8tkD1w+F8qddUGq/s88ELCcyrxbdrdpGVtj6sE7kVk2BAdS/oecgVsQaYxElDEKkaZIRJmilHljJOJyKxH1t39Dc1jpAG+5+GIk/ekpGFJSVD6CrkcIAdnhgDs3F57c03CfPAF3dg7cx4/DlZ2t3JTQBI3VqtSaZWQqtWa1NWipqZAM7BrRHdVUuHFoSwEObMpHaV5VYLktzowB45MxcEIPGDv5o5EYwoIxhLUjWciBx5DU1rjJkINq5Wpr2M67rl5tXe06n/DB7XPDI3vg9rnhlb1172V3YN7j8wS2cct129euc8vuwKvb54bT6wzq66NGkJQg1dXSaYNr9eqHN1nIQQGqsVBVf1l70Gl0iDRGBpqhG5uPMEbAqDWi9r/b2ee09udaO19/m8C2ouEyDTSIMEbA4onAukWnIWTg5scuQkyPhkNTyE4nil95FSXvvAP4fNDYbEj4/e9hu25WyPwV3ZUIIeArK1MC2fHjcB/Phiv7ONzZOfDk5jZ9J6pWC0NKSlAwM/brD1O/vpD0odc8Rc0nhMCZbAcO/C8PR7YVwuNS7lQxmHUYcnkKhl6eClNY5/y3ECrX747CEEbnJISA01cvlHka3u1W460JdNQO3PF21uT0OoOCYWOvPtHBt7xBCVB6jT7o1ag1BvXrO1e4ijRGwqwzqx5idn93Chs/OoL4dCt+snB0g/XVW7ci/7E/wp2TAwCwTpuGxEcfgS4uroNLShdCdrngPnEC7uPZcGcfh+t4NtzZ2XAfPw65urrRz0gmE8yDBsE8fBjMQ4fCPGwYdLF8PE5X53Z6cXR7IXatOomyAuXfht6kxeBJKRg2ORXm8M5Va8rrdzCGMOo0fLKvQVAL1N7Vq6mrv0wjaQIBqrYZs7Zv29kBK2i+nZo81SCEwH/+vBUlpysx4ea+GDyprlnRV1mJwuefR/nS/wAAdHFxSHz8j7BOnqxWcakVhBDwFhYG154dPwbnvh8hVzQcyV+fkgLzsLpQZurfj7VlXZSQBY7tLMK2FTkoOa30Q9QZNBg0MQXDr0zrNCPy8/odrFkhbNGiRfjkk09w8OBBmM1mjBs3Dn/5y1/Qr1+/uh02cVF77rnn8OCDDwIAJk2ahHXr1gWtnz17NpYuXXpB5eAPkahO0ckK/L9ntkKjk/Dzv4wPNENUrFmDgiefgregAAAQ+ZMbEf/gg9Dy/0yXI2QZ7uPHUbN7N2p27ULNrl1wHT0GnPXrXTIaYRo0COZhSiizDBvG2tAuRsgC2XuKsW1FDopOKsFcq9dg4KXJGDElHWGR6g40zOt3sGaFsGnTpuHmm2/G6NGj4fV68eijj2Lv3r3Yv38/wsLCAAAF/l/4tb766ivceeedOHr0KHr27AlACWF9+/bFU089FdjObDbDZrNdUDn4QySqs37pYexdm4veI+Mx9ZeD4C0pwZmnn4FjxQoAgD4tDUlPPYWwsWNULil1JF9FBWr27PGHst2o2b0bssPRYDt9crJSWzZsGMzDhsLUvz87/ncBQgic2FeCbStycCZb+blrdRpkXZKEEVPTYY1WZ2gUXr+Dtao5sqioCPHx8Vi3bh0mTJjQ6DazZs1CRUUFvvvuu8CySZMmYdiwYXjxxRcv6HtcLhdcrrpxUhwOB1JTU/lDpG7P55Gx+OGNcFV5cfW8IYg89j+cWfQsfOXlgEaD6DlzEDd/HgcLJaW2LCcHNTt3BWrMXEeONF5bNnAgLCOGwzZrFoy9e6tUYmoLQgjkHijD1hXZyD+q3I2r0Urof3ESRk5L7/BHIzGEBWtVCDt69Cj69OmDvXv3YtCgQQ3WnzlzBikpKXjvvfdw6623BpZPmjQJP/74I4QQSEhIwPTp0/H444/D2sSjP5544gk8+eSTDZbzh0jd3dHthfj6zX0Is+pwWfmHqN6wHgBg7NcPSX/+M8yDG/6/JKrlq6yEc+9e1Ozahepdu+DctVt5fmc9YeMuRtTPbkP4xAmQtN1rDLiuRAiBvMPl2LoiG6cPlQMAJI2EfmMSMHJaBiITLB1SDoawYC0OYUIIXHvttSgrK8OGDRsa3ea5557Ds88+i7y8PJjqjQr95ptvIjMzE4mJidi3bx8WLlyI3r17Y9WqVY3uhzVhRI37/O+7cPLHUqTnfYdehz+BpNcjdu49iLnzTnbApmYTQii1Zbt2o+K7b1G5ek1gqAx9aiqifnorIq+/nv0KQ1z+0XJsW5GDk/tLAQCSBPQZnYCR0zMQnRTWrt/NEBasxSFs7ty5+PLLL7Fx40akNDHIY//+/XHllVfi73//+zn3tX37dowaNQrbt2/HiBEjzvvd/CFSdyaEgOfkSZT8sBeffGsCJA3GbnkSMVkpSPrzn2D0970kai137mmU/XsJyv/7cWBgWclige3amYj+2c9g7NVL5RJSa5zJdmDbimzk7C1RFkhA7xHxGHVVRqNjDbYFXr+DtSiEzZ8/H59++inWr1+PzMzMRrfZsGEDJkyYgF27dmHo0KHn3J8QAkajEe+//z5mz5593u/nD5G6k9oO1s49ewIdrL3l5Tja6wacSr0ctoocXDXDhKibb4ak0ahdXOqC5Joa2D//HGXvf6D0I/MLGzcOUT/7GZsqQ1zRyQpsW5GD47vqHlafOTQWo2dkIi6tbR8Yzut3sGaFMCEE5s+fj2XLlmHt2rXo06dPk9vOmTMH+/btw7Zt286733379mHw4MHn7OBfH3+I1FUJnw+uo0cDYatmz264jx0P6jwtIOFI358gN3kiAODy65ORNaW/WkWmbkQIgeotP6D0g/fZVNkFlZyuxLYVOTi6oxC1D+qwRptgsRlgiag32YywWA2B5eYIA/SGCwvhvH4Ha1YIu+eee7BkyRJ89tlnQWOD2Ww2mOvdfeVwOJCUlIS//vWvuPvuu4P2cezYMXz44Ye46qqrEBsbi/379+OBBx6A2WzG1q1bob2Av6Zqf4i7pk1HZEwMNDYbtBER0EZEQGOLgDbCBq3N/z4iAtp663nrNXUm3qIi/zAC/tC1bx9EIyOi61NTYR4yBIbBQ7GtpCeOH1H6SI7/SR8MvSK1o4tNVNdU+dF/A0NfSBYLImddi6if/pRNlSGsNL8K27/KwZGtZ86+ebZJBpMW5kBQMzYMbv7lHtQgOjqKIcyvWSGsqYFYFy9ejDlz5gTev/HGG1iwYAHy8/MbjP116tQp/OxnP8O+fftQWVmJ1NRUzJgxA48//jiio6MvqBy1IeyH3n0Q3swqcMlsbhjYIiKgtSmBzZCeAcvoUdAnJDRrv0TnI7tccO7fj5rduwNNi568vAbbacLCYBoyWBnlfMhQmIcOgS4mBm6nFyvf2IdT+0uh0Ui4Yk4W+l6UqMKRENWRq6th//wLlH1wVlPlJZcg6mc/RfjEiWwmD1HVDjccxTWodriDJ7sr6L3P08RzThtR467Cg4tnMoT5hfRji06v/BrhPi98Dgd8dgd8DjvkwLz/vX++sUd6nIs+NRWWUaOUafQo6FNTu8QjbqjjVX3/PYpfex3VO3cCHk/wSkmCsU8fmIcOUULX0KEw9OzZoH9NTaUbX/xjDwpzHNAZNJj268FIHxjTgUdBdG5NNlWmpSH6p7fCdv310DYxDBGFLiEEPE6fP5C5UGUPDmw19YNbhQfVzkqGsHpCOoQ154cofD7IlZWBwCY77A3DW7kdzgMH4Ny/P/ALpJYuISEQyCyjRsHQqxdDGZ1T9c6dKHrxJVRv2RJYpo2JCYQt89AhMA0aDG34uW8Jryh14vOXd6GsoBrGMB2unjcUiZkX9nQJIjW4c3NRtuTfKP9vw6ZK2w03wJSVxdqxbkjIAoX5JUhMiWMI8+s2Iaw5fJWVqNm5C9XbtqF62zY49+yBOKsGQxsVBcuokbCMGgXzqFHKoz54dxABcB46hKIXX0LlmjUAAEmvR+TNNyP6tp81u0a1NK8Kn/99FyrLXAiPMuKae4e1+zg+RG2lrqnyfbiOHA0s10ZGwjJmDMIuHgvLmDEwZGTwj9pugh3zgzGEXQDZ6UTN7j2o3rYV1du2oWbnLginM2gbTXg4zCOGwzJ6tBLMBg7kTQDdjCs7G8V//0fgmY3QamG7bhbi7rkH+uTkZu+v4LgdX7yyG64qL6ISLbjm3mGqPe+NqDWUpsotKPtwCar+9z/IZ918oktMRNiYMbCMHYuwi8dCn8i+jl0VQ1iwkA5h/31xE5LT4mCLsyAizgxbnBnhkUZImvb9i0q43XDu36/UlG3dhurt2yFXVgZtI5lMMA8bpjRhjhwBfY8e0MXF8Rl+XZAnLw9Fr74K+7JPAZ8PABBx1VWInT8PxibG0TufE/tKsPKNvfC6ZSRkRuDquUNhCucI+BT6hMeDmr37UL1lM6q+34yanTsbtDQY0tNhuXgswsYqNWW6qCiVSkttjSEsWEiHsP/7+XKYDcFNMxqdBFusWQllsWbY4s2IiFUCWkSMGVp92/dDED4fXIcO1YWybdvgKytrdFtNWBh0cXH+KTYwr431z8fGQRcfB21kJKvnOzlvcTGK33gD5f9eGriIhE+ahLjf3gtTVlaL93toSwFWv3cAsiyQNiAa0349GHojm7qpa5KdTtTs2IGqzVtQtXkznPv2NeiTa+zfXwlkY8fAMmr0eftRUufFEBYspEPYxs9+hK9aB3tRDexF1agocUL2neNwJMAaZQrUmtVOte8NJl2blE8IAffx44FAVrN3D7xnChs0YZ6TXg9dTExdYIuNbRDetNHRylAb4eHs5NqBfHY7St5ZjNJ//QuipgYAYLnoIsTdtwCW4cNbte/d353Cxo+U2/z7jE7AFXdkQavjz5a6D19FBaq3bkXV95tRvXlz0LAXAACtFubBg2EZOwZhYy+GefgwaIxGdQpLzcYQFiykQ9jZP0RZFqgsdfpDWQ0cRTWwF9fAXqi8el2+c+7XbNUjsacN/S9OQvrgGGi1bXfxE0JArqqCt7AI3uIieIuUyVdcHJj3FinzvvLy5u1ckqCxWuvGP/O/am0R0FgjgsZBa7BNRAQf9HyB5KoqlL7/AUreeSdwx5dp8GDE37cAlosvblXNpRACmz87jh0rTwAAhlyegvE39mn3pnWizs5bXIyqLVtQ7a8p85w6FbReMhphHjoUutgYSCYzNCYTJLMJGpMZGrNJWWY2QTKZoDH71ze2zGyGZDCwBaKdMYQF61Ih7FyEEKip8MBeWK0Es9qQ5p+clcF9EsxWPfqNTULWxUmITu7Yqm/hdsNbUtIgnHmLiuCtF9p8ZWUQLlerv0+yWKCtDXE2G/Q9esCQkQ5DRoYypaVBE9Z9q/9ltxvlS/+D4n/+E74S5UG3xj69Effb3yL8iita/Utb9slYu+QQDvwvHwAwdlZPjJiazosBUSPcuacD/cmqtmyGr6i47XYuSZD8oUxjMkEbGwtT//4wDRgA04AsGPv2hcbEm2NagyEsWLcJYefjqvGivKAax3YU4uCWAtQ43IF1CZkRyBqXhD6jEmAwt02TZVuRXS5ljLPa8c8qzpoPDFZbb96//dk3E5yLLj5eCWTp/nCWqczrU1Oh6aJ3gQqvF/ZPP0XRK6/Cm68EJH1aGuLmz0PEVVe1yZAkXo8P37z1I7J3F0OSgEk/7Y8B45t/JyVRd1Tb9aNm127IVVWQnU4IZw3kGidkZw1EjVNZVlMD2dnUMmfDQZSbotXC2LMnTAOyYBowAMasLJiysjgIbTMwhAVjCGuEzyfj5L4SHNiUj5y9JRCycop0eg16jYxH1rgkJPcJ/Y7zwusNHsC2wgFvWRk8p3LhzslRphMnmrzJAACg0Sg1Z+n1as7S02HIzIA+KSkkx04TsgzHV1+h+OW/w31CaR7UJSQg9p57EHn9dW3WfOuq8WLFq3uQd6QcWp0GU+4aiJ7D4tpk30R04YTHA9nlqgtmNTUQNTXw5OfD+eP+wCDevtLSRj+vT0tTasuysgIBTRfDJ1o0hiEsGEPYeVTZXTi85QwObMpDWUHd2DYRcWZkjUtC/7GJCI/q2tXTvvJyuE+cUKbacJajzJ893k99kl4PfVqaEsxSekAbGQmNzQad/1UbGemfj4QmzNJhoVa43fDZ7cpUXl73Wl4OX7kdlRs2wHXwIABlUN6YX/0KUbfc3KbNEFV2Fz7/+26U5FbCYNLiqnuGoEdf3oZP1FkJIeAtLIRz/35l8gczb15+o9vr4uPrmjGzsmAeMAC65OSQ/+O9tRjCgjGEXSAhBM5kO3BgUz6ObDsDj1Pp5C9JQOqAGGSNS0LmkNh2GQKjsxJCwFtUBM+JE3DVqzlz5+TAc+Jkg7F/zkmvh9ZmgzbSBq0tEtrISP/7s+ZtNmij/K82G2SnE77ycsh2O7z+V195edB8bbiqDVxyVdV5i6MJD0f0L36O6NvvaPPb4e1F1Vj+0i44ip0wRxhwzfyhiEtlcwZRKPKWlcF14IA/lCnBzJ2TAzRyadXYbDBlZUEXGwtNWBg04WHQhIVBGx6uvA8LD14eFgaNf52k61xdYVqKISwYQ1gLeFw+HNtRiAOb8pF3pDyw3BSmR98xCcgal4zYlPAOL1dnInw+ePILAjVn3oL8umBUFlz71Kyw1lYkSblLNLJh0NMnJsF23ax2GSCy6GQFPv/HbtQ43IiINWHmb4fBFmdp8+8hIvXIVVVwHjoUCGXOAwfgOnr0wvueNUIymc4KaLXBTQlquvg4WC+/HMb+/Tt1bZva1+/OhiGslcrPVOPg9/k4+H0+qux1nfnj0qxKZ/7RCTCFcQiIpgghIGpqgpsFAwGtkebCetvUjk6vCQsLrjXzB6vaps/G5rURER3eX+30oTKseG0P3E4fYlPDcfW8oQizcXwjou5AdrvhOnIErkOHAzXycmWl8lpVCV9VFeTKKv/7unXC7T7/zuvRp6chYuo0REyf1ikDWWe6fncGDGFtRJYFTu0vxYFNecjeXRwYNFar0yBzWCzi0yKCBoblCOitUzvumsZg6PTP6JRlgWPbC/Hdewfg88pI7hOJq+4ZAmMnu9OWiDof4XYrAe2scCZXVcFXO19ZBefBA6havyEotAUC2bSpMGZldYpA1hmv32piCGsHNZXuQGf+ktON9z8yRxiUxyrVC2a2OOURS2arvlP8Z6GWqyxz4dSBEpzcX4rcA2VwVinNEJlDYzHlroHQ6RnCiaht+SqrULl2LSq+XonK9RuCxpHUp6UhYupUWKdNhWnAANWuMZ39+t3RGMLakRACRScrkL27GOWF1YHBYV3V3nN+Tm/SIiLWjMh6Aa32WZjh0SZo2nAUdSELyD4Bn0+G7BMQsoAxTN+m39EdeN0+5B0tx8n9pTi1vxSlecHh22DSYsD4ZFx8XS9o2vBJDEREjfFVVqFy3VpUrPwalevXNxLIpsA6dRpMAzs2kIXK9bujMISpwFnlgaO4JvjxSkU1cBTXoLLs3CPga7QSrDEm2OLMMIXplQDllSHLArJX9r8XkH0yfD4lYAWW+4NW3XsRGAMt6Ds0EsKjjbDGmBERY0JErAnWGDOsMSZExJhgsRm7fUgTQqA0vwqn/KHr9JFy+Dz1HjosAfHpEUgbEI20AdGIz4xo08dgERFdKLmqCpXr1sFRG8jqPcdYn5qqBLJp0zskkIX69butMYR1Ml6PD45iZ4PHKjmKlemcDyjvIBqthPBoJZApwawuoFljzAizGVr1zEMhBLxuGW6nF+4aLzwuH9w1XridPnicyqvb6YXH6YPBrENYpFGZbAaERRrb7EHsZ3NWenDqoBK6Th0obRCYwyKNSBsQjdQB0UjtHw1TOG/IIKLORa6qQuX69UogW7cuOJClpCBi2lSlhmzQwHYJZF35+t0SDGEhRJYFKsucgXDmdvqg1UnQaDXQaCVodf5X/3uNrv58E+v8n9dqJWi0EiBJqLa74ChxoqLECUdxjfJa4kRFSQ0qS12QG6k9q0+jk2CNMtUFs1gzTBYd3C4fPE5/oHL54KnxKkHL6QsKWB6nt7Ehdi6Y3qRFmM0fzCINCI80wmIzIsxmRHiUERabAWE2I7S6c9dMyT4ZZ7IdOLm/FCf3l6LwhAOoVy6tXoMefSKV0DUgGtFJYezLR0QhQ66urqshaySQWadOgXnIUOjiYqGLVSaNpXVD6nTX63dTGMKoWWRZoKrchYqSmrqg5g9oFSVOVJS6Gm3ibBEJMJh0MJi00PtfDWYdDEYt9GYd9AYtXDUeVJW7UW13obLcFRhE90KYrXp/DVpwTZqQBU4dKEPuwVK4z9pfdHJYoLYruXckdAZ2sCei0CdXVwfXkNXUNLqdxmKBLi4O2rhY6GLjAuFMFxcLXZzyXhsbC110dKMDzPL6HYwhjNqU7JNRWe5SAlm9gOaq9gYFKINJ22jA0hv9Qcukg86gaXbNktvpRVW5C1V2t/Ja7kKV3YWqcnfdvN0F2Xth/+xNYXqkZkUptV1ZMQiP4rheRNS1KYFsAypWfwdP7ml4i4rgLSoKqik7L0mCNjo6EMxqg1p1WBgyf/MbXr/9GMKo2xFCwFnlCQ5mgcDmhs/jQ3KfSKQOiEFcmrXb34RARKSMzVgNX3ERvMXF/mBWrMzXvi8uhre4CL6SUkCWG91Ppc+Hi44e4fXbj6NFUrcjSRLM4QaYww3d/vFSREQXQpIkaMPDoA0PgyEj45zbCp8PvrKyumAWCGtFQG4ucPRIxxQ6BDCEERERUZuRtNpAE+TZLA4H8NprKpSqc+LARUREREQqYAgjIiIiUgFDGBEREZEKGMKIiIiIVMAQRkRERKQChjAiIiIiFTCEEREREamAIYyIiIhIBQxhRERERCpgCCMiIiJSAUMYERERkQoYwoiIiIhUwBBGREREpAKGMCIiIiIVMIQRERERqYAhjIiIiEgFDGFEREREKmAIIyIiIlIBQxgRERGRChjCiIiIiFTAEEZERESkAoYwIiIiIhUwhBERERGpoFkhbNGiRRg9ejSsVivi4+Mxa9YsHDp0KGgbSZIanf7v//4vsI3L5cL8+fMRGxuLsLAwzJw5E7m5uW1zREREREQhoFkhbN26dZg7dy42b96MVatWwev1YsqUKaiqqgpsk5+fHzS98847kCQJN9xwQ2CbBQsWYNmyZVi6dCk2btyIyspKXH311fD5fG13ZERERESdmCSEEC39cFFREeLj47Fu3TpMmDCh0W1mzZqFiooKfPfddwAAu92OuLg4vP/++5g9ezYAIC8vD6mpqVixYgWmTp3aYB8ulwsulyvw3uFwIDU1FXa7HRERES0tPhEREXUgh8MBm83G67dfq/qE2e12AEB0dHSj68+cOYMvv/wSd955Z2DZ9u3b4fF4MGXKlMCy5ORkDBo0CJs2bWp0P4sWLYLNZgtMqamprSk2ERERkepaHMKEELj//vsxfvx4DBo0qNFt3nvvPVitVlx//fWBZQUFBTAYDIiKigraNiEhAQUFBY3uZ+HChbDb7YHp1KlTLS02ERERUaega+kH582bhz179mDjxo1NbvPOO+/gpz/9KUwm03n3J4SAJEmNrjMajTAajS0tKhEREVGn06KasPnz52P58uVYs2YNUlJSGt1mw4YNOHToEO66666g5YmJiXC73SgrKwtaXlhYiISEhJYUh4iIiCjkNCuECSEwb948fPLJJ1i9ejUyMzOb3Pbtt9/GyJEjMXTo0KDlI0eOhF6vx6pVqwLL8vPzsW/fPowbN66ZxSciIiIKTc1qjpw7dy6WLFmCzz77DFarNdCHy2azwWw2B7ZzOBz46KOP8Ne//rXBPmw2G+6880488MADiImJQXR0NH73u99h8ODBmDx5cisPh4iIiCg0NCuEvfbaawCASZMmBS1fvHgx5syZE3i/dOlSCCFwyy23NLqfv/3tb9DpdLjppptQU1ODK664Au+++y60Wm3zSk9EREQUolo1TphaOM4IERFR6OH1OxifHUlERESkAoYwIiIiIhUwhBERERGpgCGMiIiISAUMYUREREQqYAgjIiIiUgFDGBEREZEKGMKIiIiIVMAQRkRERKQChjAiIiIiFTCEEREREamAIYyIiIhIBQxhRERERCpgCCMiIiJSAUMYERERkQoYwoiIiIhUwBBGREREpAKGMCIiIiIVMIQRERERqYAhjIiIiEgFDGFEREREKmAIIyIiIlIBQxgRERGRChjCiIiIiFTAEEZERESkAoYwIiIiIhUwhBERERGpgCGMiIiISAUMYUREREQqYAgjIiIiUgFDGBEREZEKGMKIiIiIVMAQRkRERKQChjAiIiIiFTCEEREREamAIYyIiIhIBQxhRERERCpgCCMiIiJSAUMYERERkQoYwoiIiIhUwBBGREREpAKGMCIiIiIVMIQRERERqYAhjIiIiEgFDGFEREREKmAI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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "feature_index = \"FID\"\n", "plot_var = \"t2m\"\n", "# plot_x_vals = reduced_data.attrs[f\"{plot_var}_dims\"][\"time\"]\n", "fig, ax = plt.subplots(1)\n", "for feature in reduced_data_pd.index.get_level_values(feature_index).unique()[:5]:\n", " temp = reduced_data_pd.xs(feature, level=feature_index)\n", " temp[plot_var].plot(ax=ax, label=feature)\n", "fig.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Providing a bespoke function for the reduction\n", "\n", "When providing a our own function to the reduce method it must conform the the Xarray requirements defined in their [documentation pages](https://docs.xarray.dev/en/stable/generated/xarray.DataArray.reduce.html#xarray-dataarray-reduce). Specifically:\n", "\n", "*\"Function which can be called in the form f(x, axis=axis, \\*\\*kwargs) to return the result of reducing an np.ndarray over an integer valued axis.\"*\n", "\n", "Here we will calculate the ratio of the standard deviation to the mean for demonstration purposes only. We use nanmean and nanstd so that we ignore the nan values." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "def std_mean_ratio(x, axis=0, **kwargs):\n", " return np.nanstd(x, axis=axis, **kwargs) / np.nanmean(x, axis=axis, **kwargs)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/homebrew/Caskroom/miniforge/base/envs/EARTHKIT/lib/python3.12/site-packages/numpy/lib/_nanfunctions_impl.py:2053: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", " var = nanvar(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", "/opt/homebrew/Caskroom/miniforge/base/envs/EARTHKIT/lib/python3.12/site-packages/numpy/lib/_nanfunctions_impl.py:2053: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", " var = nanvar(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 4kB\n",
       "Dimensions:     (time: 24, index: 37)\n",
       "Coordinates:\n",
       "    number      int64 8B 0\n",
       "  * time        (time) datetime64[ns] 192B 2015-01-01 ... 2015-01-01T23:00:00\n",
       "    step        timedelta64[ns] 8B 00:00:00\n",
       "    surface     float64 8B 0.0\n",
       "    valid_time  (time) datetime64[ns] 192B 2015-01-01 ... 2015-01-01T23:00:00\n",
       "  * index       (index) int64 296B 0 1 2 3 4 5 6 7 8 ... 29 30 31 32 33 34 35 36\n",
       "Data variables:\n",
       "    t2m         (index, time) float32 4kB 0.002451 0.002455 ... 0.01687 0.01744\n",
       "Attributes:\n",
       "    GRIB_edition:            1\n",
       "    GRIB_centre:             ecmf\n",
       "    GRIB_centreDescription:  European Centre for Medium-Range Weather Forecasts\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             European Centre for Medium-Range Weather Forecasts\n",
       "    history:                 2024-10-15T15:07 GRIB to CDM+CF via cfgrib-0.9.1...
" ], "text/plain": [ " Size: 4kB\n", "Dimensions: (time: 24, index: 37)\n", "Coordinates:\n", " number int64 8B 0\n", " * time (time) datetime64[ns] 192B 2015-01-01 ... 2015-01-01T23:00:00\n", " step timedelta64[ns] 8B 00:00:00\n", " surface float64 8B 0.0\n", " valid_time (time) datetime64[ns] 192B 2015-01-01 ... 2015-01-01T23:00:00\n", " * index (index) int64 296B 0 1 2 3 4 5 6 7 8 ... 29 30 31 32 33 34 35 36\n", "Data variables:\n", " t2m (index, time) float32 4kB 0.002451 0.002455 ... 0.01687 0.01744\n", "Attributes:\n", " GRIB_edition: 1\n", " GRIB_centre: ecmf\n", " GRIB_centreDescription: European Centre for Medium-Range Weather Forecasts\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: European Centre for Medium-Range Weather Forecasts\n", " history: 2024-10-15T15:07 GRIB to CDM+CF via cfgrib-0.9.1..." ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reduced_data = ek_aggregate.spatial.reduce(\n", " era5_data, nuts_data,\n", " how = std_mean_ratio\n", ")\n", "reduced_data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "EARTHKIT", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.7" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }