From d61265d8d7d2d565bf043678052379b884e2e7cf Mon Sep 17 00:00:00 2001 From: k034b363 Date: Fri, 12 Jul 2024 13:29:27 -0500 Subject: [PATCH 01/41] change rgb to spectral --- plantcv/geospatial/read_geotif.py | 180 +++++++++++++++--------------- 1 file changed, 87 insertions(+), 93 deletions(-) diff --git a/plantcv/geospatial/read_geotif.py b/plantcv/geospatial/read_geotif.py index 1e63de4..154c2dd 100644 --- a/plantcv/geospatial/read_geotif.py +++ b/plantcv/geospatial/read_geotif.py @@ -11,114 +11,108 @@ def _find_closest_unsorted(array, target): - """Find closest index of array item with smallest distance from the target. - - Parameters - ---------- - array : numpy.ndarray - Array of wavelength labels - target : int, float - Target value - - Returns - ------- - int - Index of closest value to the target + """Find closest index of array item with smallest distance from + the target + Inputs: + array: list or array of wavelength labels + target: target value + Returns: + idx: index of closest value to the target + :param array: numpy.ndarray + :param target: int, float + :return idx: int """ return min(range(len(array)), key=lambda i: abs(array[i]-target)) -def _parse_bands(bands): - """Parse bands. - - Parameters - ---------- - bands : str - Comma separated string listing the order of bands - - Returns - ------- - list - List of bands - """ - # Numeric list of bands - band_list = [] - - # Parse bands - band_strs = bands.split(",") - - # Default values for symbolic bands - default_wavelengths = {"R": 650, "G": 560, "B": 480, "RE": 717, "N": 842, "NIR": 842} - - for band in band_strs: - # Check if the band symbols are supported - if band.upper() not in default_wavelengths: - fatal_error(f"Currently {band} is not supported, instead provide list of wavelengths in order.") - # Append the default wavelength for each band - band_list.append(default_wavelengths[band.upper()]) - - return band_list - - -def read_geotif(filename, bands="B,G,R"): +def read_geotif(filename, bands="R,G,B"): """Read Georeferenced TIF image from file. - - Parameters - ---------- - filename : str - Path of the TIF image file. - bands : str, list, optional - Comma separated string listing the order of bands or a list of wavelengths, by default "B,G,R" - - Returns - ------- - plantcv.plantcv.classes.Spectral_data - Orthomosaic image data + Inputs: + filename: Path of the TIF image file. + bands: Comma separated string representing the order of image bands (default bands="R,G,B"), + or a list of wavelengths (e.g. bands=[650,560,480]) + Returns: + spectral_array: PlantCV format Spectral data object instance + :param filename: str + :param bands: str, list + :return spectral_array: __main__.Spectral_data """ img = rasterio.open(filename) img_data = img.read() img_data = img_data.transpose(1, 2, 0) # reshape such that z-dimension is last height = img.height width = img.width + geo_transform = img.transform wavelengths = {} - # Parse bands if input is a string if isinstance(bands, str): - bands = _parse_bands(bands) - - # Create a dictionary of wavelengths and their indices - for i, wl in enumerate(bands): - wavelengths[wl] = i - - # Mask negative background values - img_data[img_data < 0.] = 0 - # Make a list of wavelength keys - wl_keys = wavelengths.keys() - # Find which bands to use for red, green, and blue bands of the pseudo_rgb image - id_red = _find_closest_unsorted(array=np.array([float(i) for i in wl_keys]), target=630) - id_green = _find_closest_unsorted(array=np.array([float(i) for i in wl_keys]), target=540) - id_blue = _find_closest_unsorted(array=np.array([float(i) for i in wl_keys]), target=480) - # Stack bands together, BGR since plot_image will convert BGR2RGB automatically - pseudo_rgb = cv2.merge((img_data[:, :, [id_blue]], - img_data[:, :, [id_green]], - img_data[:, :, [id_red]])) - # Gamma correction - if pseudo_rgb.dtype != 'uint8': + # Parse bands + list_bands = bands.split(",") + default_wavelengths = {"R": 650, "G": 560, "B": 480, "RE": 717, "N": 842, "NIR": 842} + wavelength_keys = default_wavelengths.keys() + + for i, band in enumerate(list_bands): + + if band.upper() not in wavelength_keys: + fatal_error(f"Currently {band} is not supported, instead provide list of wavelengths in order.") + else: + wavelength = default_wavelengths[band.upper()] + wavelengths[wavelength] = i + + elif isinstance(bands, list): + for i, wl in enumerate(bands): + wavelengths[wl] = i + + # If RGB image then should be uint8, skip + if len(list_bands) == 3: + # Create with first three bands + rgb_img = img_data[:, :, :3] + temp_img = rgb_img.astype('uint8') + pseudo_rgb = cv2.cvtColor(temp_img, cv2.COLOR_BGR2RGB) + # Drop 4th band if there is one and then retun that as numpy array + spectral_array = Spectral_data(array_data=pseudo_rgb, + max_wavelength=None, + min_wavelength=None, + max_value=np.max(pseudo_rgb), min_value=np.min(pseudo_rgb), + d_type=img.dtypes[0], + wavelength_dict=wavelengths, samples=int(width), + lines=int(height), interleave=None, + wavelength_units="nm", array_type="datacube", + pseudo_rgb=pseudo_rgb, filename=filename, default_bands=None, + geo_transform=geo_transform) + _debug(visual=pseudo_rgb, + filename=os.path.join(params.debug_outdir, str(params.device) + "pseudo_rgb.png")) + + + else: + # Mask negative background values + img_data[img_data < 0.] = 0 + # Make a list of wavelength keys + wl_keys = wavelengths.keys() + # Find which bands to use for red, green, and blue bands of the pseudo_rgb image + id_red = _find_closest_unsorted(array=np.array([float(i) for i in wl_keys]), target=630) + id_green = _find_closest_unsorted(array=np.array([float(i) for i in wl_keys]), target=540) + id_blue = _find_closest_unsorted(array=np.array([float(i) for i in wl_keys]), target=480) + # Stack bands together, BGR since plot_image will convert BGR2RGB automatically + pseudo_rgb = cv2.merge((img_data[:, :, [id_blue]], + img_data[:, :, [id_green]], + img_data[:, :, [id_red]])) + # Gamma correction pseudo_rgb = pseudo_rgb.astype('float32') ** (1 / 2.2) pseudo_rgb = pseudo_rgb * 255 pseudo_rgb = pseudo_rgb.astype('uint8') - - # Make a Spectral_data instance before calculating a pseudo-rgb - spectral_array = Spectral_data(array_data=img_data, - max_wavelength=None, - min_wavelength=None, - max_value=np.max(img_data), min_value=np.min(img_data), - d_type=img.dtypes[0], - wavelength_dict=wavelengths, samples=int(width), - lines=int(height), interleave=None, - wavelength_units="nm", array_type="datacube", - pseudo_rgb=pseudo_rgb, filename=filename, default_bands=[480, 540, 630]) - - _debug(visual=pseudo_rgb, filename=os.path.join(params.debug_outdir, f"{params.device}_pseudo_rgb.png")) - + # Make a Spectral_data instance before calculating a pseudo-rgb + spectral_array = Spectral_data(array_data=img_data, + max_wavelength=None, + min_wavelength=None, + max_value=np.max(img_data), min_value=np.min(img_data), + d_type=img.dtypes[0], + wavelength_dict=wavelengths, samples=int(width), + lines=int(height), interleave=None, + wavelength_units="nm", array_type="datacube", + pseudo_rgb=pseudo_rgb, filename=filename, default_bands=None, + geo_transform=geo_transform) + + _debug(visual=pseudo_rgb, filename=os.path.join(params.debug_outdir, + str(params.device) + "pseudo_rgb.png")) return spectral_array From c4e805cb0b04684c14fc9ede90b8b90feae69854 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Thu, 25 Jul 2024 15:47:55 -0500 Subject: [PATCH 02/41] Create transform_points.py --- plantcv/geospatial/transform_points.py | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 plantcv/geospatial/transform_points.py diff --git a/plantcv/geospatial/transform_points.py b/plantcv/geospatial/transform_points.py new file mode 100644 index 0000000..4f903da --- /dev/null +++ b/plantcv/geospatial/transform_points.py @@ -0,0 +1,30 @@ +import rasterio +import fiona +from rasterio.mask import mask + + +def transform_points(img, geojson): + """Takes a points-type shape file and makes circular rois using the points as centers. + Inputs: + image: A spectral object from read_geotif. + mask: Binary mask from the same image. + shapefile: Path to the shape file containing the points. + radius: Radius of the desired ROI, to be used by plantcv's roi.multi + + Returns: + roi_objects: = a dataclass with roi objects and hierarchies + + :return roi_objects: plantcv.plantcv.classes.Objects + :param image: [spectral object] + :param mask: [numpy ndarray] + :return spectral_array: __main__.Spectral_data + """ + geo_transform = img.geo_transform + coord = [] + with fiona.open(geojson, 'r') as shapefile: + for i in range(len(shapefile)): + pixel_point = ~(geo_transform) * (shapefile[i].geometry["coordinates"]) + rounded = (int(pixel_point[0]), int(pixel_point[1])) + coord.append(rounded) + + return coord From 5179ac604127de928fe5d8cddcd9f717bf691bf9 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Thu, 1 Aug 2024 13:22:52 -0500 Subject: [PATCH 03/41] update docstring --- plantcv/geospatial/transform_points.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/plantcv/geospatial/transform_points.py b/plantcv/geospatial/transform_points.py index 4f903da..2930871 100644 --- a/plantcv/geospatial/transform_points.py +++ b/plantcv/geospatial/transform_points.py @@ -6,18 +6,15 @@ def transform_points(img, geojson): """Takes a points-type shape file and makes circular rois using the points as centers. Inputs: - image: A spectral object from read_geotif. - mask: Binary mask from the same image. - shapefile: Path to the shape file containing the points. - radius: Radius of the desired ROI, to be used by plantcv's roi.multi - + img: A spectral object from read_geotif. + geojson: Path to the shape file containing the points. + Returns: - roi_objects: = a dataclass with roi objects and hierarchies - - :return roi_objects: plantcv.plantcv.classes.Objects - :param image: [spectral object] - :param mask: [numpy ndarray] - :return spectral_array: __main__.Spectral_data + coord: Transformed points as a list of numpy coordinates + + :param img: [spectral object] + :param geojson: str + :return coord: list """ geo_transform = img.geo_transform coord = [] From 8c4822290d9e60a2e27ef731da22cdbbd4f39581 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Thu, 1 Aug 2024 13:22:55 -0500 Subject: [PATCH 04/41] Create transform_points.md --- docs/transform_points.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/transform_points.md diff --git a/docs/transform_points.md b/docs/transform_points.md new file mode 100644 index 0000000..e69de29 From 98c612ece234fb558a375d337ea1e2713870d8ad Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Thu, 1 Aug 2024 13:42:25 -0500 Subject: [PATCH 05/41] add text to doc page for transform_points.md --- docs/transform_points.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/transform_points.md b/docs/transform_points.md index e69de29..69c7fbb 100644 --- a/docs/transform_points.md +++ b/docs/transform_points.md @@ -0,0 +1,29 @@ +## Transform Points + +Transform the points from a georeferences shapefile/GeoJSON based on an image size. + +**plantcv.geospatial.trasnsform_points**(*img, geojson*) + +**returns** list of transformed coordinates + +- **Parameters:** + - img - Spectral image object, likely read in with [`geo.read_geotif`](read_geotif.md) + - geojson - Path to the shapefile/GeoJSON containing the points + +- **Context:** + - Transformed points can be used downstream for Python analysis, such as defining ROIs. +- **Example use:** + - below to define plot boundaries + + +```python +import plantcv.geospatial as geo + +# Read geotif in +spectral = geo.read_geotif(filename="./data/example_img.tif", bands="b,g,r,RE,NIR") +coords = geo.transform_points(img=spectral, geojson="./experimental_bounds_2024.shp") +roi_objects = pcv.roi.custom(img=spectral.pseudo_rgb, vertices=coords) + +``` + +**Source Code:** [Here](https://github.com/danforthcenter/plantcv-geospatial/blob/main/plantcv/geospatial/transform_points.py) From 362a835b44b205b403da85de85eff1df60c55a0b Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Thu, 1 Aug 2024 14:01:55 -0500 Subject: [PATCH 06/41] add shapefile test data --- tests/testdata/kura_whole_field.cpg | 1 + tests/testdata/kura_whole_field.dbf | Bin 0 -> 66 bytes tests/testdata/kura_whole_field.prj | 1 + tests/testdata/kura_whole_field.shp | Bin 0 -> 100 bytes tests/testdata/kura_whole_field.shx | Bin 0 -> 100 bytes 5 files changed, 2 insertions(+) create mode 100644 tests/testdata/kura_whole_field.cpg create mode 100644 tests/testdata/kura_whole_field.dbf create mode 100644 tests/testdata/kura_whole_field.prj create mode 100644 tests/testdata/kura_whole_field.shp create mode 100644 tests/testdata/kura_whole_field.shx diff --git a/tests/testdata/kura_whole_field.cpg b/tests/testdata/kura_whole_field.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/tests/testdata/kura_whole_field.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/tests/testdata/kura_whole_field.dbf b/tests/testdata/kura_whole_field.dbf new file mode 100644 index 0000000000000000000000000000000000000000..a8df29907c8777361ee5cbcd93144ffaaf22766c GIT binary patch literal 66 hcmZRsVV7V40!IdJ5QPCUQ{X~=AQlt{j|0RUVM0yh8v literal 0 HcmV?d00001 diff --git a/tests/testdata/kura_whole_field.prj b/tests/testdata/kura_whole_field.prj new file mode 100644 index 0000000..a5245a7 --- /dev/null +++ b/tests/testdata/kura_whole_field.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_UTM_Zone_15N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-93.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/tests/testdata/kura_whole_field.shp b/tests/testdata/kura_whole_field.shp new file mode 100644 index 0000000000000000000000000000000000000000..29de63a12be6f0016d03b25f33ccd616c262cd9b GIT binary patch literal 100 YcmZQzQ0HR64vbzfGcYh>mm^6O0AsfSPyhe` literal 0 HcmV?d00001 diff --git a/tests/testdata/kura_whole_field.shx b/tests/testdata/kura_whole_field.shx new file mode 100644 index 0000000000000000000000000000000000000000..29de63a12be6f0016d03b25f33ccd616c262cd9b GIT binary patch literal 100 YcmZQzQ0HR64vbzfGcYh>mm^6O0AsfSPyhe` literal 0 HcmV?d00001 From b06b6186322dd585232687373e570f2e3b1e9daa Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Thu, 1 Aug 2024 14:01:58 -0500 Subject: [PATCH 07/41] Update conftest.py --- tests/conftest.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index eb6fd03..a1ca38c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -16,6 +16,8 @@ def __init__(self): self.cropped_tif = os.path.join(self.datadir, "615.tif") # rgb image self.rgb_tif = os.path.join(self.datadir, "rgb.tif") + # points shapefilex + self.pts_geojson = os.path.join(self.datadir, "kura_whole_field.shp") @pytest.fixture(scope="session") def test_data(): From adc2099f9fd126e5a8f3581678ebaf5997b2cf5f Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Thu, 1 Aug 2024 14:02:09 -0500 Subject: [PATCH 08/41] Update __init__.py --- plantcv/geospatial/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plantcv/geospatial/__init__.py b/plantcv/geospatial/__init__.py index db53ac4..02b338f 100644 --- a/plantcv/geospatial/__init__.py +++ b/plantcv/geospatial/__init__.py @@ -1,9 +1,11 @@ from importlib.metadata import version from plantcv.geospatial.read_geotif import read_geotif +from plantcv.geospatial.transform_points import transform_points # Auto versioning __version__ = version("plantcv-geospatial") __all__ = [ - "read_geotif" + "read_geotif", + "transform_points" ] From 6838559fcf87ca0cc4844db7d3eec785c770658c Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Thu, 1 Aug 2024 14:02:16 -0500 Subject: [PATCH 09/41] Create test_geospatial_transform_points.py --- tests/test_geospatial_transform_points.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tests/test_geospatial_transform_points.py diff --git a/tests/test_geospatial_transform_points.py b/tests/test_geospatial_transform_points.py new file mode 100644 index 0000000..59a57d3 --- /dev/null +++ b/tests/test_geospatial_transform_points.py @@ -0,0 +1,10 @@ +"""Tests for geospatial.readd_geotif.""" + +import pytest +from plantcv.geospatial import transform_points + + +def test_geospatial_transform_points(test_data): + """Test for plantcv-geospatial.""" + # read in small 5-band tif image + coords = transform_points(img=test_data.cropped_tif, geojson=test_data.pts_geojson) From a1023b465876b7499c91c5748bedd22692837a59 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Thu, 1 Aug 2024 14:05:16 -0500 Subject: [PATCH 10/41] Update test_geospatial_transform_points.py add read step also --- tests/test_geospatial_transform_points.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/test_geospatial_transform_points.py b/tests/test_geospatial_transform_points.py index 59a57d3..2f4bbbf 100644 --- a/tests/test_geospatial_transform_points.py +++ b/tests/test_geospatial_transform_points.py @@ -1,10 +1,12 @@ """Tests for geospatial.readd_geotif.""" import pytest -from plantcv.geospatial import transform_points +from plantcv.geospatial import read_geotif, transform_points def test_geospatial_transform_points(test_data): """Test for plantcv-geospatial.""" # read in small 5-band tif image - coords = transform_points(img=test_data.cropped_tif, geojson=test_data.pts_geojson) + img = read_geotif(filename=test_data.cropped_tif, bands="B,G,R,RE,N") + coords = transform_points(img=img, geojson=test_data.pts_geojson) + assert coords == [] \ No newline at end of file From 88d25c3fc0ca15824d8749b78713fe53825ba5c7 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Wed, 14 Aug 2024 10:19:35 -0500 Subject: [PATCH 11/41] remove unused imports and add function description --- plantcv/geospatial/transform_points.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plantcv/geospatial/transform_points.py b/plantcv/geospatial/transform_points.py index 2930871..8ea3280 100644 --- a/plantcv/geospatial/transform_points.py +++ b/plantcv/geospatial/transform_points.py @@ -1,6 +1,5 @@ -import rasterio +# Transform georeferenced GeoJSON/shapefile points into python coordinates import fiona -from rasterio.mask import mask def transform_points(img, geojson): From f6e2a13fc801eed7706f95f62d3e4f557c1428a5 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Wed, 14 Aug 2024 10:20:53 -0500 Subject: [PATCH 12/41] Update pyproject.toml --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 0d9f4eb..b95d666 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ dependencies = [ "plantcv", "matplotlib", "rasterio", + "fiona", ] requires-python = ">=3.6" From e7c308e406d65a4ca580045fe532d11e05b0a677 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Wed, 14 Aug 2024 13:49:29 -0500 Subject: [PATCH 13/41] change to enumerate loop to be more pythonic --- plantcv/geospatial/transform_points.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plantcv/geospatial/transform_points.py b/plantcv/geospatial/transform_points.py index 8ea3280..99a5f02 100644 --- a/plantcv/geospatial/transform_points.py +++ b/plantcv/geospatial/transform_points.py @@ -3,7 +3,7 @@ def transform_points(img, geojson): - """Takes a points-type shape file and makes circular rois using the points as centers. + """Takes a points-type shapefile/GeoJSON and transforms to numpy coordinates Inputs: img: A spectral object from read_geotif. geojson: Path to the shape file containing the points. @@ -18,7 +18,7 @@ def transform_points(img, geojson): geo_transform = img.geo_transform coord = [] with fiona.open(geojson, 'r') as shapefile: - for i in range(len(shapefile)): + for i, _ in enumerate(shapefile): pixel_point = ~(geo_transform) * (shapefile[i].geometry["coordinates"]) rounded = (int(pixel_point[0]), int(pixel_point[1])) coord.append(rounded) From 592436e2e0009fe83852d863881b1f4b2950eb10 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Wed, 14 Aug 2024 13:52:13 -0500 Subject: [PATCH 14/41] remove unused import --- tests/test_geospatial_transform_points.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_geospatial_transform_points.py b/tests/test_geospatial_transform_points.py index 2f4bbbf..a3638cf 100644 --- a/tests/test_geospatial_transform_points.py +++ b/tests/test_geospatial_transform_points.py @@ -1,6 +1,5 @@ """Tests for geospatial.readd_geotif.""" -import pytest from plantcv.geospatial import read_geotif, transform_points From 7421618e85657f3cf4a2e5b3b5fc3da06f0b3999 Mon Sep 17 00:00:00 2001 From: k034b363 Date: Fri, 16 Aug 2024 09:19:42 -0500 Subject: [PATCH 15/41] Modify read_geotif to include crop option --- plantcv/geospatial/read_geotif.py | 54 +++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/plantcv/geospatial/read_geotif.py b/plantcv/geospatial/read_geotif.py index 154c2dd..d89eebf 100644 --- a/plantcv/geospatial/read_geotif.py +++ b/plantcv/geospatial/read_geotif.py @@ -4,10 +4,13 @@ import cv2 import rasterio import numpy as np +import fiona +from rasterio.mask import mask from plantcv.plantcv import params from plantcv.plantcv import fatal_error from plantcv.plantcv._debug import _debug from plantcv.plantcv.classes import Spectral_data +from shapely.geometry import shape, MultiPoint, mapping def _find_closest_unsorted(array, target): @@ -25,24 +28,46 @@ def _find_closest_unsorted(array, target): return min(range(len(array)), key=lambda i: abs(array[i]-target)) -def read_geotif(filename, bands="R,G,B"): +def read_geotif(filename, bands="R,G,B", cropto=None): """Read Georeferenced TIF image from file. Inputs: filename: Path of the TIF image file. - bands: Comma separated string representing the order of image bands (default bands="R,G,B"), - or a list of wavelengths (e.g. bands=[650,560,480]) + bands: Comma separated string representing the order of image bands + (default bands="R,G,B"), or a list of wavelengths (e.g. bands=[650,560,480]) + cropto: Path to a geoJSON-type shape file for cropping input image. Returns: spectral_array: PlantCV format Spectral data object instance :param filename: str :param bands: str, list :return spectral_array: __main__.Spectral_data """ - img = rasterio.open(filename) - img_data = img.read() + + if cropto: + with fiona.open(cropto, 'r') as shapefile: + # polygon-type shapefile + if len(shapefile) == 1: + shapes = [feature['geometry'] for feature in shapefile] + # points-type shapefile + else: + points = [shape(feature["geometry"]) for feature in shapefile] + multi_point = MultiPoint(points) + convex_hull = multi_point.convex_hull + shapes = [mapping(convex_hull)] + # rasterio does the cropping within open + with rasterio.open(filename, 'r') as src: + img_data, geo_transform = mask(src, shapes, crop=True) + d_type = src.dtypes[0] + geo_crs = src.crs.wkt + + else: + img = rasterio.open(filename) + img_data = img.read() + d_type = img.dtypes[0] + geo_transform = img.transform + geo_crs = img.crs.wkt + img_data = img_data.transpose(1, 2, 0) # reshape such that z-dimension is last - height = img.height - width = img.width - geo_transform = img.transform + height, width, _ = img_data.shape wavelengths = {} if isinstance(bands, str): @@ -54,7 +79,8 @@ def read_geotif(filename, bands="R,G,B"): for i, band in enumerate(list_bands): if band.upper() not in wavelength_keys: - fatal_error(f"Currently {band} is not supported, instead provide list of wavelengths in order.") + fatal_error(f"Currently {band} is not supported, instead + provide list of wavelengths in order.") else: wavelength = default_wavelengths[band.upper()] wavelengths[wavelength] = i @@ -74,12 +100,13 @@ def read_geotif(filename, bands="R,G,B"): max_wavelength=None, min_wavelength=None, max_value=np.max(pseudo_rgb), min_value=np.min(pseudo_rgb), - d_type=img.dtypes[0], + d_type=d_type, wavelength_dict=wavelengths, samples=int(width), lines=int(height), interleave=None, wavelength_units="nm", array_type="datacube", pseudo_rgb=pseudo_rgb, filename=filename, default_bands=None, - geo_transform=geo_transform) + geo_transform=geo_transform, + geo_crs=geo_crs) _debug(visual=pseudo_rgb, filename=os.path.join(params.debug_outdir, str(params.device) + "pseudo_rgb.png")) @@ -106,12 +133,13 @@ def read_geotif(filename, bands="R,G,B"): max_wavelength=None, min_wavelength=None, max_value=np.max(img_data), min_value=np.min(img_data), - d_type=img.dtypes[0], + d_type=d_type, wavelength_dict=wavelengths, samples=int(width), lines=int(height), interleave=None, wavelength_units="nm", array_type="datacube", pseudo_rgb=pseudo_rgb, filename=filename, default_bands=None, - geo_transform=geo_transform) + geo_transform=geo_transform, + geo_crs=geo_crs) _debug(visual=pseudo_rgb, filename=os.path.join(params.debug_outdir, str(params.device) + "pseudo_rgb.png")) From 223e626d8d024139419720d132edf786d03229a9 Mon Sep 17 00:00:00 2001 From: k034b363 Date: Fri, 16 Aug 2024 09:27:04 -0500 Subject: [PATCH 16/41] Update docs for read_geotif --- docs/read_geotif.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/read_geotif.md b/docs/read_geotif.md index 5f9378f..00cd0bb 100644 --- a/docs/read_geotif.md +++ b/docs/read_geotif.md @@ -2,7 +2,7 @@ Read in data (from tif format, most likely georeferenced image data). -**plantcv.geospatial.read_geotif**(*filename, bands="B,G,R"*) +**plantcv.geospatial.read_geotif**(*filename, bands="B,G,R", cropto=None*) **returns** [PlantCV Spectral_data](https://plantcv.readthedocs.io/en/latest/Spectral_data/) object instance. @@ -15,6 +15,7 @@ Read in data (from tif format, most likely georeferenced image data). - B (blue) = 480nm - RE (rededge) = 717nm - N or NIR (near infrared) = 842nm + - cropto - A geoJSON-type shapefile to crop the input image as it is read in. Default is None. - **Example use:** - below From 26346ee9c1317259c8f3f449ac7797b4419de985 Mon Sep 17 00:00:00 2001 From: k034b363 Date: Fri, 16 Aug 2024 09:32:37 -0500 Subject: [PATCH 17/41] Fix line break --- plantcv/geospatial/read_geotif.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plantcv/geospatial/read_geotif.py b/plantcv/geospatial/read_geotif.py index d89eebf..32f4e94 100644 --- a/plantcv/geospatial/read_geotif.py +++ b/plantcv/geospatial/read_geotif.py @@ -79,8 +79,7 @@ def read_geotif(filename, bands="R,G,B", cropto=None): for i, band in enumerate(list_bands): if band.upper() not in wavelength_keys: - fatal_error(f"Currently {band} is not supported, instead - provide list of wavelengths in order.") + fatal_error(f"Currently {band} is not supported, instead provide list of wavelengths in order.") else: wavelength = default_wavelengths[band.upper()] wavelengths[wavelength] = i From 2f9bf737fb23a830e33125dc9a0357a3cafb190f Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 16 Aug 2024 10:05:05 -0500 Subject: [PATCH 18/41] line return in test file --- tests/test_geospatial_transform_points.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_geospatial_transform_points.py b/tests/test_geospatial_transform_points.py index a3638cf..5aa77e6 100644 --- a/tests/test_geospatial_transform_points.py +++ b/tests/test_geospatial_transform_points.py @@ -8,4 +8,4 @@ def test_geospatial_transform_points(test_data): # read in small 5-band tif image img = read_geotif(filename=test_data.cropped_tif, bands="B,G,R,RE,N") coords = transform_points(img=img, geojson=test_data.pts_geojson) - assert coords == [] \ No newline at end of file + assert coords == [] From 729a4cc91bd98b30d554d8c1d3feb37bc52a7b89 Mon Sep 17 00:00:00 2001 From: k034b363 Date: Fri, 16 Aug 2024 13:53:03 -0500 Subject: [PATCH 19/41] Add new packages to pyproject.toml --- pyproject.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 0d9f4eb..c552efb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,8 @@ dependencies = [ "plantcv", "matplotlib", "rasterio", + "fiona", + "shapely", ] requires-python = ">=3.6" From 9f802e3a62ad048941383c43f4afcb8338fe1d2b Mon Sep 17 00:00:00 2001 From: k034b363 Date: Mon, 19 Aug 2024 16:24:18 -0500 Subject: [PATCH 20/41] Add tests to crop read_geotif --- tests/conftest.py | 4 ++++ tests/test_geospatial_read_geotif.py | 15 ++++++++++++++- tests/testdata/point_crop.geojson | 11 +++++++++++ tests/testdata/square_crop.geojson | 8 ++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 tests/testdata/point_crop.geojson create mode 100644 tests/testdata/square_crop.geojson diff --git a/tests/conftest.py b/tests/conftest.py index eb6fd03..97f24d3 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -16,6 +16,10 @@ def __init__(self): self.cropped_tif = os.path.join(self.datadir, "615.tif") # rgb image self.rgb_tif = os.path.join(self.datadir, "rgb.tif") + # polygon shapefile + self.square_crop = os.path.join(self.datadir, "square_crop.geojson") + # points shapefile + self.point_crop = os.path.join(self.datadir, "point_crop.geojson") @pytest.fixture(scope="session") def test_data(): diff --git a/tests/test_geospatial_read_geotif.py b/tests/test_geospatial_read_geotif.py index ad1d698..590a5b6 100644 --- a/tests/test_geospatial_read_geotif.py +++ b/tests/test_geospatial_read_geotif.py @@ -15,7 +15,7 @@ def test_geospatial_read_geotif_rgb(test_data): """Test for plantcv-geospatial.""" # read in small 5-band tif image img = read_geotif(filename=test_data.rgb_tif, bands="R,G,B") - assert img.array_data.shape[2] == 4 + assert img.array_data.shape[2] == 3 def test_geospatial_read_geotif_bad_input(test_data): @@ -23,3 +23,16 @@ def test_geospatial_read_geotif_bad_input(test_data): # read in small 5-band tif image with pytest.raises(RuntimeError): _ = read_geotif(filename=test_data.cropped_tif, bands="p") + +def test_geospatial_read_geotif_polygon_crop(test_data): + """Test for plantcv-geospatial.""" + # read in rgb image with a polygon-type shapefile + img = read_geotif(filename=test_data.rgb_tif, bands="R,G,B", cropto=test_data.square_crop) + assert img.pseudo_rgb.shape == (80, 83, 3) + +def test_geospatial_read_geotif_point_crop(test_data): + """Test for plantcv-geospatial.""" + # read in rgb image with a polygon-type shapefile + img = read_geotif(filename=test_data.rgb_tif, bands="R,G,B", cropto=test_data.point_crop) + assert img.pseudo_rgb.shape == (41, 46, 3) + \ No newline at end of file diff --git a/tests/testdata/point_crop.geojson b/tests/testdata/point_crop.geojson new file mode 100644 index 0000000..53f469c --- /dev/null +++ b/tests/testdata/point_crop.geojson @@ -0,0 +1,11 @@ +{ +"type": "FeatureCollection", +"name": "point_crop", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::32615" } }, +"features": [ +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 720198.797875224030577, 4302928.175875684246421 ] } }, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 720199.770441700122319, 4302928.186563228257 ] } }, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 720199.781129243900068, 4302927.310184645466506 ] } }, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Point", "coordinates": [ 720198.851312942570075, 4302927.352934820577502 ] } } +] +} diff --git a/tests/testdata/square_crop.geojson b/tests/testdata/square_crop.geojson new file mode 100644 index 0000000..82b8505 --- /dev/null +++ b/tests/testdata/square_crop.geojson @@ -0,0 +1,8 @@ +{ +"type": "FeatureCollection", +"name": "square_crop", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::32615" } }, +"features": [ +{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 720200.657507826690562, 4302928.218625859357417 ], [ 720199.535315738874488, 4302929.041566723957658 ], [ 720198.855781324207783, 4302928.114928886294365 ], [ 720199.977973412023857, 4302927.291988021694124 ], [ 720200.657507826690562, 4302928.218625859357417 ] ] ] } } +] +} From 9b93c526d0ff030b7d72a5e996a7ee9f1f65a037 Mon Sep 17 00:00:00 2001 From: k034b363 Date: Mon, 19 Aug 2024 16:29:16 -0500 Subject: [PATCH 21/41] Fix deepsource issues in read_geotif --- plantcv/geospatial/read_geotif.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/plantcv/geospatial/read_geotif.py b/plantcv/geospatial/read_geotif.py index 32f4e94..6167e8e 100644 --- a/plantcv/geospatial/read_geotif.py +++ b/plantcv/geospatial/read_geotif.py @@ -32,7 +32,7 @@ def read_geotif(filename, bands="R,G,B", cropto=None): """Read Georeferenced TIF image from file. Inputs: filename: Path of the TIF image file. - bands: Comma separated string representing the order of image bands + bands: Comma separated string representing the order of image bands (default bands="R,G,B"), or a list of wavelengths (e.g. bands=[650,560,480]) cropto: Path to a geoJSON-type shape file for cropping input image. Returns: @@ -41,8 +41,7 @@ def read_geotif(filename, bands="R,G,B", cropto=None): :param bands: str, list :return spectral_array: __main__.Spectral_data """ - - if cropto: + if cropto: with fiona.open(cropto, 'r') as shapefile: # polygon-type shapefile if len(shapefile) == 1: @@ -58,14 +57,14 @@ def read_geotif(filename, bands="R,G,B", cropto=None): img_data, geo_transform = mask(src, shapes, crop=True) d_type = src.dtypes[0] geo_crs = src.crs.wkt - - else: + + else: img = rasterio.open(filename) img_data = img.read() d_type = img.dtypes[0] geo_transform = img.transform geo_crs = img.crs.wkt - + img_data = img_data.transpose(1, 2, 0) # reshape such that z-dimension is last height, width, _ = img_data.shape wavelengths = {} @@ -108,7 +107,6 @@ def read_geotif(filename, bands="R,G,B", cropto=None): geo_crs=geo_crs) _debug(visual=pseudo_rgb, filename=os.path.join(params.debug_outdir, str(params.device) + "pseudo_rgb.png")) - else: # Mask negative background values From 331165789d05a6931e1ba33a2d47b465df67eab7 Mon Sep 17 00:00:00 2001 From: k034b363 Date: Mon, 19 Aug 2024 16:36:59 -0500 Subject: [PATCH 22/41] Try a fix for list of bands in read_geotif --- plantcv/geospatial/read_geotif.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plantcv/geospatial/read_geotif.py b/plantcv/geospatial/read_geotif.py index 6167e8e..8434bd4 100644 --- a/plantcv/geospatial/read_geotif.py +++ b/plantcv/geospatial/read_geotif.py @@ -84,6 +84,8 @@ def read_geotif(filename, bands="R,G,B", cropto=None): wavelengths[wavelength] = i elif isinstance(bands, list): + # Keep list_bands to check length in next section + list_bands = bands for i, wl in enumerate(bands): wavelengths[wl] = i From b659a0839035341277d8b3253fc349b934341978 Mon Sep 17 00:00:00 2001 From: k034b363 Date: Mon, 19 Aug 2024 16:40:52 -0500 Subject: [PATCH 23/41] Add test for list of bands in read_geotif --- tests/test_geospatial_read_geotif.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_geospatial_read_geotif.py b/tests/test_geospatial_read_geotif.py index 590a5b6..bf22708 100644 --- a/tests/test_geospatial_read_geotif.py +++ b/tests/test_geospatial_read_geotif.py @@ -27,7 +27,7 @@ def test_geospatial_read_geotif_bad_input(test_data): def test_geospatial_read_geotif_polygon_crop(test_data): """Test for plantcv-geospatial.""" # read in rgb image with a polygon-type shapefile - img = read_geotif(filename=test_data.rgb_tif, bands="R,G,B", cropto=test_data.square_crop) + img = read_geotif(filename=test_data.rgb_tif, bands=[650,560,480], cropto=test_data.square_crop) assert img.pseudo_rgb.shape == (80, 83, 3) def test_geospatial_read_geotif_point_crop(test_data): From 5d968f87bf0b52c66309c9dd3379a86342358690 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Thu, 22 Aug 2024 16:16:38 -0500 Subject: [PATCH 24/41] add out of bounds check for cropped geotifs --- plantcv/geospatial/read_geotif.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/plantcv/geospatial/read_geotif.py b/plantcv/geospatial/read_geotif.py index 8434bd4..7053909 100644 --- a/plantcv/geospatial/read_geotif.py +++ b/plantcv/geospatial/read_geotif.py @@ -66,7 +66,8 @@ def read_geotif(filename, bands="R,G,B", cropto=None): geo_crs = img.crs.wkt img_data = img_data.transpose(1, 2, 0) # reshape such that z-dimension is last - height, width, _ = img_data.shape + height, width, depth = img_data.shape + print(depth) wavelengths = {} if isinstance(bands, str): @@ -78,7 +79,7 @@ def read_geotif(filename, bands="R,G,B", cropto=None): for i, band in enumerate(list_bands): if band.upper() not in wavelength_keys: - fatal_error(f"Currently {band} is not supported, instead provide list of wavelengths in order.") + fatal_error(f"Currently {band} is not supported") else: wavelength = default_wavelengths[band.upper()] wavelengths[wavelength] = i @@ -113,6 +114,9 @@ def read_geotif(filename, bands="R,G,B", cropto=None): else: # Mask negative background values img_data[img_data < 0.] = 0 + if np.sum(img_data) == 0: + fatal_error(f"your image is empty, are the crop-to bounds outside of your image area?") + # Make a list of wavelength keys wl_keys = wavelengths.keys() # Find which bands to use for red, green, and blue bands of the pseudo_rgb image @@ -123,10 +127,10 @@ def read_geotif(filename, bands="R,G,B", cropto=None): pseudo_rgb = cv2.merge((img_data[:, :, [id_blue]], img_data[:, :, [id_green]], img_data[:, :, [id_red]])) - # Gamma correction - pseudo_rgb = pseudo_rgb.astype('float32') ** (1 / 2.2) - pseudo_rgb = pseudo_rgb * 255 - pseudo_rgb = pseudo_rgb.astype('uint8') + # # Gamma correction + # pseudo_rgb = pseudo_rgb.astype('float32') ** (1 / 2.2) + # pseudo_rgb = pseudo_rgb * 255 + # pseudo_rgb = pseudo_rgb.astype('uint8') # Make a Spectral_data instance before calculating a pseudo-rgb spectral_array = Spectral_data(array_data=img_data, max_wavelength=None, From 1ff7e0c4229202c62b3f769dd76fa7db6e5781e4 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 23 Aug 2024 14:02:18 -0500 Subject: [PATCH 25/41] update class instance creation and gamma correction behavior --- plantcv/geospatial/read_geotif.py | 53 ++++++++++++------------------- 1 file changed, 20 insertions(+), 33 deletions(-) diff --git a/plantcv/geospatial/read_geotif.py b/plantcv/geospatial/read_geotif.py index 7053909..3a65b4d 100644 --- a/plantcv/geospatial/read_geotif.py +++ b/plantcv/geospatial/read_geotif.py @@ -96,26 +96,12 @@ def read_geotif(filename, bands="R,G,B", cropto=None): rgb_img = img_data[:, :, :3] temp_img = rgb_img.astype('uint8') pseudo_rgb = cv2.cvtColor(temp_img, cv2.COLOR_BGR2RGB) - # Drop 4th band if there is one and then retun that as numpy array - spectral_array = Spectral_data(array_data=pseudo_rgb, - max_wavelength=None, - min_wavelength=None, - max_value=np.max(pseudo_rgb), min_value=np.min(pseudo_rgb), - d_type=d_type, - wavelength_dict=wavelengths, samples=int(width), - lines=int(height), interleave=None, - wavelength_units="nm", array_type="datacube", - pseudo_rgb=pseudo_rgb, filename=filename, default_bands=None, - geo_transform=geo_transform, - geo_crs=geo_crs) - _debug(visual=pseudo_rgb, - filename=os.path.join(params.debug_outdir, str(params.device) + "pseudo_rgb.png")) else: # Mask negative background values img_data[img_data < 0.] = 0 if np.sum(img_data) == 0: - fatal_error(f"your image is empty, are the crop-to bounds outside of your image area?") + fatal_error(f"your image is empty, are the crop-to bounds outside of the {filename} image area?") # Make a list of wavelength keys wl_keys = wavelengths.keys() @@ -127,23 +113,24 @@ def read_geotif(filename, bands="R,G,B", cropto=None): pseudo_rgb = cv2.merge((img_data[:, :, [id_blue]], img_data[:, :, [id_green]], img_data[:, :, [id_red]])) - # # Gamma correction - # pseudo_rgb = pseudo_rgb.astype('float32') ** (1 / 2.2) - # pseudo_rgb = pseudo_rgb * 255 - # pseudo_rgb = pseudo_rgb.astype('uint8') - # Make a Spectral_data instance before calculating a pseudo-rgb - spectral_array = Spectral_data(array_data=img_data, - max_wavelength=None, - min_wavelength=None, - max_value=np.max(img_data), min_value=np.min(img_data), - d_type=d_type, - wavelength_dict=wavelengths, samples=int(width), - lines=int(height), interleave=None, - wavelength_units="nm", array_type="datacube", - pseudo_rgb=pseudo_rgb, filename=filename, default_bands=None, - geo_transform=geo_transform, - geo_crs=geo_crs) + if pseudo_rgb.dtype != 'uint8': + # Gamma correction + pseudo_rgb = pseudo_rgb.astype('float32') ** (1 / 2.2) + pseudo_rgb = pseudo_rgb * 255 + pseudo_rgb = pseudo_rgb.astype('uint8') + # Make a Spectral_data instance before calculating a pseudo-rgb + spectral_array = Spectral_data(array_data=img_data, + max_wavelength=None, + min_wavelength=None, + max_value=np.max(img_data), min_value=np.min(img_data), + d_type=d_type, + wavelength_dict=wavelengths, samples=int(width), + lines=int(height), interleave=None, + wavelength_units="nm", array_type="datacube", + pseudo_rgb=pseudo_rgb, filename=filename, default_bands=None, + geo_transform=geo_transform, + geo_crs=geo_crs) - _debug(visual=pseudo_rgb, filename=os.path.join(params.debug_outdir, - str(params.device) + "pseudo_rgb.png")) + _debug(visual=pseudo_rgb, filename=os.path.join(params.debug_outdir, + str(params.device) + "pseudo_rgb.png")) return spectral_array From e667e6933e39e71f15f122f9d2c675c0e0d0ec17 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 23 Aug 2024 15:14:00 -0500 Subject: [PATCH 26/41] add empty test data --- tests/conftest.py | 2 ++ tests/testdata/cropped_empty.tif | Bin 0 -> 25335578 bytes 2 files changed, 2 insertions(+) create mode 100644 tests/testdata/cropped_empty.tif diff --git a/tests/conftest.py b/tests/conftest.py index 97f24d3..aea2756 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -14,6 +14,8 @@ def __init__(self): self.snapshot_dir = os.path.join(self.datadir, "snapshot_dir") # multispectral image self.cropped_tif = os.path.join(self.datadir, "615.tif") + # empty image + self.empty_tif = os.path.join(self.datadir, "cropped_empty.tif") # rgb image self.rgb_tif = os.path.join(self.datadir, "rgb.tif") # polygon shapefile diff --git a/tests/testdata/cropped_empty.tif b/tests/testdata/cropped_empty.tif new file mode 100644 index 0000000000000000000000000000000000000000..85e00ce85688de6db3fed0760907266113247bd0 GIT binary patch literal 25335578 zcmeF#ag^0_`Z)0CJ!NEMXlO7pG7$ztlfuZTL21-r%EVyOP!x?!31Kj(6=G*;31JXI zXzeUnAq+xji49p{)(%2w3HeRC`~98${m%FM$M5Vvzdv4|&$;LQoaa8zJ@-8Kb!qWiz{ z8+&s9t!CSfcw^019r+&rmapuHJ9p&1-6mp0N4&A`r;a%LvaZol9#`i^G+y2{GCShC zI^u_Bbc&uG@tYm-BQr80za!pe+lWi<%7}|P-dJY$h)X--j<*t*chqdWdj9YGy~%D9 zFaZ-V0TcNDdjiEB-)h-cMYL~-Xsu7t+?JxDIwPu=Wkmn7PLb2nDc0=KIhNkqIp%fS zBpR>SBx-)xBuXY`M(&51v3BI9vFyc7WB!0HG5z5#QM=1#QF`NMk=HdV)?J(x%fHEr z1*dHuGvD1j#vRo)%AV~S`TK7X>*sF~EAq2rVN-U@%G@$0OxrRBuh}vRYPX6FZ*3JT zhjxpWC%Z*cpPZ<>J15Gw-#U67Qhlx)oT`u-qtoEH^Uu z+BR0-wrwoldb^l2W4oC8<91Pb*7i~K(e{xwDlgiW=EaiI9b)dn9b#JV9#J)?M-*r8 z7}3Ny|#Dcb=ob~P2DY)x9=7UYIcvA%Xg1) zgZGHCMSDbkQDLmVqcB!<-!m3oxo6D!dC!<|_Fggglf9zg_`PGpD|^Svfkn~sXi+rn zzE9NMvQLz6wQuykeBa3Ue&1MiMxR*pL7$jCqB!bbD2|GQ`bObHeIv8iezAJ?ez7>K zU(9Lf7gN{vi^_5RqiALS$g0>s+Md}zmh?Ly=H7QeOxy9msQUGRQM^e>WS?IW?Vp!K z>&XX2^P2}n!x00b`i}#m|Go!D&Rqw`nr%yC=~bmM@0ZeOoP0>s{PmD1IbmSrzBVw{ zmJNz!ErViyVOdO{TNbrBheql2LnCkfp|Nh_VX^$f!(zd)hsVs94v%pM500`&21ov` zLt_1nLt;hOBVyqtN5rgekBAAU4~@a^4UK}M%VWc{<*{=ABctX1Bco}jVNv&+VNt&6 z@aTQP@W}Xbc&w_eh(#+ZVs`maQNQ@8s3<-<3g;ainR&;=>T8aP#i=spoKqQ7|5h25 zCyj`rH%3I(;UlB%v5~Q4uVZ8G?Z?KnZK|T`S5;B`Q&nV78Wrsyjf&P$$3^qY$3?>- z$4B+=j*tGkRY%Uv)v+e~gjm{mLd;utLNrb|F=|$w7$ub_MQ-a!vG%~4SoUB|%-?x* zOuu1t)NXcilwNdlPTW%r&E`8`gJ_1B&nD>{vh zh3AfqS)YxK38Tlw;6IIvf+45HhDE2v%A(VwrTO$|${indGsj2yhVjw6enMolO^8*; zpAm~*JtJlhIy35je`ZwdF)<2nofw(j>SFcfb+P#Sx|nn3Suyo5XGP`6Nm2CTq{td@ zcCtA9H_OAJaCU990)jj^b}7NA_t`qJ8C*XstLWnwOjt4gIG^_57*PKmXjw zX*xI7Y;s;KJ^#Fz_r-b9IOhDQdF%Wr89FU;pPUwJ_q`yN-E~3C-|oVge)WY>8y7|C zl#3$o(~Dx=2@SFQwT4)5=*2Pf4;RO{Juiu}+b)UxtuKxB(=Uw`>o1Lkb&WA=bz@AZ zx-14Sy(|h!FOLn6TplZTy&_s}x+0pkm>zYPPLJ~MrbqAbGa}>t8L{fp37Cmuy%-&~S)ZaNT zDz?2R3a`2+GJm-zR@dJfi`(vvIo0>Y)MfWYW!d~FYMCEdh4)9>t@p>0ZV$xVD;|hx zKRggs6CaG?4m!kK$s@7mn@3{lX$xcC zy9=Z7sNY4+v%iay{U43o`yY+9`M-~4O}~%%nJqDWT1(WfX^GO>KSbV&Kg7DBkHzvQ zABzQj9*>!KKOW<@Ule86EQdCOmm#=);g z&7#+%r09*vZGI!xc3&RLu3R4Te_kHb&;C=?e)6X%J^szed-cs&H}I`k{^(n=VD}X< z^OhAcZmYMW?DDrG|NFON{Tc7XiVxn2g(LnPvtIafOgLy|41Q>36!dyGHq3rER%X2y zEe-EQ)7tlafx`NfB^ z`sCHI_|4TZ=ZKGD>K{Lf%6&hMqPsqhtnEIDwyQpgCBJ+Ub0@dOw7<4R)d_!%;@AEf z*@u1_?Jb{1YvJFbdG6n$A*Vg6r?*G{_3e>U_gSp@@UvKY?B_A>rO%`B;4h-)kuRcT z*ENxQ)0$Y@^~+dx$(J$z+b?7K>0d?ddtXKA(O*a2b6>~0{ny6w``5;ToxX{gzxgJ{ zZTfALUGQz>fB9{!ul+7otoSY#mamIhi`T`3;=jk>d4G?ByzgVfHQ&d|^h30q^FuWK z?T4s4X?>Kxu|9eq{$pf3{$s4#>!(X%sj z@-H#xkVsR17pZc$l!|UnDQnA&)Yh1hmaNN2b0>64(^hp#Rh6Anack$4U9w4Pe{hr3 zx^re~z9BO;Y_@5tzG&0b|LaXt&e$$#%{yJv(qWsWc~5Va8u!aeHTPzvk{+9<-0L<^ zYddvK%g*hZ=6}{TO&`5Qs{PXzsdPwo%6lR^tt;9xEpOg3Ey&#}&78Sa8nyOV#D_+e>3kPkTX8nHaG+~cz(%@USNd?`yrwx~PPb1 zJEp1gcTAP}`KhQWKV@a^l-kbUDJ}V8r!;p=&ou3=o~df+&Z+pxol|z7g4BLjL2BKu zS8BexS89k|QuUNwQvXkPNjWF(n%2CwYg&3}?=+at|iy+@i}RhVj*7N*kDJyYJoJ=3~f_e#re+AA&CV(&Eb(!JBT@Agh*&MOAGfIo@U)SJWbfPA`QN(A{G2nkv7yHl~%SLm0GHgPEE^>PIYC+r1F+y zQt!gblrgt5t?D)+ExKYvn*GCwR6lWKs`zkZDm?bsl=;%JY4w1rwD{qwG-sDlY3hxm zQf1fUQqd*HrL1p{OKqnepO(CPe42Yyb(;2Ub*kF`gj9V02`PK06H|NBiK#X7q|`j^ zq|~tHq*Ps7llrfyNjc@C)0!tor=@*PPV??QIW=xSCe>UsCY7YxlzUEXTKj2jT6W?o zY5wb{r0Iv9nra_AHI?o)Hs#$uHm%!wTv|S3Tw3tsxHR*u)6%$)PD^E@PEYwSpPts2 zj!!EVj!z4FPe`-oOh^;5&q#wC&qxL9&PW@^pP5#^e`abqW@2i3eqyRSur8H9SeJV5 zd{)Z1;jFZ(%cQjE!bxfNSCdlxsb{B(cg{|Q!|GG!)Aea}-^pq5J(JU%9j2tI*G@^5 zoz6)`=bn?YK07D1)l5xGmQPJ{2cMg!Ejl+<6`hxgo6k$xx#y?$E6-1@KcAnP&z_bV zKAD!PkG~-GfAxZtGw8y!=Ftn&(%mmg^KQ8)HEz|AYA$a`CEqus+%qpuYd^R+EgNx3 zn*YKjY5GBzrrL)tO{KjWJ9dQsygGI47yo$=7;@O4VZ+Bx8FT8GDPu~rdiESJbjsL? zJ?q9y9D8uVVI8@V=T912P&#C6-Pro^rwrI<@PC^y>3^IVogbO8aUq<#JTha`==e|CvG`6gt5%I004meUmKyp0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?KWfIuHN=0002;e{F;Y4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn#T^=|BJg0002U|FsbsJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj# zzyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+ z4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F z@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU| z0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2BP zJn+B+4?OU|0}nj#zyl9F@W2BPJn+B+4?OU|0}nj#zyl9F@W2Dwr2_!~0000%{?>zB z3_0L{0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| z0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@T zIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRg zfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q- z4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV z;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX|0}eRgfCCOV;D7@TIN*Q-4mjX| K0}eRgz~MmpXJ{z^ literal 0 HcmV?d00001 From 821a97d2e17a6cf9dd14e4508fea850193a4a6ca Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 23 Aug 2024 15:14:14 -0500 Subject: [PATCH 27/41] add bad_crop unit test --- tests/test_geospatial_read_geotif.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/test_geospatial_read_geotif.py b/tests/test_geospatial_read_geotif.py index bf22708..99969bf 100644 --- a/tests/test_geospatial_read_geotif.py +++ b/tests/test_geospatial_read_geotif.py @@ -24,6 +24,14 @@ def test_geospatial_read_geotif_bad_input(test_data): with pytest.raises(RuntimeError): _ = read_geotif(filename=test_data.cropped_tif, bands="p") + +def test_geospatial_read_geotif_bad_crop(test_data): + """Test for plantcv-geospatial.""" + # read in small 5-band tif image + with pytest.raises(RuntimeError): + _ = read_geotif(filename=test_data.empty_tif, bands="B,G,R,RE,N") + + def test_geospatial_read_geotif_polygon_crop(test_data): """Test for plantcv-geospatial.""" # read in rgb image with a polygon-type shapefile From c11684c88de5ea8ae8e4f3a0d348017e8ca9706c Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 23 Aug 2024 15:56:03 -0500 Subject: [PATCH 28/41] add warning for band number mismatch --- plantcv/geospatial/read_geotif.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plantcv/geospatial/read_geotif.py b/plantcv/geospatial/read_geotif.py index 3a65b4d..129b6ca 100644 --- a/plantcv/geospatial/read_geotif.py +++ b/plantcv/geospatial/read_geotif.py @@ -6,8 +6,7 @@ import numpy as np import fiona from rasterio.mask import mask -from plantcv.plantcv import params -from plantcv.plantcv import fatal_error +from plantcv.plantcv import warn, params, fatal_error from plantcv.plantcv._debug import _debug from plantcv.plantcv.classes import Spectral_data from shapely.geometry import shape, MultiPoint, mapping @@ -66,8 +65,10 @@ def read_geotif(filename, bands="R,G,B", cropto=None): geo_crs = img.crs.wkt img_data = img_data.transpose(1, 2, 0) # reshape such that z-dimension is last + dims_found = len(bands.split(",")) height, width, depth = img_data.shape - print(depth) + if depth != dims_found: + warn(f"{depth} bands found in the image data but the function was provided with {dims_found}") wavelengths = {} if isinstance(bands, str): @@ -96,6 +97,7 @@ def read_geotif(filename, bands="R,G,B", cropto=None): rgb_img = img_data[:, :, :3] temp_img = rgb_img.astype('uint8') pseudo_rgb = cv2.cvtColor(temp_img, cv2.COLOR_BGR2RGB) + img_data = pseudo_rgb else: # Mask negative background values From 207196f186f0393dd101fc6e27f64b71672554be Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Mon, 26 Aug 2024 11:46:19 -0500 Subject: [PATCH 29/41] refactor read_geotif go back to the handling of datatype in main version, keep cropping ability, and keep ability to warn when number of bands in img not equal to bands defined in the function call. --- plantcv/geospatial/read_geotif.py | 101 +++++++++++++++++------------- 1 file changed, 56 insertions(+), 45 deletions(-) diff --git a/plantcv/geospatial/read_geotif.py b/plantcv/geospatial/read_geotif.py index 129b6ca..999ead5 100644 --- a/plantcv/geospatial/read_geotif.py +++ b/plantcv/geospatial/read_geotif.py @@ -27,6 +27,38 @@ def _find_closest_unsorted(array, target): return min(range(len(array)), key=lambda i: abs(array[i]-target)) +def _parse_bands(bands): + """Parse bands. + + Parameters + ---------- + bands : str + Comma separated string listing the order of bands + + Returns + ------- + list + List of bands + """ + # Numeric list of bands + band_list = [] + + # Parse bands + band_strs = bands.split(",") + + # Default values for symbolic bands + default_wavelengths = {"R": 650, "G": 560, "B": 480, "RE": 717, "N": 842, "NIR": 842} + + for band in band_strs: + # Check if the band symbols are supported + if band.upper() not in default_wavelengths: + fatal_error(f"Currently {band} is not supported, instead provide list of wavelengths in order.") + # Append the default wavelength for each band + band_list.append(default_wavelengths[band.upper()]) + + return band_list + + def read_geotif(filename, bands="R,G,B", cropto=None): """Read Georeferenced TIF image from file. Inputs: @@ -65,61 +97,39 @@ def read_geotif(filename, bands="R,G,B", cropto=None): geo_crs = img.crs.wkt img_data = img_data.transpose(1, 2, 0) # reshape such that z-dimension is last - dims_found = len(bands.split(",")) height, width, depth = img_data.shape - if depth != dims_found: - warn(f"{depth} bands found in the image data but the function was provided with {dims_found}") wavelengths = {} if isinstance(bands, str): # Parse bands - list_bands = bands.split(",") - default_wavelengths = {"R": 650, "G": 560, "B": 480, "RE": 717, "N": 842, "NIR": 842} - wavelength_keys = default_wavelengths.keys() - - for i, band in enumerate(list_bands): + bands = _parse_bands(bands) - if band.upper() not in wavelength_keys: - fatal_error(f"Currently {band} is not supported") - else: - wavelength = default_wavelengths[band.upper()] - wavelengths[wavelength] = i - - elif isinstance(bands, list): - # Keep list_bands to check length in next section - list_bands = bands - for i, wl in enumerate(bands): - wavelengths[wl] = i - - # If RGB image then should be uint8, skip - if len(list_bands) == 3: - # Create with first three bands - rgb_img = img_data[:, :, :3] - temp_img = rgb_img.astype('uint8') - pseudo_rgb = cv2.cvtColor(temp_img, cv2.COLOR_BGR2RGB) - img_data = pseudo_rgb + for i, wl in enumerate(bands): + wavelengths[wl] = i + # Check if user input matches image dimension in z direction + if depth != len(bands): + warn(f"{depth} bands found in the image data but {filename} was provided with {bands}") + # Mask negative background values + img_data[img_data < 0.] = 0 + if np.sum(img_data) == 0: + fatal_error(f"your image is empty, are the crop-to bounds outside of the {filename} image area?") - else: - # Mask negative background values - img_data[img_data < 0.] = 0 - if np.sum(img_data) == 0: - fatal_error(f"your image is empty, are the crop-to bounds outside of the {filename} image area?") - - # Make a list of wavelength keys - wl_keys = wavelengths.keys() - # Find which bands to use for red, green, and blue bands of the pseudo_rgb image - id_red = _find_closest_unsorted(array=np.array([float(i) for i in wl_keys]), target=630) - id_green = _find_closest_unsorted(array=np.array([float(i) for i in wl_keys]), target=540) - id_blue = _find_closest_unsorted(array=np.array([float(i) for i in wl_keys]), target=480) - # Stack bands together, BGR since plot_image will convert BGR2RGB automatically - pseudo_rgb = cv2.merge((img_data[:, :, [id_blue]], - img_data[:, :, [id_green]], - img_data[:, :, [id_red]])) + # Make a list of wavelength keys + wl_keys = wavelengths.keys() + # Find which bands to use for red, green, and blue bands of the pseudo_rgb image + id_red = _find_closest_unsorted(array=np.array([float(i) for i in wl_keys]), target=630) + id_green = _find_closest_unsorted(array=np.array([float(i) for i in wl_keys]), target=540) + id_blue = _find_closest_unsorted(array=np.array([float(i) for i in wl_keys]), target=480) + # Stack bands together, BGR since plot_image will convert BGR2RGB automatically + pseudo_rgb = cv2.merge((img_data[:, :, [id_blue]], + img_data[:, :, [id_green]], + img_data[:, :, [id_red]])) + # Gamma correction if pseudo_rgb.dtype != 'uint8': - # Gamma correction pseudo_rgb = pseudo_rgb.astype('float32') ** (1 / 2.2) pseudo_rgb = pseudo_rgb * 255 pseudo_rgb = pseudo_rgb.astype('uint8') + # Make a Spectral_data instance before calculating a pseudo-rgb spectral_array = Spectral_data(array_data=img_data, max_wavelength=None, @@ -129,7 +139,8 @@ def read_geotif(filename, bands="R,G,B", cropto=None): wavelength_dict=wavelengths, samples=int(width), lines=int(height), interleave=None, wavelength_units="nm", array_type="datacube", - pseudo_rgb=pseudo_rgb, filename=filename, default_bands=None, + pseudo_rgb=pseudo_rgb, filename=filename, + default_bands=[480, 540, 630], geo_transform=geo_transform, geo_crs=geo_crs) From ad1ef2d4736f616bc342e4e8c4c2de5bcd9666b4 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Mon, 26 Aug 2024 11:46:24 -0500 Subject: [PATCH 30/41] Update test_geospatial_read_geotif.py --- tests/test_geospatial_read_geotif.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/test_geospatial_read_geotif.py b/tests/test_geospatial_read_geotif.py index 99969bf..7f268b8 100644 --- a/tests/test_geospatial_read_geotif.py +++ b/tests/test_geospatial_read_geotif.py @@ -15,7 +15,7 @@ def test_geospatial_read_geotif_rgb(test_data): """Test for plantcv-geospatial.""" # read in small 5-band tif image img = read_geotif(filename=test_data.rgb_tif, bands="R,G,B") - assert img.array_data.shape[2] == 3 + assert img.pseudo_rgb.shape == (284, 261, 3) def test_geospatial_read_geotif_bad_input(test_data): @@ -35,12 +35,13 @@ def test_geospatial_read_geotif_bad_crop(test_data): def test_geospatial_read_geotif_polygon_crop(test_data): """Test for plantcv-geospatial.""" # read in rgb image with a polygon-type shapefile - img = read_geotif(filename=test_data.rgb_tif, bands=[650,560,480], cropto=test_data.square_crop) + img = read_geotif(filename=test_data.rgb_tif, bands=[650, 560, 480], + cropto=test_data.square_crop) assert img.pseudo_rgb.shape == (80, 83, 3) + def test_geospatial_read_geotif_point_crop(test_data): """Test for plantcv-geospatial.""" # read in rgb image with a polygon-type shapefile img = read_geotif(filename=test_data.rgb_tif, bands="R,G,B", cropto=test_data.point_crop) assert img.pseudo_rgb.shape == (41, 46, 3) - \ No newline at end of file From a6edb6fa673eb8f663f78a8f10aeb31d047c4f43 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Mon, 26 Aug 2024 11:50:49 -0500 Subject: [PATCH 31/41] update read_geotif.md by changing band defaults BGR to RGB --- docs/read_geotif.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/read_geotif.md b/docs/read_geotif.md index 00cd0bb..3904108 100644 --- a/docs/read_geotif.md +++ b/docs/read_geotif.md @@ -2,13 +2,13 @@ Read in data (from tif format, most likely georeferenced image data). -**plantcv.geospatial.read_geotif**(*filename, bands="B,G,R", cropto=None*) +**plantcv.geospatial.read_geotif**(*filename, bands="R,G,B", cropto=None*) **returns** [PlantCV Spectral_data](https://plantcv.readthedocs.io/en/latest/Spectral_data/) object instance. - **Parameters:** - filename - Path of the TIF image file. - - bands - Comma separated string representing the order of image bands (e.g., `bands="B,G,R"`), or a list of wavelengths (e.g., `bands=[650, 560, 480]`) + - bands - Comma separated string representing the order of image bands (e.g., `bands="R,G,B"`), or a list of wavelengths (e.g., `bands=[650, 560, 480]`) - Supported symbols and their default wavelengths: - R (red) = 650nm - G (green) = 560nm @@ -26,7 +26,7 @@ import plantcv.geospatial as geo # Read geotif in ortho1 = geo.read_geotif(filename="./data/example_img.tif", bands="b,g,r,RE,NIR") -ortho2 = geo.read_geotif(filename="./data/example_rgb_img.tif", bands="B,G,R") +ortho2 = geo.read_geotif(filename="./data/example_rgb_img.tif", bands="R,G,B") ``` From 2962817123575eb891cd67690bc94c31e7f2bdf3 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Mon, 26 Aug 2024 11:53:44 -0500 Subject: [PATCH 32/41] monor read_geotif updates to make similar to older comments --- plantcv/geospatial/read_geotif.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plantcv/geospatial/read_geotif.py b/plantcv/geospatial/read_geotif.py index 999ead5..b8ef5b6 100644 --- a/plantcv/geospatial/read_geotif.py +++ b/plantcv/geospatial/read_geotif.py @@ -100,10 +100,10 @@ def read_geotif(filename, bands="R,G,B", cropto=None): height, width, depth = img_data.shape wavelengths = {} + # Parse bands if input is a string if isinstance(bands, str): - # Parse bands bands = _parse_bands(bands) - + # Create a dictionary of wavelengths and their indices for i, wl in enumerate(bands): wavelengths[wl] = i # Check if user input matches image dimension in z direction @@ -145,5 +145,5 @@ def read_geotif(filename, bands="R,G,B", cropto=None): geo_crs=geo_crs) _debug(visual=pseudo_rgb, filename=os.path.join(params.debug_outdir, - str(params.device) + "pseudo_rgb.png")) + f"{params.device}_pseudo_rgb.png")) return spectral_array From 986c6e744f08ebb009eba16ce99e8df1412ca44e Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Mon, 26 Aug 2024 12:00:31 -0500 Subject: [PATCH 33/41] Update read_geotif.md --- docs/read_geotif.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/read_geotif.md b/docs/read_geotif.md index 3904108..9a05148 100644 --- a/docs/read_geotif.md +++ b/docs/read_geotif.md @@ -26,7 +26,8 @@ import plantcv.geospatial as geo # Read geotif in ortho1 = geo.read_geotif(filename="./data/example_img.tif", bands="b,g,r,RE,NIR") -ortho2 = geo.read_geotif(filename="./data/example_rgb_img.tif", bands="R,G,B") +ortho2 = geo.read_geotif(filename="./data/example_rgb_img.tif", bands="R,G,B", + cropto="./shapefiles/experimental_bounds.geojson) ``` From 9c0d6ae1fc47398c1e8af32904655df8d4024e0c Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Mon, 26 Aug 2024 13:44:34 -0500 Subject: [PATCH 34/41] doc string back to pythonic --- plantcv/geospatial/read_geotif.py | 43 +++++++++++++++++-------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/plantcv/geospatial/read_geotif.py b/plantcv/geospatial/read_geotif.py index b8ef5b6..d80cef2 100644 --- a/plantcv/geospatial/read_geotif.py +++ b/plantcv/geospatial/read_geotif.py @@ -14,15 +14,18 @@ def _find_closest_unsorted(array, target): """Find closest index of array item with smallest distance from - the target - Inputs: - array: list or array of wavelength labels - target: target value - Returns: - idx: index of closest value to the target - :param array: numpy.ndarray - :param target: int, float - :return idx: int + + Parameters + ---------- + array : numpy.ndarray + Array of wavelength labels + target : int, float + Target value + + Returns + ------- + int + Index of closest value to the target """ return min(range(len(array)), key=lambda i: abs(array[i]-target)) @@ -61,16 +64,18 @@ def _parse_bands(bands): def read_geotif(filename, bands="R,G,B", cropto=None): """Read Georeferenced TIF image from file. - Inputs: - filename: Path of the TIF image file. - bands: Comma separated string representing the order of image bands - (default bands="R,G,B"), or a list of wavelengths (e.g. bands=[650,560,480]) - cropto: Path to a geoJSON-type shape file for cropping input image. - Returns: - spectral_array: PlantCV format Spectral data object instance - :param filename: str - :param bands: str, list - :return spectral_array: __main__.Spectral_data + + Parameters + ---------- + filename : str + Path of the TIF image file. + bands : str, list, optional + Comma separated string listing the order of bands or a list of wavelengths, by default "R,G,B" + + Returns + ------- + plantcv.plantcv.classes.Spectral_data + Orthomosaic image data in a Spectral_data class instance """ if cropto: with fiona.open(cropto, 'r') as shapefile: From 36760b24c9b8fa8c20d542e571f6a47edda5e452 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Mon, 26 Aug 2024 14:08:40 -0500 Subject: [PATCH 35/41] fix whitespace --- plantcv/geospatial/read_geotif.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plantcv/geospatial/read_geotif.py b/plantcv/geospatial/read_geotif.py index d80cef2..451aef8 100644 --- a/plantcv/geospatial/read_geotif.py +++ b/plantcv/geospatial/read_geotif.py @@ -71,7 +71,7 @@ def read_geotif(filename, bands="R,G,B", cropto=None): Path of the TIF image file. bands : str, list, optional Comma separated string listing the order of bands or a list of wavelengths, by default "R,G,B" - + Returns ------- plantcv.plantcv.classes.Spectral_data From df5f63dba57e43a53baa92b7149036f351652afd Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Mon, 26 Aug 2024 15:47:57 -0500 Subject: [PATCH 36/41] add non empty test data --- plantcv/geospatial/transform_points.py | 1 + tests/conftest.py | 2 +- tests/test_geospatial_transform_points.py | 2 +- tests/testdata/monday_test_points.cpg | 1 + tests/testdata/monday_test_points.dbf | Bin 0 -> 110 bytes tests/testdata/monday_test_points.prj | 1 + tests/testdata/monday_test_points.shp | Bin 0 -> 356 bytes tests/testdata/monday_test_points.shx | Bin 0 -> 132 bytes 8 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 tests/testdata/monday_test_points.cpg create mode 100644 tests/testdata/monday_test_points.dbf create mode 100644 tests/testdata/monday_test_points.prj create mode 100644 tests/testdata/monday_test_points.shp create mode 100644 tests/testdata/monday_test_points.shx diff --git a/plantcv/geospatial/transform_points.py b/plantcv/geospatial/transform_points.py index 99a5f02..272fc74 100644 --- a/plantcv/geospatial/transform_points.py +++ b/plantcv/geospatial/transform_points.py @@ -16,6 +16,7 @@ def transform_points(img, geojson): :return coord: list """ geo_transform = img.geo_transform + print(geo_transform) coord = [] with fiona.open(geojson, 'r') as shapefile: for i, _ in enumerate(shapefile): diff --git a/tests/conftest.py b/tests/conftest.py index a1ca38c..f06aeb7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -17,7 +17,7 @@ def __init__(self): # rgb image self.rgb_tif = os.path.join(self.datadir, "rgb.tif") # points shapefilex - self.pts_geojson = os.path.join(self.datadir, "kura_whole_field.shp") + self.pts_geojson = os.path.join(self.datadir, "monday_test_points.shp") @pytest.fixture(scope="session") def test_data(): diff --git a/tests/test_geospatial_transform_points.py b/tests/test_geospatial_transform_points.py index 5aa77e6..4ec8576 100644 --- a/tests/test_geospatial_transform_points.py +++ b/tests/test_geospatial_transform_points.py @@ -6,6 +6,6 @@ def test_geospatial_transform_points(test_data): """Test for plantcv-geospatial.""" # read in small 5-band tif image - img = read_geotif(filename=test_data.cropped_tif, bands="B,G,R,RE,N") + img = read_geotif(filename=test_data.rgb_tif, bands="B,G,R,RE,N") coords = transform_points(img=img, geojson=test_data.pts_geojson) assert coords == [] diff --git a/tests/testdata/monday_test_points.cpg b/tests/testdata/monday_test_points.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/tests/testdata/monday_test_points.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/tests/testdata/monday_test_points.dbf b/tests/testdata/monday_test_points.dbf new file mode 100644 index 0000000000000000000000000000000000000000..e5f9e3ddff17bccce0fb2ba4a6428f33c8247437 GIT binary patch literal 110 ocmZRs;gDisU|?`$;0BVIATtFn<_BVN!MP9yuYwjF5M)XL0AVu;P5=M^ literal 0 HcmV?d00001 diff --git a/tests/testdata/monday_test_points.prj b/tests/testdata/monday_test_points.prj new file mode 100644 index 0000000..a5245a7 --- /dev/null +++ b/tests/testdata/monday_test_points.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_UTM_Zone_15N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-93.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/tests/testdata/monday_test_points.shp b/tests/testdata/monday_test_points.shp new file mode 100644 index 0000000000000000000000000000000000000000..7661e39527fe0c61dac92f500ee2beaa5adafff4 GIT binary patch literal 356 zcmZQzQ0HR64mQ1DW?S(KM)hV16;COKIYKDnG{=2u_ej-3VcI_yl zj6j|Y$Sf|Q!(V%VdVB2r4uH%;=YtfYivfk0VEW%wA3NR;)X(#2G8@QlbUsKwx)@Lh e=o5(j=x#^ngY=_|0fks#`q9Gzoe$EFE(QQpZDI}p literal 0 HcmV?d00001 diff --git a/tests/testdata/monday_test_points.shx b/tests/testdata/monday_test_points.shx new file mode 100644 index 0000000000000000000000000000000000000000..b62c7c1c227ea0fa6f7b5a035cc735a038d76b33 GIT binary patch literal 132 zcmZQzQ0HR64xC;vGca%fJ-ija6CA9HN!+8|J_?|KM^1wyLJ>& RBOp%(h=ZVX5tN<;q5 Date: Mon, 26 Aug 2024 16:55:16 -0500 Subject: [PATCH 37/41] new test and test data for both point types --- tests/conftest.py | 5 +++-- tests/test_geospatial_transform_points.py | 12 ++++++++++-- tests/testdata/kura_whole_field.cpg | 1 - tests/testdata/kura_whole_field.dbf | Bin 66 -> 0 bytes tests/testdata/kura_whole_field.prj | 1 - tests/testdata/kura_whole_field.shp | Bin 100 -> 0 bytes tests/testdata/kura_whole_field.shx | Bin 100 -> 0 bytes tests/testdata/monday_test_points.cpg | 1 - tests/testdata/monday_test_points.dbf | Bin 110 -> 0 bytes tests/testdata/monday_test_points.prj | 1 - tests/testdata/monday_test_points.shp | Bin 356 -> 0 bytes tests/testdata/monday_test_points.shx | Bin 132 -> 0 bytes tests/testdata/single_test_pts.geojson | 15 +++++++++++++++ tests/testdata/test_pts.geojson | 11 +++++++++++ 14 files changed, 39 insertions(+), 8 deletions(-) delete mode 100644 tests/testdata/kura_whole_field.cpg delete mode 100644 tests/testdata/kura_whole_field.dbf delete mode 100644 tests/testdata/kura_whole_field.prj delete mode 100644 tests/testdata/kura_whole_field.shp delete mode 100644 tests/testdata/kura_whole_field.shx delete mode 100644 tests/testdata/monday_test_points.cpg delete mode 100644 tests/testdata/monday_test_points.dbf delete mode 100644 tests/testdata/monday_test_points.prj delete mode 100644 tests/testdata/monday_test_points.shp delete mode 100644 tests/testdata/monday_test_points.shx create mode 100644 tests/testdata/single_test_pts.geojson create mode 100644 tests/testdata/test_pts.geojson diff --git a/tests/conftest.py b/tests/conftest.py index a731ed0..f2c8e88 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -18,9 +18,10 @@ def __init__(self): self.empty_tif = os.path.join(self.datadir, "cropped_empty.tif") # rgb image self.rgb_tif = os.path.join(self.datadir, "rgb.tif") + # multiPoints shapefilex + self.pts_geojson = os.path.join(self.datadir, "test_pts.geojson") # points shapefilex - self.pts_geojson = os.path.join(self.datadir, "monday_test_points.shp") - self.pts_geojson = os.path.join(self.datadir, "kura_whole_field.shp") + self.single_pts_geojson = os.path.join(self.datadir, "single_test_pts.geojson") # polygon shapefile self.square_crop = os.path.join(self.datadir, "square_crop.geojson") # points shapefile diff --git a/tests/test_geospatial_transform_points.py b/tests/test_geospatial_transform_points.py index 4ec8576..cd46133 100644 --- a/tests/test_geospatial_transform_points.py +++ b/tests/test_geospatial_transform_points.py @@ -6,6 +6,14 @@ def test_geospatial_transform_points(test_data): """Test for plantcv-geospatial.""" # read in small 5-band tif image - img = read_geotif(filename=test_data.rgb_tif, bands="B,G,R,RE,N") + img = read_geotif(filename=test_data.rgb_tif, bands="B,G,R") coords = transform_points(img=img, geojson=test_data.pts_geojson) - assert coords == [] + assert len(coords) == 4 + + +def test_geospatial_transform_single_points(test_data): + """Test for plantcv-geospatial.""" + # read in small 5-band tif image + img = read_geotif(filename=test_data.rgb_tif, bands="B,G,R") + coords = transform_points(img=img, geojson=test_data.single_pts_geojson) + assert len(coords) == 8 diff --git a/tests/testdata/kura_whole_field.cpg b/tests/testdata/kura_whole_field.cpg deleted file mode 100644 index 3ad133c..0000000 --- a/tests/testdata/kura_whole_field.cpg +++ /dev/null @@ -1 +0,0 @@ -UTF-8 \ No newline at end of file diff --git a/tests/testdata/kura_whole_field.dbf b/tests/testdata/kura_whole_field.dbf deleted file mode 100644 index a8df29907c8777361ee5cbcd93144ffaaf22766c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66 hcmZRsVV7V40!IdJ5QPCUQ{X~=AQlt{j|0RUVM0yh8v diff --git a/tests/testdata/kura_whole_field.prj b/tests/testdata/kura_whole_field.prj deleted file mode 100644 index a5245a7..0000000 --- a/tests/testdata/kura_whole_field.prj +++ /dev/null @@ -1 +0,0 @@ -PROJCS["WGS_1984_UTM_Zone_15N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-93.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/tests/testdata/kura_whole_field.shp b/tests/testdata/kura_whole_field.shp deleted file mode 100644 index 29de63a12be6f0016d03b25f33ccd616c262cd9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100 YcmZQzQ0HR64vbzfGcYh>mm^6O0AsfSPyhe` diff --git a/tests/testdata/kura_whole_field.shx b/tests/testdata/kura_whole_field.shx deleted file mode 100644 index 29de63a12be6f0016d03b25f33ccd616c262cd9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100 YcmZQzQ0HR64vbzfGcYh>mm^6O0AsfSPyhe` diff --git a/tests/testdata/monday_test_points.cpg b/tests/testdata/monday_test_points.cpg deleted file mode 100644 index 3ad133c..0000000 --- a/tests/testdata/monday_test_points.cpg +++ /dev/null @@ -1 +0,0 @@ -UTF-8 \ No newline at end of file diff --git a/tests/testdata/monday_test_points.dbf b/tests/testdata/monday_test_points.dbf deleted file mode 100644 index e5f9e3ddff17bccce0fb2ba4a6428f33c8247437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 ocmZRs;gDisU|?`$;0BVIATtFn<_BVN!MP9yuYwjF5M)XL0AVu;P5=M^ diff --git a/tests/testdata/monday_test_points.prj b/tests/testdata/monday_test_points.prj deleted file mode 100644 index a5245a7..0000000 --- a/tests/testdata/monday_test_points.prj +++ /dev/null @@ -1 +0,0 @@ -PROJCS["WGS_1984_UTM_Zone_15N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-93.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/tests/testdata/monday_test_points.shp b/tests/testdata/monday_test_points.shp deleted file mode 100644 index 7661e39527fe0c61dac92f500ee2beaa5adafff4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmZQzQ0HR64mQ1DW?S(KM)hV16;COKIYKDnG{=2u_ej-3VcI_yl zj6j|Y$Sf|Q!(V%VdVB2r4uH%;=YtfYivfk0VEW%wA3NR;)X(#2G8@QlbUsKwx)@Lh e=o5(j=x#^ngY=_|0fks#`q9Gzoe$EFE(QQpZDI}p diff --git a/tests/testdata/monday_test_points.shx b/tests/testdata/monday_test_points.shx deleted file mode 100644 index b62c7c1c227ea0fa6f7b5a035cc735a038d76b33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmZQzQ0HR64xC;vGca%fJ-ija6CA9HN!+8|J_?|KM^1wyLJ>& RBOp%(h=ZVX5tN<;q5 Date: Mon, 26 Aug 2024 16:55:34 -0500 Subject: [PATCH 38/41] handle single and MultiPoint syntax of shpfiles --- plantcv/geospatial/transform_points.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plantcv/geospatial/transform_points.py b/plantcv/geospatial/transform_points.py index 272fc74..fdb9b6c 100644 --- a/plantcv/geospatial/transform_points.py +++ b/plantcv/geospatial/transform_points.py @@ -16,11 +16,14 @@ def transform_points(img, geojson): :return coord: list """ geo_transform = img.geo_transform - print(geo_transform) + coord = [] with fiona.open(geojson, 'r') as shapefile: for i, _ in enumerate(shapefile): - pixel_point = ~(geo_transform) * (shapefile[i].geometry["coordinates"]) + if type((shapefile[i].geometry["coordinates"])) is list: + pixel_point = ~(geo_transform) * (shapefile[i].geometry["coordinates"][0]) + if type((shapefile[i].geometry["coordinates"])) is tuple: + pixel_point = ~(geo_transform) * (shapefile[i].geometry["coordinates"]) rounded = (int(pixel_point[0]), int(pixel_point[1])) coord.append(rounded) From 72eb226f777e57c58fba00ce82f212625555b187 Mon Sep 17 00:00:00 2001 From: k034b363 Date: Tue, 27 Aug 2024 09:31:28 -0500 Subject: [PATCH 39/41] add transform_points to mkdocs.yaml and changelog.md --- docs/changelog.md | 4 ++++ mkdocs.yml | 1 + 2 files changed, 5 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 57a94c4..042ae9e 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -5,3 +5,7 @@ All notable changes to this project will be documented below. #### geospatial.read_geotif * v0.1dev: spectral = **geospatial.read_geotif**(*filename, bands="B,G,R"*) + +#### geospatial.transform_points + +* v0.1dev: coord = **geospatial.transform_points**(*img, geojson*) diff --git a/mkdocs.yml b/mkdocs.yml index c69c28c..859a6ce 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -18,6 +18,7 @@ nav: - 'PlantCV Namespace': - 'Geopspatial Tools': - Read Geo-tif Data: read_geotif.md + - Transform coordinate points: transform_points.md markdown_extensions: - toc: permalink: True From 1a3d4f84e7a65986e32b38c9ec8365bf9e5ae944 Mon Sep 17 00:00:00 2001 From: k034b363 Date: Tue, 27 Aug 2024 09:52:30 -0500 Subject: [PATCH 40/41] Typo in docs --- docs/transform_points.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/transform_points.md b/docs/transform_points.md index 69c7fbb..f71416e 100644 --- a/docs/transform_points.md +++ b/docs/transform_points.md @@ -1,6 +1,6 @@ ## Transform Points -Transform the points from a georeferences shapefile/GeoJSON based on an image size. +Transform the points from a georeferenced shapefile/GeoJSON based on an image size. **plantcv.geospatial.trasnsform_points**(*img, geojson*) From 17cd6f417cb50bdead94a91850d7da39aa4c8af4 Mon Sep 17 00:00:00 2001 From: k034b363 Date: Tue, 27 Aug 2024 10:24:11 -0500 Subject: [PATCH 41/41] added acceptable geometry types to docs for transform_points --- docs/transform_points.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/transform_points.md b/docs/transform_points.md index f71416e..433a9d4 100644 --- a/docs/transform_points.md +++ b/docs/transform_points.md @@ -2,13 +2,13 @@ Transform the points from a georeferenced shapefile/GeoJSON based on an image size. -**plantcv.geospatial.trasnsform_points**(*img, geojson*) +**plantcv.geospatial.transform_points**(*img, geojson*) **returns** list of transformed coordinates - **Parameters:** - img - Spectral image object, likely read in with [`geo.read_geotif`](read_geotif.md) - - geojson - Path to the shapefile/GeoJSON containing the points + - geojson - Path to the shapefile/GeoJSON containing the points. Can be Point or MultiPoint geometry. - **Context:** - Transformed points can be used downstream for Python analysis, such as defining ROIs.