From d33c37fa060485672f85fca056f24ffc1c7206a5 Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Tue, 21 Apr 2026 16:14:36 -0400 Subject: [PATCH 01/26] Saving work before switching branches --- .../output_variables/DataProcessor.py | 403 +++++++++++++++-- .../output_variables/utils.py | 416 ++++++++++++++++++ data_assimilation_engine/utils/timeseries.py | 1 - netcdf_production_sample.py | 51 ++- 4 files changed, 818 insertions(+), 53 deletions(-) create mode 100644 data_assimilation_engine/output_variables/utils.py diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index 4eee28c..ce5ea23 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -1,11 +1,15 @@ import os +import json import geopandas as gpd import numpy as np +import pandas as pd import xarray as xr import dask.array as da import time import fiona from shapely.geometry import Point +from shapely.ops import unary_union +from shapely import contains_xy from pyproj import CRS from typing import List, Optional from .DataReader import DataReader @@ -15,14 +19,15 @@ class DataProcessor(DataReader): """ Handles catchment-time NetCDF and grid generation. """ - def __init__(self, netcdf_file: str, gpkg_file: str, template_grid_file: str, + def __init__(self, catchment_output_netcdf_file: str, gpkg_file: str, template_grid_file: str, + config_path: str, output_class: str, category: str, domain: str, produce_template: bool, produce_output: bool, chunk_size: int = 100) -> None: - super().__init__(netcdf_file, chunk_size) + super().__init__(catchment_output_netcdf_file, chunk_size) - self.input_ds: xr.Dataset = self.dataset - self.output_variables = list(self.input_ds.data_vars) + self.catchment_ds: xr.Dataset = self.dataset + self.output_variables = list(self.catchment_ds.data_vars) # Normalize catchment ids in netcdf with a cat- prefix for consistency. - self.nc_catchments = self._normalize_catchment_ids(self.input_ds[self.catchment_coord].values) + self.nc_catchments = self._normalize_catchment_ids(self.catchment_ds[self.catchment_coord].values) # Read geopackage, determine schema and "divides" layer self.is_new_NHF_schema: bool = self._is_new_NHF_schema(gpkg_file, "reference_flowpaths") @@ -46,19 +51,29 @@ def __init__(self, netcdf_file: str, gpkg_file: str, template_grid_file: str, raise ValueError("There is a mistmatch between catchment IDs in geopackage and netcdf") if produce_template: - self.create_template_grid_netcdf_from_geopackage(gpkg_gdf, template_grid_file) - self.ds_grid = xr.open_dataset(template_grid_file) + self.obsolete_create_template_grid_netcdf_from_geopackage(gpkg_gdf, template_grid_file) + self.ds_template_grid = xr.open_dataset(template_grid_file) + + # if produce_output: # Old workflow + # self.grid_points = self.obsolete_build_grid_centroids() + # self.obsolete_build_grid_lookup(gpkg_gdf) + # output_path = 'sample_data/sample_netcdf/sample_output/final_test' #Change this to command line argument later + # start_time = time.perf_counter() + # self.obsolete_create_grids_per_timestep_dask(output_path) + # end_time = time.perf_counter() + # duration_minutes = (end_time - start_time) / 60 + # print(f"Function execution time: {duration_minutes:.4f} minutes") + if produce_template: + self.create_template_grid_netcdf_using_config(gpkg_gdf, template_grid_file, + config_path, output_class, category, domain) + self.ds_template_grid = xr.open_dataset(template_grid_file) - # explicitly set CRS to CONUS. - # TO DO: Read an existing NWM grid file for CRS info - self.ds_grid = self.ds_grid.rio.write_crs("EPSG:5070") - if produce_output: - self.grid_points = self.build_grid_centroids() - self.build_grid_lookup(gpkg_gdf) - output_path = 'sample_data/sample_netcdf/sample_output/final_test' #Change this to command line argument later + catchment_grid = self.build_catchment_id_grid(template_grid_file, gpkg_gdf, "x", "y") # Change hardcoded values later + mapped_grid = self.map_catchment_data_to_grid(catchment_grid,catchment_output_netcdf_file, "catchments","time") # Change hardcoded values later + output_dir = 'sample_data/sample_netcdf/sample_output/final_test' #Change this to command line argument later start_time = time.perf_counter() - self.create_grids_per_timestep_dask(output_path) + self.write_netcdf_per_timestep(mapped_grid, output_dir, "time") end_time = time.perf_counter() duration_minutes = (end_time - start_time) / 60 print(f"Function execution time: {duration_minutes:.4f} minutes") @@ -84,8 +99,15 @@ def _normalize_catchment_ids(self, ids) -> np.ndarray: ]) return normalized - def create_template_grid_netcdf_from_geopackage(self, geopackage_gdf: gpd.GeoDataFrame, output_grid_netcdf: str, - resolution: int = 1000, epsg_code: int = 5070) -> None: + def _snap_to_grid(value: float, origin: float, resolution: int, direction: np.ufunc): + if direction == np.floor: + return origin + np.floor((value - origin) / resolution) * resolution + elif direction == np.ceil: + return origin + np.ceil((value - origin) / resolution) * resolution + + def obsolete_create_template_grid_netcdf_from_geopackage(self, geopackage_gdf: gpd.GeoDataFrame, output_grid_netcdf: str, + resolution: int, epsg_code: int, origin_x: float, + origin_y: float) -> None: """ Create a NetCDF grid with 1 km x 1 km resolution covering the extent of catchment polygons. @@ -99,12 +121,16 @@ def create_template_grid_netcdf_from_geopackage(self, geopackage_gdf: gpd.GeoDat # Get bounding box minx, miny, maxx, maxy = gdf.total_bounds - - # Create grid coordinates and default to zero for the data - x_coords = np.arange(minx, maxx + resolution, resolution) - y_coords = np.arange(miny, maxy + resolution, resolution) - grid_data = np.zeros((len(y_coords), len(x_coords))) + snapped_minx = self._snap_to_grid(minx, origin_x, resolution, np.floor) + snapped_maxx = self._snap_to_grid(maxx, origin_x, resolution, np.ceil) + snapped_miny = self._snap_to_grid(miny, origin_y, resolution, np.floor) + snapped_maxy = self._snap_to_grid(maxy, origin_y, resolution, np.ceil) + + # Create grid coordinates + x_coords = np.arange(snapped_minx, snapped_maxx + resolution, resolution) + y_coords = np.arange(snapped_miny, snapped_maxy + resolution, resolution) + ds = xr.Dataset( coords={ "x": ("x", x_coords), @@ -129,28 +155,128 @@ def create_template_grid_netcdf_from_geopackage(self, geopackage_gdf: gpd.GeoDat ds.to_netcdf(output_grid_netcdf) print(f"NetCDF template grid written to {output_grid_netcdf}") - def build_grid_centroids(self) -> gpd.GeoDataFrame: + def create_template_grid_netcdf_using_config(self, geopackage_gdf: gpd.GeoDataFrame, template_grid_netcdf_path: str, + config_path: str, + output_class: str, + category: str, + domain: str + ) -> None: + """ + Create a template grid aligned to a reference grid defined in config.json. + """ + # Read config file + with open(config_path, "r") as f: + config = json.load(f) + + # Find matching entry + entry = next((c_item for c_item in config if + c_item["class"] == output_class and + c_item["category"] == category and + c_item["domain"] == domain), None) + if entry is None: + raise ValueError(f"Cannot find a config file entry that matches {output_class}, {category} and {domain}") + + origin_x = entry["origin"]["x"] + origin_y = entry["origin"]["y"] + res_x = entry["resolution"]["x"] + res_y = entry["resolution"]["y"] + wkt = entry["crs_wkt"] + file_name = entry["file_path"] + x_name = entry["location_name"]["x"] + y_name = entry["location_name"]["y"] + + ds = xr.open_dataset(file_name) + target_crs = None + if not ds.rio.crs: + # Try CF convention (grid_mapping) + for var in ds.variables: + if "grid_mapping" in ds[var].attrs: + grid_map_var = ds[var].attrs["grid_mapping"] + target_crs = ds[grid_map_var].attrs.get("crs_wkt", None) + break + if target_crs is None: + raise ValueError("CRS not found in NetCDF file.") + ds = ds.rio.write_crs(target_crs) + else: + target_crs = ds.rio.crs + + # Alternate for CRS. Commented for now. + # TO DO: Add a check when wkt is not available. + # target_crs = CRS.from_user_input(wkt) + + gdf = geopackage_gdf.to_crs(target_crs) + geom = unary_union(gdf.geometry) + + # Get bounding box and snap to origin in config + minx, miny, maxx, maxy = gdf.total_bounds + + snapped_minx = self._snap_to_grid(minx, origin_x, res_x, np.floor) + snapped_maxx = self._snap_to_grid(maxx, origin_x, res_x, np.ceil) + snapped_miny = self._snap_to_grid(miny, origin_y, res_y, np.floor) + snapped_maxy = self._snap_to_grid(maxy, origin_y, res_y, np.ceil) + + ds_subset = ds.sel( + { + x_name: slice(snapped_minx, snapped_maxx), + y_name: slice(snapped_miny, snapped_maxy), + } + ) + x_subset = self.ds_grid[x_name].values + y_subset = self.ds_grid[y_name].values + xx, yy = np.meshgrid(x_subset, y_subset) + + mask = contains_xy(geom, xx, yy) + ds_masked = ds_subset.where(mask) + # Drop empty rows/cols that are outside of the polygon boundary + ds_clipped = ds_masked.dropna(dim=y_name, how="all") + ds_clipped = ds_clipped.dropna(dim=x_name, how="all") + ds_clipped = ds_clipped.rio.write_crs(target_crs) + ds_clipped["crs"] = ([], 0) + ds_clipped["crs"].attrs["spatial_ref"] = wkt + ds_clipped["crs"].attrs["esri_pe_string"] = wkt + + # Save + ds.to_netcdf(template_grid_netcdf_path) + print(f"NetCDF template grid written to {template_grid_netcdf_path}") + + def obsolete_build_grid_centroids(self) -> gpd.GeoDataFrame: """ Create GeoDataFrame of grid cell centroids. """ - x = self.ds_grid["x"].values - y = self.ds_grid["y"].values + # To do: Replace x, y with the actual x and y names in the netcdf + x = self.ds_template_grid["x"].values + y = self.ds_template_grid["y"].values xx, yy = np.meshgrid(x, y) points = [Point(px, py) for px, py in zip(xx.ravel(), yy.ravel())] return gpd.GeoDataFrame( {"cell_index": np.arange(len(points))}, geometry=points, - crs=self.ds_grid.rio.crs + crs=self.ds_template_grid.rio.crs ) - def build_grid_lookup(self, catchment_gdf: gpd.GeoDataFrame) -> None: + def obsolete_build_grid_lookup(self, catchment_gdf: gpd.GeoDataFrame) -> None: """ Build the grid-to-catchment mapping (vectorized index array). Must be called just once before generating grids for every timestep. """ # Spatial join # TO DO: Have to determine if there are other methods that are less expensive computationally. + + target_crs = None + if not ds.rio.crs: + # Try CF convention (grid_mapping) + for var in ds.variables: + if "grid_mapping" in ds[var].attrs: + grid_map_var = ds[var].attrs["grid_mapping"] + target_crs = ds[grid_map_var].attrs.get("crs_wkt", None) + break + if target_crs is None: + raise ValueError("CRS not found in NetCDF file.") + ds = ds.rio.write_crs(target_crs) + else: + target_crs = ds.rio.crs + joined = gpd.sjoin( self.grid_points, catchment_gdf[[self.catchment_field, "geometry"]], @@ -165,32 +291,32 @@ def build_grid_lookup(self, catchment_gdf: gpd.GeoDataFrame) -> None: self.grid_to_catchment = grid_to_catchment print("Grid-to-catchment mapping built!") - def _build_crs_variable(self, ds_out: xr.Dataset) -> xr.Dataset: + def _obsolete_build_crs_variable(self, ds: xr.Dataset, crs_wkt: str | None = None) -> xr.Dataset: """ Build CF-compliant CRS variable from a template NWM grid. Currently, this is not using the template NWM grid. It uses catchment grid instead. """ # Get CRS from template - crs_obj = CRS.from_user_input(self.ds_grid.rio.crs) + crs_obj = CRS.from_user_input(ds.rio.crs) # Convert to CF dict cf_attrs = crs_obj.to_cf() # Create CRS variable - ds_out["crs"] = xr.DataArray(0) + ds["crs"] = xr.DataArray(0) # Assign CF attributes - ds_out["crs"].attrs.update(cf_attrs) + ds["crs"].attrs.update(cf_attrs) # Add WKT (for QGIS) wkt = crs_obj.to_wkt() - ds_out["crs"].attrs["spatial_ref"] = wkt - ds_out["crs"].attrs["esri_pe_string"] = wkt + ds["crs"].attrs["spatial_ref"] = wkt + ds["crs"].attrs["esri_pe_string"] = wkt # Add GeoTransform - x = ds_out["x"].values - y = ds_out["y"].values + x = ds["x"].values + y = ds["y"].values dx = float(x[1] - x[0]) dy = float(y[1] - y[0]) @@ -198,16 +324,37 @@ def _build_crs_variable(self, ds_out: xr.Dataset) -> xr.Dataset: xmin = float(x[0] - dx / 2) ymax = float(y[-1] + dy / 2) - ds_out["crs"].attrs["GeoTransform"] = f"{xmin} {dx} 0 {ymax} 0 {-dy}" + ds["crs"].attrs["GeoTransform"] = f"{xmin} {dx} 0 {ymax} 0 {-dy}" # Optional (additional metadata) - ds_out["crs"].attrs["_CoordinateAxes"] = "y x" - ds_out["crs"].attrs["_CoordinateTransformType"] = "Projection" - ds_out["crs"].attrs["long_name"] = "CRS definition" + ds["crs"].attrs["_CoordinateAxes"] = "y x" + ds["crs"].attrs["_CoordinateTransformType"] = "Projection" + ds["crs"].attrs["long_name"] = "CRS definition" - return ds_out + return ds + + def _build_crs_variable(self, ds: xr.Dataset, crs: str) -> xr.Dataset: + """ + Ensures dataset is fully CF + GDAL compliant with CRS. + """ + + # Write CRS using rioxarray + ds = ds.rio.write_crs(crs) + + # Build CF-compliant grid_mapping variable + wkt = crs.to_wkt() + + ds["crs"] = ([], 0) + ds["crs"].attrs["spatial_ref"] = wkt + ds["crs"].attrs["esri_pe_string"] = wkt + + # Link all variables to CRS + for var in ds.data_vars: + ds[var].attrs["grid_mapping"] = "crs" - def create_grids_per_timestep(self, output_dir: str) -> None: + return ds + + def obsolete_create_grids_per_timestep(self, output_dir: str) -> None: """ Generates netcdf grids per timestep for all the variables in the catchments netcdf. """ @@ -218,12 +365,12 @@ def create_grids_per_timestep(self, output_dir: str) -> None: # may be a robust approach is not to consider "time". Instead use # np.issubdtype(coord.dtype, np.datetime64)? - time_dim = next(dim for dim in self.input_ds.dims if "time" in dim.lower()) + time_dim = next(dim for dim in self.catchment_ds.dims if "time" in dim.lower()) reference_time = np.datetime64('1970-01-01T00:00:00') - for t in self.input_ds[time_dim].values: + for t in self.catchment_ds[time_dim].values: print(f"Processing timestep: {t}") - ds_t = self.input_ds.sel({time_dim: t}) + ds_t = self.catchment_ds.sel({time_dim: t}) ds_out = self.ds_grid.copy(deep=True) time_value_min = (t - reference_time) / np.timedelta64(1, 'm') @@ -253,7 +400,7 @@ def create_grids_per_timestep(self, output_dir: str) -> None: output_file = os.path.join(output_dir, f"grid_{formatted_t}.nc") ds_out.to_netcdf(output_file) - def create_grids_per_timestep_dask(self, output_dir: str, chunk_size: int = 1000) -> None: + def obsolete_create_grids_per_timestep_dask(self, output_dir: str, chunk_size: int = 1000) -> None: """ Generates netcdf grids per timestep for all the variables in the catchments netcdf. """ @@ -273,9 +420,9 @@ def create_grids_per_timestep_dask(self, output_dir: str, chunk_size: int = 1000 valid_mask_da = da.from_array(valid_mask, chunks=chunk_size) # Rechunk by time dimension as we are processing one timestep at a time - time_dim = next(dim for dim in self.input_ds.dims if np.issubdtype(self.input_ds[dim].dtype, np.datetime64)) + time_dim = next(dim for dim in self.catchment_ds.dims if np.issubdtype(self.catchment_ds[dim].dtype, np.datetime64)) reference_time = np.datetime64('1970-01-01T00:00:00') - ds_in = self.input_ds.chunk({time_dim: 1}) + ds_in = self.catchment_ds.chunk({time_dim: 1}) for t in ds_in[time_dim].values: print(f"Processing timestep: {t}") @@ -320,4 +467,164 @@ def create_grids_per_timestep_dask(self, output_dir: str, chunk_size: int = 1000 t_str = np.datetime_as_string(t, unit='s') formatted_t = t_str.replace('-', '_').replace(':', '_') output_file = os.path.join(output_dir, f"grid_{formatted_t}.nc") - ds_out.to_netcdf(output_file) \ No newline at end of file + ds_out.to_netcdf(output_file) + + def build_catchment_id_grid(self, template_nc_path: str, gpkg_gdf: gpd.GeoDataFrame, + x_dim: str = "x", + y_dim: str = "y", + ) -> xr.DataArray: + """ + Returns a DataArray (y, x) where each cell contains a catchment ID. + """ + ds = xr.open_dataset(template_nc_path) #alternatively, we can use self.ds_template_grid? + x = ds[x_dim].values + y = ds[y_dim].values + + # Origin point is assumed to be bottom-left. It may be others too. + # So, sort the values for consistency + if x[0] > x[-1]: + ds = ds.sortby(x_dim) + x = ds[x_dim].values + if y[0] > y[-1]: + ds = ds.sortby(y_dim) + y = ds[y_dim].values + + # Build centroid points and create geodataframe + xx, yy = np.meshgrid(x, y) + df_points = pd.DataFrame({ + "x": xx.ravel(), + "y": yy.ravel() + }) + gdf_ncgrid_points = gpd.GeoDataFrame( + df_points, + geometry=gpd.points_from_xy(df_points["x"], df_points["y"]), + crs=ds.rio.crs + ) + + # Spatial join with catchments for grid point to catchment association + gdf_poly = gpkg_gdf.to_crs(ds.rio.crs) + joined = gpd.sjoin( + gdf_ncgrid_points, + gdf_poly[[self.catchment_field, "geometry"]], + how="left", + predicate="within" + ) + catchment_ids = joined[self.catchment_field].to_numpy() + catchment_grid = catchment_ids.reshape(len(y), len(x)) + + return xr.DataArray( + catchment_grid, + dims=(y_dim, x_dim), + coords={y_dim: y, x_dim: x}, + name="catchment_id" + ) + + def map_catchment_data_to_grid(self, catchment_grid: xr.DataArray, + catchment_dim: str = "catchments", time_dim: str = "time" + ) -> xr.Dataset: + """ + Broadcast catchment-based variables onto grid using catchment_id grid. + """ + + ds_data = self.catchment_ds + + # Convert catchment IDs to index positions + catchment_ids = ds_data[catchment_dim].values + + # Build mapping: catchment_id -> index + id_to_index = {cid: i for i, cid in enumerate(catchment_ids)} + + # Convert grid IDs to indices + grid_index = xr.apply_ufunc( + np.vectorize(lambda x: id_to_index.get(x, -1)), + catchment_grid, + vectorize=True, + dask="parallelized", + output_dtypes=[int] + ) + + # Mask invalid cells + valid_mask = grid_index >= 0 + + out_vars = {} + + for var in ds_data.data_vars: + if catchment_dim not in ds_data[var].dims: + continue + data = ds_data[var] + mapped = data.isel({catchment_dim: grid_index}) + mapped = mapped.where(valid_mask) + out_vars[var] = mapped + + ds_out = xr.Dataset(out_vars) + + # Attach coordinates from template + ds_out = ds_out.assign_coords({ + "x": self.ds_template_grid["x"], + "y": self.ds_template_grid["y"] + }) + + # Add CRS + ds_out = self._build_crs_variable(ds_out, self.ds_template_grid.rio.crs) + + return ds_out + + def write_netcdf_per_timestep(mapped_grid: xr.Dataset, output_dir: str, time_dim: str = "time") -> None: + """ + Writes one NetCDF per timestep. + """ + os.makedirs(output_dir, exist_ok=True) + reference_time = np.datetime64("1970-01-01T00:00:00") + + for t in mapped_grid[time_dim].values: + ds_t = mapped_grid.sel({time_dim: t}).copy() + time_value_min = (t - reference_time) / np.timedelta64(1, "m") # time to CF format + ds_t = ds_t.expand_dims({time_dim: [time_value_min]}) + ds_t[time_dim].attrs["units"] = "minutes since 1970-01-01 00:00:00 UTC" + ds_t[time_dim].attrs["standard_name"] = "time" + + # Output filename and save + t_str = np.datetime_as_string(t, unit='s') + formatted_t = t_str.replace('-', '_').replace(':', '_') + output_file = os.path.join(output_dir, f"grid_{formatted_t}.nc") + ds_t.to_netcdf(output_file) + + def merge_basin_netcdfs(nc_files: list[str], fill_value: float | None = None, check_crs: bool = True + ) -> xr.Dataset: + """ + Merge multiple NetCDF subsets. + + Assumes: + - Same grid resolution + - Same coordinate system + - Non-overlapping or safely overlapping regions + """ + + datasets = [xr.open_dataset(f) for f in nc_files] + + # Check CRS and confirm that they are the same for all the netcdf files + if check_crs: + crs_list = [] + for ds in datasets: + if ds.rio.crs: + crs_list.append(ds.rio.crs.to_string()) + else: + raise ValueError("One dataset missing CRS") + if len(set(crs_list)) != 1: + raise ValueError("CRS mismatch between datasets") + + # Use Merge or combine_by_coords to combine the NetCDFs + ds_combined = xr.combine_by_coords(datasets, combine_attrs="override") + + for dim in ds_combined.dims: + ds_combined = ds_combined.sortby(dim) # Sort (for consistency) + + # To do: Alternate approach is to use Merge. Pick one of the two methods after testing. + # compat='no_conflicts' ensures overlapping non-null values must agree + #ds_combined = xr.merge(datasets, compat="no_conflicts") + + # --- Optional fill --- + if fill_value is not None: + ds_merged = ds_merged.fillna(fill_value) + + return ds_combined \ No newline at end of file diff --git a/data_assimilation_engine/output_variables/utils.py b/data_assimilation_engine/output_variables/utils.py new file mode 100644 index 0000000..1ff472a --- /dev/null +++ b/data_assimilation_engine/output_variables/utils.py @@ -0,0 +1,416 @@ +import os +import requests +import xarray as xr +import csv +import numpy as np +import json +import logging +from urllib.parse import urljoin +from bs4 import BeautifulSoup +from datetime import datetime +from pyproj import CRS +from typing import List, Set, Tuple, Optional + +nwm_variables_list = ['sfcheadsubrt', 'zwattablrt', 'inflow', 'outflow', 'reservoir_assimilated_value', +'water_sfc_elev', 'nudge', 'qBucket', 'streamflow', 'velocity', 'qBtmVertRunoff', 'qSfcLatRunoff', +'ACSNOM', 'ACCET', 'SNOWT_AVG', 'EDIR', 'SOILICE', 'SOILSAT_TOP', 'ISNOW', 'QRAIN', 'FSNO', 'SNOWH', +'SNLIQ', 'SNEQV', 'QSNOW', 'SOIL_T', 'SOIL_M', 'SFCRNOFF', 'ACCECAN', 'ACCEDIR', 'ACCETRAN', 'UGDRNOFF', +'GRDFLX', 'TRAD', 'FSA', 'CANWAT', 'LH', 'FIRA', 'HFX'] + + +class NetCDFMetadata: + def __init__( + self, + file_path: str, + resolution_x: float, + resolution_y: float, + origin_x: float, + origin_y: float, + x_loc: str, + y_loc: str, + wkt: Optional[str], + variables: str, + output_class: str, + category: str, + domain: str, + ) -> None: + self.file_path: str = file_path + self.resolution_x: float = resolution_x + self.resolution_y: float = resolution_y + self.origin_x: float = origin_x + self.origin_y: float = origin_y + self.x_name: str = x_loc + self.y_name: str = y_loc + self.nwm_variables: str = variables + self.crs_wkt: str = wkt + self.output_class: str = output_class + self.category: str = category + self.domain: str = domain + + def key(self) -> tuple[str, str, str]: + """ + Unique identifier for duplicate checking + """ + return (self.output_class, self.category, self.domain) + + def __repr__(self) -> str: #for debugging purposes + return ( + f"NetCDFMetadata(file_path={self.file_path}, " + f"class={self.output_class}, category={self.category}, domain={self.domain})" + ) + +def download_nwm_data_from_server(base_url: str, local_root: str) -> None: + """ + Main function to download a unique set of output files from the server + """ + if not os.path.exists(local_root): + os.makedirs(local_root) + + formatted_date = datetime.now().strftime("%Y%m%d") + formatted_url = f"{base_url}/nwm.{formatted_date}/" + existing_keys = build_existing_keys(local_root) # build class, category, domain keys in local folder, if exists. + download_nwm_data_recursive(formatted_url, local_root, existing_keys) + +def create_nwm_template_grids(src_root_folder: str, dest_root_folder: str) -> None: + """ + Creates template grids for all NWM netcdf products using a sample set of netcdfs. + """ + coords_to_reset = ['time', 'x', 'y', 'latitude', 'longitude'] + + for root, dirs, files in os.walk(src_root_folder): + # Determine the relative path to recreate subfolders + rel_path = os.path.relpath(root, src_root_folder) + target_dir = os.path.join(dest_root_folder, rel_path) + + # Create the target directory if it doesn't exist + os.makedirs(target_dir, exist_ok=True) + + for file in files: + if file.endswith('.nc'): + src_path = os.path.join(root, file) + dst_path = os.path.join(target_dir, file) + + # Process the NetCDF using xarray + with xr.open_dataset(src_path) as ds: + # Reset data variables + for var in ds.data_vars: + if var in nwm_variables_list: + ds[var].values[:] = -1 + + # Reset coordinate variables + for coord in coords_to_reset: + if coord in ds.coords: + ds[coord].values[:] = - 1 + # Save to the desired location + ds.to_netcdf(dst_path) + print(f"Processed: {dst_path}") + +def debug_netcdf_structure_in_folder(folder_path: str) -> None: + """ + Recursively scans a folder for NetCDF files and prints their structure. + """ + nc_files: List[str] = [] + logging.basicConfig( + filename='app.log', + level=logging.INFO, + format='%(message)s' + #format='%(asctime)s - %(message)s' + ) + data_variables_list = [] + for root, _, files in os.walk(folder_path): + for file in files: + if file.endswith(".nc"): + nc_files.append(os.path.join(root, file)) + + if not nc_files: + print(f"No NetCDF files found in: {folder_path}") + return + logging.info(f"Found {len(nc_files)} NetCDF files within the folder") + + for file_path in nc_files: + logging.info("=" * 80) + logging.info(f"FILE: {file_path}") + + try: + with xr.open_dataset(file_path) as ds: + + # Variables + logging.info("--Variables:") + for var_name, var in ds.data_vars.items(): + logging.info(f"---- {var_name}: shape={var.shape}, dtype={var.dtype}") + output_class, category, domain = parse_filename_metadata(file_path) + data_variables_list.append(var_name + ";" + output_class + ";" + category + ";" + domain) + + # Dimensions + logging.info("--Dimensions:") + for dim_name, dim_size in ds.sizes.items(): + logging.info(f"---- {dim_name}: size={dim_size}") + + # CRS-specific attributes if present + is_crs_present = False + is_sref_present = False + for crs_name in ["crs", "CRS", "spatial_ref"]: + if crs_name in ds.variables: + logging.info(f"--CRS Variable: {crs_name}") + is_crs_present = True + crs_var = ds.variables[crs_name] + if 'spatial_ref' in crs_var.attrs: + spatial_ref_raw = ds.variables[crs_name].attrs['spatial_ref'] + is_sref_present = True + logging.info(f"----{spatial_ref_raw}") + logging.info(f"-- CRS Available: {is_crs_present}; Spatial_ref Available: {is_sref_present}") + with open('__variables_check.csv', 'w', newline='') as f: + writer = csv.writer(f) + writer.writerow(["Variable", "Class", "Category", "Domain"]) + for var in data_variables_list: + if not var.startswith('crs'): + row = var.split(";") + writer.writerow(row) + except Exception as e: + print(f"\n Failed to read file: {file_path}") + print(f"Error: {e}") + +def obtain_metadata_information(local_root: str, output_name: str) -> None: + """ + Parse the metadata information from the downloaded NWM output files and write a CSV and a json + """ + if not os.path.exists(local_root): + raise Exception(f"Folder does not exist: {local_root}") + + metadata_list = process_downloaded_files(local_root) + output_csv = os.path.join(local_root, output_name + ".csv") + write_metadata_to_csv(metadata_list, output_csv) + output_json = os.path.join(local_root, output_name + "_config.json") + write_metadata_to_config_json(metadata_list, output_json) + +def parse_filename_metadata(filename: str) -> Tuple[str, str, str]: + """ + Extract output_class, category and domain from filename. + """ + components = filename.split(".") + + if len(components) < 7: + raise Exception(f"NWM Output file name doesn't follow expected format: {filename}") + + output_class = components[2] + category = components[3] + domain = components[5] + return output_class, category, domain + + +def download_nwm_data_recursive(download_url: str, local_path: str, + existing_keys: Set[Tuple[str, str, str]] +) -> None: + """ + Recursively download a unique set of output files from the server + and create a mirrored folder structure as server + """ + response = requests.get(download_url) + if response.status_code != 200: + raise Exception(f"Failed to access {download_url}") + + soup = BeautifulSoup(response.text, 'html.parser') + links = soup.find_all('a', href=True) + file_links = [link['href'] for link in links if not link['href'].startswith('/')] + for file_link in file_links: + file_url = urljoin(download_url, file_link) + if (file_url.endswith('/')): + local_file_path = os.path.join(local_path, file_link) + download_nwm_data_recursive(file_url, local_file_path, existing_keys) + else: + if not file_link.endswith(".nc"): + continue + + output_class, category, domain = parse_filename_metadata(file_link) + key = (output_class, category, domain) + + # Skip if already exists + if key in existing_keys: + continue + else: + if not os.path.exists(local_path): + os.makedirs(local_path) + save_path = os.path.join(local_path, file_link) + download_file(file_url, save_path) + # Add to existing set AFTER successful download + existing_keys.add(key) + +def download_file(url: str, save_path: str) -> None: + """ + Downloads a file from a URL and saves it locally. + """ + response = requests.get(url) + if response.status_code == 200: + with open(save_path, 'wb') as f: + f.write(response.content) + print(f"Downloaded: {save_path}") + else: + print(f"Failed to download: {url}, HTTP status code {response.status_code}") + +def build_existing_keys(local_root: str) -> Set[Tuple[str, str, str]]: + """ + Builds file keys in local folder. These keys are used for function re-runs + and enables the capability to not download a file again. + """ + keys = set() + for root, _, files in os.walk(local_root): + for file in files: + if file.endswith(".nc"): + output_class, category, domain = parse_filename_metadata(file) + keys.add((output_class, category, domain)) + + return keys + +def process_downloaded_files(local_root: str) -> List[NetCDFMetadata]: + """ + Process downloaded files and create a list of metadata objects for a config json + """ + metadata_list: List[NetCDFMetadata] = [] + + for root, _, files in os.walk(local_root): + for file in files: + if file.endswith(".nc"): + file_path = os.path.join(root, file) + metadata_list.append(extract_netcdf_metadata(file_path)) + + return metadata_list + +def extract_netcdf_metadata(file_path: str) -> NetCDFMetadata: + + filename = os.path.basename(file_path) + output_class, category, domain = parse_filename_metadata(filename) + x_loc_info = ['x', 'lon', 'longitude'] + y_loc_info = ['y', 'lat', 'latitude'] + crs_info = ['crs', 'CRS', 'spatial_ref'] + res_x = -9999 + res_y = -9999 + origin_x = -9999 + origin_y = -9999 + proj_wkt = 'Not Available' + vars_in_netcdf = [] + nwm_variables = '' + x_loc_name = '' + y_loc_name = '' + + ds = xr.open_dataset(file_path) + for nwm_var in ds.variables: + if nwm_var in x_loc_info: #XRes: assume only one of the x_loc_info will be in the file + x = ds.variables[nwm_var].values + res_x = compute_resolution(x) + origin_x = float(x.min()) + x_loc_name = nwm_var + elif nwm_var in y_loc_info: #YRes: assume only one of the y_loc_info will be in the file + y = ds.variables[nwm_var].values + res_y = compute_resolution(y) + origin_y = float(y.min()) + y_loc_name = nwm_var + elif nwm_var in crs_info: #CRS wkt + proj_wkt = extract_wkt_from_crs(ds.variables[nwm_var]) + elif nwm_var in nwm_variables_list: #NWM output variables + vars_in_netcdf.append(nwm_var) + nwm_variables = ", ".join(vars_in_netcdf) + return NetCDFMetadata(file_path, res_x, res_y, origin_x, origin_y, x_loc_name, y_loc_name, proj_wkt, nwm_variables, output_class, category, domain) + +def compute_resolution(coords: np.ndarray) -> float: + """ + Compute resolution from coordinate array using median spacing. + """ + if coords.size < 2: + return 0.0 + + diffs = np.diff(coords) + return float(np.median(np.abs(diffs))) + +def extract_wkt_from_crs(crs_var) -> Optional[str]: + """ + Extract wkt attribute from CRS variable. + """ + if "spatial_ref" in crs_var.attrs: + return crs_var.attrs["spatial_ref"] + elif "esri_pe_string" in crs_var.attrs: + return crs_var.attrs["esri_pe_string"] + return None + +def write_metadata_to_csv(metadata_list: List[NetCDFMetadata], output_csv: str) -> None: + """ + Writes a list of NetCDFMetadata objects to a CSV file. + + :param metadata_list: List of NetCDFMetadata objects + :param output_csv: Output CSV file path + """ + fieldnames: List[str] = [ + "file_path", + "resolution_x", + "resolution_y", + "origin_x", + "origin_y", + "x_name", + "y_name", + "crs_wkt", + "variables", + "class", + "category", + "domain", + ] + + with open(output_csv, mode="w", newline="", encoding="utf-8") as csvfile: + writer = csv.DictWriter(csvfile, fieldnames=fieldnames) + + writer.writeheader() + + for metadata in metadata_list: + writer.writerow( + { + "file_path": metadata.file_path, + "resolution_x": metadata.resolution_x, + "resolution_y": metadata.resolution_y, + "origin_x": metadata.origin_x, + "origin_y": metadata.origin_y, + "x_name": metadata.x_name, + "y_name": metadata.y_name, + "crs_wkt": metadata.crs_wkt if metadata.crs_wkt is not None else "Not Available", + "variables": metadata.nwm_variables, + "class": metadata.output_class or "", + "category": metadata.category or "", + "domain": metadata.domain or "", + } + ) + +def write_metadata_to_config_json(metadata_list: List[NetCDFMetadata], output_json: str) -> None: + """ + Writes NetCDFMetadata objects to config JSON using WKT CRS. + """ + info_list = [] + for mdata in metadata_list: + metadata_info_dict = { + "file_path": mdata.file_path, + "resolution": { + "x": mdata.resolution_x, + "y": mdata.resolution_y, + }, + "origin": { + "x": mdata.origin_x, + "y": mdata.origin_y, + }, + "location_name": { + "x": mdata.x_name, + "y": mdata.y_name, + }, + "crs_wkt": mdata.crs_wkt, + "nwm_variables": mdata.nwm_variables, + "class": mdata.output_class, + "category": mdata.category, + "domain": mdata.domain + } + info_list.append(metadata_info_dict) + + config = { + "files": info_list + } + # config: Dict[str, List[Dict[str, Any]]] = { + # "files": [to_dict(m) for m in metadata_list] + # } + with open(output_json, "w", encoding="utf-8") as f: + json.dump(config, f, indent = 2) + + print(f"Config JSON written to: {output_json}") \ No newline at end of file diff --git a/data_assimilation_engine/utils/timeseries.py b/data_assimilation_engine/utils/timeseries.py index b61baed..df7b437 100644 --- a/data_assimilation_engine/utils/timeseries.py +++ b/data_assimilation_engine/utils/timeseries.py @@ -189,7 +189,6 @@ def obs_path(self) -> tuple[str, str]: s3_uri = ( f"s3://{self.obs_prefix}/gages-{self.basin_id}_{self.variable_name}.csv" ) - print(repr(s3_uri)) if fs.exists(s3_uri): return s3_uri else: diff --git a/netcdf_production_sample.py b/netcdf_production_sample.py index 86a7b1c..8be3ad5 100644 --- a/netcdf_production_sample.py +++ b/netcdf_production_sample.py @@ -1,6 +1,7 @@ import argparse from data_assimilation_engine.output_variables.DataReader import DataReader from data_assimilation_engine.output_variables.DataProcessor import DataProcessor +import data_assimilation_engine.output_variables.utils as utils def randomize_values(netcdf_file: str, output_file: str) -> None: #Usage: @@ -9,6 +10,9 @@ def randomize_values(netcdf_file: str, output_file: str) -> None: reader = DataReader(netcdf_file) reader.assign_random_values(output_file) +#def build_nwm_grids_config(netcdf_folder_path: str, output_json: str): + + def create_template_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str): #Usage #python netcdf_wrapper_sample.py create-template-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/grid_template.nc @@ -20,8 +24,26 @@ def create_nwm_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str): processor = DataProcessor(netcdf_file, gpkg_file, template_grid_file, False, True) def create_nwm_grid_dask(netcdf_file: str, gpkg_file: str, template_grid_file: str): + #Usage: + #python netcdf_wrapper_sample.py create-nwm-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/grid_template.nc processor = DataProcessor(netcdf_file, gpkg_file, template_grid_file, False, True) +def download_netcdf(download_url: str, output_folder: str): + #Usage: + #python netcdf_production_sample.py download-nwm-outputs https://nomads.ncep.noaa.gov/pub/data/nccf/com/nwm/prod sample_data/nwm_output + utils.download_nwm_data_from_server(download_url, output_folder) + +def extract_netcdf_metadata(netcdf_root_folder: str, output_file_name: str): + #Usage: + #python netcdf_production_sample.py obtain-netcdf-metadata sample_data/nwm_output metadata + utils.obtain_metadata_information(netcdf_root_folder, output_file_name) + #utils.debug_netcdf_structure_in_folder(netcdf_root_folder) + +def create_template_nwm_grids_data(netcdf_root_folder: str, templates_folder: str): + #Usage: + #python netcdf_production_sample.py create-template-nwm-grid sample_data/nwm_output sample_data/nwm_templates + utils.create_nwm_template_grids(netcdf_root_folder, templates_folder) + def main() -> None: parser = argparse.ArgumentParser(description="NetCDF Data Tool") @@ -34,10 +56,10 @@ def main() -> None: parser_randomize.add_argument("output_file") #create template grid - parser_grid = subparsers.add_parser("create-template-grid") - parser_grid.add_argument("catchment_netcdf_file") - parser_grid.add_argument("catchment_gpkg_file") - parser_grid.add_argument("template_grid_file") + parser_template_grid = subparsers.add_parser("create-template-grid") + parser_template_grid.add_argument("catchment_netcdf_file") + parser_template_grid.add_argument("catchment_gpkg_file") + parser_template_grid.add_argument("template_grid_file") #create nwm grid parser_nwm_grid = subparsers.add_parser("create-nwm-grid") @@ -45,6 +67,21 @@ def main() -> None: parser_nwm_grid.add_argument("catchment_gpkg_file") parser_nwm_grid.add_argument("template_grid_file") + #download current NWM output netcdfs from nomads server + parser_nwm_download = subparsers.add_parser("download-nwm-outputs") + parser_nwm_download.add_argument("download_url") + parser_nwm_download.add_argument("output_folder_path") + + #Extract metadata info from current NWM output netcdfs that are downloaded + parser_nwm_info = subparsers.add_parser("obtain-netcdf-metadata") + parser_nwm_info.add_argument("local_folder_path") + parser_nwm_info.add_argument("file_name") + + #create template NWM output grids using the downloaded files from nomad server + parser_template_grids = subparsers.add_parser("create-template-nwm-grid") + parser_template_grids.add_argument("nwm_output_grids_folder") + parser_template_grids.add_argument("nwm_template_grids_folder") + args = parser.parse_args() if args.command == "randomize": @@ -53,6 +90,12 @@ def main() -> None: create_template_grid(args.catchment_netcdf_file, args.catchment_gpkg_file, args.template_grid_file) elif args.command == "create-nwm-grid": create_nwm_grid(args.catchment_netcdf_file, args.catchment_gpkg_file, args.template_grid_file) + elif args.command == "download-nwm-outputs": + download_netcdf(args.download_url, args.output_folder_path) + elif args.command == "obtain-netcdf-metadata": + extract_netcdf_metadata(args.local_folder_path, args.file_name) + elif args.command == "create-template-nwm-grid": + create_template_nwm_grids_data(args.nwm_output_grids_folder, args.nwm_template_grids_folder) else: parser.print_help() From 2d50fccdfc58c9f4042da8b474fbb8aa52f0044f Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Thu, 23 Apr 2026 10:06:49 -0400 Subject: [PATCH 02/26] This commit has a rioxarray version of spatial ref. Commiting this to refactor later. --- .../output_variables/DataProcessor.py | 116 +++++++++++------- 1 file changed, 74 insertions(+), 42 deletions(-) diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index ce5ea23..a2053aa 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -9,7 +9,7 @@ import fiona from shapely.geometry import Point from shapely.ops import unary_union -from shapely import contains_xy +from shapely import intersects_xy from pyproj import CRS from typing import List, Optional from .DataReader import DataReader @@ -19,7 +19,7 @@ class DataProcessor(DataReader): """ Handles catchment-time NetCDF and grid generation. """ - def __init__(self, catchment_output_netcdf_file: str, gpkg_file: str, template_grid_file: str, + def __init__(self, catchment_output_netcdf_file: str, gpkg_file: str, template_grid_file_name: str, config_path: str, output_class: str, category: str, domain: str, produce_template: bool, produce_output: bool, chunk_size: int = 100) -> None: super().__init__(catchment_output_netcdf_file, chunk_size) @@ -50,11 +50,12 @@ def __init__(self, catchment_output_netcdf_file: str, gpkg_file: str, template_g if set(self.nc_catchments) != set(self.gpkg_catchment_list): raise ValueError("There is a mistmatch between catchment IDs in geopackage and netcdf") - if produce_template: - self.obsolete_create_template_grid_netcdf_from_geopackage(gpkg_gdf, template_grid_file) - self.ds_template_grid = xr.open_dataset(template_grid_file) + # Old workflow + # if produce_template: + # self.obsolete_create_template_grid_netcdf_from_geopackage(gpkg_gdf, template_grid_file) + # self.ds_template_grid = xr.open_dataset(template_grid_file) - # if produce_output: # Old workflow + # if produce_output: # self.grid_points = self.obsolete_build_grid_centroids() # self.obsolete_build_grid_lookup(gpkg_gdf) # output_path = 'sample_data/sample_netcdf/sample_output/final_test' #Change this to command line argument later @@ -63,14 +64,26 @@ def __init__(self, catchment_output_netcdf_file: str, gpkg_file: str, template_g # end_time = time.perf_counter() # duration_minutes = (end_time - start_time) / 60 # print(f"Function execution time: {duration_minutes:.4f} minutes") + + # New workflow if produce_template: - self.create_template_grid_netcdf_using_config(gpkg_gdf, template_grid_file, + self.create_template_grid_netcdf_using_config(gpkg_gdf, template_grid_file_name, config_path, output_class, category, domain) - self.ds_template_grid = xr.open_dataset(template_grid_file) + self.ds_template_grid = xr.open_dataset(template_grid_file_name) + print(self.ds_template_grid.rio.crs) if produce_output: - catchment_grid = self.build_catchment_id_grid(template_grid_file, gpkg_gdf, "x", "y") # Change hardcoded values later - mapped_grid = self.map_catchment_data_to_grid(catchment_grid,catchment_output_netcdf_file, "catchments","time") # Change hardcoded values later + # change variable name in the randomvals.nc This is strictly for testing purposes. + self.catchment_ds = self.catchment_ds.rename({ + 'sm_frac_0.4m': 'ACCET', + 'sm_profile_0.1m': 'ACSNOM', + 'sm_profile_0.4m': 'EDIR', + 'sm_profile_1.5m': 'ISNOW', + 'sm_profile_2m': 'QRAIN', + 'SWE_mm': 'QSNOW' + }) + catchment_grid = self.build_catchment_id_grid(template_grid_file_name, gpkg_gdf, "x", "y") # Change hardcoded values later + mapped_grid = self.map_catchment_data_to_grid(catchment_grid, "catchments","time") # Change hardcoded values later output_dir = 'sample_data/sample_netcdf/sample_output/final_test' #Change this to command line argument later start_time = time.perf_counter() self.write_netcdf_per_timestep(mapped_grid, output_dir, "time") @@ -99,7 +112,7 @@ def _normalize_catchment_ids(self, ids) -> np.ndarray: ]) return normalized - def _snap_to_grid(value: float, origin: float, resolution: int, direction: np.ufunc): + def _snap_to_grid(self, value: float, origin: float, resolution: int, direction: np.ufunc): if direction == np.floor: return origin + np.floor((value - origin) / resolution) * resolution elif direction == np.ceil: @@ -163,13 +176,14 @@ def create_template_grid_netcdf_using_config(self, geopackage_gdf: gpd.GeoDataFr ) -> None: """ Create a template grid aligned to a reference grid defined in config.json. + The template grid is for the extents in the geopackage (usually basin level). """ # Read config file with open(config_path, "r") as f: config = json.load(f) # Find matching entry - entry = next((c_item for c_item in config if + entry = next((c_item for c_item in config["files"] if c_item["class"] == output_class and c_item["category"] == category and c_item["domain"] == domain), None) @@ -186,23 +200,8 @@ def create_template_grid_netcdf_using_config(self, geopackage_gdf: gpd.GeoDataFr y_name = entry["location_name"]["y"] ds = xr.open_dataset(file_name) - target_crs = None - if not ds.rio.crs: - # Try CF convention (grid_mapping) - for var in ds.variables: - if "grid_mapping" in ds[var].attrs: - grid_map_var = ds[var].attrs["grid_mapping"] - target_crs = ds[grid_map_var].attrs.get("crs_wkt", None) - break - if target_crs is None: - raise ValueError("CRS not found in NetCDF file.") - ds = ds.rio.write_crs(target_crs) - else: - target_crs = ds.rio.crs - - # Alternate for CRS. Commented for now. - # TO DO: Add a check when wkt is not available. - # target_crs = CRS.from_user_input(wkt) + # To do: Have to figure out a workflow when CRS is "Not Available" + target_crs = CRS.from_user_input(wkt) gdf = geopackage_gdf.to_crs(target_crs) geom = unary_union(gdf.geometry) @@ -221,22 +220,55 @@ def create_template_grid_netcdf_using_config(self, geopackage_gdf: gpd.GeoDataFr y_name: slice(snapped_miny, snapped_maxy), } ) - x_subset = self.ds_grid[x_name].values - y_subset = self.ds_grid[y_name].values + x_subset = ds_subset[x_name].values + y_subset = ds_subset[y_name].values xx, yy = np.meshgrid(x_subset, y_subset) - mask = contains_xy(geom, xx, yy) - ds_masked = ds_subset.where(mask) + mask = intersects_xy(geom, xx, yy) + mask_da = xr.DataArray(mask, + dims=(y_name, x_name), + coords={ + y_name: ds_subset[y_name], + x_name: ds_subset[x_name], + }, + ) + ds_masked = ds_subset.copy() + + for var in ds_subset.data_vars: + da = ds_subset[var] + # Only mask numeric variables + if np.issubdtype(da.dtype, np.number): + ds_masked[var] = da.where(mask_da) + else: + ds_masked[var] = da # Leave non-numeric untouched + # Drop empty rows/cols that are outside of the polygon boundary ds_clipped = ds_masked.dropna(dim=y_name, how="all") ds_clipped = ds_clipped.dropna(dim=x_name, how="all") - ds_clipped = ds_clipped.rio.write_crs(target_crs) - ds_clipped["crs"] = ([], 0) - ds_clipped["crs"].attrs["spatial_ref"] = wkt - ds_clipped["crs"].attrs["esri_pe_string"] = wkt + # Add CRS to clipped grid + # Since the grid is created from an existing NWM grid, + # we need to strip out the existing grid_mapping. + # It was found that this interferes with rio CRS encoding below. + for name, var in ds_clipped.variables.items(): + var.attrs.pop("grid_mapping", None) + var.encoding.pop("grid_mapping", None) + + # Also, remove existing crs variable to avoid duplicate crs definitions + if "crs" in ds_clipped: + ds_clipped = ds_clipped.drop_vars("crs") + + # Had to use rio.set_spatial_dims and write_transform for the CRS to stick. + ds_clipped = ds_clipped.rio.set_spatial_dims(x_dim="x", y_dim="y") + ds_clipped = ds_clipped.rio.write_crs(target_crs) + ds_clipped = ds_clipped.rio.write_transform() + # ds_clipped["crs"] = ([], 0) + # ds_clipped["crs"].attrs["spatial_ref"] = wkt + # ds_clipped["crs"].attrs["esri_pe_string"] = wkt + + print(ds_clipped.rio.crs) # Save - ds.to_netcdf(template_grid_netcdf_path) + ds_clipped.to_netcdf(template_grid_netcdf_path) print(f"NetCDF template grid written to {template_grid_netcdf_path}") def obsolete_build_grid_centroids(self) -> gpd.GeoDataFrame: @@ -474,9 +506,9 @@ def build_catchment_id_grid(self, template_nc_path: str, gpkg_gdf: gpd.GeoDataFr y_dim: str = "y", ) -> xr.DataArray: """ - Returns a DataArray (y, x) where each cell contains a catchment ID. + Returns a DataArray (y, x) where each cell in the basin-level grid contains a catchment ID. """ - ds = xr.open_dataset(template_nc_path) #alternatively, we can use self.ds_template_grid? + ds = xr.open_dataset(template_nc_path) x = ds[x_dim].values y = ds[y_dim].values @@ -523,7 +555,7 @@ def map_catchment_data_to_grid(self, catchment_grid: xr.DataArray, catchment_dim: str = "catchments", time_dim: str = "time" ) -> xr.Dataset: """ - Broadcast catchment-based variables onto grid using catchment_id grid. + Assign catchment-based variables onto basin-level grid using catchment_id grid. """ ds_data = self.catchment_ds @@ -586,7 +618,7 @@ def write_netcdf_per_timestep(mapped_grid: xr.Dataset, output_dir: str, time_dim # Output filename and save t_str = np.datetime_as_string(t, unit='s') formatted_t = t_str.replace('-', '_').replace(':', '_') - output_file = os.path.join(output_dir, f"grid_{formatted_t}.nc") + output_file = os.path.join(output_dir, f"new_grid_{formatted_t}.nc") ds_t.to_netcdf(output_file) def merge_basin_netcdfs(nc_files: list[str], fill_value: float | None = None, check_crs: bool = True From 233dda4c68df8849c4bae30ab7f3a79d3f687213 Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Thu, 23 Apr 2026 10:07:35 -0400 Subject: [PATCH 03/26] Rioxrray commit #2 --- netcdf_production_sample.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/netcdf_production_sample.py b/netcdf_production_sample.py index 8be3ad5..7bcf133 100644 --- a/netcdf_production_sample.py +++ b/netcdf_production_sample.py @@ -10,18 +10,17 @@ def randomize_values(netcdf_file: str, output_file: str) -> None: reader = DataReader(netcdf_file) reader.assign_random_values(output_file) -#def build_nwm_grids_config(netcdf_folder_path: str, output_json: str): - - -def create_template_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str): +def create_template_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str, config_json_file: str): #Usage #python netcdf_wrapper_sample.py create-template-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/grid_template.nc - processor = DataProcessor(netcdf_file, gpkg_file, template_grid_file, True, False) + #new workflow: python netcdf_production_sample.py create-template-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json + processor = DataProcessor(netcdf_file, gpkg_file, template_grid_file, config_json_file, 'analysis_assim', 'land', 'conus', True, False) -def create_nwm_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str): +def create_nwm_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str, config_json_file: str): #Usage: #python netcdf_wrapper_sample.py create-nwm-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/grid_template.nc - processor = DataProcessor(netcdf_file, gpkg_file, template_grid_file, False, True) + #new workflow: python netcdf_production_sample.py create-nwm-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json + processor = DataProcessor(netcdf_file, gpkg_file, template_grid_file, config_json_file, 'analysis_assim', 'land', 'conus', False, True) def create_nwm_grid_dask(netcdf_file: str, gpkg_file: str, template_grid_file: str): #Usage: @@ -60,12 +59,14 @@ def main() -> None: parser_template_grid.add_argument("catchment_netcdf_file") parser_template_grid.add_argument("catchment_gpkg_file") parser_template_grid.add_argument("template_grid_file") + parser_template_grid.add_argument("config_json_file") #create nwm grid parser_nwm_grid = subparsers.add_parser("create-nwm-grid") parser_nwm_grid.add_argument("catchment_netcdf_file") parser_nwm_grid.add_argument("catchment_gpkg_file") parser_nwm_grid.add_argument("template_grid_file") + parser_nwm_grid.add_argument("config_json_file") #download current NWM output netcdfs from nomads server parser_nwm_download = subparsers.add_parser("download-nwm-outputs") @@ -87,9 +88,9 @@ def main() -> None: if args.command == "randomize": randomize_values(args.input_file, args.output_file) elif args.command == "create-template-grid": - create_template_grid(args.catchment_netcdf_file, args.catchment_gpkg_file, args.template_grid_file) + create_template_grid(args.catchment_netcdf_file, args.catchment_gpkg_file, args.template_grid_file, args.config_json_file) elif args.command == "create-nwm-grid": - create_nwm_grid(args.catchment_netcdf_file, args.catchment_gpkg_file, args.template_grid_file) + create_nwm_grid(args.catchment_netcdf_file, args.catchment_gpkg_file, args.template_grid_file, args.config_json_file) elif args.command == "download-nwm-outputs": download_netcdf(args.download_url, args.output_folder_path) elif args.command == "obtain-netcdf-metadata": From 6b9c107ef9a6c86dbd5a904994cac2ef0b51660e Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Wed, 29 Apr 2026 15:15:35 -0400 Subject: [PATCH 04/26] Added functions to produce basin-level products using the new workflow. Readme_wip.md is also updated with those changes. --- .../output_variables/DataProcessor.py | 476 ++++-------------- .../output_variables/DataReader.py | 13 +- .../output_variables/Readme_wip.md | 60 ++- .../output_variables/utils.py | 448 ++++++++++------- netcdf_production_sample.py | 37 +- 5 files changed, 445 insertions(+), 589 deletions(-) diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index a2053aa..052bc20 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -6,7 +6,6 @@ import xarray as xr import dask.array as da import time -import fiona from shapely.geometry import Point from shapely.ops import unary_union from shapely import intersects_xy @@ -20,18 +19,20 @@ class DataProcessor(DataReader): Handles catchment-time NetCDF and grid generation. """ def __init__(self, catchment_output_netcdf_file: str, gpkg_file: str, template_grid_file_name: str, - config_path: str, output_class: str, category: str, domain: str, - produce_template: bool, produce_output: bool, chunk_size: int = 100) -> None: + config_path: str, output_class: str | None, category: str | None, + domain: str | None, produce_template: bool, produce_output: bool, chunk_size: int = 100) -> None: + if category in ['channel_rt', 'reservoir', 'total_water']: + raise ValueError(f"The requested category - {category} - is not a gridded netcdf. This cannot be processed.") + super().__init__(catchment_output_netcdf_file, chunk_size) self.catchment_ds: xr.Dataset = self.dataset self.output_variables = list(self.catchment_ds.data_vars) # Normalize catchment ids in netcdf with a cat- prefix for consistency. self.nc_catchments = self._normalize_catchment_ids(self.catchment_ds[self.catchment_coord].values) - + # Read geopackage, determine schema and "divides" layer self.is_new_NHF_schema: bool = self._is_new_NHF_schema(gpkg_file, "reference_flowpaths") - print (self.is_new_NHF_schema) gpkg_gdf = gpd.read_file(gpkg_file, layer="divides") if gpkg_gdf.empty: raise ValueError("No polygon geometries found in GeoPackage") @@ -45,43 +46,56 @@ def __init__(self, catchment_output_netcdf_file: str, gpkg_file: str, template_g # Normalize catchment ids in gpkg with a 'cat-' prefix for consistency. gpkg_gdf[self.catchment_field] = self._normalize_catchment_ids(gpkg_gdf[self.catchment_field].values) self.gpkg_catchment_list = gpkg_gdf[self.catchment_field].values.tolist() - + # Check if catchments from netcdf and geopackage match if set(self.nc_catchments) != set(self.gpkg_catchment_list): raise ValueError("There is a mistmatch between catchment IDs in geopackage and netcdf") - # Old workflow - # if produce_template: - # self.obsolete_create_template_grid_netcdf_from_geopackage(gpkg_gdf, template_grid_file) - # self.ds_template_grid = xr.open_dataset(template_grid_file) - - # if produce_output: - # self.grid_points = self.obsolete_build_grid_centroids() - # self.obsolete_build_grid_lookup(gpkg_gdf) - # output_path = 'sample_data/sample_netcdf/sample_output/final_test' #Change this to command line argument later - # start_time = time.perf_counter() - # self.obsolete_create_grids_per_timestep_dask(output_path) - # end_time = time.perf_counter() - # duration_minutes = (end_time - start_time) / 60 - # print(f"Function execution time: {duration_minutes:.4f} minutes") - - # New workflow if produce_template: self.create_template_grid_netcdf_using_config(gpkg_gdf, template_grid_file_name, config_path, output_class, category, domain) self.ds_template_grid = xr.open_dataset(template_grid_file_name) - print(self.ds_template_grid.rio.crs) if produce_output: - # change variable name in the randomvals.nc This is strictly for testing purposes. + # change variable name in the randomvals.nc This is strictly for testing purposes. + # The commented code below is meant to test various categories. + # analysis_assim.land.conus + # self.catchment_ds = self.catchment_ds.rename({ + # 'sm_frac_0.4m': 'ACCET', + # 'sm_profile_0.1m': 'ACSNOM', + # 'sm_profile_0.4m': 'EDIR', + # 'sm_profile_1.5m': 'ISNOW', + # 'sm_profile_2m': 'QRAIN', + # 'SWE_mm': 'QSNOW' + # }) + + # analysis_assim.terrain_rt.conus; medium_range_blend.terrain_rt.conus + self.catchment_ds = self.catchment_ds.drop_vars(["sm_profile_0.4m", "sm_profile_1.5m", "sm_profile_2m", "SWE_mm"]) self.catchment_ds = self.catchment_ds.rename({ - 'sm_frac_0.4m': 'ACCET', - 'sm_profile_0.1m': 'ACSNOM', - 'sm_profile_0.4m': 'EDIR', - 'sm_profile_1.5m': 'ISNOW', - 'sm_profile_2m': 'QRAIN', - 'SWE_mm': 'QSNOW' + 'sm_frac_0.4m': 'sfcheadsubrt', + 'sm_profile_0.1m': 'zwattablrt' }) + + # long_range.land_2.conus + # self.catchment_ds = self.catchment_ds.rename({ + # 'sm_frac_0.4m': 'ACCET', + # 'sm_profile_0.1m': 'UGDRNOFF', + # 'sm_profile_0.4m': 'SOILSAT', + # 'sm_profile_1.5m': 'SFCRNOFF', + # 'sm_profile_2m': 'SOILSAT_TOP', + # 'SWE_mm': 'SNEQV' + # }) + + # medium_range_blend.land.conus + # self.catchment_ds = self.catchment_ds.rename({ + # 'sm_frac_0.4m': 'FSA', + # 'sm_profile_0.1m': 'FIRA', + # 'sm_profile_0.4m': 'HFX', + # 'sm_profile_1.5m': 'TRAD', + # 'sm_profile_2m': 'LH', + # 'SWE_mm': 'SNEQV' + # }) + catchment_grid = self.build_catchment_id_grid(template_grid_file_name, gpkg_gdf, "x", "y") # Change hardcoded values later mapped_grid = self.map_catchment_data_to_grid(catchment_grid, "catchments","time") # Change hardcoded values later output_dir = 'sample_data/sample_netcdf/sample_output/final_test' #Change this to command line argument later @@ -118,56 +132,6 @@ def _snap_to_grid(self, value: float, origin: float, resolution: int, direction: elif direction == np.ceil: return origin + np.ceil((value - origin) / resolution) * resolution - def obsolete_create_template_grid_netcdf_from_geopackage(self, geopackage_gdf: gpd.GeoDataFrame, output_grid_netcdf: str, - resolution: int, epsg_code: int, origin_x: float, - origin_y: float) -> None: - """ - Create a NetCDF grid with 1 km x 1 km resolution - covering the extent of catchment polygons. - - Default CRS: EPSG:5070 (NAD83 / Conus Albers, meters) - """ - - if os.path.exists(output_grid_netcdf) == False: - target_crs = CRS.from_epsg(epsg_code) - gdf = geopackage_gdf.to_crs(target_crs) - - # Get bounding box - minx, miny, maxx, maxy = gdf.total_bounds - - snapped_minx = self._snap_to_grid(minx, origin_x, resolution, np.floor) - snapped_maxx = self._snap_to_grid(maxx, origin_x, resolution, np.ceil) - snapped_miny = self._snap_to_grid(miny, origin_y, resolution, np.floor) - snapped_maxy = self._snap_to_grid(maxy, origin_y, resolution, np.ceil) - - # Create grid coordinates - x_coords = np.arange(snapped_minx, snapped_maxx + resolution, resolution) - y_coords = np.arange(snapped_miny, snapped_maxy + resolution, resolution) - - ds = xr.Dataset( - coords={ - "x": ("x", x_coords), - "y": ("y", y_coords) - } - ) - # Coordinate metadata - ds["x"].attrs["standard_name"] = "projection_x_coordinate" - ds["x"].attrs["units"] = "m" - - ds["y"].attrs["standard_name"] = "projection_y_coordinate" - ds["y"].attrs["units"] = "m" - - # Write CRS. - ds.rio.write_crs("EPSG:5070", inplace=True) - - # Without the following line the grid was not lining up with the catchments - # Set the X and Y as spatial dims for rioxarray - ds.rio.set_spatial_dims(x_dim="x", y_dim="y", inplace=True) - - # Save - ds.to_netcdf(output_grid_netcdf) - print(f"NetCDF template grid written to {output_grid_netcdf}") - def create_template_grid_netcdf_using_config(self, geopackage_gdf: gpd.GeoDataFrame, template_grid_netcdf_path: str, config_path: str, output_class: str, @@ -176,7 +140,7 @@ def create_template_grid_netcdf_using_config(self, geopackage_gdf: gpd.GeoDataFr ) -> None: """ Create a template grid aligned to a reference grid defined in config.json. - The template grid is for the extents in the geopackage (usually basin level). + The template grid covers the extents in the geopackage (usually basin level). """ # Read config file with open(config_path, "r") as f: @@ -246,261 +210,10 @@ def create_template_grid_netcdf_using_config(self, geopackage_gdf: gpd.GeoDataFr ds_clipped = ds_masked.dropna(dim=y_name, how="all") ds_clipped = ds_clipped.dropna(dim=x_name, how="all") - # Add CRS to clipped grid - # Since the grid is created from an existing NWM grid, - # we need to strip out the existing grid_mapping. - # It was found that this interferes with rio CRS encoding below. - for name, var in ds_clipped.variables.items(): - var.attrs.pop("grid_mapping", None) - var.encoding.pop("grid_mapping", None) - - # Also, remove existing crs variable to avoid duplicate crs definitions - if "crs" in ds_clipped: - ds_clipped = ds_clipped.drop_vars("crs") - - # Had to use rio.set_spatial_dims and write_transform for the CRS to stick. - ds_clipped = ds_clipped.rio.set_spatial_dims(x_dim="x", y_dim="y") - ds_clipped = ds_clipped.rio.write_crs(target_crs) - ds_clipped = ds_clipped.rio.write_transform() - # ds_clipped["crs"] = ([], 0) - # ds_clipped["crs"].attrs["spatial_ref"] = wkt - # ds_clipped["crs"].attrs["esri_pe_string"] = wkt - - print(ds_clipped.rio.crs) # Save ds_clipped.to_netcdf(template_grid_netcdf_path) print(f"NetCDF template grid written to {template_grid_netcdf_path}") - def obsolete_build_grid_centroids(self) -> gpd.GeoDataFrame: - """ - Create GeoDataFrame of grid cell centroids. - """ - # To do: Replace x, y with the actual x and y names in the netcdf - x = self.ds_template_grid["x"].values - y = self.ds_template_grid["y"].values - xx, yy = np.meshgrid(x, y) - points = [Point(px, py) for px, py in zip(xx.ravel(), yy.ravel())] - - return gpd.GeoDataFrame( - {"cell_index": np.arange(len(points))}, - geometry=points, - crs=self.ds_template_grid.rio.crs - ) - - def obsolete_build_grid_lookup(self, catchment_gdf: gpd.GeoDataFrame) -> None: - """ - Build the grid-to-catchment mapping (vectorized index array). - Must be called just once before generating grids for every timestep. - """ - # Spatial join - # TO DO: Have to determine if there are other methods that are less expensive computationally. - - target_crs = None - if not ds.rio.crs: - # Try CF convention (grid_mapping) - for var in ds.variables: - if "grid_mapping" in ds[var].attrs: - grid_map_var = ds[var].attrs["grid_mapping"] - target_crs = ds[grid_map_var].attrs.get("crs_wkt", None) - break - if target_crs is None: - raise ValueError("CRS not found in NetCDF file.") - ds = ds.rio.write_crs(target_crs) - else: - target_crs = ds.rio.crs - - joined = gpd.sjoin( - self.grid_points, - catchment_gdf[[self.catchment_field, "geometry"]], - how="left", - predicate="within" - ) - - # Build index map to allow working with integer indices (potentially faster than catchment ID strings) - catchment_index = {c: i for i, c in enumerate(self.nc_catchments)} #use netcdf list to ensure order of gpkg catchments match with netcdf. - mapped = joined[self.catchment_field].map(catchment_index) - grid_to_catchment = mapped.fillna(-1).astype(int).to_numpy() - self.grid_to_catchment = grid_to_catchment - print("Grid-to-catchment mapping built!") - - def _obsolete_build_crs_variable(self, ds: xr.Dataset, crs_wkt: str | None = None) -> xr.Dataset: - """ - Build CF-compliant CRS variable from a template NWM grid. - Currently, this is not using the template NWM grid. It uses catchment grid instead. - """ - - # Get CRS from template - crs_obj = CRS.from_user_input(ds.rio.crs) - - # Convert to CF dict - cf_attrs = crs_obj.to_cf() - - # Create CRS variable - ds["crs"] = xr.DataArray(0) - - # Assign CF attributes - ds["crs"].attrs.update(cf_attrs) - - # Add WKT (for QGIS) - wkt = crs_obj.to_wkt() - ds["crs"].attrs["spatial_ref"] = wkt - ds["crs"].attrs["esri_pe_string"] = wkt - - # Add GeoTransform - x = ds["x"].values - y = ds["y"].values - - dx = float(x[1] - x[0]) - dy = float(y[1] - y[0]) - - xmin = float(x[0] - dx / 2) - ymax = float(y[-1] + dy / 2) - - ds["crs"].attrs["GeoTransform"] = f"{xmin} {dx} 0 {ymax} 0 {-dy}" - - # Optional (additional metadata) - ds["crs"].attrs["_CoordinateAxes"] = "y x" - ds["crs"].attrs["_CoordinateTransformType"] = "Projection" - ds["crs"].attrs["long_name"] = "CRS definition" - - return ds - - def _build_crs_variable(self, ds: xr.Dataset, crs: str) -> xr.Dataset: - """ - Ensures dataset is fully CF + GDAL compliant with CRS. - """ - - # Write CRS using rioxarray - ds = ds.rio.write_crs(crs) - - # Build CF-compliant grid_mapping variable - wkt = crs.to_wkt() - - ds["crs"] = ([], 0) - ds["crs"].attrs["spatial_ref"] = wkt - ds["crs"].attrs["esri_pe_string"] = wkt - - # Link all variables to CRS - for var in ds.data_vars: - ds[var].attrs["grid_mapping"] = "crs" - - return ds - - def obsolete_create_grids_per_timestep(self, output_dir: str) -> None: - """ - Generates netcdf grids per timestep for all the variables in the catchments netcdf. - """ - os.makedirs(output_dir, exist_ok=True) - n_y = self.ds_grid.dims["y"] - n_x = self.ds_grid.dims["x"] - valid_mask = self.grid_to_catchment != -1 - - # may be a robust approach is not to consider "time". Instead use - # np.issubdtype(coord.dtype, np.datetime64)? - time_dim = next(dim for dim in self.catchment_ds.dims if "time" in dim.lower()) - reference_time = np.datetime64('1970-01-01T00:00:00') - - for t in self.catchment_ds[time_dim].values: - print(f"Processing timestep: {t}") - ds_t = self.catchment_ds.sel({time_dim: t}) - ds_out = self.ds_grid.copy(deep=True) - - time_value_min = (t - reference_time) / np.timedelta64(1, 'm') - ds_out = ds_out.assign_coords({time_dim: [time_value_min]}) - ds_out[time_dim].attrs["units"] = "minutes since 1970-01-01 00:00:00 UTC" - ds_out[time_dim].attrs["standard_name"] = "time" - ds_out = self._build_crs_variable(ds_out) - - # spatial_ref variable gets added somewhere. - # To Do: Need to find this later. a quick fix for now is to delete, if exists. - if "spatial_ref" in ds_out.variables: - ds_out = ds_out.drop_vars("spatial_ref") - - # Loop over all variables dynamically - for var in self.output_variables: - print(f" Processing variable: {var}") - values_1d = ds_t[var].values # Get catchment values (1D) - flat_grid = np.full(self.grid_to_catchment.shape, np.nan) # Prepare flat grid - flat_grid[valid_mask] = values_1d[self.grid_to_catchment[valid_mask]] # Assign values using lookup - grid_2d = flat_grid.reshape(n_y, n_x) # Reshape to 2D - ds_out[var] = (("time", "y", "x"), grid_2d[np.newaxis, :, :]) # Add to output dataset - ds_out[var].attrs["grid_mapping"] = "crs" # Ensure the variable references CRS - - # Output filename and save - t_str = np.datetime_as_string(t, unit='s') - formatted_t = t_str.replace('-', '_').replace(':', '_') - output_file = os.path.join(output_dir, f"grid_{formatted_t}.nc") - ds_out.to_netcdf(output_file) - - def obsolete_create_grids_per_timestep_dask(self, output_dir: str, chunk_size: int = 1000) -> None: - """ - Generates netcdf grids per timestep for all the variables in the catchments netcdf. - """ - - os.makedirs(output_dir, exist_ok=True) - - # Dimensions - n_y = self.ds_grid.dims["y"] - n_x = self.ds_grid.dims["x"] - n_cells = n_y * n_x - - # Mask for valid cells - valid_mask = self.grid_to_catchment != -1 - - # Convert to Dask arrays - grid_to_catchment_da = da.from_array(self.grid_to_catchment, chunks=chunk_size) - valid_mask_da = da.from_array(valid_mask, chunks=chunk_size) - - # Rechunk by time dimension as we are processing one timestep at a time - time_dim = next(dim for dim in self.catchment_ds.dims if np.issubdtype(self.catchment_ds[dim].dtype, np.datetime64)) - reference_time = np.datetime64('1970-01-01T00:00:00') - ds_in = self.catchment_ds.chunk({time_dim: 1}) - - for t in ds_in[time_dim].values: - print(f"Processing timestep: {t}") - - ds_t = ds_in.sel({time_dim: t}) - ds_out = self.ds_grid.copy(deep=True) - time_value_min = (t - reference_time) / np.timedelta64(1, 'm') - ds_out = ds_out.assign_coords({time_dim: [time_value_min]}) - ds_out = self._build_crs_variable(ds_out) - - # spatial_ref variable gets added somewhere. - # To Do: Need to find this later. a quick fix for now is to delete, if exists. - if "spatial_ref" in ds_out.variables: - ds_out = ds_out.drop_vars("spatial_ref") - - for var in ds_in.data_vars: - print(f" Processing variable: {var}") - - values_1d = ds_t[var].data # (catchment,) → Dask array - - # Convert to Dask array if needed - if not isinstance(values_1d, da.Array): - values_1d = da.from_array(values_1d, chunks=values_1d.shape) - - flat_grid = da.full((n_cells,), np.nan, chunks=chunk_size) - assigned = da.where( - valid_mask_da, - values_1d[grid_to_catchment_da], - np.nan - ) - - grid_2d = assigned.reshape((n_y, n_x)) - grid_3d = grid_2d[None, :, :] # (time=1, y, x) - ds_out[var] = (("time", "y", "x"), grid_3d) - ds_out[var].attrs = ds_in[var].attrs - ds_out[var].attrs["grid_mapping"] = "crs" #"spatial_ref" - - ds_out[time_dim].attrs["units"] = "minutes since 1970-01-01 00:00:00 UTC" - ds_out[time_dim].attrs["standard_name"] = "time" - - # Output file and save - t_str = np.datetime_as_string(t, unit='s') - formatted_t = t_str.replace('-', '_').replace(':', '_') - output_file = os.path.join(output_dir, f"grid_{formatted_t}.nc") - ds_out.to_netcdf(output_file) - def build_catchment_id_grid(self, template_nc_path: str, gpkg_gdf: gpd.GeoDataFrame, x_dim: str = "x", y_dim: str = "y", @@ -527,14 +240,16 @@ def build_catchment_id_grid(self, template_nc_path: str, gpkg_gdf: gpd.GeoDataFr "x": xx.ravel(), "y": yy.ravel() }) + crs = CRS.from_wkt(ds["crs"].attrs["spatial_ref"]) gdf_ncgrid_points = gpd.GeoDataFrame( df_points, geometry=gpd.points_from_xy(df_points["x"], df_points["y"]), - crs=ds.rio.crs + crs=crs ) # Spatial join with catchments for grid point to catchment association - gdf_poly = gpkg_gdf.to_crs(ds.rio.crs) + # To do: Using sjoin here. For larger areas, we may need to revisit if computing efficiency drops. + gdf_poly = gpkg_gdf.to_crs(crs) joined = gpd.sjoin( gdf_ncgrid_points, gdf_poly[[self.catchment_field, "geometry"]], @@ -544,18 +259,22 @@ def build_catchment_id_grid(self, template_nc_path: str, gpkg_gdf: gpd.GeoDataFr catchment_ids = joined[self.catchment_field].to_numpy() catchment_grid = catchment_ids.reshape(len(y), len(x)) - return xr.DataArray( + catchment_id_da = xr.DataArray( catchment_grid, dims=(y_dim, x_dim), coords={y_dim: y, x_dim: x}, name="catchment_id" ) + # It is important to pass on the CRS info to the functions downstream + # Attaching the crs wkt as a xr.dataarray attribute + catchment_id_da.attrs["crs"] = ds["crs"].attrs["spatial_ref"] + return catchment_id_da def map_catchment_data_to_grid(self, catchment_grid: xr.DataArray, catchment_dim: str = "catchments", time_dim: str = "time" ) -> xr.Dataset: """ - Assign catchment-based variables onto basin-level grid using catchment_id grid. + Assign catchment-based variables onto basin-level grid using the catchment_id grid. """ ds_data = self.catchment_ds @@ -575,11 +294,8 @@ def map_catchment_data_to_grid(self, catchment_grid: xr.DataArray, output_dtypes=[int] ) - # Mask invalid cells - valid_mask = grid_index >= 0 - + valid_mask = grid_index >= 0 # Mask invalid cells out_vars = {} - for var in ds_data.data_vars: if catchment_dim not in ds_data[var].dims: continue @@ -587,7 +303,6 @@ def map_catchment_data_to_grid(self, catchment_grid: xr.DataArray, mapped = data.isel({catchment_dim: grid_index}) mapped = mapped.where(valid_mask) out_vars[var] = mapped - ds_out = xr.Dataset(out_vars) # Attach coordinates from template @@ -596,12 +311,18 @@ def map_catchment_data_to_grid(self, catchment_grid: xr.DataArray, "y": self.ds_template_grid["y"] }) - # Add CRS - ds_out = self._build_crs_variable(ds_out, self.ds_template_grid.rio.crs) + # Add CRS info from template grid + crs_attrs = self.ds_template_grid["crs"].attrs.copy() + ds_out["crs"] = xr.DataArray(data=0,dims=()) + ds_out["crs"].attrs = crs_attrs + + # Link all variables to CRS + for var in ds_out.data_vars: + ds_out[var].attrs["grid_mapping"] = "crs" return ds_out - def write_netcdf_per_timestep(mapped_grid: xr.Dataset, output_dir: str, time_dim: str = "time") -> None: + def write_netcdf_per_timestep(self, mapped_grid: xr.Dataset, output_dir: str, time_dim: str = "time") -> None: """ Writes one NetCDF per timestep. """ @@ -610,53 +331,36 @@ def write_netcdf_per_timestep(mapped_grid: xr.Dataset, output_dir: str, time_dim for t in mapped_grid[time_dim].values: ds_t = mapped_grid.sel({time_dim: t}).copy() - time_value_min = (t - reference_time) / np.timedelta64(1, "m") # time to CF format - ds_t = ds_t.expand_dims({time_dim: [time_value_min]}) + time_value_mins = (t - reference_time) / np.timedelta64(1, "m") # time to CF format + ds_t = ds_t.expand_dims({time_dim: [time_value_mins]}) ds_t[time_dim].attrs["units"] = "minutes since 1970-01-01 00:00:00 UTC" ds_t[time_dim].attrs["standard_name"] = "time" + # Rebuild CRS info and mapping. + # This is required to avoid crs variable getting timesliced. crs(time=1) + if "crs" in ds_t: + ds_t = ds_t.drop_vars("crs") + ds_t["crs"] = xr.DataArray(0, dims=()) + ds_t["crs"].attrs = mapped_grid["crs"].attrs.copy() + for var in ds_t.data_vars: + if not var == "crs": + ds_t[var].attrs["grid_mapping"] = "crs" + + # Add reference_time variable and attributes to netcdf + # To do: Replace this with the actual time when the model simulations were run. + ds_t["reference_time"] = xr.DataArray( + data=time_value_mins.astype("int32"), + dims=() + ) + ds_t["reference_time"].attrs = { + "long_name": "model initialization time", + "standard_name": "forecast_reference_time", + "units": "minutes since 1970-01-01 00:00:00 UTC" + } + # Output filename and save t_str = np.datetime_as_string(t, unit='s') formatted_t = t_str.replace('-', '_').replace(':', '_') - output_file = os.path.join(output_dir, f"new_grid_{formatted_t}.nc") + output_file = os.path.join(output_dir, f"grid_{formatted_t}.nc") # To do: Get this as function argument ds_t.to_netcdf(output_file) - def merge_basin_netcdfs(nc_files: list[str], fill_value: float | None = None, check_crs: bool = True - ) -> xr.Dataset: - """ - Merge multiple NetCDF subsets. - - Assumes: - - Same grid resolution - - Same coordinate system - - Non-overlapping or safely overlapping regions - """ - - datasets = [xr.open_dataset(f) for f in nc_files] - - # Check CRS and confirm that they are the same for all the netcdf files - if check_crs: - crs_list = [] - for ds in datasets: - if ds.rio.crs: - crs_list.append(ds.rio.crs.to_string()) - else: - raise ValueError("One dataset missing CRS") - if len(set(crs_list)) != 1: - raise ValueError("CRS mismatch between datasets") - - # Use Merge or combine_by_coords to combine the NetCDFs - ds_combined = xr.combine_by_coords(datasets, combine_attrs="override") - - for dim in ds_combined.dims: - ds_combined = ds_combined.sortby(dim) # Sort (for consistency) - - # To do: Alternate approach is to use Merge. Pick one of the two methods after testing. - # compat='no_conflicts' ensures overlapping non-null values must agree - #ds_combined = xr.merge(datasets, compat="no_conflicts") - - # --- Optional fill --- - if fill_value is not None: - ds_merged = ds_merged.fillna(fill_value) - - return ds_combined \ No newline at end of file diff --git a/data_assimilation_engine/output_variables/DataReader.py b/data_assimilation_engine/output_variables/DataReader.py index 3f1168c..5e16b68 100644 --- a/data_assimilation_engine/output_variables/DataReader.py +++ b/data_assimilation_engine/output_variables/DataReader.py @@ -42,13 +42,16 @@ def assign_random_values(self, output_file: str) -> None: with fsspec.open(self.netcdf_file, mode="rb") as f: ds = xr.open_dataset(f) - - for var_name in ds.data_vars: + if ds.sizes.get("time", 0) > 48: + ds_48 = ds.isel(time=slice(0, 48)) + else: + ds_48 = ds + for var_name in ds_48.data_vars: print(f"Assigning random values to {var_name}") random_values = np.random.uniform( - 1.0, 10.0, size=ds[var_name].shape + 10.0, 20.0, size=ds_48[var_name].shape ) - ds[var_name].values = random_values + ds_48[var_name].values = random_values - ds.to_netcdf(output_file) + ds_48.to_netcdf(output_file) print(f"Saved updated dataset to {output_file}") \ No newline at end of file diff --git a/data_assimilation_engine/output_variables/Readme_wip.md b/data_assimilation_engine/output_variables/Readme_wip.md index adcf9d8..48a8a45 100644 --- a/data_assimilation_engine/output_variables/Readme_wip.md +++ b/data_assimilation_engine/output_variables/Readme_wip.md @@ -12,6 +12,7 @@ All the required packages are already part of the toml file. All paths specified below can be absolute or relative. #### randomize: +This is a function used for testing to create random values for all variables in the catchment output. This should be deleted when production ready. python netcdf_production_sample.py randomize catchment_netcdf catchment_netcdf_randomized Positional Arguments: @@ -19,20 +20,56 @@ Positional Arguments: - catchment_netcdf_randomized: Path where the output netcdf file is created with random values from 1-10 assigned to the output variables. #### create-template-grid: -python netcdf_production_sample.py create-template-grid catchment_netcdf_randomized basin_geopackage output_netcdf_grid +This function creates the template grid that spans the geopackage catchments extent (not the bounding box). This works only for gridded files. +python netcdf_production_sample.py create-template-grid catchment_netcdf_randomized basin_geopackage output_template_netcdf_grid config_json Positional Arguments: - catchment_netcdf_randomized: Path to the output netcdf file with random values from 1-10 assigned to the output variables. - basin_geopackage: Path to the basin geopackage. It can be in the existing or the new NHF schema. -- output_netcdf_grid: Path where the gridded 1 km x 1km netcdf file is created. +- output_template_netcdf_grid: Path where the gridded netcdf file is created. Specify the name as well. +- config_json: Path to the config json that holds the metadata information for NWM output products. #### create-nwm-grid: -python netcdf_production_sample.py create-nwm-grid catchment_netcdf_randomized basin_geopackage output_netcdf_grid +This function creates a basin level NetCDF grid from the template grid. +python netcdf_production_sample.py create-nwm-grid catchment_netcdf_randomized basin_geopackage template_netcdf_grid config_json Positional Arguments: - catchment_netcdf_randomized: Path to the output netcdf file with random values from 1-10 assigned to the output variables. - basin_geopackage: Path to the basin geopackage. It can be in the existing or the new NHF schema. -- output_netcdf_grid: Path where the gridded 1 km x 1km netcdf file is created. +- template_netcdf_grid: Path for the gridded template netcdf file to use for producing the NWM grid product. +- config_json: Path to the config json that holds the metadata information for NWM output products. + +#### download-nwm-outputs: +This function downloads a unique set of NWM output products from the NOMADS server that can be used for templating. +python netcdf_production_sample.py download-nwm-outputs nomads_root_url output_folder_path + +Positional Arguments: +- nomads_root_url: Root URL for NOMADS. This folder should not include the date +- output_folder_path: Folder to download the NWM data products. + +#### obtain-netcdf-metadata: +This function reads all the metadata information needed from the NWM output files and saves it in a csv and json. +python netcdf_production_sample.py obtain-netcdf-metadata nwm_local_download_path output_file_name + +Positional Arguments: +- nwm_local_download_path: Path to the folder where all netcdf files have been downloaded from NOMADS. +- output_file_name: Output file name for the csv and json. + +#### create-template-nwm-grid: +This function is primarily used for producing intermediate files for testing. This should be deleted when scripts are production-ready. +python netcdf_production_sample.py create-template-nwm-grid nwm_local_download_path nwm_local_template_path + +Positional Arguments: +- nwm_local_download_path: Path to the folder where all netcdf files have been downloaded from NOMADS. +- nwm_local_template_path: Path to the folder where all template grids will be created. + +#### create-combined-basin-grid: +This function is primarily used for producing intermediate files for testing. This should be deleted when scripts are production-ready. +python netcdf_production_sample.py create-combined-basin-grid nwm_timestep_grid_path nwm_multibasin_grid_path + +Positional Arguments: +- nwm_timestep_grid_path: Path to the folder where the necessary timestep netcdf files have been created. +- nwm_multibasin_grid_path: Path to the folder where all the combined/merged multi-basin grids will be saved. # Examples @@ -40,8 +77,19 @@ Positional Arguments: python netcdf_production_sample.py randomize sample_data/sample_netcdf/g01123000.nc sample_data/sample_netcdf/catchment_randomvals.nc #### create-template-grid -python netcdf_production_sample.py create-template-grid sample_data/sample_netcdf/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/grid_template.nc +python netcdf_production_sample.py create-template-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json #### create-nwm-grid -python netcdf_production_sample.py create-nwm-grid sample_data/sample_netcdf/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/grid_template.nc +python netcdf_production_sample.py create-nwm-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json + +#### download-nwm-outputs +python netcdf_production_sample.py download-nwm-outputs https://nomads.ncep.noaa.gov/pub/data/nccf/com/nwm/prod sample_data/nwm_output + +#### obtain-netcdf-metadata +python netcdf_production_sample.py obtain-netcdf-metadata sample_data/nwm_output metadata + +#### create-template-nwm-grid +python netcdf_production_sample.py create-template-nwm-grid sample_data/nwm_output sample_data/nwm_templates +#### create-combined-basin-grid +python netcdf_production_sample.py create-combined-basin-grid sample_data/sample_netcdf/sample_output/merge_test sample_data/sample_netcdf/sample_output/merge_test \ No newline at end of file diff --git a/data_assimilation_engine/output_variables/utils.py b/data_assimilation_engine/output_variables/utils.py index 1ff472a..24d6e1b 100644 --- a/data_assimilation_engine/output_variables/utils.py +++ b/data_assimilation_engine/output_variables/utils.py @@ -11,6 +11,7 @@ from pyproj import CRS from typing import List, Set, Tuple, Optional +# To do: Move these to a consts.py file before production nwm_variables_list = ['sfcheadsubrt', 'zwattablrt', 'inflow', 'outflow', 'reservoir_assimilated_value', 'water_sfc_elev', 'nudge', 'qBucket', 'streamflow', 'velocity', 'qBtmVertRunoff', 'qSfcLatRunoff', 'ACSNOM', 'ACCET', 'SNOWT_AVG', 'EDIR', 'SOILICE', 'SOILSAT_TOP', 'ISNOW', 'QRAIN', 'FSNO', 'SNOWH', @@ -18,171 +19,7 @@ 'GRDFLX', 'TRAD', 'FSA', 'CANWAT', 'LH', 'FIRA', 'HFX'] -class NetCDFMetadata: - def __init__( - self, - file_path: str, - resolution_x: float, - resolution_y: float, - origin_x: float, - origin_y: float, - x_loc: str, - y_loc: str, - wkt: Optional[str], - variables: str, - output_class: str, - category: str, - domain: str, - ) -> None: - self.file_path: str = file_path - self.resolution_x: float = resolution_x - self.resolution_y: float = resolution_y - self.origin_x: float = origin_x - self.origin_y: float = origin_y - self.x_name: str = x_loc - self.y_name: str = y_loc - self.nwm_variables: str = variables - self.crs_wkt: str = wkt - self.output_class: str = output_class - self.category: str = category - self.domain: str = domain - - def key(self) -> tuple[str, str, str]: - """ - Unique identifier for duplicate checking - """ - return (self.output_class, self.category, self.domain) - - def __repr__(self) -> str: #for debugging purposes - return ( - f"NetCDFMetadata(file_path={self.file_path}, " - f"class={self.output_class}, category={self.category}, domain={self.domain})" - ) - -def download_nwm_data_from_server(base_url: str, local_root: str) -> None: - """ - Main function to download a unique set of output files from the server - """ - if not os.path.exists(local_root): - os.makedirs(local_root) - - formatted_date = datetime.now().strftime("%Y%m%d") - formatted_url = f"{base_url}/nwm.{formatted_date}/" - existing_keys = build_existing_keys(local_root) # build class, category, domain keys in local folder, if exists. - download_nwm_data_recursive(formatted_url, local_root, existing_keys) - -def create_nwm_template_grids(src_root_folder: str, dest_root_folder: str) -> None: - """ - Creates template grids for all NWM netcdf products using a sample set of netcdfs. - """ - coords_to_reset = ['time', 'x', 'y', 'latitude', 'longitude'] - - for root, dirs, files in os.walk(src_root_folder): - # Determine the relative path to recreate subfolders - rel_path = os.path.relpath(root, src_root_folder) - target_dir = os.path.join(dest_root_folder, rel_path) - - # Create the target directory if it doesn't exist - os.makedirs(target_dir, exist_ok=True) - - for file in files: - if file.endswith('.nc'): - src_path = os.path.join(root, file) - dst_path = os.path.join(target_dir, file) - - # Process the NetCDF using xarray - with xr.open_dataset(src_path) as ds: - # Reset data variables - for var in ds.data_vars: - if var in nwm_variables_list: - ds[var].values[:] = -1 - - # Reset coordinate variables - for coord in coords_to_reset: - if coord in ds.coords: - ds[coord].values[:] = - 1 - # Save to the desired location - ds.to_netcdf(dst_path) - print(f"Processed: {dst_path}") - -def debug_netcdf_structure_in_folder(folder_path: str) -> None: - """ - Recursively scans a folder for NetCDF files and prints their structure. - """ - nc_files: List[str] = [] - logging.basicConfig( - filename='app.log', - level=logging.INFO, - format='%(message)s' - #format='%(asctime)s - %(message)s' - ) - data_variables_list = [] - for root, _, files in os.walk(folder_path): - for file in files: - if file.endswith(".nc"): - nc_files.append(os.path.join(root, file)) - - if not nc_files: - print(f"No NetCDF files found in: {folder_path}") - return - logging.info(f"Found {len(nc_files)} NetCDF files within the folder") - - for file_path in nc_files: - logging.info("=" * 80) - logging.info(f"FILE: {file_path}") - - try: - with xr.open_dataset(file_path) as ds: - - # Variables - logging.info("--Variables:") - for var_name, var in ds.data_vars.items(): - logging.info(f"---- {var_name}: shape={var.shape}, dtype={var.dtype}") - output_class, category, domain = parse_filename_metadata(file_path) - data_variables_list.append(var_name + ";" + output_class + ";" + category + ";" + domain) - - # Dimensions - logging.info("--Dimensions:") - for dim_name, dim_size in ds.sizes.items(): - logging.info(f"---- {dim_name}: size={dim_size}") - - # CRS-specific attributes if present - is_crs_present = False - is_sref_present = False - for crs_name in ["crs", "CRS", "spatial_ref"]: - if crs_name in ds.variables: - logging.info(f"--CRS Variable: {crs_name}") - is_crs_present = True - crs_var = ds.variables[crs_name] - if 'spatial_ref' in crs_var.attrs: - spatial_ref_raw = ds.variables[crs_name].attrs['spatial_ref'] - is_sref_present = True - logging.info(f"----{spatial_ref_raw}") - logging.info(f"-- CRS Available: {is_crs_present}; Spatial_ref Available: {is_sref_present}") - with open('__variables_check.csv', 'w', newline='') as f: - writer = csv.writer(f) - writer.writerow(["Variable", "Class", "Category", "Domain"]) - for var in data_variables_list: - if not var.startswith('crs'): - row = var.split(";") - writer.writerow(row) - except Exception as e: - print(f"\n Failed to read file: {file_path}") - print(f"Error: {e}") - -def obtain_metadata_information(local_root: str, output_name: str) -> None: - """ - Parse the metadata information from the downloaded NWM output files and write a CSV and a json - """ - if not os.path.exists(local_root): - raise Exception(f"Folder does not exist: {local_root}") - - metadata_list = process_downloaded_files(local_root) - output_csv = os.path.join(local_root, output_name + ".csv") - write_metadata_to_csv(metadata_list, output_csv) - output_json = os.path.join(local_root, output_name + "_config.json") - write_metadata_to_config_json(metadata_list, output_json) - +# region common def parse_filename_metadata(filename: str) -> Tuple[str, str, str]: """ Extract output_class, category and domain from filename. @@ -196,14 +33,27 @@ def parse_filename_metadata(filename: str) -> Tuple[str, str, str]: category = components[3] domain = components[5] return output_class, category, domain +# endregion + +# region data download +def download_nwm_data_from_server(base_url: str, local_root: str) -> None: + """ + Main function to download a unique set of output files from the server + """ + if not os.path.exists(local_root): + os.makedirs(local_root) - + formatted_date = datetime.now().strftime("%Y%m%d") + formatted_url = f"{base_url}/nwm.{formatted_date}/" + existing_keys = build_existing_keys(local_root) # build class, category, domain keys in local folder, if exists. + download_nwm_data_recursive(formatted_url, local_root, existing_keys) + def download_nwm_data_recursive(download_url: str, local_path: str, existing_keys: Set[Tuple[str, str, str]] ) -> None: """ Recursively download a unique set of output files from the server - and create a mirrored folder structure as server + and create a mirrored folder structure locally """ response = requests.get(download_url) if response.status_code != 200: @@ -249,7 +99,7 @@ def download_file(url: str, save_path: str) -> None: def build_existing_keys(local_root: str) -> Set[Tuple[str, str, str]]: """ - Builds file keys in local folder. These keys are used for function re-runs + Builds file keys in local folder. These keys are used when function is re-run and enables the capability to not download a file again. """ keys = set() @@ -261,9 +111,66 @@ def build_existing_keys(local_root: str) -> Set[Tuple[str, str, str]]: return keys +# endregion + +# region metadata extraction +class NetCDFMetadata: + def __init__( + self, + file_path: str, + resolution_x: float, + resolution_y: float, + origin_x: float, + origin_y: float, + x_loc: str, + y_loc: str, + wkt: Optional[str], + variables: str, + output_class: str, + category: str, + domain: str, + ) -> None: + self.file_path: str = file_path + self.resolution_x: float = resolution_x + self.resolution_y: float = resolution_y + self.origin_x: float = origin_x + self.origin_y: float = origin_y + self.x_name: str = x_loc + self.y_name: str = y_loc + self.nwm_variables: str = variables + self.crs_wkt: str = wkt + self.output_class: str = output_class + self.category: str = category + self.domain: str = domain + + def key(self) -> tuple[str, str, str]: + """ + Unique identifier for duplicate checking + """ + return (self.output_class, self.category, self.domain) + + def __repr__(self) -> str: #for debugging purposes + return ( + f"NetCDFMetadata(file_path={self.file_path}, " + f"class={self.output_class}, category={self.category}, domain={self.domain})" + ) + +def obtain_metadata_information(local_root: str, output_name: str) -> None: + """ + Parse the metadata information from the downloaded NWM output files and write a CSV and a json + """ + if not os.path.exists(local_root): + raise Exception(f"Folder does not exist: {local_root}") + + metadata_list = process_downloaded_files(local_root) + output_csv = os.path.join(local_root, output_name + ".csv") + write_metadata_to_csv(metadata_list, output_csv) + output_json = os.path.join(local_root, output_name + "_config.json") + write_metadata_to_config_json(metadata_list, output_json) + def process_downloaded_files(local_root: str) -> List[NetCDFMetadata]: """ - Process downloaded files and create a list of metadata objects for a config json + Process downloaded files and create a list of metadata objects for config json """ metadata_list: List[NetCDFMetadata] = [] @@ -334,9 +241,6 @@ def extract_wkt_from_crs(crs_var) -> Optional[str]: def write_metadata_to_csv(metadata_list: List[NetCDFMetadata], output_csv: str) -> None: """ Writes a list of NetCDFMetadata objects to a CSV file. - - :param metadata_list: List of NetCDFMetadata objects - :param output_csv: Output CSV file path """ fieldnames: List[str] = [ "file_path", @@ -407,10 +311,202 @@ def write_metadata_to_config_json(metadata_list: List[NetCDFMetadata], output_js config = { "files": info_list } - # config: Dict[str, List[Dict[str, Any]]] = { - # "files": [to_dict(m) for m in metadata_list] - # } with open(output_json, "w", encoding="utf-8") as f: json.dump(config, f, indent = 2) - print(f"Config JSON written to: {output_json}") \ No newline at end of file + print(f"Config JSON written to: {output_json}") + +def debug_netcdf_structure_in_folder(folder_path: str) -> None: + """ + Recursively scans a folder for NetCDF files and prints their structure. + """ + # This function is used for testing purposes. + # It also uses a local logging to save all information into a file. + nc_files: List[str] = [] + data_variables_list = [] + logging.basicConfig(filename='app.log', level=logging.INFO, format='%(message)s') + for root, _, files in os.walk(folder_path): + for file in files: + if file.endswith(".nc"): + nc_files.append(os.path.join(root, file)) + + if not nc_files: + print(f"No NetCDF files found in: {folder_path}") + return + logging.info(f"Found {len(nc_files)} NetCDF files within the folder") + + for file_path in nc_files: + logging.info("-" * 80) + logging.info(f"FILE: {file_path}") + + try: + with xr.open_dataset(file_path) as ds: + # Variables + logging.info("--Variables:") + for var_name, var in ds.data_vars.items(): + logging.info(f"---- {var_name}: shape={var.shape}, dtype={var.dtype}") + output_class, category, domain = parse_filename_metadata(file_path) + data_variables_list.append(var_name + ";" + output_class + ";" + category + ";" + domain) + + # Dimensions + logging.info("--Dimensions:") + for dim_name, dim_size in ds.sizes.items(): + logging.info(f"---- {dim_name}: size={dim_size}") + + # CRS-specific attributes if present + is_crs_present = False + is_sref_present = False + for crs_name in ["crs", "CRS", "spatial_ref"]: + if crs_name in ds.variables: + logging.info(f"--CRS Variable: {crs_name}") + is_crs_present = True + crs_var = ds.variables[crs_name] + if 'spatial_ref' in crs_var.attrs: + spatial_ref_raw = ds.variables[crs_name].attrs['spatial_ref'] + is_sref_present = True + logging.info(f"----{spatial_ref_raw}") + logging.info(f"-- CRS Available: {is_crs_present}; Spatial_ref Available: {is_sref_present}") + + # The snippet below is use to write variables along with the class, category and domain + # This produces an additional csv with just basic variables information. + with open('variables_ccategories.csv', 'w', newline='') as f: + writer = csv.writer(f) + writer.writerow(["Variable", "Class", "Category", "Domain"]) + for var in data_variables_list: + if not var.startswith('crs'): + row = var.split(";") + writer.writerow(row) + except Exception as e: + print(f"\n Failed to read file: {file_path}") + print(f"Error: {e}") +# endregion + +# region create template grids +def create_nwm_template_grids(src_root_folder: str, dest_root_folder: str) -> None: + """ + Creates template grids for all NWM netcdf products using a sample set of netcdfs. + """ + # This function is there for testing purposes. + # We can delete this once we are prodution ready. + coords_to_reset = ['time', 'x', 'y', 'latitude', 'longitude'] + + for root, dirs, files in os.walk(src_root_folder): + # Determine the relative path to recreate subfolders + rel_path = os.path.relpath(root, src_root_folder) + target_dir = os.path.join(dest_root_folder, rel_path) + + # Create the target directory if it doesn't exist + os.makedirs(target_dir, exist_ok=True) + + for file in files: + if file.endswith('.nc'): + src_path = os.path.join(root, file) + dest_path = os.path.join(target_dir, file) + + # Process the NetCDF using xarray + with xr.open_dataset(src_path) as ds: + # Reset data variables + for var in ds.data_vars: + if var in nwm_variables_list: + ds[var].values[:] = -1 + + # Reset coordinate variables + for coord in coords_to_reset: + if coord in ds.coords: + ds[coord].values[:] = - 1 # To do: Gives warning for time. Need to address + # Save to the desired location + ds.to_netcdf(dest_path) + print(f"Processed: {dest_path}") +# endregion + +# region basin grid products +def create_combined_basin_netcdf_products (timestep_netcdf_folder: str, output_folder: str) -> None: + """ + Main calling function to create a combined basins product + """ + # Randomly pick timestep outputs at 6 hour intervals + for i in range(0, 5, 6): + search_string = f"01T{i:02}" + files_list = find_files_by_timestep(timestep_netcdf_folder, search_string) + merged_ds: xr.Dataset = merge_basin_netcdfs(files_list) + output_file = os.path.join(output_folder, f"combined_grid_{i:02}_.nc") + merged_ds.to_netcdf(output_file) + +def find_files_by_timestep(root_dir: str, search_timestep: str) -> List[str]: + """ + Function to recursively search a folder for a specific substring + """ + matched_files = [] + for dirpath, _, filenames in os.walk(root_dir): + for fname in filenames: + if search_timestep in fname: + full_path = os.path.join(dirpath, fname) + matched_files.append(full_path) + return matched_files + +def merge_basin_netcdfs(nc_files: list[str], fill_value: float | None = None, check_crs: bool = True +) -> xr.Dataset: + """ + Merge multiple NetCDF subsets. + Assumes same grid resolution, same coordinate system and no overlaps + """ + # This function is not working as expected. We will address this in a later sprint in PI-10 + # For testing purposes, making the variables and the units uniform + # across all datasets being combined. + # Also, this function tests combine function with only two datasets + + datasets = [xr.open_dataset(f) for f in nc_files] + dt_list = [] + for ds in datasets: + for var in ds.data_vars: + ds[var].attrs['variable units'] = 'm' + # Normalize coordinate ordering. This is needed so that the + # the merged output don't get flipped spatially. + if "y" in ds: + ds = ds.sortby("y", ascending=True) + if len(dt_list) == 0: + dt_list.append(ds) # add first file as is. + else: + # For testing purposes, have been using datasets with different timesteps. + # Using the snippet below to match timesteps as well. + ds_updated = ds.assign_coords(time=dt_list[0].time) + dt_list.append(ds_updated) + + # Check CRS and confirm that they are the same for all the netcdf files + if check_crs: + crs_list = [] + for ds in datasets: + if "crs" in ds: + crs_list.append(ds.variables["crs"].attrs['spatial_ref']) + else: + raise ValueError("One dataset missing CRS") + if len(set(crs_list)) != 1: + raise ValueError("CRS mismatch between datasets") + + # Use combine_by_coords to combine the NetCDFs + # combine_by_coords gave a FutureWarning + # FutureWarning: In a future version of xarray the default value for data_vars + # will change from data_vars='all' to data_vars=None. This is likely to lead + # to different results when multiple datasets have matching variables with + # overlapping values. To opt in to new defaults and get rid of these warnings + # now use `set_options(use_new_combine_kwarg_defaults=True) or set data_vars explicitly + ds_combined = xr.combine_by_coords( + dt_list, + data_vars="minimal", # removes FutureWarning + coords="minimal", + compat="override" + ) + ds_combined = ds_combined.sortby("y", ascending=False) + + # To do: Alternate approach is to use Merge. We can test this later. + # compat='no_conflicts' ensures overlapping non-null values must agree + #ds_combined = xr.merge(datasets, compat="no_conflicts") + + # Optional fill value , if provided + # To do: Examine NWM products to see if there are multiple fill values + # and whether they need to be filled. + if fill_value is not None: + ds_combined = ds_combined.fillna(fill_value) + + return ds_combined +# endregion \ No newline at end of file diff --git a/netcdf_production_sample.py b/netcdf_production_sample.py index 7bcf133..c1249ae 100644 --- a/netcdf_production_sample.py +++ b/netcdf_production_sample.py @@ -5,44 +5,42 @@ def randomize_values(netcdf_file: str, output_file: str) -> None: #Usage: - # python netcdf_wrapper_sample.py randomize sample_data/sample_netcdf/g01123000.nc sample_data/sample_netcdf/catchment_randomvals.nc + # python netcdf_production_sample.py randomize sample_data/sample_netcdf/catchment_output_CNF.nc sample_data/sample_netcdf/catchment_randomvals_cnf.nc reader = DataReader(netcdf_file) reader.assign_random_values(output_file) def create_template_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str, config_json_file: str): #Usage - #python netcdf_wrapper_sample.py create-template-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/grid_template.nc - #new workflow: python netcdf_production_sample.py create-template-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json - processor = DataProcessor(netcdf_file, gpkg_file, template_grid_file, config_json_file, 'analysis_assim', 'land', 'conus', True, False) + # python netcdf_production_sample.py create-template-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json + processor = DataProcessor(netcdf_file, gpkg_file, template_grid_file, config_json_file, 'medium_range_blend', 'terrain_rt', 'conus', True, False) def create_nwm_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str, config_json_file: str): #Usage: - #python netcdf_wrapper_sample.py create-nwm-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/grid_template.nc - #new workflow: python netcdf_production_sample.py create-nwm-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json + # python netcdf_production_sample.py create-nwm-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json processor = DataProcessor(netcdf_file, gpkg_file, template_grid_file, config_json_file, 'analysis_assim', 'land', 'conus', False, True) -def create_nwm_grid_dask(netcdf_file: str, gpkg_file: str, template_grid_file: str): +def download_netcdf_from_nomads(download_url: str, output_folder: str): #Usage: - #python netcdf_wrapper_sample.py create-nwm-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/grid_template.nc - processor = DataProcessor(netcdf_file, gpkg_file, template_grid_file, False, True) - -def download_netcdf(download_url: str, output_folder: str): - #Usage: - #python netcdf_production_sample.py download-nwm-outputs https://nomads.ncep.noaa.gov/pub/data/nccf/com/nwm/prod sample_data/nwm_output + # python netcdf_production_sample.py download-nwm-outputs https://nomads.ncep.noaa.gov/pub/data/nccf/com/nwm/prod sample_data/nwm_output utils.download_nwm_data_from_server(download_url, output_folder) def extract_netcdf_metadata(netcdf_root_folder: str, output_file_name: str): #Usage: - #python netcdf_production_sample.py obtain-netcdf-metadata sample_data/nwm_output metadata + # python netcdf_production_sample.py obtain-netcdf-metadata sample_data/nwm_output metadata utils.obtain_metadata_information(netcdf_root_folder, output_file_name) #utils.debug_netcdf_structure_in_folder(netcdf_root_folder) def create_template_nwm_grids_data(netcdf_root_folder: str, templates_folder: str): #Usage: - #python netcdf_production_sample.py create-template-nwm-grid sample_data/nwm_output sample_data/nwm_templates + # python netcdf_production_sample.py create-template-nwm-grid sample_data/nwm_output sample_data/nwm_templates utils.create_nwm_template_grids(netcdf_root_folder, templates_folder) +def combine_basin_grids(netcdf_folder: str, output_folder: str): + #Usage: + # python netcdf_production_sample.py create-combined-basin-grid sample_data/sample_netcdf/sample_output/merge_test sample_data/sample_netcdf/sample_output/merge_test + utils.create_combined_basin_netcdf_products(netcdf_folder, output_folder) + def main() -> None: parser = argparse.ArgumentParser(description="NetCDF Data Tool") @@ -83,6 +81,11 @@ def main() -> None: parser_template_grids.add_argument("nwm_output_grids_folder") parser_template_grids.add_argument("nwm_template_grids_folder") + #create basin level netcdf using timestep netcdfs + parser_basin_grids = subparsers.add_parser("create-combined-basin-grid") + parser_basin_grids.add_argument("timestep_grids_folder") + parser_basin_grids.add_argument("output_basin_grids_folder") + args = parser.parse_args() if args.command == "randomize": @@ -92,11 +95,13 @@ def main() -> None: elif args.command == "create-nwm-grid": create_nwm_grid(args.catchment_netcdf_file, args.catchment_gpkg_file, args.template_grid_file, args.config_json_file) elif args.command == "download-nwm-outputs": - download_netcdf(args.download_url, args.output_folder_path) + download_netcdf_from_nomads(args.download_url, args.output_folder_path) elif args.command == "obtain-netcdf-metadata": extract_netcdf_metadata(args.local_folder_path, args.file_name) elif args.command == "create-template-nwm-grid": create_template_nwm_grids_data(args.nwm_output_grids_folder, args.nwm_template_grids_folder) + elif args.command == "create-combined-basin-grid": + combine_basin_grids(args.timestep_grids_folder, args.output_basin_grids_folder) else: parser.print_help() From c501ffa64e585e4cc9f7271721fd7803e912d608 Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Tue, 9 Jun 2026 22:14:36 -0400 Subject: [PATCH 05/26] Post-processing code with functionality to combine multiple ngen run catchment outputs into a single multi-basin netcdfs. --- .../output_variables/DataProcessor.py | 186 ++++++++++-------- .../output_variables/DataReader.py | 8 +- .../output_variables/Readme_wip.md | 5 +- .../output_variables/consts.py | 9 + .../output_variables/utils.py | 136 +++++++++---- netcdf_production_sample.py | 17 +- 6 files changed, 221 insertions(+), 140 deletions(-) create mode 100644 data_assimilation_engine/output_variables/consts.py diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index 052bc20..9eff6a4 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -12,105 +12,62 @@ from pyproj import CRS from typing import List, Optional from .DataReader import DataReader - +from . import consts class DataProcessor(DataReader): """ Handles catchment-time NetCDF and grid generation. """ - def __init__(self, catchment_output_netcdf_file: str, gpkg_file: str, template_grid_file_name: str, + def __init__(self, catchment_netcdf_file: str, gpkg_file: str, config_path: str, output_class: str | None, category: str | None, - domain: str | None, produce_template: bool, produce_output: bool, chunk_size: int = 100) -> None: + domain: str | None, chunk_size: int = 100) -> None: + + super().__init__(catchment_netcdf_file, chunk_size) + + self._catchment_ds: xr.Dataset = self.dataset + self._gpkg_file = gpkg_file + self._config_path = config_path + self._output_class = output_class if category in ['channel_rt', 'reservoir', 'total_water']: raise ValueError(f"The requested category - {category} - is not a gridded netcdf. This cannot be processed.") + else: + self._category = category + self._domain = domain - super().__init__(catchment_output_netcdf_file, chunk_size) - - self.catchment_ds: xr.Dataset = self.dataset - self.output_variables = list(self.catchment_ds.data_vars) # Normalize catchment ids in netcdf with a cat- prefix for consistency. - self.nc_catchments = self._normalize_catchment_ids(self.catchment_ds[self.catchment_coord].values) + nc_catchments = self._normalize_catchment_ids(self._catchment_ds[self.catchment_coord].values) # Read geopackage, determine schema and "divides" layer - self.is_new_NHF_schema: bool = self._is_new_NHF_schema(gpkg_file, "reference_flowpaths") + is_new_NHF_schema: bool = self._is_new_NHF_schema(gpkg_file, "reference_flowpaths") gpkg_gdf = gpd.read_file(gpkg_file, layer="divides") if gpkg_gdf.empty: raise ValueError("No polygon geometries found in GeoPackage") # Check schema and assign catchment ID field. - if self.is_new_NHF_schema: + if is_new_NHF_schema: self.catchment_field = "div_id" else: self.catchment_field = "divide_id" # Normalize catchment ids in gpkg with a 'cat-' prefix for consistency. gpkg_gdf[self.catchment_field] = self._normalize_catchment_ids(gpkg_gdf[self.catchment_field].values) - self.gpkg_catchment_list = gpkg_gdf[self.catchment_field].values.tolist() + gpkg_catchment_list = gpkg_gdf[self.catchment_field].values.tolist() + self._gpkg_gdf = gpkg_gdf # Check if catchments from netcdf and geopackage match - if set(self.nc_catchments) != set(self.gpkg_catchment_list): + if set(nc_catchments) != set(gpkg_catchment_list): raise ValueError("There is a mistmatch between catchment IDs in geopackage and netcdf") - if produce_template: - self.create_template_grid_netcdf_using_config(gpkg_gdf, template_grid_file_name, - config_path, output_class, category, domain) - self.ds_template_grid = xr.open_dataset(template_grid_file_name) - - if produce_output: - # change variable name in the randomvals.nc This is strictly for testing purposes. - # The commented code below is meant to test various categories. - # analysis_assim.land.conus - # self.catchment_ds = self.catchment_ds.rename({ - # 'sm_frac_0.4m': 'ACCET', - # 'sm_profile_0.1m': 'ACSNOM', - # 'sm_profile_0.4m': 'EDIR', - # 'sm_profile_1.5m': 'ISNOW', - # 'sm_profile_2m': 'QRAIN', - # 'SWE_mm': 'QSNOW' - # }) - - # analysis_assim.terrain_rt.conus; medium_range_blend.terrain_rt.conus - self.catchment_ds = self.catchment_ds.drop_vars(["sm_profile_0.4m", "sm_profile_1.5m", "sm_profile_2m", "SWE_mm"]) - self.catchment_ds = self.catchment_ds.rename({ - 'sm_frac_0.4m': 'sfcheadsubrt', - 'sm_profile_0.1m': 'zwattablrt' - }) - - # long_range.land_2.conus - # self.catchment_ds = self.catchment_ds.rename({ - # 'sm_frac_0.4m': 'ACCET', - # 'sm_profile_0.1m': 'UGDRNOFF', - # 'sm_profile_0.4m': 'SOILSAT', - # 'sm_profile_1.5m': 'SFCRNOFF', - # 'sm_profile_2m': 'SOILSAT_TOP', - # 'SWE_mm': 'SNEQV' - # }) - - # medium_range_blend.land.conus - # self.catchment_ds = self.catchment_ds.rename({ - # 'sm_frac_0.4m': 'FSA', - # 'sm_profile_0.1m': 'FIRA', - # 'sm_profile_0.4m': 'HFX', - # 'sm_profile_1.5m': 'TRAD', - # 'sm_profile_2m': 'LH', - # 'SWE_mm': 'SNEQV' - # }) - - catchment_grid = self.build_catchment_id_grid(template_grid_file_name, gpkg_gdf, "x", "y") # Change hardcoded values later - mapped_grid = self.map_catchment_data_to_grid(catchment_grid, "catchments","time") # Change hardcoded values later - output_dir = 'sample_data/sample_netcdf/sample_output/final_test' #Change this to command line argument later - start_time = time.perf_counter() - self.write_netcdf_per_timestep(mapped_grid, output_dir, "time") - end_time = time.perf_counter() - duration_minutes = (end_time - start_time) / 60 - print(f"Function execution time: {duration_minutes:.4f} minutes") - + + def set_template_grid(self, template_grid_path: str): + self.ds_template_grid = xr.open_dataset(template_grid_path) + def _is_new_NHF_schema(self, geopackage_path: str, layer_name: str) -> bool: """ Check the data schema in the geopackage for the new NHF format """ layers = gpd.list_layers(geopackage_path) - tabular_layers = layers[layers['geometry_type'].isna()] + tabular_layers = layers[layers[consts.GPKG_GEOMETRY_TYPE_IDENTIFIER].isna()] return layer_name.lower() in tabular_layers['name'].tolist() def _normalize_catchment_ids(self, ids) -> np.ndarray: @@ -132,27 +89,22 @@ def _snap_to_grid(self, value: float, origin: float, resolution: int, direction: elif direction == np.ceil: return origin + np.ceil((value - origin) / resolution) * resolution - def create_template_grid_netcdf_using_config(self, geopackage_gdf: gpd.GeoDataFrame, template_grid_netcdf_path: str, - config_path: str, - output_class: str, - category: str, - domain: str - ) -> None: + def create_template_grid_netcdf_using_config(self, template_grid_netcdf_path: str) -> None: """ Create a template grid aligned to a reference grid defined in config.json. The template grid covers the extents in the geopackage (usually basin level). """ # Read config file - with open(config_path, "r") as f: + with open(self._config_path, "r") as f: config = json.load(f) # Find matching entry entry = next((c_item for c_item in config["files"] if - c_item["class"] == output_class and - c_item["category"] == category and - c_item["domain"] == domain), None) + c_item["class"] == self._output_class and + c_item["category"] == self._category and + c_item["domain"] == self._domain), None) if entry is None: - raise ValueError(f"Cannot find a config file entry that matches {output_class}, {category} and {domain}") + raise ValueError(f"Cannot find a config file entry that matches {self._output_class}, {self._category} and {self._domain}") origin_x = entry["origin"]["x"] origin_y = entry["origin"]["y"] @@ -167,7 +119,7 @@ def create_template_grid_netcdf_using_config(self, geopackage_gdf: gpd.GeoDataFr # To do: Have to figure out a workflow when CRS is "Not Available" target_crs = CRS.from_user_input(wkt) - gdf = geopackage_gdf.to_crs(target_crs) + gdf = self._gpkg_gdf.to_crs(target_crs) geom = unary_union(gdf.geometry) # Get bounding box and snap to origin in config @@ -210,18 +162,78 @@ def create_template_grid_netcdf_using_config(self, geopackage_gdf: gpd.GeoDataFr ds_clipped = ds_masked.dropna(dim=y_name, how="all") ds_clipped = ds_clipped.dropna(dim=x_name, how="all") + # Reinforce crs as a scalar variable. + # This removes the string1 dimension that gets added + # and creates crs as a string scalar variable. + crs_attrs = ds_clipped["crs"].attrs + ds_clipped = ds_clipped.drop_encoding() + del ds_clipped["crs"] + ds_clipped["crs"] = xr.DataArray("", dims=()) + ds_clipped["crs"].attrs = crs_attrs + # Save ds_clipped.to_netcdf(template_grid_netcdf_path) + self.ds_template_grid = xr.open_dataset(template_grid_netcdf_path) + print(f"NetCDF template grid written to {template_grid_netcdf_path}") - def build_catchment_id_grid(self, template_nc_path: str, gpkg_gdf: gpd.GeoDataFrame, - x_dim: str = "x", - y_dim: str = "y", - ) -> xr.DataArray: + def produce_nwm_output_grid(self, output_dir: str) -> None: + # change variable name in the randomvals.nc This is strictly for testing purposes. + # The case statements should be removed before going into production. + cat_class_domain = self._output_class + '_' + self._category + '_' + self._domain + match cat_class_domain: + case "analysis_assim_land_conus": + # analysis_assim.land.conus + self._catchment_ds = self._catchment_ds.rename({ + 'sm_frac_0.4m': 'ACCET', + 'sm_profile_0.1m': 'ACSNOM', + 'sm_profile_0.4m': 'EDIR', + 'sm_profile_1.5m': 'ISNOW', + 'sm_profile_2m': 'QRAIN', + 'SWE_mm': 'QSNOW' + }) + case "analysis_assim_terrain_rt_conus" | "medium_range_blend_terrain_rt_conus": + # analysis_assim.terrain_rt.conus; medium_range_blend.terrain_rt.conus + self._catchment_ds = self._catchment_ds.drop_vars(["sm_profile_0.4m", "sm_profile_1.5m", "sm_profile_2m", "SWE_mm"]) + self._catchment_ds = self._catchment_ds.rename({ + 'sm_frac_0.4m': 'sfcheadsubrt', + 'sm_profile_0.1m': 'zwattablrt' + }) + case "long_range_land_2_conus": + # long_range.land_2.conus + self._catchment_ds = self._catchment_ds.rename({ + 'sm_frac_0.4m': 'ACCET', + 'sm_profile_0.1m': 'UGDRNOFF', + 'sm_profile_0.4m': 'SOILSAT', + 'sm_profile_1.5m': 'SFCRNOFF', + 'sm_profile_2m': 'SOILSAT_TOP', + 'SWE_mm': 'SNEQV' + }) + case "medium_range_blend_land_conus": + # medium_range_blend.land.conus + self._catchment_ds = self._catchment_ds.rename({ + 'sm_frac_0.4m': 'FSA', + 'sm_profile_0.1m': 'FIRA', + 'sm_profile_0.4m': 'HFX', + 'sm_profile_1.5m': 'TRAD', + 'sm_profile_2m': 'LH', + 'SWE_mm': 'SNEQV' + }) + + catchment_grid = self.build_catchment_id_grid("x", "y") # Change hardcoded values later + mapped_grid = self.map_catchment_data_to_grid(catchment_grid, consts.DIM_CATCHMENTS) + + start_time = time.perf_counter() + self.write_netcdf_per_timestep(mapped_grid, output_dir, consts.DIM_TIME) + end_time = time.perf_counter() + duration_minutes = (end_time - start_time) / 60 + print(f"Function execution time: {duration_minutes:.4f} minutes") + + def build_catchment_id_grid(self, x_dim: str = "x", y_dim: str = "y") -> xr.DataArray: """ Returns a DataArray (y, x) where each cell in the basin-level grid contains a catchment ID. """ - ds = xr.open_dataset(template_nc_path) + ds = self.ds_template_grid x = ds[x_dim].values y = ds[y_dim].values @@ -249,7 +261,7 @@ def build_catchment_id_grid(self, template_nc_path: str, gpkg_gdf: gpd.GeoDataFr # Spatial join with catchments for grid point to catchment association # To do: Using sjoin here. For larger areas, we may need to revisit if computing efficiency drops. - gdf_poly = gpkg_gdf.to_crs(crs) + gdf_poly = self._gpkg_gdf.to_crs(crs) joined = gpd.sjoin( gdf_ncgrid_points, gdf_poly[[self.catchment_field, "geometry"]], @@ -271,13 +283,13 @@ def build_catchment_id_grid(self, template_nc_path: str, gpkg_gdf: gpd.GeoDataFr return catchment_id_da def map_catchment_data_to_grid(self, catchment_grid: xr.DataArray, - catchment_dim: str = "catchments", time_dim: str = "time" + catchment_dim: str = consts.DIM_CATCHMENTS ) -> xr.Dataset: """ Assign catchment-based variables onto basin-level grid using the catchment_id grid. """ - ds_data = self.catchment_ds + ds_data = self._catchment_ds # Convert catchment IDs to index positions catchment_ids = ds_data[catchment_dim].values diff --git a/data_assimilation_engine/output_variables/DataReader.py b/data_assimilation_engine/output_variables/DataReader.py index 5e16b68..1c86f04 100644 --- a/data_assimilation_engine/output_variables/DataReader.py +++ b/data_assimilation_engine/output_variables/DataReader.py @@ -1,7 +1,7 @@ import fsspec import xarray as xr import numpy as np - +from . import consts class DataReader: def __init__(self, netcdf_file: str, chunk_size: int = 100) -> None: @@ -16,8 +16,8 @@ def _load_dataset(self) -> xr.Dataset: ds: xr.Dataset = xr.open_dataset( f, chunks={ - "time": 1, - "catchment": self.chunk_size + consts.DIM_TIME: 1, + consts.DIM_CATCHMENTS: self.chunk_size } ) return ds.load() @@ -42,7 +42,7 @@ def assign_random_values(self, output_file: str) -> None: with fsspec.open(self.netcdf_file, mode="rb") as f: ds = xr.open_dataset(f) - if ds.sizes.get("time", 0) > 48: + if ds.sizes.get(consts.DIM_TIME, 0) > 48: ds_48 = ds.isel(time=slice(0, 48)) else: ds_48 = ds diff --git a/data_assimilation_engine/output_variables/Readme_wip.md b/data_assimilation_engine/output_variables/Readme_wip.md index 48a8a45..05a402b 100644 --- a/data_assimilation_engine/output_variables/Readme_wip.md +++ b/data_assimilation_engine/output_variables/Readme_wip.md @@ -65,9 +65,10 @@ Positional Arguments: #### create-combined-basin-grid: This function is primarily used for producing intermediate files for testing. This should be deleted when scripts are production-ready. -python netcdf_production_sample.py create-combined-basin-grid nwm_timestep_grid_path nwm_multibasin_grid_path +python netcdf_production_sample.py create-combined-basin-grid nwm_reference_grid nwm_timestep_grid_path nwm_multibasin_grid_path Positional Arguments: +- nwm_reference_grid: Reference NWM grid for a given category, class and domain. - nwm_timestep_grid_path: Path to the folder where the necessary timestep netcdf files have been created. - nwm_multibasin_grid_path: Path to the folder where all the combined/merged multi-basin grids will be saved. @@ -92,4 +93,4 @@ python netcdf_production_sample.py obtain-netcdf-metadata sample_data/nwm_output python netcdf_production_sample.py create-template-nwm-grid sample_data/nwm_output sample_data/nwm_templates #### create-combined-basin-grid -python netcdf_production_sample.py create-combined-basin-grid sample_data/sample_netcdf/sample_output/merge_test sample_data/sample_netcdf/sample_output/merge_test \ No newline at end of file +python netcdf_production_sample.py create-combined-basin-grid sample_data/nwm_output/analysis_assim/nwm.t00z.analysis_assim.land.tm00.conus.nc sample_data/sample_netcdf/sample_output/merge_test sample_data/sample_netcdf/sample_output/merge_test \ No newline at end of file diff --git a/data_assimilation_engine/output_variables/consts.py b/data_assimilation_engine/output_variables/consts.py new file mode 100644 index 0000000..95a38c0 --- /dev/null +++ b/data_assimilation_engine/output_variables/consts.py @@ -0,0 +1,9 @@ +NWM_VARIABLES_LIST = ['sfcheadsubrt', 'zwattablrt', 'inflow', 'outflow', 'reservoir_assimilated_value', +'water_sfc_elev', 'nudge', 'qBucket', 'streamflow', 'velocity', 'qBtmVertRunoff', 'qSfcLatRunoff', +'ACSNOM', 'ACCET', 'SNOWT_AVG', 'EDIR', 'SOILICE', 'SOILSAT_TOP', 'ISNOW', 'QRAIN', 'FSNO', 'SNOWH', +'SNLIQ', 'SNEQV', 'QSNOW', 'SOIL_T', 'SOIL_M', 'SFCRNOFF', 'ACCECAN', 'ACCEDIR', 'ACCETRAN', 'UGDRNOFF', +'GRDFLX', 'TRAD', 'FSA', 'CANWAT', 'LH', 'FIRA', 'HFX'] + +DIM_TIME = "time" +DIM_CATCHMENTS = "catchments" +GPKG_GEOMETRY_TYPE_IDENTIFIER = "geometry_type" diff --git a/data_assimilation_engine/output_variables/utils.py b/data_assimilation_engine/output_variables/utils.py index 24d6e1b..1de68d2 100644 --- a/data_assimilation_engine/output_variables/utils.py +++ b/data_assimilation_engine/output_variables/utils.py @@ -5,18 +5,13 @@ import numpy as np import json import logging +from . import consts from urllib.parse import urljoin from bs4 import BeautifulSoup from datetime import datetime from pyproj import CRS from typing import List, Set, Tuple, Optional - -# To do: Move these to a consts.py file before production -nwm_variables_list = ['sfcheadsubrt', 'zwattablrt', 'inflow', 'outflow', 'reservoir_assimilated_value', -'water_sfc_elev', 'nudge', 'qBucket', 'streamflow', 'velocity', 'qBtmVertRunoff', 'qSfcLatRunoff', -'ACSNOM', 'ACCET', 'SNOWT_AVG', 'EDIR', 'SOILICE', 'SOILSAT_TOP', 'ISNOW', 'QRAIN', 'FSNO', 'SNOWH', -'SNLIQ', 'SNEQV', 'QSNOW', 'SOIL_T', 'SOIL_M', 'SFCRNOFF', 'ACCECAN', 'ACCEDIR', 'ACCETRAN', 'UGDRNOFF', -'GRDFLX', 'TRAD', 'FSA', 'CANWAT', 'LH', 'FIRA', 'HFX'] +from functools import reduce # region common @@ -213,7 +208,7 @@ def extract_netcdf_metadata(file_path: str) -> NetCDFMetadata: y_loc_name = nwm_var elif nwm_var in crs_info: #CRS wkt proj_wkt = extract_wkt_from_crs(ds.variables[nwm_var]) - elif nwm_var in nwm_variables_list: #NWM output variables + elif nwm_var in consts.NWM_VARIABLES_LIST: #NWM output variables vars_in_netcdf.append(nwm_var) nwm_variables = ", ".join(vars_in_netcdf) return NetCDFMetadata(file_path, res_x, res_y, origin_x, origin_y, x_loc_name, y_loc_name, proj_wkt, nwm_variables, output_class, category, domain) @@ -381,7 +376,7 @@ def debug_netcdf_structure_in_folder(folder_path: str) -> None: print(f"Error: {e}") # endregion -# region create template grids +# region (to delete) create template grids def create_nwm_template_grids(src_root_folder: str, dest_root_folder: str) -> None: """ Creates template grids for all NWM netcdf products using a sample set of netcdfs. @@ -407,7 +402,7 @@ def create_nwm_template_grids(src_root_folder: str, dest_root_folder: str) -> No with xr.open_dataset(src_path) as ds: # Reset data variables for var in ds.data_vars: - if var in nwm_variables_list: + if var in consts.NWM_VARIABLES_LIST: ds[var].values[:] = -1 # Reset coordinate variables @@ -420,17 +415,19 @@ def create_nwm_template_grids(src_root_folder: str, dest_root_folder: str) -> No # endregion # region basin grid products -def create_combined_basin_netcdf_products (timestep_netcdf_folder: str, output_folder: str) -> None: +def create_combined_basin_netcdf_products (reference_grid: str, timestep_netcdf_folder: str, output_folder: str) -> None: """ Main calling function to create a combined basins product """ # Randomly pick timestep outputs at 6 hour intervals - for i in range(0, 5, 6): + for i in range(0, 20, 6): search_string = f"01T{i:02}" files_list = find_files_by_timestep(timestep_netcdf_folder, search_string) - merged_ds: xr.Dataset = merge_basin_netcdfs(files_list) + variables_of_interest = ["ACCET"] + # merged_ds = merge_basin_netcdfs(reference_grid, files_list) + merged_ds, encoding = create_multi_basin_netcdfs(reference_grid, files_list, variables_of_interest, 1.0, None, True) output_file = os.path.join(output_folder, f"combined_grid_{i:02}_.nc") - merged_ds.to_netcdf(output_file) + merged_ds.to_netcdf(output_file, encoding = encoding, engine='netcdf4') def find_files_by_timestep(root_dir: str, search_timestep: str) -> List[str]: """ @@ -439,37 +436,40 @@ def find_files_by_timestep(root_dir: str, search_timestep: str) -> List[str]: matched_files = [] for dirpath, _, filenames in os.walk(root_dir): for fname in filenames: - if search_timestep in fname: + if search_timestep in fname and fname.endswith('.nc'): full_path = os.path.join(dirpath, fname) matched_files.append(full_path) return matched_files -def merge_basin_netcdfs(nc_files: list[str], fill_value: float | None = None, check_crs: bool = True +def merge_basin_netcdfs(reference_grid: str, nc_files: list[str], fill_value: float | None = None, check_crs: bool = True ) -> xr.Dataset: """ Merge multiple NetCDF subsets. Assumes same grid resolution, same coordinate system and no overlaps """ - # This function is not working as expected. We will address this in a later sprint in PI-10 # For testing purposes, making the variables and the units uniform # across all datasets being combined. # Also, this function tests combine function with only two datasets + ref_grid = xr.open_dataset(reference_grid) datasets = [xr.open_dataset(f) for f in nc_files] dt_list = [] for ds in datasets: + # the test datasets have different units for variables. + # For testing, just making them all same units. for var in ds.data_vars: ds[var].attrs['variable units'] = 'm' - # Normalize coordinate ordering. This is needed so that the - # the merged output don't get flipped spatially. - if "y" in ds: - ds = ds.sortby("y", ascending=True) + + # To avoid shift changes due to precision in the lat-lon values, we will + # re-index the coordinates to match the reference grid. + # tolerance of 1m meaning any misalignment within 1m gets snapped. + ds_reindexed = ds.reindex(y=ref_grid.y, x=ref_grid.x, method="nearest", tolerance=1.0) if len(dt_list) == 0: - dt_list.append(ds) # add first file as is. + dt_list.append(ds_reindexed) # add first file as is. else: # For testing purposes, have been using datasets with different timesteps. # Using the snippet below to match timesteps as well. - ds_updated = ds.assign_coords(time=dt_list[0].time) + ds_updated = ds_reindexed.assign_coords(time=dt_list[0].time) dt_list.append(ds_updated) # Check CRS and confirm that they are the same for all the netcdf files @@ -483,24 +483,7 @@ def merge_basin_netcdfs(nc_files: list[str], fill_value: float | None = None, ch if len(set(crs_list)) != 1: raise ValueError("CRS mismatch between datasets") - # Use combine_by_coords to combine the NetCDFs - # combine_by_coords gave a FutureWarning - # FutureWarning: In a future version of xarray the default value for data_vars - # will change from data_vars='all' to data_vars=None. This is likely to lead - # to different results when multiple datasets have matching variables with - # overlapping values. To opt in to new defaults and get rid of these warnings - # now use `set_options(use_new_combine_kwarg_defaults=True) or set data_vars explicitly - ds_combined = xr.combine_by_coords( - dt_list, - data_vars="minimal", # removes FutureWarning - coords="minimal", - compat="override" - ) - ds_combined = ds_combined.sortby("y", ascending=False) - - # To do: Alternate approach is to use Merge. We can test this later. - # compat='no_conflicts' ensures overlapping non-null values must agree - #ds_combined = xr.merge(datasets, compat="no_conflicts") + ds_combined = reduce(lambda left, right: left.combine_first(right), dt_list) # Optional fill value , if provided # To do: Examine NWM products to see if there are multiple fill values @@ -509,4 +492,75 @@ def merge_basin_netcdfs(nc_files: list[str], fill_value: float | None = None, ch ds_combined = ds_combined.fillna(fill_value) return ds_combined + +def create_multi_basin_netcdfs(reference_grid: str, nc_files: list[str], variables_of_interest: list[str] = None, + tolerance: float = 1.0, fill_value: float | None = None, + check_crs: bool = True +) -> xr.Dataset: + """ + Merge multiple NetCDF subsets. + Assumes same grid resolution, same coordinate system and no overlaps + """ + # Check CRS and confirm that they are the same for all the netcdf files + if check_crs: + crs_list = [] + for nc_file in nc_files: + with xr.open_dataset(nc_file) as ds: + if "crs" in ds: + crs_list.append(ds.variables["crs"].attrs['spatial_ref']) + else: + raise ValueError("One dataset missing CRS") + + if len(set(crs_list)) != 1: + raise ValueError("CRS mismatch between datasets") + + ref_grid = xr.open_dataset(reference_grid) + # the test datasets have different units for variables. + # For testing, just making them all same units. + with xr.open_dataset(nc_files[0]) as ds_sample: + standardized_time = ds_sample.time.values + + # Automatically grab all data variables from the first file + # if variables of interest is not provided. + if variables_of_interest is None: + with xr.open_dataset(nc_files[0]) as temp_ds: + variables_of_interest = list(temp_ds.data_vars) + + combined_variables_dict = {} + for var in variables_of_interest: + reindexed_var_arrays = [] + for nc_file in nc_files: + with xr.open_dataset(nc_file) as ds: + # the test datasets have different units for variables. + # For testing, just making them all same units. + for data_var in ds.data_vars: + ds[data_var].attrs['variable units'] = 'm' + + # Isolate the target variable to protect other variables from blooming into NaNs prematurely + var_of_interest = ds[var] + + # Map to the national spatial coordinates layout + var_reindexed = var_of_interest.reindex(y=ref_grid.y, x=ref_grid.x, method="nearest", tolerance=tolerance) + + # Unify the timestamp - this is only for testing. + # In reality, all grids will have the same simulation timesteps + var_aligned = var_reindexed.assign_coords(time=standardized_time) + reindexed_var_arrays.append(var_aligned) + + # merge the variable for all individual basins + combined_variables_dict[var] = reduce(lambda left, right: left.combine_first(right), reindexed_var_arrays) + + ds_combined = xr.Dataset(data_vars=combined_variables_dict, + coords={"time": standardized_time, "y": ref_grid.y, "x": ref_grid.x}, + attrs=ref_grid.attrs) + + encoding_config = {} + for var_name in variables_of_interest: + encoding_config[str(var_name)] = { + "zlib": True, + "complevel": 4, + "_FillValue": fill_value, + } + + return ds_combined, encoding_config # endregion \ No newline at end of file diff --git a/netcdf_production_sample.py b/netcdf_production_sample.py index c1249ae..e6f3de4 100644 --- a/netcdf_production_sample.py +++ b/netcdf_production_sample.py @@ -13,12 +13,16 @@ def randomize_values(netcdf_file: str, output_file: str) -> None: def create_template_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str, config_json_file: str): #Usage # python netcdf_production_sample.py create-template-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json - processor = DataProcessor(netcdf_file, gpkg_file, template_grid_file, config_json_file, 'medium_range_blend', 'terrain_rt', 'conus', True, False) + processor = DataProcessor(netcdf_file, gpkg_file, config_json_file, 'analysis_assim', 'land', 'conus') + processor.create_template_grid_netcdf_using_config(template_grid_file) def create_nwm_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str, config_json_file: str): #Usage: # python netcdf_production_sample.py create-nwm-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json - processor = DataProcessor(netcdf_file, gpkg_file, template_grid_file, config_json_file, 'analysis_assim', 'land', 'conus', False, True) + processor = DataProcessor(netcdf_file, gpkg_file, config_json_file, 'analysis_assim', 'land', 'conus') + processor.set_template_grid(template_grid_file) + output_dir = 'sample_data/sample_netcdf/sample_output/new_test' + processor.produce_nwm_output_grid(output_dir) def download_netcdf_from_nomads(download_url: str, output_folder: str): #Usage: @@ -36,10 +40,10 @@ def create_template_nwm_grids_data(netcdf_root_folder: str, templates_folder: st # python netcdf_production_sample.py create-template-nwm-grid sample_data/nwm_output sample_data/nwm_templates utils.create_nwm_template_grids(netcdf_root_folder, templates_folder) -def combine_basin_grids(netcdf_folder: str, output_folder: str): +def combine_basin_grids(reference_grid: str, netcdf_folder: str, output_folder: str): #Usage: - # python netcdf_production_sample.py create-combined-basin-grid sample_data/sample_netcdf/sample_output/merge_test sample_data/sample_netcdf/sample_output/merge_test - utils.create_combined_basin_netcdf_products(netcdf_folder, output_folder) + # python netcdf_production_sample.py create-combined-basin-grid sample_data/nwm_output/analysis_assim/nwm.t00z.analysis_assim.land.tm00.conus.nc sample_data/sample_netcdf/sample_output/merge_test sample_data/sample_netcdf/sample_output/merge_test + utils.create_combined_basin_netcdf_products(reference_grid, netcdf_folder, output_folder) def main() -> None: @@ -83,6 +87,7 @@ def main() -> None: #create basin level netcdf using timestep netcdfs parser_basin_grids = subparsers.add_parser("create-combined-basin-grid") + parser_basin_grids.add_argument("reference_grid") parser_basin_grids.add_argument("timestep_grids_folder") parser_basin_grids.add_argument("output_basin_grids_folder") @@ -101,7 +106,7 @@ def main() -> None: elif args.command == "create-template-nwm-grid": create_template_nwm_grids_data(args.nwm_output_grids_folder, args.nwm_template_grids_folder) elif args.command == "create-combined-basin-grid": - combine_basin_grids(args.timestep_grids_folder, args.output_basin_grids_folder) + combine_basin_grids(args.reference_grid, args.timestep_grids_folder, args.output_basin_grids_folder) else: parser.print_help() From 677c52afd6a418d4257128e5e127ed592a0563e2 Mon Sep 17 00:00:00 2001 From: "brian.hurley" Date: Mon, 4 Nov 2024 15:06:56 -0600 Subject: [PATCH 06/26] NGWPC-1276: Add scripts for downloading and time-slicing streamflow data Added scripts for downloading and time-slicing real-time streamflow data from the USGS, US Army Corps of Engineers and Environment Canada. These scripts originated from the NWM v3 codebase. --- .../Streamflow_Scripts/README.md | 39 + .../ace_download/analysis/.idea/analysis.iml | 11 + .../ace_download/analysis/.idea/misc.xml | 4 + .../ace_download/analysis/.idea/modules.xml | 8 + .../ace_download/analysis/.idea/vcs.xml | 6 + .../ace_download/analysis/.idea/workspace.xml | 324 + .../ace_download/analysis/ACE_Observation.py | 146 + .../ace_download/analysis/CWMS_Sites.py | 82 + .../analysis/EmptyDirOrFileException.py | 11 + .../ace_download/analysis/Observation.py | 276 + .../ace_download/analysis/TimeSlice.py | 363 + .../ace_download/analysis/Tracer.py | 19 + .../ace_download/analysis/USGS_Observation.py | 430 + .../ace_download/analysis/crontab.txt | 96 + .../analysis/make_time_slice_from_ace_xml.py | 153 + .../ace_download/analysis/nwmcopy.sh | 129 + .../old/CWMS_outflow_sites_263_index.csv | 255 + .../analysis/old/bsub_timeslice.bash | 44 + .../old/make_time_slice_from_usgs_waterml.py | 131 + .../analysis/old/test_ace_observation.py | 47 + ...l.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml | 1136 + .../SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml | 29880 ++++++++++++++++ .../analysis/old/time_slice_job_cray.bsub | 30 + .../ace_download/analysis/site-file.csv | 71 + .../ace_download/analysis/test_CWMS_Sites.py | 44 + .../CWMS_download_current.py | 107 + .../CWMS_download_range.py | 94 + .../CWMS_historic_download.py | 136 + .../stream_flow_download/gov/__init__.py | 0 .../stream_flow_download/gov/noaa/__init__.py | 0 .../gov/noaa/nwc/__init__.py | 0 .../gov/noaa/nwc/cwmstools/CWMSDownloader.py | 129 + .../gov/noaa/nwc/cwmstools/__init__.py | 1 + .../stream_flow_download/run_usace.sh | 54 + .../stream_flow_download/site-file.csv | 71 + .../EmptyDirOrFileException.py | 11 + .../canada_download/TimeSliceC.py | 240 + .../canada_download/WSC_Observation.py | 397 + .../canadian_flow_retrieval.py | 291 + .../how_data_assimilation_works.txt | 36 + .../make_time_slice_from_canada.py | 92 + .../canada_download/parallel_dm_can.py | 79 + .../canada_download/run_canflow.sh | 47 + .../Streamflow_Scripts/requirements.txt | 3 + .../usgs_download/analysis/ACE_Observation.py | 146 + .../usgs_download/analysis/CWMS_Sites.py | 73 + .../analysis/CWMS_outflow_sites_263_index.csv | 255 + .../analysis/EmptyDirOrFileException.py | 11 + .../usgs_download/analysis/Observation.py | 276 + .../usgs_download/analysis/TimeSlice.py | 363 + .../usgs_download/analysis/Tracer.py | 19 + .../analysis/USGS_Observation.py | 526 + .../analysis/bsub_timeslice.bash | 44 + .../usgs_download/analysis/crontab.txt | 97 + .../analysis/make_time_slice_from_ace_xml.py | 144 + .../make_time_slice_from_usgs_waterml.py | 140 + .../usgs_download/analysis/nwmcopy.sh | 129 + .../analysis/runTestUSGSTimeslice.sh | 16 + .../usgs_download/analysis/site-file.csv | 324 + .../usgs_download/analysis/test_CWMS_Sites.py | 44 + .../analysis/test_ace_observation.py | 47 + .../analysis/test_data/JSON/01122500.json | 318 + .../analysis/test_data/JSON/0208111310.json | 325 + .../analysis/test_data/JSON/02186645.json | 326 + .../analysis/test_data/JSON/02289060.json | 340 + .../analysis/test_data/JSON/07027005.json | 163 + .../analysis/test_data/JSON/08329918.json | 348 + .../analysis/test_data/JSON/09423000.json | 332 + .../analysis/test_data/JSON/16296500.json | 692 + ...l.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml | 1136 + .../SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml | 29880 ++++++++++++++++ .../analysis/test_data/XML/01122500.xml | 1 + .../analysis/test_data/XML/0208111310.xml | 1 + .../analysis/test_data/XML/02186645.xml | 1 + .../analysis/test_data/XML/02289060.xml | 1 + .../analysis/test_data/XML/07027005.xml | 1 + .../analysis/test_data/XML/08329918.xml | 1 + .../analysis/test_data/XML/09423000.xml | 1 + .../analysis/test_data/XML/16296500.xml | 1 + .../test_data/diffDischargeQuality.sh | 22 + .../analysis/time_slice_job_cray.bsub | 30 + .../usgs_download/exnwm_usgs_timeslices.sh | 131 + .../stream_flow_download/README.TXT | 25 + .../stream_flow_download/fetch_sites.py | 84 + .../find_changed_site_for_huc.py | 135 + .../parallel_download_master.py | 93 + .../stream_flow_download/run_usgs.sh | 70 + .../stream_flow_download/usgs_iv_retrieval.py | 188 + 88 files changed, 72823 insertions(+) create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/README.md create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/analysis.iml create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/misc.xml create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/modules.xml create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/vcs.xml create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/workspace.xml create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/ACE_Observation.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/CWMS_Sites.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/EmptyDirOrFileException.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/TimeSlice.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Tracer.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/USGS_Observation.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/crontab.txt create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace_xml.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/nwmcopy.sh create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/CWMS_outflow_sites_263_index.csv create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/bsub_timeslice.bash create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/make_time_slice_from_usgs_waterml.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_ace_observation.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/time_slice_job_cray.bsub create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/site-file.csv create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/test_CWMS_Sites.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_current.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_range.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_historic_download.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/__init__.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/__init__.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/__init__.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/CWMSDownloader.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/__init__.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace.sh create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/site-file.csv create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/WSC_Observation.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/how_data_assimilation_works.txt create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/parallel_dm_can.py create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/run_canflow.sh create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/requirements.txt create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/ACE_Observation.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_Sites.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_outflow_sites_263_index.csv create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/EmptyDirOrFileException.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Observation.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/TimeSlice.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Tracer.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/USGS_Observation.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/bsub_timeslice.bash create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/crontab.txt create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_ace_xml.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_usgs_waterml.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/nwmcopy.sh create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/runTestUSGSTimeslice.sh create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/site-file.csv create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_CWMS_Sites.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_ace_observation.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/01122500.json create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/0208111310.json create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/02186645.json create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/02289060.json create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/07027005.json create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/08329918.json create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/09423000.json create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/16296500.json create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/01122500.xml create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/0208111310.xml create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02186645.xml create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02289060.xml create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/07027005.xml create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/08329918.xml create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/09423000.xml create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/16296500.xml create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/diffDischargeQuality.sh create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/time_slice_job_cray.bsub create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/exnwm_usgs_timeslices.sh create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/README.TXT create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/fetch_sites.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/find_changed_site_for_huc.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/parallel_download_master.py create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/run_usgs.sh create mode 100755 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_iv_retrieval.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/README.md b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/README.md new file mode 100644 index 0000000..55960ab --- /dev/null +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/README.md @@ -0,0 +1,39 @@ +# Overview +This directory contains Python scripts for downloading and time-slicing real-time streamflow data from the USGS, US Army Corps of Engineers and Environment Canada. The time-slicing scripts process the native files into NetCDF files that can be directly used by T-Route for streamflow data assimilation. These scripts originated from the NWM v3 codebase. + +USGS data download: usgs_download/stream_flow_download/parallel_download_master.py +USGS data time-slice: usgs_download/analysis/make_time_slice_from_usgs_waterml.py +USACE data download: ace_download/stream_flow_download/CWMS_download_current.py +USACE data time-slice: ace_download/analysis/make_time_slice_from_ace_xml.py +Env Canada data download: canada_download/parallel_dm_can.py +Env Canada data time-slice: canada_download/make_time_slice_from_canada.py + +# Setting Up Required Python Environment +python -m venv venv-streamflow +source venv-streamflow/bin/activate +pip install --upgrade pip +pip install -r requirements.txt + +# Script Usage +Each script has a help option (-h) for printing usage information. + +The USGS streamflow download script (parallel_download_master.py) runs continuously and downloads the most recent files as they become available. The other streamflow download scripts exit after downloading the latest files available when the script was run. + +parallel_download_master.py -o +make_time_slice_from_usgs_waterml.py -i -o + +CWMS_download_current.py [-h] [-f FILE_FORMAT] site_file output_dir +make_time_slice_from_ace_xml.py -i -o -s + +canadian_flow_retrieval.py -o +make_time_slice_from_canada.py -i -o + +#### Examples #### +python parallel_download_master.py -o ~/usgs_download +python make_time_slice_from_usgs_waterml.py -i ~/usgs_download -o ~/usgs_timeslice + +python parallel_dm_can.py -o ~/canada_download +python make_time_slice_from_canada.py -i ~/canada_download -o ~/canada/timeslice + +python CWMS_download_current.py -f xml site-file.csv ~/usace_download +python make_time_slice_from_ace_xml.py -i ~/usace_download -o ~/usace_timeslice -s site-file.csv diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/analysis.iml b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/analysis.iml new file mode 100644 index 0000000..7158407 --- /dev/null +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/analysis.iml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/misc.xml b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/misc.xml new file mode 100644 index 0000000..7884402 --- /dev/null +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/modules.xml b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/modules.xml new file mode 100644 index 0000000..2e2ca2c --- /dev/null +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/vcs.xml b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/vcs.xml new file mode 100644 index 0000000..78e665f --- /dev/null +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/workspace.xml b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/workspace.xml new file mode 100644 index 0000000..c6d4ba7 --- /dev/null +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/.idea/workspace.xml @@ -0,0 +1,324 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TimeSlice + sitefile + odir + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - $USER_HOME$/.subversion - 125 - - - - - - - - - 1566312790386 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - file://$PROJECT_DIR$/make_time_slice_from_ace_xml.py - 37 - - - file://$PROJECT_DIR$/make_time_slice_from_ace_xml.py - 134 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From e8227899e81cd8af7a7da4a81e60824993b8d742 Mon Sep 17 00:00:00 2001 From: David Gillingham Date: Thu, 14 Nov 2024 16:47:17 +0000 Subject: [PATCH 08/26] NGWPC-4655: Initial docker containers for Lumped_forcings_driver and Forcings_Engine_BMI. --- .../Streamflow_Scripts/environment.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/environment.yml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/environment.yml b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/environment.yml new file mode 100644 index 0000000..7d73f8f --- /dev/null +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/environment.yml @@ -0,0 +1,9 @@ +name: NextGen_Streamflow_Scripts +channels: + - defaults + - anaconda +dependencies: + - python~=3.10.0 + - netCDF4 + - python-dateutil + - pytz \ No newline at end of file From d5bee18dc9c9ef2b2640c21feeb52a3597fd5f93 Mon Sep 17 00:00:00 2001 From: Brian Hurley Date: Mon, 3 Mar 2025 19:16:01 +0000 Subject: [PATCH 09/26] NGWPC-5559: Update USACE timeslicing code to process streamflow observations in JSON --- .../ace_download/analysis/ACE_Observation.py | 117 ++++- .../ace_download/analysis/Observation.py | 9 +- .../ace_download/analysis/TimeSlice.py | 11 +- .../ace_download/analysis/USGS_Observation.py | 430 ------------------ ...ace_xml.py => make_time_slice_from_ace.py} | 32 +- .../CWMS_download_current.py | 5 +- .../CWMS_download_range.py | 1 + .../stream_flow_download/run_usace.sh | 58 ++- 8 files changed, 176 insertions(+), 487 deletions(-) delete mode 100644 ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/USGS_Observation.py rename ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/{make_time_slice_from_ace_xml.py => make_time_slice_from_ace.py} (79%) diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/ACE_Observation.py b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/ACE_Observation.py index e7fa3cd..75ac018 100644 --- a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/ACE_Observation.py +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/ACE_Observation.py @@ -1,13 +1,16 @@ +#!/usr/bin/env python ############################################################################### -# Module name: ACE_Observation +# Module name: ACE_Observation # # # # Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # # # # Initial version date: # # # -# Last modification date: 05/28/2019 # +# Last modification date: 05/28/2019 # # # -# Description: manage data in a ACE CWMS xml file # +# Description: manage data in a ACE CWMS json file # +# # +# 12/11/2024 OWP Add loadCwmsjson() to parse json data format # # # ############################################################################### @@ -15,13 +18,12 @@ import logging from string import * from collections import OrderedDict -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone import dateutil.parser import pytz -#import iso8601 +import json import xml.etree.ElementTree as etree from TimeSlice import TimeSlice -#import Tracer from Observation import Observation from CWMS_Sites import CWMS_Sites @@ -46,21 +48,82 @@ def parseDuration( period ): class ACE_Observation(Observation): """ - Store one USGS WaterML2.0 data + Store one USACE data """ - def __init__(self, cwmsxmlfilename, cwmssites ): + def __init__(self, cwmsxmljsonfilename, cwmssites ): """ Initialize the ACE_Observation object with a given filename """ - self.source = cwmsxmlfilename + self.source = cwmsxmljsonfilename self.timeValueQuality = OrderedDict() self._sites = cwmssites - if cwmsxmlfilename.endswith( '.xml' ): - self.loadCWMSxml( cwmsxmlfilename ) + if cwmsxmljsonfilename.endswith( '.json' ): + self.loadCwmsjson( cwmsxmljsonfilename ) + elif cwmsxmljsonfilename.endswith( '.xml' ): + self.loadCWMSxml( cwmsxmljsonfilename ) else: raise RuntimeError( "FATAL ERROR: Unknow file type: " + \ - cwmsxmfilename ) + cwmsxmljsonfilename ) + + def loadCwmsjson(self, jsonfilename ): + """ + Read real-time discharge data from a given CWMS JSON file + + Input: jsonfilename - the CWMS json filename + """ + try: + json_file = open(jsonfilename) + + # Reads .json file to Python dictionary + json_data = json.load(json_file) + + name = json_data["name"] + officeId = json_data["office-id"] + self.unit = json_data["units"] + + self.stationName = officeId + "." + name + self.stationID = self._sites.getIndex(officeId, name ) + + # Get Discharge timeseries values + totalFcts = len(json_data["values"]) + + #print(f"total FCST size: {totalFcts}") + + for idx in range(totalFcts): + row = json_data['values'][idx] + if len(row) > 0: + #print(f"ROW={row} time={row[0]}") + + ### Convert date-time to datetime from ms + t1 = self.convert_milliseconds_to_iso_format(row[0]) + t = dateutil.parser.parse( t1 ).astimezone(pytz.utc).replace(tzinfo=None) + + self.timeValueQuality[ t ] = ( float(row[1]), \ + self.calculateDataQuality(float(row[2] ) ) ) + + #print( idx, t, self.timeValueQuality[ t ] ) + + self.obvPeriod = list( self.timeValueQuality.keys() )[0], \ + list( self.timeValueQuality.keys() )[-1] + + unitConvertToM3perSec = self.getUnitConvertToM3perSec() + + self.timeValueQuality = dict(map( \ + lambda kv: (kv[0], (kv[1][0] * unitConvertToM3perSec, \ + kv[1][1])), \ + iter( self.timeValueQuality.items()) )) + self.unit = 'm3/s' + + except Exception as e: + raise RuntimeError( "WARNING: parsing JSON error: " + str( e )\ + + ": " + jsonfilename + '. Or Maybe "values" field are empty; ==> ' \ + + jsonfilename + " Skipping ..." ) + + #print(f"{jsonfilename} stationName: {self.stationName} unit={self.unit}") + #for k, v in self.timeValueQuality.items(): + # print(k, v) + def loadCWMSxml(self, xmlfilename ): """ @@ -90,25 +153,28 @@ def loadCWMSxml(self, xmlfilename ): + ": " + xmlfilename + " skipping ..." ) self.stationName = office + '.' + name_1 + #print(f"stationName={self.stationName}") self.obvPeriod = list( self.timeValueQuality.keys() )[0], \ list( self.timeValueQuality.keys() )[-1] unitConvertToM3perSec = self.getUnitConvertToM3perSec() + #print(f"unitConvertToM3perSec={unitConvertToM3perSec}") + self.timeValueQuality = dict(map( \ lambda kv: (kv[0], (kv[1][0] * unitConvertToM3perSec, \ kv[1][1])),\ iter( self.timeValueQuality.items()) )) self.unit = 'm3/s' -# for k, v in self.timeValueQuality.items(): -# print(k, v) + #for k, v in self.timeValueQuality.items(): + # print(k, v) def parseRegularIntervalValues(self, regularInterval): self.unit = regularInterval.get('unit') interval = parseDuration( regularInterval.get('interval') ) - + for seg in regularInterval.findall('segment'): beginTime = \ dateutil.parser.parse( seg.get('first-time')) \ @@ -123,6 +189,7 @@ def parseRegularIntervalValues(self, regularInterval): def parseIrregularIntervalValues(self, irregularInterval): self.unit = irregularInterval.get('unit') + #print(f"irregularInterval Unit={self.unit}") for s in irregularInterval.text.strip().split('\n'): words = s.split(' ') t = dateutil.parser.parse( words[0] ) \ @@ -130,17 +197,27 @@ def parseIrregularIntervalValues(self, irregularInterval): self.timeValueQuality[ t ] = \ ( float(words[1]), \ self.calculateDataQuality(float(words[2] ) ) ) - # print( t, self.timeValueQuality[ t ] ) + #print( t, self.timeValueQuality[ t ] ) def getUnitConvertToM3perSec(self): - if self.unit == 'cfs': + #print(f"self.unit={self.unit}") + if self.unit == 'cfs': unitConvertToM3perSec = 0.028317 - elif self.unit == 'CMS': + elif self.unit == 'CMS': unitConvertToM3perSec = 1.0 - else: + else: raise RuntimeError( "FATAL ERROR: Unit " + self.unit + \ " is not known. ") - return unitConvertToM3perSec + return unitConvertToM3perSec + def calculateDataQuality(self, value ): return 100.0 + + def convert_milliseconds_to_iso_format(self, milliseconds): + """ + Converts milliseconds to ISO 8601 format (e.g., 2016-01-01 06:00:00) + """ + + dt = datetime.fromtimestamp(milliseconds / 1000, tz=timezone.utc) + return dt.strftime("%Y-%m-%d %H:%M:%S") diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py index 2039971..7c84dd9 100644 --- a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python ############################################################################### # Module name: Observation # # @@ -209,9 +210,9 @@ def makeTimeSlice( self, timestamp, timeresolution ): station_time_value_list ) return timeSlice - def makeAllTimeSlices( self, timeresolution, outdir, suffix='usgsTimeSlice.ncdf' ): + def makeAllTimeSlices( self, timeresolution, outdir, suffix='usaceTimeSlice.ncdf' ): """ - Create the time slice NetCDF files for all USGS observations + Create the time slice NetCDF files for all USACE observations Input: timeresolution - resolution outdir - the output directory @@ -221,7 +222,7 @@ def makeAllTimeSlices( self, timeresolution, outdir, suffix='usgsTimeSlice.ncdf' # the time resultions must divide 60 minutes with on remainder if 3600 % timeresolution.seconds != 0: - raise RuntimeError( "FATAL Error: Time slice resolution must " + raise RuntimeError( "FATAL ERROR: Time slice resolution must " "divide 60 minutes with no remainder." ) startTime = datetime( self.timePeriod[ 0 ].year, @@ -234,7 +235,7 @@ def makeAllTimeSlices( self, timeresolution, outdir, suffix='usgsTimeSlice.ncdf' if startTime > self.timePeriod[ 1 ]: raise RuntimeError( \ - "FATAL Error: observation time period wrong! " ) + "FATAL ERROR: observation time period wrong! " ) count = 0 while startTime <= self.timePeriod[ 1 ]: diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/TimeSlice.py b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/TimeSlice.py index 2917441..740ee96 100644 --- a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/TimeSlice.py +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/TimeSlice.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python ############################################################################### # Module name: TimeSlice # # # @@ -8,7 +9,7 @@ # Last modification date: 7/12/2017 # # # # Description: manage a time slice file that contains real-time stream # -# flow data for all USGS stations for a given time stamp # +# flow data for all USACE stations for a given time stamp # # # ############################################################################### import os, sys, time, math @@ -93,7 +94,7 @@ class TimeSlice: """ stationIdStrLen = 15 - stationIdLong_name = "USGS station identifer of length 15" + stationIdLong_name = "USACE station identifer of length 15" timeStrLen = 19 timeUnit = "UTC" timeLong_name = "YYYY-MM-DD_HH:mm:ss UTC" @@ -184,7 +185,7 @@ def getQueryTimes( self ): qtimes.append( calendar.timegm( e[ 1 ].utctimetuple() ) ) return qtimes - def getSliceNCFileName( self, suffix='usgsTimeSlice.ncdf' ): + def getSliceNCFileName( self, suffix='usaceTimeSlice.ncdf' ): """ Get NetCDF file for this time slice Return: A NetCDF filename @@ -206,7 +207,7 @@ def getDischargeQuality( self ): dq.append( e[ 3 ] ) return dq - def toNetCDF( self, outputdir = './', suffix='usgsTimeSlice.ncdf' ): + def toNetCDF( self, outputdir = './', suffix='usaceTimeSlice.ncdf' ): """ Write the time slice to a NetCDF file Input: outputdir - the directory where to write the NetCDF @@ -298,7 +299,7 @@ def fromNetCDF( self, ncfilename ): quality = nc_fid.variables[ 'discharge_quality'][ : ] # for s, d, q in zip( stations, discharge, queryTime ): -# print 'USGS.' + s.rstrip(), d, \ +# print 'USACE.' + s.rstrip(), d, \ # datetime.utcfromtimestamp( q ).isoformat(), \ # datetime.utcfromtimestamp( q ).tzname(), \ # q diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/USGS_Observation.py b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/USGS_Observation.py deleted file mode 100644 index 48e65f2..0000000 --- a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/USGS_Observation.py +++ /dev/null @@ -1,430 +0,0 @@ -############################################################################### -# Module name: USGS_Observation -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 12/20/2017 # -# # -# Description: manage data in a USGS WaterXML 2.0 file # -# # -############################################################################### - -import os, sys, time, csv -import logging -from string import * -from datetime import datetime, timedelta -import dateutil.parser -import pytz -#import iso8601 -import xml.etree.ElementTree as etree -from TimeSlice import TimeSlice -#import Tracer -from Observation import Observation - - -class USGS_Observation(Observation): - """ - Store one USGS WaterML2.0 data - """ - def __init__(self, waterml2orcsvfilename ): - """ - Initialize the USGS_Observation object with a given - filename - """ - self.source = waterml2orcsvfilename - if waterml2orcsvfilename.endswith( '.xml' ): - self.loadWaterML2( waterml2orcsvfilename ) - elif waterml2orcsvfilename.endswith( '.csv' ): - self.loadCSV( waterml2orcsvfilename ) - else: - raise RuntimeError( "FATAL ERROR: Unknow file type: " + \ - waterml2orcsvfilename ) - - - def loadWaterML2(self, waterml2filename ): - """ - Read real-time stream flow data from a given WaterML 2.0 file - by parsing the WaterML 2.0 file - - Input: waterml2filename - the WaterML 2.0 filename - """ - try: - obvwml = etree.parse( waterml2filename ) - root= obvwml.getroot() - identifier = root.find(\ - '{http://www.opengis.net/gml/3.2}identifier') - #remove 'USGS.' from stationID - self._stationID = identifier.text[5:] - - self._stationName = \ - root.find('{http://www.opengis.net/gml/3.2}name').text - self._generationTime = dateutil.parser.parse(\ - root.find('{http://www.opengis.net/waterml/2.0}metadata')\ - .find('{http://www.opengis.net/waterml/2.0}DocumentMetadata')\ - .find('{http://www.opengis.net/waterml/2.0}generationDate')\ - .text ).astimezone(pytz.utc).replace(tzinfo=None) - timePeriod = root.find(\ - '{http://www.opengis.net/waterml/2.0}observationMember')\ - .find('{http://www.opengis.net/om/2.0}OM_Observation')\ - .find( '{http://www.opengis.net/om/2.0}phenomenonTime')\ - .find('{http://www.opengis.net/gml/3.2}TimePeriod') - beginTime = timePeriod.find(\ - '{http://www.opengis.net/gml/3.2}beginPosition').text - endTime = timePeriod.find(\ - '{http://www.opengis.net/gml/3.2}endPosition').text - self._obvPeriod = dateutil.parser.parse( beginTime )\ - .astimezone(pytz.utc).replace(tzinfo=None), \ - dateutil.parser.parse( endTime )\ - .astimezone(pytz.utc).replace(tzinfo=None) - - uom = root.find(\ - '{http://www.opengis.net/waterml/2.0}observationMember')\ - .find('{http://www.opengis.net/om/2.0}OM_Observation')\ - .find('{http://www.opengis.net/om/2.0}result')\ - .find('{http://www.opengis.net/waterml/2.0}MeasurementTimeseries')\ - .find('{http://www.opengis.net/waterml/2.0}defaultPointMetadata')\ - .find('{http://www.opengis.net/waterml/2.0}DefaultTVPMeasurementMetadata')\ - .find('{http://www.opengis.net/waterml/2.0}uom') - - self._unit = uom.get( '{http://www.w3.org/1999/xlink}title') - - if self._unit == 'ft3/s': - unitConvertToM3perSec = 0.028317 - elif self._unit == 'm3/s': - unitConvertToM3perSec = 1.0 - else: - raise RuntimeError( "FATAL ERROR: Unit " + self._unit + \ - " is not known. ") - - self._unit == 'm3/s' - - measurementTS = root.find(\ - '{http://www.opengis.net/waterml/2.0}observationMember')\ - .find('{http://www.opengis.net/om/2.0}OM_Observation')\ - .find('{http://www.opengis.net/om/2.0}result')\ - .find('{http://www.opengis.net/waterml/2.0}MeasurementTimeseries') - - qualifier1 = measurementTS.find( \ - '{http://www.opengis.net/waterml/2.0}defaultPointMetadata')\ - .find( \ - '{http://www.opengis.net/waterml/2.0}DefaultTVPMeasurementMetadata')\ - .find( \ - '{http://www.opengis.net/waterml/2.0}qualifier')\ - .find( \ - '{http://www.opengis.net/swe/2.0}Category')\ - .find( \ - '{http://www.opengis.net/swe/2.0}value').text - - self._timeValueQuality = dict() - - for point in measurementTS.findall(\ - '{http://www.opengis.net/waterml/2.0}point'): - valuetime = point.find(\ - '{http://www.opengis.net/waterml/2.0}MeasurementTVP')\ - .find('{http://www.opengis.net/waterml/2.0}time') - if valuetime is not None: - value = point.find(\ - '{http://www.opengis.net/waterml/2.0}MeasurementTVP')\ - .find('{http://www.opengis.net/waterml/2.0}value') - - pointmetadata = point.find(\ - '{http://www.opengis.net/waterml/2.0}MeasurementTVP')\ - .find('{http://www.opengis.net/waterml/2.0}metadata') - - qualifier2 = '' - if pointmetadata is not None: - measurementMetadataQualifiers = pointmetadata.find(\ - '{http://www.opengis.net/waterml/2.0}TVPMeasurementMetadata')\ - .findall('{http://www.opengis.net/waterml/2.0}qualifier') - - if len( measurementMetadataQualifiers ) > 0: - qualifier1 = measurementMetadataQualifiers[ 0 ].find(\ - '{http://www.opengis.net/swe/2.0}Category')\ - .find( \ - '{http://www.opengis.net/swe/2.0}value').text - - if len( measurementMetadataQualifiers ) > 1: - qualifier2 = measurementMetadataQualifiers[ 1 ].find(\ - '{http://www.opengis.net/swe/2.0}Category')\ - .find( \ - '{http://www.opengis.net/swe/2.0}value').text - - isValueNull = value.get(\ - '{http://www.w3.org/2001/XMLSchema-instance}nil') - - if isValueNull: - if isValueNull == "true": - self._timeValueQuality[ dateutil.parser.parse( valuetime.text )\ - .astimezone(pytz.utc).replace(tzinfo=None)] = \ - ( -999999.0, 0) # 0 is the quality - else: - - dataquality = self.calculateDataQuality(\ - float( value.text ) * unitConvertToM3perSec,\ - qualifier1, qualifier2 ) - - self._timeValueQuality[ dateutil.parser.parse( valuetime.text )\ - .astimezone(pytz.utc).replace(tzinfo=None)] = \ - ( float( value.text ) * unitConvertToM3perSec,\ - dataquality ) - else: - - dataquality = self.calculateDataQuality(\ - float( value.text ) * unitConvertToM3perSec,\ - qualifier1, qualifier2 ) - self._timeValueQuality[ dateutil.parser.parse( valuetime.text )\ - .astimezone(pytz.utc).replace(tzinfo=None)] = \ - ( float( value.text ) * unitConvertToM3perSec,\ - dataquality ) - - except Exception as e: - raise RuntimeError( "WARNING: parsing water XML error: " + str( e )\ - + ": " + waterml2filename + " skipping ..." ) - - self.obvPeriod = self._obvPeriod - self.stationName = self._stationName - self.stationID = self._stationID - self.unit = self._unit - self.timeValueQuality = self._timeValueQuality - - def loadCSV(self, csvfilename ): - """ - Read real-time stream flow data from a given CSV file - by parsing the CSV file - - Input: csvfilename - the CSV filename - """ - - self._timeValueQuality = dict() - with open( csvfilename ) as csvfile: - reader = csv.DictReader( csvfile ) - for row in reader: - dischstr = row['X_00060_00011'] - discharge = float( dischstr ) * 0.028317 # cfs to cms - if row['X_00060_00011'] != '-999999' : - - qualifiers = row['X_00060_00011_cd'].split() - qualifier1 = qualifiers[ 0 ] - if len( qualifiers ) > 1 : - qualifier2 = qualifiers[ 1 ] - else: - qualifier2 = '' - - dataquality = self.calculateDataQuality( \ - discharge, qualifier1, qualifier2 ) - self._timeValueQuality[ datetime.strptime( \ - row[ 'dateTime' ] + ' ' + row[ 'tz_cd' ], \ - '%Y-%m-%d %H:%M:%S %Z' ) ] = \ - ( discharge, dataquality ) - else: - self._timeValueQuality[ datetime.strptime( \ - row[ 'dateTime' ] + ' ' + row[ 'tz_cd' ], \ - '%Y-%m-%d %H:%M:%S %Z' ) ] = \ - ( -999999.0, 0 ) - - self._stationID = row[ 'site_no' ] - - timekeys = sorted( self._timeValueQuality.keys() ) - - self._obvPeriod = timekeys[ 0 ], timekeys[ -1 ] - self._stationName = self._stationID - self._generationTime = timekeys[ 0 ] - self._unit = 'm3/s' - - self.obvPeriod=self._obvPeriod - self.stationName=self._stationID - self.stationID=self._stationID - self.unit=self._unit - self.timeValueQuality=self._timeValueQuality - - def calculateDataQuality(self, value, qualifier1, qualifier2 ): - """ - Calculate the real-time data quality for given qualifier codes - found in the WaterML 2.0 files. - - Input: value - the stream flow value - qualifier1 - the first qualifier - qualifier2 - the second qualifier - - Return: Data quality value - """ -# -#%STATUS_CODES = -# ( -# '--' => 'Parameter not determined', -# '***' => 'Temporarily unavailable', -# 'Bkw' => 'Flow affected by backwater', -# 'Dis' => 'Data-collection discontinued', -# 'Dry' => 'Dry', -# 'Eqp' => 'Equipment malfunction', -# 'Fld' => 'Flood damage', -# 'Ice' => 'Ice affected', -# 'Mnt' => 'Maintenance in progress', -# 'Pr' => 'Partial-record site', -# 'Rat' => 'Rating being developed or revised', -# 'Ssn' => 'Parameter monitored seasonally', -# 'ZFl' => 'Zero flow', -# ); -# -#Also "approval" codes applicable to both UV and DV data: -# -#%DATA_AGING_CODES = -# ( -# 'P' => ['0', 'P', 'Provisional data subject to revision.'], -# 'A' => ['0', 'A', 'Approved for publication -- Processing and review -#completed.'], -# ); -# -# -#There are also unit value quality codes the vast majority of which you should never see. The ones in red below "may" be the only one you can expect to see in the public view: -# -#%UV_REMARKS = -# ( -# # -- Threshold flags -# 'H' => ['1', 'H', 'Value exceeds "very high" threshold.'], -# 'h' => ['1', 'h', 'Value exceeds "high" threshold.'], -# 'l' => ['1', 'l', 'Value exceeds "low" threshold.'], -# 'L' => ['1', 'L', 'Value exceeds "very low" threshold.'], -# 'I' => ['1', 'I', 'Value exceeds "very rapid increase" threshold.'], -# 'i' => ['1', 'i', 'Value exceeds "rapid increase" threshold.'], -# 'd' => ['1', 'd', 'Value exceeds "rapid decrease" threshold.'], -# 'D' => ['1', 'D', 'Value exceeds "very rapid decrease" threshold.'], -# 'T' => ['1', 'T', 'Value exceeds "standard difference" threshold.'], -# -# # -- Source Flags -# 'o' => ['1', 'o', 'Value was observed in the field.'], -# 'a' => ['1', 'a', 'Value is from paper tape.'], -# 's' => ['1', 's', 'Value is from a DCP.'], -# '~' => ['1', '~', 'Value is a system interpolated value.'], -# 'g' => ['1', 'g', 'Value recorded by data logger.'], -# 'c' => ['1', 'c', 'Value recorded on strip chart.'], -# 'p' => ['1', 'p', 'Value received by telephone transmission.'], -# 'r' => ['1', 'r', 'Value received by radio transmission.'], -# 'f' => ['1', 'f', 'Value received by machine readable file.'], -# 'z' => ['1', 'z', 'Value received from backup recorder.'], -# -# # -- Processing Status Flags -# '*' => ['1', '*', 'Value was edited by USGS personnel.'], -# -# # -- Other Flags (historical UVs only) -# 'S' => ['1', 'S', 'Value could be a result of a stuck recording instrument.'], -# 'M' => ['1', 'M', 'Redundant satellite value doesnt match original value.'], -# 'Q' => ['1', 'Q', 'Value was a satellite random transmission.'], -# 'V' => ['1', 'V', 'Value was an alert value.'], -# -# # -- UV remarks -# '&' => ['1', '&', 'Value was computed from affected unit values by unspecified reasons.'], -# '<' => ['0', '<', 'Actual value is known to be less than reported value.'], -# '>' => ['0', '>', 'Actual value is known to be greater than reported value.'], -# 'C' => ['1', 'C', 'Value is affected by ice at the measurement site.'], -# 'B' => ['1', 'B', 'Value is affected by backwater at the measurement site.'], -# 'E' => ['0', 'e', 'Value was computed from estimated unit values.'], -# 'e' => ['0', 'e', 'Value has been estimated.'], -# 'F' => ['1', 'F', 'Value was modified due to automated filtering.'], -# 'K' => ['1', 'K', 'Value is affected by instrument calibration drift.'], -# 'R' => ['1', 'R', 'Rating is undefined for this value.'], -# 'X' => ['1', 'X', 'Value is erroneous and will not be used.'], -# ); -# -#Some daily value specific codes: -# -#%DV_REMARKS = -# ( -# '&' => ['1', '&', 'Value was computed from affected unit values by unspecified reasons.'], -# '1' => ['1', '1', 'Daily value is write protected without any remark code to be printed.'], -# '2' => ['1', '2', 'Remark is suppressed and will not print on a publication daily values table.'], -# '<' => ['0', '<', 'Actual value is known to be less than reported value.'], -# '>' => ['0', '>', 'Actual value is known to be greater than reported value.'], -# 'E' => ['0', 'e', 'Value was computed from estimated unit values.'], -# 'e' => ['0', 'e', 'Value has been estimated.'], -# ); -# -#I think we should set the ?e? (estimated) to 50% since we don?t know how the estimation was done, set the ?&? to 25%, and may be the ?*? to 5% since the data could be incomplete. The remainder set to 0 for the time being. That should wrap up this QC at this stage. We can always revisit them in the future as we progress. -# -#I made contact today with the USGS staff on location here and inform them that I will visit them next week for question about the rating curve gages. May be we can visit them together. -# -# -# -#Cheers, -# -# -# -#Oubeid -# -#Let?s stick with a weight of ?0? then for ?***?. I don?t have a lot of confidence on the data appended with that code. -# -# -# -#Cheers, -# -# -# -#Oubeid -# -# -#Date: Wed, 18 Nov 2015 14:41:13 -0700 -#From: James McCreight -#To: Zhengtao Cui - NOAA Affiliate , -# David Gochis , -# Brian Cosgrove - NOAA Federal -#Subject: preprocessing followup -#Parts/Attachments: -# 1 OK 33 lines Text (charset: UTF-8) -# 2 Shown ~28 lines Text (charset: UTF-8) -#---------------------------------------- -# -#Zhengtao-Great to talk to you about the code today. -#Here's the recap of things to do: -# * unit conversion to cms for the csv code -# * set quality to zero instead of raising errors in the quality code -# * use an upper limit for flow: 90,000 cms (see note below). -# * exclude 0 (?) as a valid flow -#Some notes on the last two bullets: -### JLM limit maximum flows to approx twice what I believe is the largest -#gaged flow -### on MS river *2 -### http://nwis.waterdata.usgs.gov/nwis/peak?site_no=07374000&agency_cd=USGS&format=h -#tml [nwis.waterdata.usgs.gov] -### baton rouge 1945: 1,473,000cfs=41,711cms -### multiply it roughly by 2 -#dataDf$quality[which(dataDf$discharge.cms > 0 & dataDf$discharge.cms < -#90000)] <- 100 -# -#As the above shows, I'm really torn about using zero values from NWIS. I'm -#inclined not to until we develop more advanced QC procedures. -# -#Thanks, -# -#James - - quality = 0 - - if value <= 0 or value > 90000 : # see James' email on Nov. 18 above - quality = 0 - else : - if ( qualifier2 and len( qualifier2 ) > 0 ) : - if qualifier1 == 'A' or qualifier1 == 'P' : - if qualifier2 == 'e' : - quality = 50 - elif qualifier2 == '&' : - quality = 25 - elif qualifier2 == '*' : - quality = 5 - elif qualifier2 == 'A' : - quality = 100 - elif qualifier2 == 'P' : - quality = 100 - else: - quality = 0 -# else : -# raise RuntimeError( "ERROR: unknow qualifier: " + \ -# qualifier1 ) - else: - if qualifier1 == 'A' or qualifier1 == 'P' : - quality = 100 -# else: -# raise RuntimeError( "ERROR: unknow qualifier: " + \ -# qualiifer1 ) - return quality diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace_xml.py b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace.py similarity index 79% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace_xml.py rename to ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace.py index 9bee219..c5161f3 100644 --- a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace_xml.py +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace.py @@ -1,6 +1,6 @@ #! /usr/bin/env python ############################################################################### -# File name: make_time_slice_from_ace_xml.py # +# File name: make_time_slice_from_ace.py # # # # Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # # # @@ -11,6 +11,8 @@ # Description: The driver to create NetCDF time slice files from Army Crops # # of Engineers real-time observations # # # +# 12/11/2024 OWP Update code to use JSON file instead of XML # +# # ############################################################################### import os, sys, time, urllib, getopt @@ -18,7 +20,6 @@ from string import * import xml.etree.ElementTree as etree from datetime import datetime, timedelta -from USGS_Observation import USGS_Observation from TimeSlice import TimeSlice from Observation import Observation, All_Observations from CWMS_Sites import CWMS_Sites @@ -27,7 +28,7 @@ #import Tracer """ - The driver to parse downloaded ACE XML observations and + The driver to parse downloaded ACE JSON observations and create time slices and write to NetCDF files Author: Zhengtao Cui (Zhengtao.Cui@noaa.gov) Date: May 30, 2019 @@ -40,27 +41,27 @@ def main(argv): try: opts, args = getopt.getopt(argv,"hi:o:s:",["idir=", "odir=", "sites="]) except getopt.GetoptError: - print( 'make_time_slice_from_ace_xml.py -i -o -s ' ) + print( 'make_time_slice_from_ace.py -i -o -s ' ) sys.exit(2) for opt, arg in opts: if opt == '-h': print( \ - 'make_time_slice_from_ace_xml.py -i -o -s ' ) + 'make_time_slice_from_ace.py -i -o -s ' ) sys.exit() elif opt in ('-i', "--idir"): inputdir = arg if not os.path.exists( inputdir ): - raise RuntimeError( 'FATAL Error: inputdir ' + \ + raise RuntimeError( 'FATAL ERROR: inputdir ' + \ inputdir + ' does not exist!' ) elif opt in ('-o', "--odir" ): outputdir = arg if not os.path.exists( outputdir ): - raise RuntimeError( 'FATAL Error: outputdir ' + \ + raise RuntimeError( 'FATAL ERROR: outputdir ' + \ outputdir + ' does not exist!' ) elif opt in ('-s', "--sites" ): sitefile = arg if not os.path.exists( sitefile ): - raise RuntimeError( 'FATAL Error: sitefile ' + \ + raise RuntimeError( 'FATAL ERROR: sitefile ' + \ sitefile + ' does not exist!' ) return (inputdir, outputdir, sitefile) @@ -90,7 +91,7 @@ def main(argv): logger.info( 'Site file is "' + sitefile + '"') # -# Load ACE observed XML discharge data +# Load ACE observed JSON discharge data # try: @@ -103,7 +104,8 @@ def main(argv): " is not a directory or does not exist. ") for file in os.listdir( indir ): - if file.endswith( ".xml" ): + # Process json file if file size is greater than 2 bytes (not empty) + if file.endswith( ".json" ) and os.path.getsize(indir+"/"+file) > 2: logger.info( 'Reading ' + indir + '/' + file + ' ... ' ) try: obvs.append( ACE_Observation( \ @@ -111,10 +113,12 @@ def main(argv): except Exception as e: logger.warning( repr( e ), exc_info=True ) continue + else: + logger.warning('Skip ' + indir + '/' + file + ' because file is empty (2 bytes filesize).\n') if not obvs: raise EmptyDirOrFileException( "Input directory " + indir + \ - " has no USACE xml files or the xml files are empty!") + " has no USACE json files or the json files are empty!") allobvs = All_Observations( obvs ) @@ -123,13 +127,13 @@ def main(argv): sys.exit(0) except Exception as e: - logger.error("Failed to load USACE XML files: " + str(e), exc_info=True) + logger.error("Failed to load USACE JSON files: " + str(e), exc_info=True) sys.exit(3) -logger.info( 'Earliest time in USACE XML: ' + \ +logger.info( 'Earliest time in USACE JSON: ' + \ allobvs.timePeriodForAll()[0].isoformat() ) -logger.info( 'Latest time in USACE XML: ' + \ +logger.info( 'Latest time in USACE JSON: ' + \ allobvs.timePeriodForAll()[1].isoformat() ) # diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_current.py b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_current.py index e2dd432..b797ead 100644 --- a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_current.py +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_current.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python import os import datetime @@ -41,7 +42,7 @@ def main(): if output_format == "json": json_data = get_data(downloader, row["office"], row["gage"], "PT-48h", "json") with open(output_path+"/"+row["usace_gage_id"]+".json","w") as outfile: - json.dump(json_data,outfile) + json.dump(json_data,outfile,indent=2) print( datetime.datetime.now(), end = " --- " ) print( 'Successfully downloaded ' + \ output_path+"/"+row["usace_gage_id"]+".json" + "!" ) @@ -52,7 +53,7 @@ def main(): outfile.write(xml_data) except Exception as e: print( datetime.datetime.now(), end = " --- " ) - print( 'Warning: Failed writting ' + \ + print( 'WARNING: Failed writting ' + \ output_path+"/"+row["usace_gage_id"]+".xml" + "!" ) else: print( datetime.datetime.now(), end = " --- " ) diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_range.py b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_range.py index f02044d..340ddfd 100644 --- a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_range.py +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_range.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python # from datetime import datetime import csv diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace.sh b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace.sh index 0a85e26..fb9d7a5 100644 --- a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace.sh +++ b/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace.sh @@ -7,32 +7,38 @@ # # # Initial version date: # # # -# Last modification date: 2/11/2020 # +# Last modification date: 05/2022 # # # # # # Description: Run the US SACE Stream Flow scripts # # Supported by the NWS Water Predication Center # # # +# 12/18/2024 OWP Download json format datafiles instead of xml # +# # ############################################################################### -module unload python -module load python -module list +#module unload python +#module load python +#module list #log=$DBNROOT/user/usgs_download/parallel_download_master.log -log=/gpfs/hps3/ptmp/Zhengtao.Cui/usace_download.log +#log=/gpfs/hps3/ptmp/Zhengtao.Cui/usace_download.log +#OUTDIR=/gpfs/hps3/ptmp/Zhengtao.Cui/ace_json_test SITE_FILE=./site-file.csv -OUTDIR=/gpfs/hps3/ptmp/Zhengtao.Cui/ace_xml_test +OUTDIR=$DCOMROOT/usace_streamflow + +log=$DBNROOT/log/usace_download.log.`date -u +%Y%m%d` +touchfiles=("$OUTDIR") + +cd $DBNROOT/user/usace_download if [ ! -e ${OUTDIR} ]; then mkdir -p ${OUTDIR}; fi -USACE_DOWNLOAD_MASTER=./CWMS_download_current.py +USACE_DOWNLOAD_MASTER=$DBNROOT/user/usace_download/CWMS_download_current.py DATE=`/bin/date +%H:%M` -cd /gpfs/hps3/nwc/noscrub/Zhengtao.Cui/nwtest/nwm.vX.X/ush/ace_download/stream_flow_download - RESETLOGAT="05:28" if [ "$DATE" = "$RESETLOGAT" ] @@ -42,13 +48,41 @@ then fi # Check if process is already running with this package -if pgrep -f ${USACE_DOWNLOAD_MASTER} > /dev/null 2>&1 +if pgrep -f CWMS_download_current.py > /dev/null 2>&1 then - echo "Message: ${USACE_DOWNLOAD_MASTER} package is running" + echo "Message: ${USACE_DOWNLOAD_MASTER} package is running" + for f in ${touchfiles[@]} + do + timediff=$((`date +%s` - `stat -c "%Y" $f`)) + if [ $timediff -gt $(( 3600 * 2 )) ] #three hours + then + echo "Message: touch file $f is older than 3 hours" + echo "Message: restart CWMS_download_current.py" + kill -9 `pgrep -f CWMS_download_current.py` + nohup python3 ${USACE_DOWNLOAD_MASTER} -f json ${SITE_FILE} $OUTDIR >> $log 2>&1 & + echo "Message: done restart USACE CWMS_download_current.py" + break + fi + + done else echo "Message: ${USACE_DOWNLOAD_MASTER} package NOT running" - nohup python $USACE_DOWNLOAD_MASTER -f xml ${SITE_FILE} ${OUTDIR} >> $log 2>&1 & + nohup python3 $USACE_DOWNLOAD_MASTER -f json ${SITE_FILE} ${OUTDIR} >> $log 2>&1 & echo "Message: ${USACE_DOWNLOAD_MASTER} package started" fi + +## Monitoring adjusted to check for non-zero byte files 09/07/2021 +f=$(ls -ltr $OUTDIR | tail -1 | awk '{print $9}') +if [ -s $OUTDIR/${f} ]; +then + #file is larger than 0-byte + most_recent=`ls -ltr $OUTDIR | tail -1 | awk '{print $6" "$7" "$8}'` + touch -d "$most_recent" $DBNROOT/tmp/usace_streamflow +else + echo "Files are empty. Check to see if the website is down." >> $log +fi + + +## exit From 79852a560a17ba2ae77d8c2ab91d18ca9d9b7829 Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Tue, 23 Jun 2026 16:51:06 -0400 Subject: [PATCH 10/26] Fix folder location path for Streamflow_Scripts --- .../Streamflow_Scripts/README.md | 0 .../Streamflow_Scripts/ace_download/analysis/ACE_Observation.py | 0 .../Streamflow_Scripts/ace_download/analysis/CWMS_Sites.py | 0 .../ace_download/analysis/EmptyDirOrFileException.py | 0 .../Streamflow_Scripts/ace_download/analysis/Observation.py | 0 .../Streamflow_Scripts/ace_download/analysis/TimeSlice.py | 0 .../Streamflow_Scripts/ace_download/analysis/Tracer.py | 0 .../Streamflow_Scripts/ace_download/analysis/crontab.txt | 0 .../ace_download/analysis/make_time_slice_from_ace.py | 0 .../Streamflow_Scripts/ace_download/analysis/nwmcopy.sh | 0 .../ace_download/analysis/old/CWMS_outflow_sites_263_index.csv | 0 .../ace_download/analysis/old/bsub_timeslice.bash | 0 .../analysis/old/make_time_slice_from_usgs_waterml.py | 0 .../ace_download/analysis/old/test_ace_observation.py | 0 ...F_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml | 0 .../analysis/old/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml | 0 .../ace_download/analysis/old/time_slice_job_cray.bsub | 0 .../Streamflow_Scripts/ace_download/analysis/site-file.csv | 0 .../Streamflow_Scripts/ace_download/analysis/test_CWMS_Sites.py | 0 .../ace_download/stream_flow_download/CWMS_download_current.py | 0 .../ace_download/stream_flow_download/CWMS_download_range.py | 0 .../ace_download/stream_flow_download/CWMS_historic_download.py | 0 .../ace_download/stream_flow_download/gov/__init__.py | 0 .../ace_download/stream_flow_download/gov/noaa/__init__.py | 0 .../ace_download/stream_flow_download/gov/noaa/nwc/__init__.py | 0 .../stream_flow_download/gov/noaa/nwc/cwmstools/CWMSDownloader.py | 0 .../stream_flow_download/gov/noaa/nwc/cwmstools/__init__.py | 0 .../ace_download/stream_flow_download/run_usace.sh | 0 .../ace_download/stream_flow_download/site-file.csv | 0 .../Streamflow_Scripts/canada_download/EmptyDirOrFileException.py | 0 .../Streamflow_Scripts/canada_download/TimeSliceC.py | 0 .../Streamflow_Scripts/canada_download/WSC_Observation.py | 0 .../Streamflow_Scripts/canada_download/canadian_flow_retrieval.py | 0 .../canada_download/how_data_assimilation_works.txt | 0 .../canada_download/make_time_slice_from_canada.py | 0 .../Streamflow_Scripts/canada_download/parallel_dm_can.py | 0 .../Streamflow_Scripts/canada_download/run_canflow.sh | 0 .../Streamflow_Scripts/environment.yml | 0 .../Streamflow_Scripts/requirements.txt | 0 .../Streamflow_Scripts/usgs_download/analysis/ACE_Observation.py | 0 .../Streamflow_Scripts/usgs_download/analysis/CWMS_Sites.py | 0 .../usgs_download/analysis/CWMS_outflow_sites_263_index.csv | 0 .../usgs_download/analysis/EmptyDirOrFileException.py | 0 .../Streamflow_Scripts/usgs_download/analysis/Observation.py | 0 .../Streamflow_Scripts/usgs_download/analysis/TimeSlice.py | 0 .../Streamflow_Scripts/usgs_download/analysis/Tracer.py | 0 .../Streamflow_Scripts/usgs_download/analysis/USGS_Observation.py | 0 .../Streamflow_Scripts/usgs_download/analysis/bsub_timeslice.bash | 0 .../Streamflow_Scripts/usgs_download/analysis/crontab.txt | 0 .../usgs_download/analysis/make_time_slice_from_ace_xml.py | 0 .../usgs_download/analysis/make_time_slice_from_usgs_waterml.py | 0 .../Streamflow_Scripts/usgs_download/analysis/nwmcopy.sh | 0 .../usgs_download/analysis/runTestUSGSTimeslice.sh | 0 .../Streamflow_Scripts/usgs_download/analysis/site-file.csv | 0 .../Streamflow_Scripts/usgs_download/analysis/test_CWMS_Sites.py | 0 .../usgs_download/analysis/test_ace_observation.py | 0 .../usgs_download/analysis/test_data/JSON/01122500.json | 0 .../usgs_download/analysis/test_data/JSON/0208111310.json | 0 .../usgs_download/analysis/test_data/JSON/02186645.json | 0 .../usgs_download/analysis/test_data/JSON/02289060.json | 0 .../usgs_download/analysis/test_data/JSON/07027005.json | 0 .../usgs_download/analysis/test_data/JSON/08329918.json | 0 .../usgs_download/analysis/test_data/JSON/09423000.json | 0 .../usgs_download/analysis/test_data/JSON/16296500.json | 0 ...F_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml | 0 .../analysis/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml | 0 .../usgs_download/analysis/test_data/XML/01122500.xml | 0 .../usgs_download/analysis/test_data/XML/0208111310.xml | 0 .../usgs_download/analysis/test_data/XML/02186645.xml | 0 .../usgs_download/analysis/test_data/XML/02289060.xml | 0 .../usgs_download/analysis/test_data/XML/07027005.xml | 0 .../usgs_download/analysis/test_data/XML/08329918.xml | 0 .../usgs_download/analysis/test_data/XML/09423000.xml | 0 .../usgs_download/analysis/test_data/XML/16296500.xml | 0 .../usgs_download/analysis/test_data/diffDischargeQuality.sh | 0 .../usgs_download/analysis/time_slice_job_cray.bsub | 0 .../Streamflow_Scripts/usgs_download/exnwm_usgs_timeslices.sh | 0 .../usgs_download/stream_flow_download/README.TXT | 0 .../usgs_download/stream_flow_download/fetch_sites.py | 0 .../stream_flow_download/find_changed_site_for_huc.py | 0 .../stream_flow_download/parallel_download_master.py | 0 .../usgs_download/stream_flow_download/run_usgs.sh | 0 .../usgs_download/stream_flow_download/usgs_iv_retrieval.py | 0 83 files changed, 0 insertions(+), 0 deletions(-) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/README.md (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/ACE_Observation.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/CWMS_Sites.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/EmptyDirOrFileException.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/Observation.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/TimeSlice.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/Tracer.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/crontab.txt (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/nwmcopy.sh (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/old/CWMS_outflow_sites_263_index.csv (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/old/bsub_timeslice.bash (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/old/make_time_slice_from_usgs_waterml.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/old/test_ace_observation.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/old/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/old/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/old/time_slice_job_cray.bsub (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/site-file.csv (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/analysis/test_CWMS_Sites.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_current.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_range.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_historic_download.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/stream_flow_download/gov/__init__.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/__init__.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/__init__.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/CWMSDownloader.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/__init__.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/stream_flow_download/run_usace.sh (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/ace_download/stream_flow_download/site-file.csv (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/canada_download/TimeSliceC.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/canada_download/WSC_Observation.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/canada_download/how_data_assimilation_works.txt (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/canada_download/parallel_dm_can.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/canada_download/run_canflow.sh (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/environment.yml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/requirements.txt (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/ACE_Observation.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/CWMS_Sites.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/CWMS_outflow_sites_263_index.csv (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/EmptyDirOrFileException.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/Observation.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/TimeSlice.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/Tracer.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/USGS_Observation.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/bsub_timeslice.bash (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/crontab.txt (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_ace_xml.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_usgs_waterml.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/nwmcopy.sh (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/runTestUSGSTimeslice.sh (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/site-file.csv (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_CWMS_Sites.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_ace_observation.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/01122500.json (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/0208111310.json (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/02186645.json (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/02289060.json (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/07027005.json (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/08329918.json (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/09423000.json (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/16296500.json (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/XML/01122500.xml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/XML/0208111310.xml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02186645.xml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02289060.xml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/XML/07027005.xml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/XML/08329918.xml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/XML/09423000.xml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/XML/16296500.xml (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/test_data/diffDischargeQuality.sh (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/analysis/time_slice_job_cray.bsub (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/exnwm_usgs_timeslices.sh (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/stream_flow_download/README.TXT (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/stream_flow_download/fetch_sites.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/stream_flow_download/find_changed_site_for_huc.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/stream_flow_download/parallel_download_master.py (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/stream_flow_download/run_usgs.sh (100%) rename {ngwpc/nwm-data-assimilation/data_assimilation_engine => data_assimilation_engine}/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_iv_retrieval.py (100%) diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/README.md b/data_assimilation_engine/Streamflow_Scripts/README.md similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/README.md rename to data_assimilation_engine/Streamflow_Scripts/README.md diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/ACE_Observation.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/ACE_Observation.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/ACE_Observation.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/ACE_Observation.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/CWMS_Sites.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/CWMS_Sites.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/CWMS_Sites.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/CWMS_Sites.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/EmptyDirOrFileException.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/EmptyDirOrFileException.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/EmptyDirOrFileException.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/EmptyDirOrFileException.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/TimeSlice.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/TimeSlice.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/TimeSlice.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/TimeSlice.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Tracer.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Tracer.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Tracer.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Tracer.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/crontab.txt b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/crontab.txt similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/crontab.txt rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/crontab.txt diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/nwmcopy.sh b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/nwmcopy.sh similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/nwmcopy.sh rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/nwmcopy.sh diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/CWMS_outflow_sites_263_index.csv b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/CWMS_outflow_sites_263_index.csv similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/CWMS_outflow_sites_263_index.csv rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/CWMS_outflow_sites_263_index.csv diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/bsub_timeslice.bash b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/bsub_timeslice.bash similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/bsub_timeslice.bash rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/bsub_timeslice.bash diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/make_time_slice_from_usgs_waterml.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/make_time_slice_from_usgs_waterml.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/make_time_slice_from_usgs_waterml.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/make_time_slice_from_usgs_waterml.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_ace_observation.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_ace_observation.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_ace_observation.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_ace_observation.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/time_slice_job_cray.bsub b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/time_slice_job_cray.bsub similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/time_slice_job_cray.bsub rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/time_slice_job_cray.bsub diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/site-file.csv b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/site-file.csv similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/site-file.csv rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/site-file.csv diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/test_CWMS_Sites.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/test_CWMS_Sites.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/test_CWMS_Sites.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/test_CWMS_Sites.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_current.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_current.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_current.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_current.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_range.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_range.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_range.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_download_range.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_historic_download.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_historic_download.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_historic_download.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_historic_download.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/__init__.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/__init__.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/__init__.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/__init__.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/__init__.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/__init__.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/__init__.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/__init__.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/__init__.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/__init__.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/__init__.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/__init__.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/CWMSDownloader.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/CWMSDownloader.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/CWMSDownloader.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/CWMSDownloader.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/__init__.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/__init__.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/__init__.py rename to data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/__init__.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace.sh b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace.sh similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace.sh rename to data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace.sh diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/site-file.csv b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/site-file.csv similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/site-file.csv rename to data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/site-file.csv diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py rename to data_assimilation_engine/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py rename to data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/WSC_Observation.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/WSC_Observation.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/WSC_Observation.py rename to data_assimilation_engine/Streamflow_Scripts/canada_download/WSC_Observation.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py rename to data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/how_data_assimilation_works.txt b/data_assimilation_engine/Streamflow_Scripts/canada_download/how_data_assimilation_works.txt similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/how_data_assimilation_works.txt rename to data_assimilation_engine/Streamflow_Scripts/canada_download/how_data_assimilation_works.txt diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py rename to data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/parallel_dm_can.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/parallel_dm_can.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/parallel_dm_can.py rename to data_assimilation_engine/Streamflow_Scripts/canada_download/parallel_dm_can.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/run_canflow.sh b/data_assimilation_engine/Streamflow_Scripts/canada_download/run_canflow.sh similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/canada_download/run_canflow.sh rename to data_assimilation_engine/Streamflow_Scripts/canada_download/run_canflow.sh diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/environment.yml b/data_assimilation_engine/Streamflow_Scripts/environment.yml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/environment.yml rename to data_assimilation_engine/Streamflow_Scripts/environment.yml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/requirements.txt b/data_assimilation_engine/Streamflow_Scripts/requirements.txt similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/requirements.txt rename to data_assimilation_engine/Streamflow_Scripts/requirements.txt diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/ACE_Observation.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/ACE_Observation.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/ACE_Observation.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/ACE_Observation.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_Sites.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_Sites.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_Sites.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_Sites.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_outflow_sites_263_index.csv b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_outflow_sites_263_index.csv similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_outflow_sites_263_index.csv rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_outflow_sites_263_index.csv diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/EmptyDirOrFileException.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/EmptyDirOrFileException.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/EmptyDirOrFileException.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/EmptyDirOrFileException.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Observation.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Observation.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Observation.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Observation.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/TimeSlice.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/TimeSlice.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/TimeSlice.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/TimeSlice.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Tracer.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Tracer.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Tracer.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Tracer.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/USGS_Observation.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/USGS_Observation.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/USGS_Observation.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/USGS_Observation.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/bsub_timeslice.bash b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/bsub_timeslice.bash similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/bsub_timeslice.bash rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/bsub_timeslice.bash diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/crontab.txt b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/crontab.txt similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/crontab.txt rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/crontab.txt diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_ace_xml.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_ace_xml.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_ace_xml.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_ace_xml.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_usgs_waterml.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_usgs_waterml.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_usgs_waterml.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_usgs_waterml.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/nwmcopy.sh b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/nwmcopy.sh similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/nwmcopy.sh rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/nwmcopy.sh diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/runTestUSGSTimeslice.sh b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/runTestUSGSTimeslice.sh similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/runTestUSGSTimeslice.sh rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/runTestUSGSTimeslice.sh diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/site-file.csv b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/site-file.csv similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/site-file.csv rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/site-file.csv diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_CWMS_Sites.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_CWMS_Sites.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_CWMS_Sites.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_CWMS_Sites.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_ace_observation.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_ace_observation.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_ace_observation.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_ace_observation.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/01122500.json b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/01122500.json similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/01122500.json rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/01122500.json diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/0208111310.json b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/0208111310.json similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/0208111310.json rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/0208111310.json diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/02186645.json b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/02186645.json similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/02186645.json rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/02186645.json diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/02289060.json b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/02289060.json similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/02289060.json rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/02289060.json diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/07027005.json b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/07027005.json similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/07027005.json rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/07027005.json diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/08329918.json b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/08329918.json similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/08329918.json rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/08329918.json diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/09423000.json b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/09423000.json similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/09423000.json rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/09423000.json diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/16296500.json b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/16296500.json similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/16296500.json rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/JSON/16296500.json diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/01122500.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/01122500.xml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/01122500.xml rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/01122500.xml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/0208111310.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/0208111310.xml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/0208111310.xml rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/0208111310.xml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02186645.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02186645.xml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02186645.xml rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02186645.xml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02289060.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02289060.xml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02289060.xml rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02289060.xml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/07027005.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/07027005.xml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/07027005.xml rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/07027005.xml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/08329918.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/08329918.xml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/08329918.xml rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/08329918.xml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/09423000.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/09423000.xml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/09423000.xml rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/09423000.xml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/16296500.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/16296500.xml similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/16296500.xml rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/16296500.xml diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/diffDischargeQuality.sh b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/diffDischargeQuality.sh similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/diffDischargeQuality.sh rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/diffDischargeQuality.sh diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/time_slice_job_cray.bsub b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/time_slice_job_cray.bsub similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/time_slice_job_cray.bsub rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/time_slice_job_cray.bsub diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/exnwm_usgs_timeslices.sh b/data_assimilation_engine/Streamflow_Scripts/usgs_download/exnwm_usgs_timeslices.sh similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/exnwm_usgs_timeslices.sh rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/exnwm_usgs_timeslices.sh diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/README.TXT b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/README.TXT similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/README.TXT rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/README.TXT diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/fetch_sites.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/fetch_sites.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/fetch_sites.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/fetch_sites.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/find_changed_site_for_huc.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/find_changed_site_for_huc.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/find_changed_site_for_huc.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/find_changed_site_for_huc.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/parallel_download_master.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/parallel_download_master.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/parallel_download_master.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/parallel_download_master.py diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/run_usgs.sh b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/run_usgs.sh similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/run_usgs.sh rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/run_usgs.sh diff --git a/ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_iv_retrieval.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_iv_retrieval.py similarity index 100% rename from ngwpc/nwm-data-assimilation/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_iv_retrieval.py rename to data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_iv_retrieval.py From 3ea6285bb140c85c76bb7a6683bbd8067fd32b0a Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Wed, 24 Jun 2026 13:50:59 -0400 Subject: [PATCH 11/26] Pushing all Streamflow scripts for data assimilation --- .../Streamflow_Scripts/README.md | 34 +- .../ace_download/analysis/CWMS_Sites.py | 1 + .../CWMS_outflow_sites_263_index.csv | 0 .../analysis/EmptyDirOrFileException.py | 1 + .../ace_download/analysis/Observation.py | 2 - .../ace_download/analysis/Tracer.py | 19 - .../analysis/make_time_slice_from_ace.py | 1 - .../analysis/old/bsub_timeslice.bash | 44 - .../old/make_time_slice_from_usgs_waterml.py | 131 - .../analysis/old/test_ace_observation.py | 47 - ...l.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml | 1136 - .../SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml | 29880 ---------------- .../analysis/old/time_slice_job_cray.bsub | 30 - .../ace_download/analysis/runTimeSlice.sh | 9 + .../ace_download/analysis/site-file.csv | 71 - .../ace_download/analysis/test_CWMS_Sites.py | 6 +- .../CWMS_historic_download.py | 3 +- .../ace_download/stream_flow_download/README | 7 + .../gov/noaa/nwc/cwmstools/CWMSDownloader.py | 4 +- .../stream_flow_download/run_usace_DevTest.sh | 56 + .../stream_flow_download/site-file.csv | 1 + .../EmptyDirOrFileException.py | 1 + .../canada_download/TimeSliceC.py | 2 + .../canadian_flow_retrieval.py | 85 +- .../canada_download/fetch_hydrometric_csv.py | 24 + .../make_time_slice_from_canada.py | 5 +- .../nco_canada/streamflow_download/README.TXT | 51 + .../get_canadian_streamgauge.sh | 69 + .../streamflow_download/get_station_list.sh | 20 + .../EmptyDirOrFileException.py | 12 + .../NWM_canadian_gage_inputs.txt | 349 + .../nco_canada/timeslices_scripts/README.TXT | 21 + .../timeslices_scripts/TimeSliceC.py | 242 + .../timeslices_scripts/WSC_Observation.py | 481 + .../make_time_slice_from_canada.py | 93 + .../usgs_download/analysis/ACE_Observation.py | 146 - .../usgs_download/analysis/CWMS_Sites.py | 73 - .../analysis/CWMS_outflow_sites_263_index.csv | 255 - .../analysis/EmptyDirOrFileException.py | 1 + .../usgs_download/analysis/Observation.py | 7 +- .../usgs_download/analysis/TimeSlice.py | 1 + .../usgs_download/analysis/Tracer.py | 19 - .../analysis/USGS_Observation.py | 176 +- .../analysis/make_time_slice_from_ace_xml.py | 144 - .../make_time_slice_from_usgs_waterml.py | 24 +- .../analysis/runTestUSGSTimeslice.sh | 2 +- .../usgs_download/analysis/site-file.csv | 324 - .../usgs_download/analysis/test_CWMS_Sites.py | 44 - .../analysis/test_ace_observation.py | 47 - .../stream_flow_download/README.TXT | 44 +- .../stream_flow_download/fetch_sites.py | 84 - .../find_changed_site_for_huc.py | 135 - .../parallel_download_master.py | 93 - .../stream_flow_download/run_usgs.sh | 70 - .../stream_flow_download/usgs_current.py | 350 + .../stream_flow_download/usgs_iv_retrieval.py | 188 - 56 files changed, 2061 insertions(+), 33104 deletions(-) rename data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/{old => }/CWMS_outflow_sites_263_index.csv (100%) mode change 100644 => 100755 delete mode 100644 data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Tracer.py delete mode 100644 data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/bsub_timeslice.bash delete mode 100644 data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/make_time_slice_from_usgs_waterml.py delete mode 100644 data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_ace_observation.py delete mode 100644 data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml delete mode 100644 data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml delete mode 100644 data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/time_slice_job_cray.bsub create mode 100755 data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/runTimeSlice.sh delete mode 100644 data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/site-file.csv create mode 100644 data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/README create mode 100755 data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace_DevTest.sh create mode 100644 data_assimilation_engine/Streamflow_Scripts/canada_download/fetch_hydrometric_csv.py create mode 100755 data_assimilation_engine/Streamflow_Scripts/nco_canada/streamflow_download/README.TXT create mode 100644 data_assimilation_engine/Streamflow_Scripts/nco_canada/streamflow_download/get_canadian_streamgauge.sh create mode 100644 data_assimilation_engine/Streamflow_Scripts/nco_canada/streamflow_download/get_station_list.sh create mode 100644 data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/EmptyDirOrFileException.py create mode 100644 data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/NWM_canadian_gage_inputs.txt create mode 100644 data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/README.TXT create mode 100644 data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/TimeSliceC.py create mode 100644 data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/WSC_Observation.py create mode 100644 data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/make_time_slice_from_canada.py delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/ACE_Observation.py delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_Sites.py delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_outflow_sites_263_index.csv delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Tracer.py delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_ace_xml.py delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/site-file.csv delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_CWMS_Sites.py delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_ace_observation.py delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/fetch_sites.py delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/find_changed_site_for_huc.py delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/parallel_download_master.py delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/run_usgs.sh create mode 100644 data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_current.py delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_iv_retrieval.py diff --git a/data_assimilation_engine/Streamflow_Scripts/README.md b/data_assimilation_engine/Streamflow_Scripts/README.md index 55960ab..c4ba784 100644 --- a/data_assimilation_engine/Streamflow_Scripts/README.md +++ b/data_assimilation_engine/Streamflow_Scripts/README.md @@ -1,12 +1,14 @@ # Overview This directory contains Python scripts for downloading and time-slicing real-time streamflow data from the USGS, US Army Corps of Engineers and Environment Canada. The time-slicing scripts process the native files into NetCDF files that can be directly used by T-Route for streamflow data assimilation. These scripts originated from the NWM v3 codebase. -USGS data download: usgs_download/stream_flow_download/parallel_download_master.py +USGS data download: usgs_download/stream_flow_download/usgs_current.py USGS data time-slice: usgs_download/analysis/make_time_slice_from_usgs_waterml.py USACE data download: ace_download/stream_flow_download/CWMS_download_current.py USACE data time-slice: ace_download/analysis/make_time_slice_from_ace_xml.py Env Canada data download: canada_download/parallel_dm_can.py Env Canada data time-slice: canada_download/make_time_slice_from_canada.py +NCO Env Canada data Download: nco_canada/streamflow_download/get_station_list.sh,get_canadian_streamgauge.sh +NCO Env Canada data time-slice: nco_canada/timeslices_scripts/make_time_slice_from_canada.py # Setting Up Required Python Environment python -m venv venv-streamflow @@ -17,10 +19,7 @@ pip install -r requirements.txt # Script Usage Each script has a help option (-h) for printing usage information. -The USGS streamflow download script (parallel_download_master.py) runs continuously and downloads the most recent files as they become available. The other streamflow download scripts exit after downloading the latest files available when the script was run. - -parallel_download_master.py -o -make_time_slice_from_usgs_waterml.py -i -o +The USGS streamflow download script (usgs_current.py) runs continuously and downloads the most recent files as they become available. The other streamflow download scripts exit after downloading the latest files available when the script was run. See usgs_download/stream_flow_download/README.TXT CWMS_download_current.py [-h] [-f FILE_FORMAT] site_file output_dir make_time_slice_from_ace_xml.py -i -o -s @@ -28,12 +27,31 @@ make_time_slice_from_ace_xml.py -i -o -s canadian_flow_retrieval.py -o make_time_slice_from_canada.py -i -o +See nco_canada/streamflow_download/README.TXT for downloading Canadian gages using NCO's script. +When NCO download script is used, the timeslices should be created using the script in the nco_canada/timeslices_scripts directory. + #### Examples #### -python parallel_download_master.py -o ~/usgs_download -python make_time_slice_from_usgs_waterml.py -i ~/usgs_download -o ~/usgs_timeslice +export USGS_API_KEY=[API KEY] +export DCOMROOT=/path/to/dcomroot +export DBNROOT=/path/to/dbnroot +mkdir $DBNROOT/log +python usgs_current.py +python make_time_slice_from_usgs_waterml.py -i ~/usgs_download -o ~/usgs/timeslice python parallel_dm_can.py -o ~/canada_download python make_time_slice_from_canada.py -i ~/canada_download -o ~/canada/timeslice -python CWMS_download_current.py -f xml site-file.csv ~/usace_download +python CWMS_download_current.py -f json site-file.csv ~/usace_download python make_time_slice_from_ace_xml.py -i ~/usace_download -o ~/usace_timeslice -s site-file.csv + +export DCOMROOT=/path/to/dcomroot +export DBNROOT=/path/to/dbnroot +mkdir -p $DCOMROOT/ +mkdir -p $DBNROOT/user/can_streamgauge +mkdir -p $DBNROOT/log +mkdir -p $DBNROOT/tmp +cd $DBNROOT/user/can_streamgauge +source /path/to/get_station_list.sh +source /path/to/get_canadian_streamgauge.sh +python make_time_slice_from_canada.py -i $DCOMROOT/YYYYMMDD/can_streamgauge -o ~/canada/timeslice + diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/CWMS_Sites.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/CWMS_Sites.py index 40419fe..b416c5b 100644 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/CWMS_Sites.py +++ b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/CWMS_Sites.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python ############################################################################### # Module name: CWMS_Sites # # # diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/CWMS_outflow_sites_263_index.csv b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/CWMS_outflow_sites_263_index.csv old mode 100644 new mode 100755 similarity index 100% rename from data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/CWMS_outflow_sites_263_index.csv rename to data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/CWMS_outflow_sites_263_index.csv diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/EmptyDirOrFileException.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/EmptyDirOrFileException.py index dbc5ea2..82f182b 100644 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/EmptyDirOrFileException.py +++ b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/EmptyDirOrFileException.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python class EmptyDirOrFileException( Exception ): """Exception raised for empty input files or directories. Attributes: diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py index 7c84dd9..cb29241 100644 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py +++ b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Observation.py @@ -17,8 +17,6 @@ from datetime import datetime, timedelta import dateutil.parser import pytz -#import iso8601 -#import Tracer from abc import ABCMeta, abstractmethod, abstractproperty from TimeSlice import TimeSlice diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Tracer.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Tracer.py deleted file mode 100644 index 75d8e73..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/Tracer.py +++ /dev/null @@ -1,19 +0,0 @@ -############################################################################### -# Module name: Tracer -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: Create a Python Tracer object for debugging purpose # -# # -############################################################################### - -import sys, trace - -def init(): - global theTracer - theTracer = \ - trace.Trace( ignoredirs=sys.path[1:], trace=True, count=False ) diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace.py index c5161f3..03d6cb7 100644 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace.py +++ b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/make_time_slice_from_ace.py @@ -25,7 +25,6 @@ from CWMS_Sites import CWMS_Sites from ACE_Observation import ACE_Observation from EmptyDirOrFileException import EmptyDirOrFileException -#import Tracer """ The driver to parse downloaded ACE JSON observations and diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/bsub_timeslice.bash b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/bsub_timeslice.bash deleted file mode 100644 index 9dcc753..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/bsub_timeslice.bash +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash - -############################################################################### -# File name: bsub_timeslice.bash # -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: Make calls to the time slice making program and submit the # -# job to the dev_shared queue # -# # -############################################################################### - -if [ ! -e "$HOME/usgs_download/time_slices" ]; then mkdir -p $HOME/usgs_download/time_slices; fi - -if [ ! -e "$HOME/usgs_download/LOGS" ]; then mkdir -p $HOME/usgs_download/LOGS; fi - -cd $HOME/usgs_download/LOGS - -if [ -e "time_slices.bsub" ]; then rm -f "time_slices.bsub"; fi - -cat > time_slices.bsub << EOF -#!/bin/bash -#BSUB -J time_slice_for_da # Job name -#BSUB -o time_slice_for_da.out # output filename -#BSUB -e time_slice_for_da.err # error filename -#BSUB -L /bin/sh # shell script -#BSUB -q "dev_shared" # queue -#BSUB -W 00:30 # wallclock time - timing require to complete run -#BSUB -P "OHD-T2O" # Project name -#BSUB -R 'span[ptile=10]' -#BSUB -M 2048 where ## is memory in MB - -source $HOME/.bashrc - -find $HOME/usgs_download/time_slices -mtime +5 -exec rm {} \; - -$HOME/usgs_download/analysis/make_time_slice_from_usgs_waterml.py -i $1 -o $HOME/usgs_download/time_slices > $HOME/usgs_download/LOGS/time_slices.log -EOF - -bsub < time_slices.bsub diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/make_time_slice_from_usgs_waterml.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/make_time_slice_from_usgs_waterml.py deleted file mode 100644 index ccccac4..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/make_time_slice_from_usgs_waterml.py +++ /dev/null @@ -1,131 +0,0 @@ -############################################################################### -# File name: make_time_slice_from_usgs_waterml.py -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: The driver to create NetCDF time slice files from USGS # -# real-time observations # -# # -############################################################################### - -import os, sys, time, getopt -import logging -from string import * -import xml.etree.ElementTree as etree -from datetime import datetime, timedelta -from USGS_Observation import USGS_Observation -from TimeSlice import TimeSlice -from Observation import Observation, All_Observations -#import Tracer - -""" - The driver to parse downloaded waterML 2.0 observations and - create time slices and write to NetCDF files - Author: Zhengtao Cui (Zhengtao.Cui@noaa.gov) - Date: Aug. 26, 2015 -""" -def main(argv): - """ - function to get input arguments - """ - inputdir = '' - try: - opts, args = getopt.getopt(argv,"hi:o:",["idir=", "odir="]) - except getopt.GetoptError: - print('make_time_slice_from_usgs_waterml.py -i -o ') - sys.exit(2) - for opt, arg in opts: - if opt == '-h': - print( \ - 'make_time_slice_from_usgs_waterml.py -i -o ') - sys.exit() - elif opt in ('-i', "--idir"): - inputdir = arg - if not os.path.exists( inputdir ): - raise RuntimeError( 'FATAL Error: inputdir ' + \ - inputdir + ' does not exist!' ) - elif opt in ('-o', "--odir" ): - outputdir = arg - if not os.path.exists( outputdir ): - raise RuntimeError( 'FATAL Error: outputdir ' + \ - outputdir + ' does not exist!' ) - - return (inputdir, outputdir) - -t0 = time.time() - -logging.basicConfig(format=\ - '%(asctime)s - %(name)s - %(levelname)s - %(message)s',\ - level=logging.INFO) -logger = logging.getLogger(__name__) -formatter = logging.Formatter(\ - '%(asctime)s - %(name)s - %(levelname)s - %(message)s') -#logger.setFormatter(formatter) -logger.info( "System Path: " + str( sys.path ) ) - -if __name__ == "__main__": - try: - odir = main(sys.argv[1:]) - except Exception as e: - logger.error("Failed to get program options.", exc_info=True) - -indir = odir[0] -outdir = odir[1] -logger.info( 'Input dir is "' + indir + '"') -logger.info( 'Output dir is "' + outdir + '"') - -# -# Load USGS observed waterML 2.0 discharge data -# - -try: - usgsobvs = [] - - if not os.path.isdir( indir ): - raise RuntimeError( "FATAL ERROR: " + indir + \ - " is not a directory or does not exist. ") - - for file in os.listdir( indir ): - if file.endswith( ".xml" ) or file.endswith( ".csv" ): - logger.info( 'Reading ' + indir + '/' + file + ' ... ' ) - try: - usgsobvs.append( USGS_Observation( \ - indir + '/' + file ) ) - except Exception as e: - logger.warn( repr( e ), exc_info=True ) - continue - - if not usgsobvs: - raise RuntimeError( "FATAL ERROR: " + indir + \ - " has no USGS Water ML 2.0 or CSV files") - - allobvs = All_Observations( usgsobvs ) -except Exception as e: - logger.error("Failed to load WaterXML files.", exc_info=True) - -logger.info( 'Earliest time in WaterXML: ' + \ - allobvs.timePeriodForAll()[0].isoformat() ) -logger.info( 'Latest time in WaterXML:: ' + \ - allobvs.timePeriodForAll()[1].isoformat() ) - -# -# Create time slices from loaded observations -# -# Set time resolution to 15 minutes -# and -# Write time slices to NetCDF files -# -try: - timeslices = allobvs.makeAllTimeSlices( timedelta( minutes = 15 ), outdir ) -except Exception as e: - logger.error("Failed to make time slices.", exc_info=True) - logger.error("Input dir = " + indir, exc_info=True) - -logger.info( "Total number of timeslices: " + str( timeslices ) ) -logger.info( "Program finished in: " + \ - "{0:.1f}".format( (time.time() - t0) / 60.0 ) + \ - " minutes" ) diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_ace_observation.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_ace_observation.py deleted file mode 100644 index fb72279..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_ace_observation.py +++ /dev/null @@ -1,47 +0,0 @@ -############################################################################### -# File name: make_time_slice_from_usgs_waterml.py -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: The driver to create NetCDF time slice files from USGS # -# real-time observations # -# # -############################################################################### - -import os, sys, time, urllib, getopt -import logging -from string import * -import xml.etree.ElementTree as etree -from datetime import datetime, timedelta -from ACE_Observation import ACE_Observation -from TimeSlice import TimeSlice -from Observation import Observation, All_Observations -from CWMS_Sites import CWMS_Sites -#import Tracer - -""" - The driver to parse downloaded waterML 2.0 observations and - create time slices and write to NetCDF files - Author: Zhengtao Cui (Zhengtao.Cui@noaa.gov) - Date: Aug. 26, 2015 -""" -def main(argv): - """ - function to get input arguments - """ - sites=CWMS_Sites( "./CWMS_outflow_sites_263_index.csv") - aceflow=ACE_Observation( "./test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml", sites) - - irregularaceflow=ACE_Observation( "./test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml", sites) - -if __name__ == "__main__": - try: - main(sys.argv[1:]) - except Exception as e: - print("Failed to get program options." + str(e)) - - diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml deleted file mode 100644 index 4ead415..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml +++ /dev/null @@ -1,1136 +0,0 @@ -cpc-ora-db50:S0CWMSZ22019-05-06T15:29:26ZPT3.339SPT0.049S1900-01-01T00:00:00Z2019-05-06T15:29:26ZXMLSWFTX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGIENNATIVE1111331133SWFTX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGIRAY ROBERTS DAM-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGIRRLT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.ReportingRRLT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI -2016-01-01T06:00:00Z 3778.043 0 -2016-01-02T06:00:00Z 1972.447 0 -2016-01-03T06:00:00Z 1971.421 0 -2016-01-04T06:00:00Z 1970.413 0 -2016-01-05T06:00:00Z 1969.352 0 -2016-01-06T06:00:00Z 1968.151 0 -2016-01-07T06:00:00Z 1966.907 0 -2016-01-08T06:00:00Z 1966.547 0 -2016-01-09T06:00:00Z 1965.922 0 -2016-01-10T06:00:00Z 1964.843 0 -2016-01-11T06:00:00Z 1963.532 0 -2016-01-12T06:00:00Z 1962.116 0 -2016-01-13T06:00:00Z 2233.907 0 -2016-01-14T06:00:00Z 2444.594 0 -2016-01-15T06:00:00Z 2442.665 0 -2016-01-16T06:00:00Z 2440.831 0 -2016-01-17T06:00:00Z 2438.887 0 -2016-01-18T06:00:00Z 2436.696 0 -2016-01-19T06:00:00Z 2434.568 0 -2016-01-20T06:00:00Z 2432.179 0 -2016-01-21T06:00:00Z 2430.069 0 -2016-01-22T06:00:00Z 2428.139 0 -2016-01-23T06:00:00Z 2426.039 0 -2016-01-24T06:00:00Z 2423.844 0 -2016-01-25T06:00:00Z 2421.708 0 -2016-01-26T06:00:00Z 2419.732 0 -2016-01-27T06:00:00Z 2417.817 0 -2016-01-28T06:00:00Z 2415.511 0 -2016-01-29T06:00:00Z 2413.471 0 -2016-01-30T06:00:00Z 2411.262 0 -2016-01-31T06:00:00Z 2409.079 0 -2016-02-01T06:00:00Z 2407.047 0 -2016-02-02T06:00:00Z 2404.998 0 -2016-02-03T06:00:00Z 2402.751 0 -2016-02-04T06:00:00Z 2400.541 0 -2016-02-05T06:00:00Z 2398.292 0 -2016-02-06T06:00:00Z 1772.397 0 -2016-02-07T06:00:00Z 1286.317 0 -2016-02-08T06:00:00Z 1285.556 0 -2016-02-09T06:00:00Z 1284.763 0 -2016-02-10T06:00:00Z 1283.95 0 -2016-02-11T06:00:00Z 1283.143 0 -2016-02-12T06:00:00Z 1282.457 0 -2016-02-13T06:00:00Z 1281.776 0 -2016-02-14T06:00:00Z 1281.047 0 -2016-02-15T06:00:00Z 1280.248 0 -2016-02-16T06:00:00Z 1279.677 0 -2016-02-17T06:00:00Z 2034.853 0 -2016-02-18T06:00:00Z 3002.952 0 -2016-02-19T06:00:00Z 2998.715 0 -2016-02-20T06:00:00Z 2995.372 0 -2016-02-21T06:00:00Z 2991.519 0 -2016-02-22T06:00:00Z 2988.049 0 -2016-02-23T06:00:00Z 2984.798 0 -2016-02-24T06:00:00Z 2147.098 0 -2016-02-25T06:00:00Z 1115.318 0 -2016-02-26T06:00:00Z 1115.233 0 -2016-02-27T06:00:00Z 1114.793 0 -2016-02-28T06:00:00Z 1114.321 0 -2016-02-29T06:00:00Z 1113.87 0 -2016-03-01T06:00:00Z 1113.443 0 -2016-03-02T06:00:00Z 2156.398 0 -2016-03-03T06:00:00Z 3130.882 0 -2016-03-04T06:00:00Z 3126.684 0 -2016-03-05T06:00:00Z 2003.03 0 -2016-03-06T06:00:00Z 952.6647 0 -2016-03-07T06:00:00Z 952.11 0 -2016-03-08T06:00:00Z 951.8296 0 -2016-03-09T06:00:00Z 956.8007 0 -2016-03-10T06:00:00Z 961.5744 0 -2016-03-11T06:00:00Z 404.6193 0 -2016-03-12T06:00:00Z 5.890134 0 -2016-03-13T06:00:00Z 5.891227 0 -2016-03-14T05:00:00Z 5.892082 0 -2016-03-15T05:00:00Z 5.892593 0 -2016-03-16T05:00:00Z 5.892847 0 -2016-03-17T05:00:00Z 5.893063 0 -2016-03-18T05:00:00Z 5.893493 0 -2016-03-19T05:00:00Z 5.893817 0 -2016-03-20T05:00:00Z 5.893924 0 -2016-03-21T05:00:00Z 5.893795 0 -2016-03-22T05:00:00Z 525.8743 0 -2016-03-23T05:00:00Z 965.1952 0 -2016-03-24T05:00:00Z 964.8251 0 -2016-03-25T05:00:00Z 964.835 0 -2016-03-26T05:00:00Z 964.5617 0 -2016-03-27T05:00:00Z 964.1598 0 -2016-03-28T05:00:00Z 963.7516 0 -2016-03-29T05:00:00Z 963.2984 0 -2016-03-30T05:00:00Z 962.8389 0 -2016-03-31T05:00:00Z 962.4658 0 -2016-04-01T05:00:00Z 962.1391 0 -2016-04-02T05:00:00Z 961.7447 0 -2016-04-03T05:00:00Z 961.2151 0 -2016-04-04T05:00:00Z 960.6818 0 -2016-04-05T05:00:00Z 1307.718 0 -2016-04-06T05:00:00Z 1588.494 0 -2016-04-07T05:00:00Z 1587.261 0 -2016-04-08T05:00:00Z 1586.094 0 -2016-04-09T05:00:00Z 1584.934 0 -2016-04-10T05:00:00Z 1583.714 0 -2016-04-11T05:00:00Z 1582.446 0 -2016-04-12T05:00:00Z 1581.549 0 -2016-04-13T05:00:00Z 1580.649 0 -2016-04-14T05:00:00Z 1579.579 0 -2016-04-15T05:00:00Z 1578.547 0 -2016-04-16T05:00:00Z 1577.394 0 -2016-04-17T05:00:00Z 1576.205 0 -2016-04-18T05:00:00Z 725.7781 0 -2016-04-19T05:00:00Z 5.876896 0 -2016-04-20T05:00:00Z 5.878191 0 -2016-04-21T05:00:00Z 5.882891 0 -2016-04-22T05:00:00Z 5.886289 0 -2016-04-23T05:00:00Z 5.88687 0 -2016-04-24T05:00:00Z 5.887146 0 -2016-04-25T05:00:00Z 5.887211 0 -2016-04-26T05:00:00Z 5.887287 0 -2016-04-27T05:00:00Z 5.887438 0 -2016-04-28T05:00:00Z 5.88919 0 -2016-04-29T05:00:00Z 5.890118 0 -2016-04-30T05:00:00Z 5.89037 0 -2016-05-01T05:00:00Z 5.890694 0 -2016-05-02T05:00:00Z 5.890912 0 -2016-05-03T05:00:00Z 5.890771 0 -2016-05-04T05:00:00Z 5.890733 0 -2016-05-05T05:00:00Z 5.890626 0 -2016-05-06T05:00:00Z 5.8906 0 -2016-05-07T05:00:00Z 5.89059 0 -2016-05-08T05:00:00Z 5.890366 0 -2016-05-09T05:00:00Z 5.890236 0 -2016-05-10T05:00:00Z 1368.151 0 -2016-05-11T05:00:00Z 2545.741 0 -2016-05-12T05:00:00Z 2539.007 0 -2016-05-13T05:00:00Z 2536.659 0 -2016-05-14T05:00:00Z 2533.801 0 -2016-05-15T05:00:00Z 2531.355 0 -2016-05-16T05:00:00Z 2528.913 0 -2016-05-17T05:00:00Z 2525.887 0 -2016-05-18T05:00:00Z 2523.646 0 -2016-05-19T05:00:00Z 2521.81 0 -2016-05-20T05:00:00Z 2519.182 0 -2016-05-21T05:00:00Z 2347.863 0 -2016-05-22T05:00:00Z 1267.308 0 -2016-05-23T05:00:00Z 1266.62 0 -2016-05-24T05:00:00Z 1934.163 0 -2016-05-25T05:00:00Z 2525.983 0 -2016-05-26T05:00:00Z 2524.573 0 -2016-05-27T05:00:00Z 2522.729 0 -2016-05-28T05:00:00Z 2521.587 0 -2016-05-29T05:00:00Z 2520.956 0 -2016-05-30T05:00:00Z 2518.897 0 -2016-05-31T05:00:00Z 2520.563 0 -2016-06-01T05:00:00Z 2522.348 0 -2016-06-02T05:00:00Z 1824.911 0 -2016-06-03T05:00:00Z 1273.942 0 -2016-06-04T05:00:00Z 597.2918 0 -2016-06-05T05:00:00Z 1 0 -2016-06-06T05:00:00Z 1 0 -2016-06-07T05:00:00Z 1 0 -2016-06-08T05:00:00Z 1 0 -2016-06-09T05:00:00Z 1 0 -2016-06-10T05:00:00Z 1 0 -2016-06-11T05:00:00Z 1 0 -2016-06-12T05:00:00Z 1 0 -2016-06-13T05:00:00Z 1 0 -2016-06-14T05:00:00Z 1 0 -2016-06-15T05:00:00Z 1 0 -2016-06-16T05:00:00Z 1 0 -2016-06-17T05:00:00Z 1916.588 0 -2016-06-18T05:00:00Z 3537.242 0 -2016-06-19T05:00:00Z 3532.512 0 -2016-06-20T05:00:00Z 3527.58 0 -2016-06-21T05:00:00Z 3522.654 0 -2016-06-22T05:00:00Z 3517.529 0 -2016-06-23T05:00:00Z 3512.372 0 -2016-06-24T05:00:00Z 3507.299 0 -2016-06-25T05:00:00Z 2728.366 0 -2016-06-26T05:00:00Z 1918.64 0 -2016-06-27T05:00:00Z 1916.915 0 -2016-06-28T05:00:00Z 1915.25 0 -2016-06-29T05:00:00Z 1913.725 0 -2016-06-30T05:00:00Z 1911.968 0 -2016-07-01T05:00:00Z 1910.225 0 -2016-07-02T05:00:00Z 1908.505 0 -2016-07-03T05:00:00Z 1906.665 0 -2016-10-01T05:00:00Z 35.04116 0 -2016-10-02T05:00:00Z 35.03968 0 -2016-10-03T05:00:00Z 35.03828 0 -2016-10-04T05:00:00Z 35.03646 0 -2016-10-05T05:00:00Z 35.03428 0 -2016-10-06T05:00:00Z 35.03306 0 -2016-10-07T05:00:00Z 35.03179 0 -2016-10-08T05:00:00Z 35.04001 0 -2016-10-09T05:00:00Z 35.04232 0 -2016-10-10T05:00:00Z 35.04144 0 -2016-10-11T05:00:00Z 35.03997 0 -2016-10-12T05:00:00Z 35.03832 0 -2016-10-13T05:00:00Z 35.03714 0 -2016-10-14T05:00:00Z 35.03647 0 -2016-10-15T05:00:00Z 35.03515 0 -2016-10-16T05:00:00Z 35.03343 0 -2016-10-17T05:00:00Z 35.03221 0 -2016-10-18T05:00:00Z 35.03134 0 -2016-10-19T05:00:00Z 35.03099 0 -2016-10-20T05:00:00Z 35.03056 0 -2016-10-21T05:00:00Z 35.036 0 -2016-10-22T05:00:00Z 35.03739 0 -2016-10-23T05:00:00Z 35.03667 0 -2016-10-24T05:00:00Z 35.03489 0 -2016-10-25T05:00:00Z 35.03432 0 -2016-10-26T05:00:00Z 35.03364 0 -2016-10-27T05:00:00Z 35.03263 0 -2016-10-28T05:00:00Z 35.03209 0 -2016-10-29T05:00:00Z 35.03166 0 -2016-10-30T05:00:00Z 35.03045 0 -2016-10-31T05:00:00Z 35.02964 0 -2016-11-01T05:00:00Z 35.02867 0 -2016-11-02T05:00:00Z 35.02767 0 -2016-11-03T05:00:00Z 35.02673 0 -2016-11-04T05:00:00Z 35.03737 0 -2016-11-05T05:00:00Z 35.03961 0 -2016-11-06T05:00:00Z 35.03965 0 -2016-11-07T06:00:00Z 35.03898 0 -2016-11-08T06:00:00Z 35.05026 0 -2016-11-09T06:00:00Z 118.9946 0 -2016-11-10T06:00:00Z 190 0 -2016-11-11T06:00:00Z 190 0 -2016-11-12T06:00:00Z 190 0 -2016-11-13T06:00:00Z 190 0 -2016-11-14T06:00:00Z 190 0 -2016-11-15T06:00:00Z 190 0 -2016-11-16T06:00:00Z 190 0 -2016-11-17T06:00:00Z 190 0 -2016-11-18T06:00:00Z 120 0 -2016-11-19T06:00:00Z 22 0 -2016-11-20T06:00:00Z 22 0 -2016-11-21T06:00:00Z 22 0 -2016-11-22T06:00:00Z 22 0 -2016-11-23T06:00:00Z 22 0 -2016-11-24T06:00:00Z 22 0 -2016-11-25T06:00:00Z 22 0 -2016-11-26T06:00:00Z 22 0 -2016-11-27T06:00:00Z 22 0 -2016-11-28T06:00:00Z 22 0 -2016-11-29T06:00:00Z 22 0 -2016-11-30T06:00:00Z 29.6875 0 -2016-12-01T06:00:00Z 51.02083 0 -2016-12-02T06:00:00Z 83.92708 0 -2016-12-03T06:00:00Z 124.125 0 -2016-12-04T06:00:00Z 150 0 -2016-12-05T06:00:00Z 150 0 -2016-12-06T06:00:00Z 150 0 -2016-12-07T06:00:00Z 195.9681 0 -2016-12-08T06:00:00Z 196 0 -2016-12-09T06:00:00Z 196 0 -2016-12-10T06:00:00Z 196 0 -2016-12-11T06:00:00Z 196 0 -2016-12-12T06:00:00Z 196 0 -2016-12-13T06:00:00Z 196 0 -2016-12-14T06:00:00Z 196 0 -2016-12-15T06:00:00Z 196 0 -2016-12-16T06:00:00Z 196 0 -2016-12-17T06:00:00Z 103.8333 0 -2016-12-18T06:00:00Z 38 0 -2016-12-19T06:00:00Z 38 0 -2016-12-20T06:00:00Z 38 0 -2016-12-21T06:00:00Z 38 0 -2016-12-22T06:00:00Z 38 0 -2016-12-23T06:00:00Z 38 0 -2016-12-24T06:00:00Z 38 0 -2016-12-25T06:00:00Z 38 0 -2016-12-26T06:00:00Z 38 0 -2016-12-27T06:00:00Z 38 0 -2016-12-28T06:00:00Z 38 0 -2016-12-29T06:00:00Z 38 0 -2016-12-30T06:00:00Z 38 0 -2016-12-31T06:00:00Z 38 0 -2017-01-01T06:00:00Z 38 0 -2017-01-02T06:00:00Z 38 0 -2017-01-03T06:00:00Z 38 0 -2017-01-04T06:00:00Z 38 0 -2017-01-05T06:00:00Z 38 0 -2017-01-06T06:00:00Z 38 0 -2017-01-07T06:00:00Z 38 0 -2017-01-08T06:00:00Z 38 0 -2017-01-09T06:00:00Z 38 0 -2017-01-10T06:00:00Z 38 0 -2017-01-11T06:00:00Z 38 0 -2017-01-12T06:00:00Z 38 0 -2017-01-13T06:00:00Z 38 0 -2017-01-14T06:00:00Z 38 0 -2017-01-15T06:00:00Z 38 0 -2017-01-16T06:00:00Z 38 0 -2017-01-17T06:00:00Z 133.0833 0 -2017-01-18T06:00:00Z 784.9498 0 -2017-01-19T06:00:00Z 1401.021 0 -2017-01-20T06:00:00Z 755.9695 0 -2017-01-21T06:00:00Z 640.4506 0 -2017-01-22T06:00:00Z 792.0489 0 -2017-01-23T06:00:00Z 1400.251 0 -2017-01-24T06:00:00Z 1399.433 0 -2017-01-25T06:00:00Z 1398.733 0 -2017-01-26T06:00:00Z 1398.065 0 -2017-01-27T06:00:00Z 1397.248 0 -2017-01-28T06:00:00Z 1028.267 0 -2017-01-29T06:00:00Z 775.9787 0 -2017-01-30T06:00:00Z 775.6878 0 -2017-01-31T06:00:00Z 453.9903 0 -2017-02-01T06:00:00Z 206 0 -2017-02-02T06:00:00Z 206 0 -2017-02-03T06:00:00Z 206 0 -2017-02-04T06:00:00Z 136 0 -2017-02-05T06:00:00Z 86 0 -2017-02-06T06:00:00Z 86 0 -2017-02-07T06:00:00Z 56.625 0 -2017-02-08T06:00:00Z 39 0 -2017-02-09T06:00:00Z 39 0 -2017-02-10T06:00:00Z 39 0 -2017-02-11T06:00:00Z 39 0 -2017-02-12T06:00:00Z 39 0 -2017-02-13T06:00:00Z 39 0 -2017-02-14T06:00:00Z 39 0 -2017-02-15T06:00:00Z 39 0 -2017-02-16T06:00:00Z 39 0 -2017-02-17T06:00:00Z 39 0 -2017-02-18T06:00:00Z 39 0 -2017-02-19T06:00:00Z 39 0 -2017-02-20T06:00:00Z 39 0 -2017-02-21T06:00:00Z 39 0 -2017-02-22T06:00:00Z 242.4429 0 -2017-02-23T06:00:00Z 463.5556 0 -2017-02-24T06:00:00Z 463.5005 0 -2017-02-25T06:00:00Z 463.442 0 -2017-02-26T06:00:00Z 463.3661 0 -2017-02-27T06:00:00Z 463.2601 0 -2017-02-28T06:00:00Z 463.1718 0 -2017-03-01T06:00:00Z 231.7573 0 -2017-03-02T06:00:00Z 36 0 -2017-03-03T06:00:00Z 36 0 -2017-03-04T06:00:00Z 36 0 -2017-03-05T06:00:00Z 36 0 -2017-03-06T06:00:00Z 36 0 -2017-03-07T06:00:00Z 36 0 -2017-03-08T06:00:00Z 36 0 -2017-03-09T06:00:00Z 36 0 -2017-03-10T06:00:00Z 36 0 -2017-03-11T06:00:00Z 36 0 -2017-03-12T06:00:00Z 36 0 -2017-03-13T05:00:00Z 36 0 -2017-03-14T05:00:00Z 36 0 -2017-03-15T05:00:00Z 36 0 -2017-03-16T05:00:00Z 36 0 -2017-03-17T05:00:00Z 36 0 -2017-03-18T05:00:00Z 36 0 -2017-03-19T05:00:00Z 36 0 -2017-03-20T05:00:00Z 36 0 -2017-03-21T05:00:00Z 36 0 -2017-03-22T05:00:00Z 36 0 -2017-03-23T05:00:00Z 36 0 -2017-03-24T05:00:00Z 36 0 -2017-03-25T05:00:00Z 36 0 -2017-03-26T05:00:00Z 36 0 -2017-03-27T05:00:00Z 36 0 -2017-03-28T05:00:00Z 36 0 -2017-03-29T05:00:00Z 36 0 -2017-03-30T05:00:00Z 36 0 -2017-03-31T05:00:00Z 36 0 -2017-04-01T05:00:00Z 36 0 -2017-04-02T05:00:00Z 36 0 -2017-04-03T05:00:00Z 36 0 -2017-04-04T05:00:00Z 405.0463 0 -2017-04-05T05:00:00Z 679.1964 0 -2017-04-06T05:00:00Z 679.0041 0 -2017-04-07T05:00:00Z 678.7336 0 -2017-04-08T05:00:00Z 499.5519 0 -2017-04-09T05:00:00Z 365.9863 0 -2017-04-10T05:00:00Z 365.9093 0 -2017-04-11T05:00:00Z 184.7331 0 -2017-04-12T05:00:00Z 49.68037 0 -2017-04-13T05:00:00Z 49.678 0 -2017-04-14T05:00:00Z 49.67713 0 -2017-04-15T05:00:00Z 49.67611 0 -2017-04-16T05:00:00Z 49.67522 0 -2017-04-17T05:00:00Z 49.67473 0 -2017-04-18T05:00:00Z 49.69 0 -2017-04-19T05:00:00Z 579.3193 0 -2017-04-20T05:00:00Z 990.9417 0 -2017-04-21T05:00:00Z 990.774 0 -2017-04-22T05:00:00Z 990.5925 0 -2017-04-23T05:00:00Z 991.8918 0 -2017-04-24T05:00:00Z 991.8843 0 -2017-04-25T05:00:00Z 991.5043 0 -2017-04-26T05:00:00Z 991.0627 0 -2017-04-27T05:00:00Z 1293.938 0 -2017-04-28T05:00:00Z 1608.733 0 -2017-04-29T05:00:00Z 1278.798 0 -2017-04-30T05:00:00Z 678.6295 0 -2017-05-01T05:00:00Z 678.4012 0 -2017-05-02T05:00:00Z 678.114 0 -2017-05-03T05:00:00Z 347.9604 0 -2017-05-04T05:00:00Z 31 0 -2017-05-05T05:00:00Z 31 0 -2017-05-06T05:00:00Z 31 0 -2017-05-07T05:00:00Z 31 0 -2017-05-08T05:00:00Z 31 0 -2017-05-09T05:00:00Z 31 0 -2017-05-10T05:00:00Z 31 0 -2017-05-11T05:00:00Z 31 0 -2017-05-12T05:00:00Z 31 0 -2017-05-13T05:00:00Z 31 0 -2017-05-14T05:00:00Z 31 0 -2017-05-15T05:00:00Z 31 0 -2017-05-16T05:00:00Z 31 0 -2017-05-17T05:00:00Z 31 0 -2017-05-18T05:00:00Z 31 0 -2017-05-19T05:00:00Z 31 0 -2017-05-20T05:00:00Z 31 0 -2017-05-21T05:00:00Z 31 0 -2017-05-22T05:00:00Z 31 0 -2017-05-23T05:00:00Z 31 0 -2017-05-24T05:00:00Z 31 0 -2017-05-25T05:00:00Z 31 0 -2017-05-26T05:00:00Z 31 0 -2017-05-27T05:00:00Z 31 0 -2017-05-28T05:00:00Z 31 0 -2017-05-29T05:00:00Z 31 0 -2017-05-30T05:00:00Z 31 0 -2017-05-31T05:00:00Z 31 0 -2017-06-01T05:00:00Z 31 0 -2017-06-02T05:00:00Z 31 0 -2017-06-03T05:00:00Z 31 0 -2017-06-04T05:00:00Z 31 0 -2017-06-05T05:00:00Z 31 0 -2017-06-06T05:00:00Z 31 0 -2017-06-07T05:00:00Z 31 0 -2017-06-08T05:00:00Z 31 0 -2017-06-09T05:00:00Z 31 0 -2017-06-10T05:00:00Z 31 0 -2017-06-11T05:00:00Z 31 0 -2017-06-12T05:00:00Z 31 0 -2017-06-13T05:00:00Z 31 0 -2017-06-14T05:00:00Z 31 0 -2017-06-15T05:00:00Z 31 0 -2017-06-16T05:00:00Z 24.85096 0 -2017-06-17T05:00:00Z 20.45839 0 -2017-06-18T05:00:00Z 20.45749 0 -2017-06-19T05:00:00Z 20.45697 0 -2017-06-20T05:00:00Z 17.51813 0 -2017-06-21T05:00:00Z 15.59273 0 -2017-06-22T05:00:00Z 15.59237 0 -2017-06-23T05:00:00Z 15.59173 0 -2017-06-24T05:00:00Z 15.59133 0 -2017-06-25T05:00:00Z 15.59564 0 -2017-06-26T05:00:00Z 15.60044 0 -2017-06-27T05:00:00Z 15.60041 0 -2017-06-28T05:00:00Z 15.60031 0 -2017-06-29T05:00:00Z 15.59977 0 -2017-06-30T05:00:00Z 15.59918 0 -2017-07-01T05:00:00Z 15.59862 0 -2017-07-02T05:00:00Z 15.59844 0 -2017-07-03T05:00:00Z 15.59816 0 -2017-07-04T05:00:00Z 15.59777 0 -2017-07-05T05:00:00Z 15.59807 0 -2017-07-06T05:00:00Z 15.598 0 -2017-07-07T05:00:00Z 15.59779 0 -2017-07-08T05:00:00Z 15.59747 0 -2017-07-09T05:00:00Z 15.59717 0 -2017-07-10T05:00:00Z 15.5971 0 -2017-07-11T05:00:00Z 15.59731 0 -2017-07-12T05:00:00Z 15.59688 0 -2017-07-13T05:00:00Z 15.59623 0 -2017-07-14T05:00:00Z 15.59559 0 -2017-07-15T05:00:00Z 15.5951 0 -2017-07-16T05:00:00Z 15.59498 0 -2017-07-17T05:00:00Z 15.5946 0 -2017-07-18T05:00:00Z 15.59404 0 -2017-07-19T05:00:00Z 15.59332 0 -2017-07-20T05:00:00Z 15.59268 0 -2017-07-21T05:00:00Z 15.59197 0 -2017-07-22T05:00:00Z 15.5913 0 -2017-07-23T05:00:00Z 15.59058 0 -2017-07-24T05:00:00Z 15.58994 0 -2017-07-25T05:00:00Z 15.59115 0 -2017-07-26T05:00:00Z 15.59068 0 -2017-07-27T05:00:00Z 15.59005 0 -2017-07-28T05:00:00Z 15.58933 0 -2017-07-29T05:00:00Z 15.58861 0 -2017-07-30T05:00:00Z 15.58817 0 -2017-07-31T05:00:00Z 15.58741 0 -2017-08-01T05:00:00Z 15.58654 0 -2017-08-02T05:00:00Z 15.58576 0 -2017-08-03T05:00:00Z 15.58516 0 -2017-08-04T05:00:00Z 15.58486 0 -2017-08-05T05:00:00Z 15.58422 0 -2017-08-06T05:00:00Z 15.58342 0 -2017-08-07T05:00:00Z 15.58246 0 -2017-08-08T05:00:00Z 15.58241 0 -2017-08-09T05:00:00Z 15.58175 0 -2017-08-10T05:00:00Z 15.58106 0 -2017-08-11T05:00:00Z 15.58032 0 -2017-08-12T05:00:00Z 15.57975 0 -2017-08-13T05:00:00Z 15.5795 0 -2017-08-14T05:00:00Z 15.58237 0 -2017-08-15T05:00:00Z 15.58577 0 -2017-08-16T05:00:00Z 15.58705 0 -2017-08-17T05:00:00Z 15.58692 0 -2017-08-18T05:00:00Z 15.5945 0 -2017-08-19T05:00:00Z 15.60476 0 -2017-08-20T05:00:00Z 15.60555 0 -2017-08-21T05:00:00Z 15.60545 0 -2017-08-22T05:00:00Z 15.60497 0 -2017-08-23T05:00:00Z 15.6045 0 -2017-08-24T05:00:00Z 15.60494 0 -2017-08-25T05:00:00Z 15.61826 0 -2017-08-26T05:00:00Z 657.7848 0 -2017-08-27T05:00:00Z 1116.494 0 -2017-08-28T05:00:00Z 960.0352 0 -2017-08-29T05:00:00Z 1093.292 0 -2017-08-30T05:00:00Z 1279.627 0 -2017-08-31T05:00:00Z 1278.754 0 -2017-09-01T05:00:00Z 1277.841 0 -2017-09-02T05:00:00Z 996.2293 0 -2017-09-03T05:00:00Z 649.8683 0 -2017-09-04T05:00:00Z 649.7461 0 -2017-09-05T05:00:00Z 649.6119 0 -2017-09-06T05:00:00Z 649.4015 0 -2017-09-07T05:00:00Z 649.1086 0 -2017-09-08T05:00:00Z 648.8199 0 -2017-09-09T05:00:00Z 494.1207 0 -2017-09-10T05:00:00Z 332.9867 0 -2017-09-11T05:00:00Z 332.8958 0 -2017-09-12T05:00:00Z 240.295 0 -2017-09-13T05:00:00Z 174.1686 0 -2017-09-14T05:00:00Z 84.96372 0 -2017-09-15T05:00:00Z 15.60075 0 -2017-09-16T05:00:00Z 15.59985 0 -2017-09-17T05:00:00Z 15.59939 0 -2017-09-18T05:00:00Z 15.59893 0 -2017-09-19T05:00:00Z 15.59852 0 -2017-09-20T05:00:00Z 15.59799 0 -2017-09-21T05:00:00Z 15.59744 0 -2017-09-22T05:00:00Z 15.5968 0 -2017-09-23T05:00:00Z 15.59629 0 -2017-09-24T05:00:00Z 15.59598 0 -2017-09-25T05:00:00Z 15.59526 0 -2017-09-26T05:00:00Z 15.59468 0 -2017-09-27T05:00:00Z 15.59442 0 -2017-09-28T05:00:00Z 15.59416 0 -2017-09-29T05:00:00Z 15.5934 0 -2017-09-30T05:00:00Z 15.59302 0 -2017-10-01T05:00:00Z 15.59282 0 -2017-10-02T05:00:00Z 15.59188 0 -2017-10-03T05:00:00Z 15.59119 0 -2017-10-04T05:00:00Z 15.59085 0 -2017-10-05T05:00:00Z 15.59209 0 -2017-10-06T05:00:00Z 15.59204 0 -2017-10-07T05:00:00Z 15.5914 0 -2017-10-08T05:00:00Z 15.59087 0 -2017-10-09T05:00:00Z 15.59047 0 -2017-10-10T05:00:00Z 15.58964 0 -2017-10-11T05:00:00Z 15.58961 0 -2017-10-12T05:00:00Z 15.58883 0 -2017-10-13T05:00:00Z 15.58811 0 -2017-10-14T05:00:00Z 15.58749 1 -2017-10-15T05:00:00Z 15.58717 1 -2017-10-16T05:00:00Z 15.58676 1 -2017-10-17T05:00:00Z 15.58622 1 -2017-10-18T05:00:00Z 15.58538 1 -2017-10-19T05:00:00Z 15.5846 1 -2017-10-20T05:00:00Z 15.58401 1 -2017-10-21T05:00:00Z 15.58335 1 -2017-10-22T05:00:00Z 15.58286 1 -2017-10-23T05:00:00Z 15.58394 1 -2017-10-24T05:00:00Z 15.58348 1 -2017-10-25T05:00:00Z 15.58278 1 -2017-10-26T05:00:00Z 15.58187 1 -2017-10-27T05:00:00Z 15.58084 1 -2017-10-28T05:00:00Z 15.58001 1 -2017-10-29T05:00:00Z 15.57932 1 -2017-10-30T05:00:00Z 15.57852 1 -2017-10-31T05:00:00Z 15.57775 1 -2017-11-01T05:00:00Z 15.57717 1 -2017-11-02T05:00:00Z 15.57662 1 -2017-11-03T05:00:00Z 15.57609 1 -2017-11-04T05:00:00Z 15.57579 1 -2017-11-05T05:00:00Z 15.57566 1 -2017-11-06T06:00:00Z 15.57553 1 -2017-11-07T06:00:00Z 15.5754 1 -2017-11-08T06:00:00Z 15.57527 1 -2017-11-09T06:00:00Z 15.57535 1 -2017-11-10T06:00:00Z 15.57547 1 -2017-11-11T06:00:00Z 15.5752 1 -2017-11-12T06:00:00Z 15.57478 1 -2017-11-13T06:00:00Z 15.57434 1 -2017-11-14T06:00:00Z 15.57401 1 -2017-11-15T06:00:00Z 15.57379 1 -2017-11-16T06:00:00Z 15.57358 1 -2017-11-17T06:00:00Z 15.57328 1 -2017-11-18T06:00:00Z 15.57297 1 -2017-11-19T06:00:00Z 15.57266 1 -2017-11-20T06:00:00Z 15.57229 1 -2017-11-21T06:00:00Z 15.57171 1 -2017-11-22T06:00:00Z 15.57123 1 -2017-11-23T06:00:00Z 15.57088 1 -2017-11-24T06:00:00Z 15.57035 1 -2017-11-25T06:00:00Z 15.56986 1 -2017-11-26T06:00:00Z 15.56946 1 -2017-11-27T06:00:00Z 15.56907 1 -2017-11-28T06:00:00Z 15.56867 1 -2017-11-29T06:00:00Z 15.56827 1 -2017-11-30T06:00:00Z 15.56794 1 -2017-12-01T06:00:00Z 15.56769 1 -2017-12-02T06:00:00Z 15.56746 1 -2017-12-03T06:00:00Z 15.5672 1 -2017-12-04T06:00:00Z 15.56688 1 -2017-12-05T06:00:00Z 15.56676 1 -2017-12-06T06:00:00Z 15.56733 1 -2017-12-07T06:00:00Z 15.5666 1 -2017-12-08T06:00:00Z 15.56609 1 -2017-12-09T06:00:00Z 15.56559 1 -2017-12-10T06:00:00Z 15.56508 1 -2017-12-11T06:00:00Z 15.56455 1 -2017-12-12T06:00:00Z 15.56407 1 -2017-12-13T06:00:00Z 15.56361 1 -2017-12-14T06:00:00Z 15.56319 1 -2017-12-15T06:00:00Z 15.56287 1 -2017-12-16T06:00:00Z 15.56257 1 -2017-12-17T06:00:00Z 15.56205 1 -2017-12-18T06:00:00Z 15.56272 1 -2017-12-19T06:00:00Z 15.56272 1 -2017-12-20T06:00:00Z 15.56425 1 -2017-12-21T06:00:00Z 15.5667 1 -2017-12-22T06:00:00Z 15.56678 1 -2017-12-23T06:00:00Z 15.56781 1 -2017-12-24T06:00:00Z 15.56873 1 -2017-12-25T06:00:00Z 15.56877 1 -2017-12-26T06:00:00Z 15.56857 1 -2017-12-27T06:00:00Z 15.56839 1 -2017-12-28T06:00:00Z 15.56797 1 -2017-12-29T06:00:00Z 15.56728 1 -2017-12-30T06:00:00Z 15.56687 1 -2017-12-31T06:00:00Z 15.56691 1 -2018-01-01T06:00:00Z 15.56681 1 -2018-01-02T06:00:00Z 15.56634 1 -2018-01-03T06:00:00Z 15.56589 1 -2018-01-04T06:00:00Z 15.56532 1 -2018-01-05T06:00:00Z 15.56506 1 -2018-01-06T06:00:00Z 15.56479 1 -2018-01-07T06:00:00Z 15.56446 1 -2018-01-08T06:00:00Z 15.56415 1 -2018-01-09T06:00:00Z 15.56462 1 -2018-01-10T06:00:00Z 15.5645 1 -2018-01-11T06:00:00Z 15.56436 1 -2018-01-12T06:00:00Z 15.56582 1 -2018-01-13T06:00:00Z 15.56554 1 -2018-01-14T06:00:00Z 15.56513 1 -2018-01-15T06:00:00Z 15.56455 1 -2018-01-16T06:00:00Z 15.56444 1 -2018-01-17T06:00:00Z 15.56438 1 -2018-01-18T06:00:00Z 15.56382 1 -2018-01-19T06:00:00Z 15.5632 1 -2018-01-20T06:00:00Z 15.56266 1 -2018-01-21T06:00:00Z 15.56237 1 -2018-01-22T06:00:00Z 15.56247 1 -2018-01-23T06:00:00Z 15.56265 1 -2018-01-24T06:00:00Z 15.56244 1 -2018-01-25T06:00:00Z 15.56236 1 -2018-01-26T06:00:00Z 15.56209 1 -2018-01-27T06:00:00Z 15.56187 1 -2018-01-28T06:00:00Z 15.56222 1 -2018-01-29T06:00:00Z 15.56215 1 -2018-01-30T06:00:00Z 15.56204 1 -2018-01-31T06:00:00Z 15.56155 1 -2018-02-01T06:00:00Z 15.56097 1 -2018-02-02T06:00:00Z 15.5608 0 -2018-02-03T06:00:00Z 15.56061 0 -2018-02-04T06:00:00Z 15.56042 0 -2018-02-05T06:00:00Z 15.56023 0 -2018-02-06T06:00:00Z 15.56003 0 -2018-02-07T06:00:00Z 15.55983 0 -2018-02-08T06:00:00Z 15.55964 0 -2018-02-09T06:00:00Z 15.55945 0 -2018-02-10T06:00:00Z 15.55926 0 -2018-02-11T06:00:00Z 15.55909 0 -2018-02-12T06:00:00Z 15.55887 0 -2018-02-13T06:00:00Z 15.55863 0 -2018-02-14T06:00:00Z 15.55837 0 -2018-02-15T06:00:00Z 15.55805 0 -2018-02-16T06:00:00Z 15.55787 0 -2018-02-17T06:00:00Z 15.55853 0 -2018-02-18T06:00:00Z 15.55899 0 -2018-02-19T06:00:00Z 15.55931 0 -2018-02-20T06:00:00Z 15.5592 0 -2018-02-21T06:00:00Z 15.56374 0 -2018-02-22T06:00:00Z 15.5831 0 -2018-02-23T06:00:00Z 15.60131 0 -2018-02-24T06:00:00Z 15.60942 0 -2018-02-25T06:00:00Z 15.62022 0 -2018-02-26T06:00:00Z 15.62911 0 -2018-02-27T06:00:00Z 339.9041 0 -2018-02-28T06:00:00Z 650.8204 0 -2018-03-01T06:00:00Z 650.9202 0 -2018-03-02T06:00:00Z 373.9303 0 -2018-03-03T06:00:00Z 380.3797 0 -2018-03-04T06:00:00Z 652.114 0 -2018-03-05T06:00:00Z 652.0799 0 -2018-03-06T06:00:00Z 651.9802 0 -2018-03-07T06:00:00Z 651.813 0 -2018-03-08T06:00:00Z 651.6462 0 -2018-03-09T06:00:00Z 1016.645 0 -2018-03-10T06:00:00Z 1282.398 0 -2018-03-11T06:00:00Z 1281.759 0 -2018-03-12T05:00:00Z 1281.192 0 -2018-03-13T05:00:00Z 1280.458 0 -2018-03-14T05:00:00Z 1279.708 0 -2018-03-15T05:00:00Z 1278.92 0 -2018-03-16T05:00:00Z 1278.066 0 -2018-03-17T05:00:00Z 1277.271 0 -2018-03-18T05:00:00Z 1276.626 0 -2018-03-19T05:00:00Z 1275.837 0 -2018-03-20T05:00:00Z 929.6672 0 -2018-03-21T05:00:00Z 649.1014 0 -2018-03-22T05:00:00Z 648.904 0 -2018-03-23T05:00:00Z 467.906 0 -2018-03-24T05:00:00Z 333.0367 0 -2018-03-25T05:00:00Z 333.0048 0 -2018-03-26T05:00:00Z 332.977 0 -2018-03-27T05:00:00Z 332.9382 0 -2018-03-28T05:00:00Z 333.0977 0 -2018-03-29T05:00:00Z 333.4517 0 -2018-03-30T05:00:00Z 333.5827 0 -2018-03-31T05:00:00Z 333.5851 0 -2018-04-01T05:00:00Z 333.537 0 -2018-04-02T05:00:00Z 333.5133 0 -2018-04-03T05:00:00Z 333.4506 0 -2018-04-04T05:00:00Z 333.3746 0 -2018-04-05T05:00:00Z 333.3358 0 -2018-04-06T05:00:00Z 333.2436 0 -2018-04-07T05:00:00Z 333.2088 0 -2018-04-08T05:00:00Z 333.202 0 -2018-04-09T05:00:00Z 333.1184 0 -2018-04-10T05:00:00Z 333.0634 0 -2018-04-11T05:00:00Z 124.7185 0 -2018-04-12T05:00:00Z 15.60517 0 -2018-04-13T05:00:00Z 15.60425 0 -2018-04-14T05:00:00Z 15.60479 0 -2018-04-15T05:00:00Z 15.6055 0 -2018-04-16T05:00:00Z 15.6045 0 -2018-04-17T05:00:00Z 15.60387 0 -2018-04-18T05:00:00Z 15.60346 0 -2018-04-19T05:00:00Z 15.60328 0 -2018-04-20T05:00:00Z 15.60322 0 -2018-04-21T05:00:00Z 15.60274 0 -2018-04-22T05:00:00Z 15.60333 0 -2018-04-23T05:00:00Z 15.60438 0 -2018-04-24T05:00:00Z 15.60414 0 -2018-04-25T05:00:00Z 15.60413 0 -2018-04-26T05:00:00Z 15.60413 0 -2018-04-27T05:00:00Z 15.60413 0 -2018-04-28T05:00:00Z 15.60412 0 -2018-04-29T05:00:00Z 15.60396 0 -2018-04-30T05:00:00Z 15.60369 0 -2018-05-01T05:00:00Z 15.60337 0 -2018-05-02T05:00:00Z 15.60304 0 -2018-05-03T05:00:00Z 15.6028 0 -2018-05-04T05:00:00Z 15.60421 0 -2018-05-05T05:00:00Z 15.6063 0 -2018-05-06T05:00:00Z 15.6067 0 -2018-05-07T05:00:00Z 15.6067 0 -2018-05-08T05:00:00Z 15.6067 0 -2018-05-09T05:00:00Z 15.60666 0 -2018-05-10T05:00:00Z 15.60632 0 -2018-05-11T05:00:00Z 15.60585 0 -2018-05-12T05:00:00Z 10 0 -2018-05-13T05:00:00Z 10 0 -2018-05-14T05:00:00Z 10 0 -2018-05-15T05:00:00Z 10 0 -2018-05-16T05:00:00Z 10 0 -2018-05-17T05:00:00Z 10 0 -2018-05-18T05:00:00Z 10 0 -2018-05-19T05:00:00Z 10 0 -2018-05-20T05:00:00Z 10 0 -2018-05-21T05:00:00Z 10 0 -2018-05-22T05:00:00Z 4.1875 0 -2018-05-23T05:00:00Z 1 0 -2018-05-24T05:00:00Z 1 0 -2018-05-25T05:00:00Z 1 0 -2018-05-26T05:00:00Z 1 0 -2018-05-27T05:00:00Z 1 0 -2018-05-28T05:00:00Z 1 0 -2018-05-29T05:00:00Z 1 0 -2018-05-30T05:00:00Z 7.875 0 -2018-05-31T05:00:00Z 16 0 -2018-06-01T05:00:00Z 16 0 -2018-06-02T05:00:00Z 16 0 -2018-06-03T05:00:00Z 16 0 -2018-06-04T05:00:00Z 16 0 -2018-06-05T05:00:00Z 16 0 -2018-06-06T05:00:00Z 16 0 -2018-06-07T05:00:00Z 16 0 -2018-06-08T05:00:00Z 16 0 -2018-06-09T05:00:00Z 16 0 -2018-06-10T05:00:00Z 16 0 -2018-06-11T05:00:00Z 16 0 -2018-06-12T05:00:00Z 16 0 -2018-06-13T05:00:00Z 16 0 -2018-06-14T05:00:00Z 16 0 -2018-06-15T05:00:00Z 16 0 -2018-06-16T05:00:00Z 16 0 -2018-06-17T05:00:00Z 16 0 -2018-06-18T05:00:00Z 16 0 -2018-06-19T05:00:00Z 16 0 -2018-06-20T05:00:00Z 16 0 -2018-06-21T05:00:00Z 16 0 -2018-06-22T05:00:00Z 16 0 -2018-06-23T05:00:00Z 16 0 -2018-06-24T05:00:00Z 16 0 -2018-06-25T05:00:00Z 16 0 -2018-06-26T05:00:00Z 16 0 -2018-06-27T05:00:00Z 16 0 -2018-06-28T05:00:00Z 16 0 -2018-06-29T05:00:00Z 16 0 -2018-06-30T05:00:00Z 16 0 -2018-07-01T05:00:00Z 16 0 -2018-07-02T05:00:00Z 16 0 -2018-07-03T05:00:00Z 16 0 -2018-07-04T05:00:00Z 16 0 -2018-07-05T05:00:00Z 16 0 -2018-07-06T05:00:00Z 16 0 -2018-07-07T05:00:00Z 16 0 -2018-07-08T05:00:00Z 16 0 -2018-07-09T05:00:00Z 16 0 -2018-07-10T05:00:00Z 16 0 -2018-07-11T05:00:00Z 16 0 -2018-07-12T05:00:00Z 16 0 -2018-07-13T05:00:00Z 16 0 -2018-07-14T05:00:00Z 16 0 -2018-07-15T05:00:00Z 16 0 -2018-07-16T05:00:00Z 16 0 -2018-07-17T05:00:00Z 16 0 -2018-07-18T05:00:00Z 16 0 -2018-07-19T05:00:00Z 16 0 -2018-07-20T05:00:00Z 16 0 -2018-07-21T05:00:00Z 16 0 -2018-07-22T05:00:00Z 16 0 -2018-07-23T05:00:00Z 16 0 -2018-07-24T05:00:00Z 16 0 -2018-07-25T05:00:00Z 16 0 -2018-07-26T05:00:00Z 16 0 -2018-07-27T05:00:00Z 16 0 -2018-07-28T05:00:00Z 16 0 -2018-07-29T05:00:00Z 16 0 -2018-07-30T05:00:00Z 16 0 -2018-07-31T05:00:00Z 16 0 -2018-08-01T05:00:00Z 16 0 -2018-08-02T05:00:00Z 16 0 -2018-08-03T05:00:00Z 16 0 -2018-08-04T05:00:00Z 16 0 -2018-08-05T05:00:00Z 16 0 -2018-08-06T05:00:00Z 16 0 -2018-08-07T05:00:00Z 16 0 -2018-08-08T05:00:00Z 16 0 -2018-08-09T05:00:00Z 16 0 -2018-08-10T05:00:00Z 16 0 -2018-08-11T05:00:00Z 16 0 -2018-08-12T05:00:00Z 16 0 -2018-08-13T05:00:00Z 16 0 -2018-08-14T05:00:00Z 16 0 -2018-08-15T05:00:00Z 16 0 -2018-08-16T05:00:00Z 16 0 -2018-08-17T05:00:00Z 16 0 -2018-08-18T05:00:00Z 16 0 -2018-08-19T05:00:00Z 16 0 -2018-08-20T05:00:00Z 16 0 -2018-08-21T05:00:00Z 16 0 -2018-08-22T05:00:00Z 16 0 -2018-08-23T05:00:00Z 16 0 -2018-08-24T05:00:00Z 16 0 -2018-08-25T05:00:00Z 16 0 -2018-08-26T05:00:00Z 16 0 -2018-08-27T05:00:00Z 16 0 -2018-08-28T05:00:00Z 16 0 -2018-08-29T05:00:00Z 16 0 -2018-08-30T05:00:00Z 16 0 -2018-08-31T05:00:00Z 16 0 -2018-09-01T05:00:00Z 16 0 -2018-09-02T05:00:00Z 16 0 -2018-09-03T05:00:00Z 16 0 -2018-09-04T05:00:00Z 16 0 -2018-09-05T05:00:00Z 16 0 -2018-09-06T05:00:00Z 16 0 -2018-09-07T05:00:00Z 16 0 -2018-09-08T05:00:00Z 16 0 -2018-09-09T05:00:00Z 16 0 -2018-09-10T05:00:00Z 16 0 -2018-09-11T05:00:00Z 16 0 -2018-09-12T05:00:00Z 16 0 -2018-09-13T05:00:00Z 16 0 -2018-09-14T05:00:00Z 16 0 -2018-09-15T05:00:00Z 16 0 -2018-09-16T05:00:00Z 16 0 -2018-09-17T05:00:00Z 16 0 -2018-09-18T05:00:00Z 16 0 -2018-09-19T05:00:00Z 16 0 -2018-09-20T05:00:00Z 16 0 -2018-09-21T05:00:00Z 16 0 -2018-09-22T05:00:00Z 16 0 -2018-09-23T05:00:00Z 16 0 -2018-09-24T05:00:00Z 16 0 -2018-09-25T05:00:00Z 16 0 -2018-09-26T05:00:00Z 16 0 -2018-09-27T05:00:00Z 691.8687 0 -2018-09-28T05:00:00Z 2253.265 0 -2018-09-29T05:00:00Z 3175.244 0 -2018-09-30T05:00:00Z 3172.078 0 -2018-10-01T05:00:00Z 3168.099 0 -2018-10-02T05:00:00Z 3164.392 0 -2018-10-03T05:00:00Z 3160.396 0 -2018-10-04T05:00:00Z 3156.067 0 -2018-10-05T05:00:00Z 3152.122 0 -2018-10-06T05:00:00Z 3148.577 0 -2018-10-07T05:00:00Z 3145.154 0 -2018-10-08T05:00:00Z 3143.792 0 -2018-10-09T05:00:00Z 3143.032 0 -2018-10-10T05:00:00Z 3142.938 0 -2018-10-11T05:00:00Z 1482.842 0 -2018-10-12T05:00:00Z 10.7633 0 -2018-10-13T05:00:00Z 10.76519 0 -2018-10-14T05:00:00Z 10.77792 0 -2018-10-15T05:00:00Z 10.79466 0 -2018-10-16T05:00:00Z 10.80249 0 -2018-10-17T05:00:00Z 10.81005 0 -2018-10-18T05:00:00Z 10.81185 0 -2018-10-19T05:00:00Z 10.81311 0 -2018-10-20T05:00:00Z 10.81548 0 -2018-10-21T05:00:00Z 10.82321 0 -2018-10-22T05:00:00Z 10.82525 0 -2018-10-23T05:00:00Z 10.82568 0 -2018-10-24T05:00:00Z 10.8263 0 -2018-10-25T05:00:00Z 868.1308 0 -2018-10-26T05:00:00Z 990.9943 0 -2018-10-27T05:00:00Z 10.83867 0 -2018-10-28T05:00:00Z 10.83963 0 -2018-10-29T05:00:00Z 10.8401 0 -2018-10-30T05:00:00Z 428.006 0 -2018-10-31T05:00:00Z 987.1632 0 -2018-11-01T05:00:00Z 987.3095 0 -2018-11-02T05:00:00Z 448.7878 0 -2018-11-03T05:00:00Z 10.84542 0 -2018-11-04T05:00:00Z 10.84593 0 -2018-11-05T06:00:00Z 10.84645 0 -2018-11-06T06:00:00Z 10.84662 0 -2018-11-07T06:00:00Z 10.84702 0 -2018-11-08T06:00:00Z 10.8486 0 -2018-11-09T06:00:00Z 10.84935 0 -2018-11-10T06:00:00Z 10.84954 0 -2018-11-11T06:00:00Z 10.84934 0 -2018-11-12T06:00:00Z 10.84919 0 -2018-11-13T06:00:00Z 10.84942 0 -2018-11-14T06:00:00Z 10.8492 0 -2018-11-15T06:00:00Z 10.84879 0 -2018-11-16T06:00:00Z 10.84852 0 -2018-11-17T06:00:00Z 923.4422 0 -2018-11-18T06:00:00Z 1954.663 0 -2018-11-19T06:00:00Z 2201 0 -2018-11-20T06:00:00Z 2201 0 -2018-11-21T06:00:00Z 2201 0 -2018-11-22T06:00:00Z 2201 0 -2018-11-23T06:00:00Z 2201 0 -2018-11-24T06:00:00Z 2201 0 -2018-11-25T06:00:00Z 2201 0 -2018-11-26T06:00:00Z 2201 0 -2018-11-27T06:00:00Z 2201 0 -2018-11-28T06:00:00Z 2201 0 -2018-11-29T06:00:00Z 2201 0 -2018-11-30T06:00:00Z 2201 0 -2018-12-01T06:00:00Z 2201 0 -2018-12-02T06:00:00Z 2201 0 -2018-12-03T06:00:00Z 2201 0 -2018-12-04T06:00:00Z 2201 0 -2018-12-05T06:00:00Z 2201 0 -2018-12-06T06:00:00Z 2201 0 -2018-12-07T06:00:00Z 2201 0 -2018-12-08T06:00:00Z 2201 0 -2018-12-09T06:00:00Z 2201 0 -2018-12-10T06:00:00Z 2201 0 -2018-12-11T06:00:00Z 2201 0 -2018-12-12T06:00:00Z 2201 0 -2018-12-13T06:00:00Z 2201 0 -2018-12-14T06:00:00Z 2201 0 -2018-12-15T06:00:00Z 2201 0 -2018-12-16T06:00:00Z 2201 0 -2018-12-17T06:00:00Z 2201 0 -2018-12-18T06:00:00Z 2201 0 -2018-12-19T06:00:00Z 2201 0 -2018-12-20T06:00:00Z 2886.51 0 -2018-12-21T06:00:00Z 3799.749 0 -2018-12-22T06:00:00Z 3793.664 0 -2018-12-23T06:00:00Z 3787.994 0 -2018-12-24T06:00:00Z 3782.18 0 -2018-12-25T06:00:00Z 3775.83 0 -2018-12-26T06:00:00Z 3770.396 0 -2018-12-27T06:00:00Z 2851.01 0 -2018-12-28T06:00:00Z 1902.076 0 -2018-12-29T06:00:00Z 1903.667 0 -2018-12-30T06:00:00Z 1902.654 0 -2018-12-31T06:00:00Z 1901.441 0 -2019-01-01T06:00:00Z 1901.169 0 -2019-01-02T06:00:00Z 1901.199 0 -2019-01-03T06:00:00Z 1900.327 0 -2019-01-04T06:00:00Z 1900.33 0 -2019-01-05T06:00:00Z 1378.575 0 -2019-01-06T06:00:00Z 962.674 0 -2019-01-07T06:00:00Z 962.5347 0 -2019-01-08T06:00:00Z 962.3807 0 -2019-01-09T06:00:00Z 962.2154 0 -2019-01-10T06:00:00Z 961.9803 0 -2019-01-11T06:00:00Z 961.7458 0 -2019-01-12T06:00:00Z 961.5217 0 -2019-01-13T06:00:00Z 961.6577 0 -2019-01-14T06:00:00Z 961.738 0 -2019-01-15T06:00:00Z 961.5814 0 -2019-01-16T06:00:00Z 1498.59 0 -2019-01-17T06:00:00Z 1897.882 0 -2019-01-18T06:00:00Z 1896.814 0 -2019-01-19T06:00:00Z 1895.597 0 -2019-01-20T06:00:00Z 1894.52 0 -2019-01-21T06:00:00Z 1893.186 0 -2019-01-22T06:00:00Z 1891.592 0 -2019-01-23T06:00:00Z 1126.164 0 -2019-01-24T06:00:00Z 328.3099 0 -2019-01-25T06:00:00Z 328.2792 0 -2019-01-26T06:00:00Z 328.2346 0 -2019-01-27T06:00:00Z 328.19 0 -2019-01-28T06:00:00Z 328.1433 0 -2019-01-29T06:00:00Z 328.094 0 -2019-01-30T06:00:00Z 328.0551 0 -2019-01-31T06:00:00Z 327.9973 0 -2019-02-01T06:00:00Z 189.8128 0 -2019-02-02T06:00:00Z 96.79125 0 -2019-02-03T06:00:00Z 96.79124 0 -2019-02-04T06:00:00Z 96.79125 0 -2019-02-05T06:00:00Z 96.79162 0 -2019-02-06T06:00:00Z 96.79253 0 -2019-02-07T06:00:00Z 96.79517 0 -2019-02-08T06:00:00Z 96.8012 0 -2019-02-09T06:00:00Z 96.80222 0 -2019-02-10T06:00:00Z 96.80185 0 -2019-02-11T06:00:00Z 96.80133 0 -2019-02-12T06:00:00Z 96.8022 0 -2019-02-13T06:00:00Z 96.80222 0 -2019-02-14T06:00:00Z 228.4349 0 -2019-02-15T06:00:00Z 328.1191 0 -2019-02-16T06:00:00Z 328.1153 0 -2019-02-17T06:00:00Z 328.0937 0 -2019-02-18T06:00:00Z 328.065 0 -2019-02-19T06:00:00Z 328.0271 0 -2019-02-20T06:00:00Z 328.0003 0 -2019-02-21T06:00:00Z 328.024 0 -2019-02-22T06:00:00Z 328.0527 0 -2019-02-23T06:00:00Z 328.0767 0 -2019-02-24T06:00:00Z 328.0767 0 -2019-02-25T06:00:00Z 328.0768 0 -2019-02-26T06:00:00Z 531.6678 0 -2019-02-27T06:00:00Z 643.2107 0 -2019-02-28T06:00:00Z 643.088 0 -2019-03-01T06:00:00Z 444.7665 0 -2019-03-02T06:00:00Z 96.78426 0 -2019-03-03T06:00:00Z 96.78379 0 -2019-03-04T06:00:00Z 96.78445 0 -2019-03-05T06:00:00Z 96.7822 0 -2019-03-06T06:00:00Z 67.72804 0 -2019-03-07T06:00:00Z 41 0 -2019-03-08T06:00:00Z 41 0 -2019-03-09T06:00:00Z 41 0 -2019-03-10T06:00:00Z 41 0 -2019-03-11T05:00:00Z 41 0 -2019-03-12T05:00:00Z 232.3058 0 -2019-03-13T05:00:00Z 352.3813 0 -2019-03-14T05:00:00Z 352.8998 0 -2019-03-15T05:00:00Z 810.4133 0 -2019-03-16T05:00:00Z 1181 0 -2019-03-17T05:00:00Z 1181 0 -2019-03-18T05:00:00Z 1181 0 -2019-03-19T05:00:00Z 1181 0 -2019-03-20T05:00:00Z 1181 0 -2019-03-21T05:00:00Z 1181 0 -2019-03-22T05:00:00Z 1181 0 -2019-03-23T05:00:00Z 1181 0 -2019-03-24T05:00:00Z 1181 0 -2019-03-25T05:00:00Z 1181 0 -2019-03-26T05:00:00Z 1181 0 -2019-03-27T05:00:00Z 884.6508 0 -2019-03-28T05:00:00Z 667.1979 0 -2019-03-29T05:00:00Z 267.3404 0 -2019-03-30T05:00:00Z 15.59969 0 -2019-03-31T05:00:00Z 15.60032 0 -2019-04-01T05:00:00Z 15.59965 0 -2019-04-02T05:00:00Z 15.59934 0 -2019-04-03T05:00:00Z 15.59899 0 -2019-04-04T05:00:00Z 15.59886 0 -2019-04-05T05:00:00Z 15.59895 0 -2019-04-06T05:00:00Z 15.59899 0 -2019-04-07T05:00:00Z 15.5991 0 -2019-04-08T05:00:00Z 15.59962 0 -2019-04-09T05:00:00Z 15.59984 0 -2019-04-10T05:00:00Z 15.59977 0 -2019-04-11T05:00:00Z 15.59934 0 -2019-04-12T05:00:00Z 15.59889 0 -2019-04-13T05:00:00Z 15.59879 0 -2019-04-14T05:00:00Z 15.60215 0 -2019-04-15T05:00:00Z 15.61283 0 -2019-04-16T05:00:00Z 359.0665 0 -2019-04-17T05:00:00Z 649.6524 0 -2019-04-18T05:00:00Z 649.6158 0 -2019-04-19T05:00:00Z 1025.083 0 -2019-04-20T05:00:00Z 1281.883 0 -2019-04-21T05:00:00Z 1281.473 0 -2019-04-22T05:00:00Z 1280.777 0 -2019-04-23T05:00:00Z 1280.09 0 -2019-04-24T05:00:00Z 1279.535 0 -2019-04-25T05:00:00Z 1279.49 0 -2019-04-26T05:00:00Z 1279.071 0 -2019-04-27T05:00:00Z 1278.343 0 -2019-04-28T05:00:00Z 1277.628 0 -2019-04-29T05:00:00Z 1276.939 0 -2019-04-30T05:00:00Z 1276.155 0 -2019-05-01T05:00:00Z 1275.682 0 -2019-05-02T05:00:00Z 1277.635 0 -2019-05-03T05:00:00Z 1288.549 0 -2019-05-04T05:00:00Z 1292.751 0 -2019-05-05T05:00:00Z 1293.06 0 -2019-05-06T05:00:00Z 1292.817 0 - - \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml deleted file mode 100644 index 4e8b2f0..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml +++ /dev/null @@ -1,29880 +0,0 @@ -cpc-ora-db50:S0CWMSZ22019-05-06T16:00:51ZPT######SPT1.088S1900-01-01T00:00:00Z2019-05-06T16:00:51ZXMLSWTAMES.Flow.Inst.1Hour.0.Ccp-RevENNATIVE113100831008SWTAMES.Flow.Inst.1Hour.0.Ccp-RevAE011130.Flow.Inst.1Hour.0.Ccp-RevAMCO2.Flow.Inst.1Hour.0.Ccp-Rev - -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -106.4 0 -104 0 -104 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 - -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -106.4 0 -106.4 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -106.4 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.8439 0 -108.6197 0 -108.3959 0 -108.1726 0 -107.9496 0 -107.727 0 -107.5049 0 -107.2831 0 -107.0617 0 -106.8408 0 -106.6202 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -106.4 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -113.8 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -111.3 0 -113.8 0 -111.3 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -109.3764 0 -111.3 0 -110.7628 0 -108.6197 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -111.3 0 -108.9 0 -106.4 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -113.8 0 -116.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -113.8 0 -116.3 0 -116.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 - -113.8 0 -116.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -113.8 0 -116.3 0 -116.3 0 -113.8 0 -113.8 0 -116.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 - -113.8 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -116.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -116.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -113.8 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -116.3 0 -118.7 0 -116.3 0 -118.7 0 -118.7 0 -121.2 0 -118.7 0 -121.2 0 -128.5 0 -134.5 0 -149.3 0 -149.3 0 -152.3 0 -158.3 0 -161.3 0 -164.2 0 -149.3 0 -143.4 0 -149.3 0 -167.2 0 -155.3 0 -182.1 0 -147.6127 0 -152.5727 0 -157.5909 0 -162.5655 0 -167.5273 0 -172.5455 0 -177.4637 0 -182.4818 0 -187.42 0 -192.4182 0 -197.4218 0 -203.7455 0 -211.4582 0 -219.1691 0 -232.3 0 -232.3 0 -227.7 0 -236.9 0 -236.9 0 -241.5 0 -241.5 0 -246.2 0 -264.6 0 -292.4 0 -326.1 0 -368.4 0 -404.7 0 -428.9001 0 -412.4792 0 -419.5501 0 -426.6126 0 -433.6501 0 -440.7459 0 -447.7501 0 -454.7792 0 -461.8501 0 -468.9126 0 -475.9501 0 -483.0459 0 -490.0501 0 -495.3001 0 -489.3001 0 -489.3001 0 -483.3001 0 -483.3001 0 -465.1001 0 -465.1001 0 -459.1001 0 -441.0001 0 -428.9001 0 -441.0001 0 -422.8001 0 -428.9001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -416.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -416.8001 0 -410.7 0 -410.7 0 -398.7 0 -404.7 0 -404.7 0 -398.7 0 -404.7 0 -404.7 0 -398.7 0 -404.7 0 -404.7 0 -416.8001 0 -416.8001 0 -422.8001 0 -422.8001 0 -428.9001 0 -441.0001 0 -441.0001 0 -447.0001 0 -465.1001 0 -483.3001 0 -501.4001 0 -495.3001 0 -519.5001 0 -537.6001 0 -555.8001 0 -573.9001 0 -579.9001 0 -579.9001 0 -598.1001 0 -604.1001 0 -598.1001 0 -604.1001 0 -610.2001 0 -592.0001 0 -604.1001 0 -598.1001 0 -592.0001 0 -586.0001 0 -586.0001 0 -573.9001 0 -567.9001 0 -561.8001 0 -555.8001 0 -549.7001 0 -531.6001 0 -519.5001 0 -501.4001 0 -501.4001 0 -477.2001 0 -483.3001 0 -465.1001 0 -453.0001 0 -453.0001 0 -447.0001 0 -434.9001 0 -428.9001 0 -422.8001 0 -410.7 0 -404.7 0 -386.6 0 -398.7 0 -398.7 0 -392.6 0 -380.5 0 -368.4 0 -368.4 0 -368.4 0 -356.3 0 -356.3 0 -344.3 0 -332.2 0 -338.2 0 -320.1 0 -320.1 0 -315.5 0 -315.5 0 -301.6 0 -301.6 0 -297 0 -297 0 -292.4 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -283.1 0 -283.1 0 -283.1 0 -278.5 0 -278.5 0 -278.5 0 -273.9 0 -264.6 0 -264.6 0 -260 0 -232.3 0 -197 0 -209.2 0 -199.9 0 -197 0 -232.3 0 -246.2 0 -246.2 0 -241.5 0 -232.3 0 -199.9 0 -218.4 0 -194 0 -199.9 0 -232.3 0 -227.7 0 -227.7 0 -227.7 0 -213.8 0 -227.7 0 -227.7 0 -199.9 0 -182.1 0 -164.2 0 -182.1 0 -176.1 0 -176.1 0 -167.2 0 -185.1 0 -204.6 0 -204.6 0 -213.8 0 -209.2 0 -204.6 0 -209.2 0 -199.9 0 -204.6 0 -199.9 0 -204.6 0 -199.9 0 -199.9 0 -199.9 0 -209.2 0 -204.6 0 -209.2 0 -204.6 0 -204.6 0 -199.9 0 -199.9 0 -194 0 -191 0 -191 0 -191 0 -191 0 -188 0 -191 0 -191 0 -191 0 -191 0 -191 0 -194 0 -194 0 -194 0 -194 0 -194 0 -194 0 -197 0 -194 0 -194 0 -194 0 -176.1 0 -173.2 0 -188 0 -185.1 0 -185.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -185.1 0 -182.1 0 -185.1 0 -182.1 0 -185.1 0 -182.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -170.2 0 -185.1 0 -182.1 0 -179.1 0 -179.1 0 -176.1 0 -173.2 0 -176.1 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -173.2 0 -176.1 0 -179.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -179.1 0 -176.1 0 -176.1 0 -167.2 0 -152.3 0 -143.4 0 -140.4 0 -167.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -164.2 0 -167.2 0 -149.3 0 -155.3 0 -161.3 0 -146.4 0 -158.3 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -170.2 0 -170.2 0 -170.2 0 -164.2 0 -158.3 0 -164.2 0 -143.4 0 -161.3 0 -164.2 0 -161.3 0 -164.2 0 -161.3 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -152.3 0 -161.3 0 -161.3 0 -161.3 0 -164.2 0 -161.3 0 -140.4 0 -161.3 0 -158.3 0 -140.4 0 -143.4 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -161.3 0 -149.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -134.5 0 -116.3 0 -121.2 0 -121.2 0 -121.2 0 -131.5 0 -137.4 0 -128.5 0 -158.3 0 -155.3 0 -158.3 0 -158.3 0 -155.3 0 -152.3 0 -155.3 0 -164.2 0 -164.2 0 -170.2 0 -173.2 0 -176.1 0 -179.1 0 -158.3 0 -194 0 -204.6 0 -204.6 0 -209.2 0 -209.2 0 -199.9 0 -213.8 0 -227.7 0 -250.8 0 -273.9 0 -292.4 0 -301.6 0 -306.2 0 -306.2 0 -310.8 0 -301.6 0 -297 0 -297 0 -292.4 0 -292.4 0 -292.4 0 -287.7 0 -292.4 0 -297 0 -306.2 0 -320.1 0 -350.3 0 -374.5 0 -398.7 0 -422.8001 0 -441.0001 0 -459.1001 0 -465.1001 0 -483.3001 0 -489.3001 0 -495.3001 0 -501.4001 0 -507.4001 0 -501.4001 0 -507.4001 0 -507.4001 0 -507.4001 0 -507.4001 0 -501.4001 0 -495.3001 0 -495.3001 0 -489.3001 0 -489.3001 0 -477.2001 0 -459.1001 0 -477.2001 0 -453.0001 0 -483.3001 0 -453.0001 0 -501.4001 0 -489.3001 0 -507.4001 0 -495.3001 0 -501.4001 0 -495.3001 0 -495.3001 0 -489.3001 0 -489.3001 0 -495.3001 0 -489.3001 0 -483.3001 0 -483.3001 0 -477.2001 0 -489.3001 0 -465.1001 0 -459.1001 0 -459.1001 0 -447.0001 0 -447.0001 0 -434.9001 0 -422.8001 0 -422.8001 0 -416.8001 0 -404.7 0 -404.7 0 -404.7 0 -404.7 0 -398.7 0 -404.7 0 -404.7 0 -404.7 0 -398.7 0 -398.7 0 -392.6 0 -398.7 0 -398.7 0 -398.7 0 -392.6 0 -398.7 0 -404.7 0 -398.7 0 -398.7 0 -404.7 0 -404.7 0 -410.7 0 -410.7 0 -410.7 0 -416.8001 0 -398.7 0 -404.7 0 -410.7 0 -404.7 0 -404.7 0 -404.7 0 -404.7 0 -410.7 0 -404.7 0 -410.7 0 -404.7 0 -410.7 0 -416.8001 0 -416.8001 0 -416.8001 0 -398.7 0 -392.6 0 -398.7 0 -380.5 0 -362.4 0 -338.2 0 -338.2 0 -386.6 0 -386.6 0 -374.5 0 -368.4 0 -362.4 0 -362.4 0 -362.4 0 -362.4 0 -362.4 0 -356.3 0 -350.3 0 -350.3 0 -356.3 0 -344.3 0 -344.3 0 -344.3 0 -338.2 0 -332.2 0 -315.5 0 -310.8 0 -278.5 0 -260 0 -264.6 0 -273.9 0 -255.4 0 -287.7 0 -320.1 0 -320.1 0 -315.5 0 -315.5 0 -301.6 0 -320.1 0 -310.8 0 -269.3 0 -273.9 0 -264.6 0 -250.8 0 -269.3 0 -264.6 0 -241.5 0 -250.8 0 -246.2 0 -250.8 0 -260 0 -241.5 0 -250.8 0 -260 0 -246.2 0 -264.6 0 -260 0 -278.5 0 -292.4 0 -297 0 -287.7 0 -273.9 0 -292.4 0 -287.7 0 -287.7 0 -292.4 0 -292.4 0 -292.4 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -283.1 0 -278.5 0 -278.5 0 -278.5 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -269.3 0 -273.9 0 -278.5 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -264.6 0 -269.3 0 -273.9 0 -269.3 0 -218.4 0 -209.2 0 -209.2 0 -213.8 0 -260 0 -227.7 0 -218.4 0 -223.1 0 -227.7 0 -236.9 0 -269.3 0 -269.3 0 -260 0 -204.6 0 -264.6 0 -218.4 0 -241.5 0 -260 0 -236.9 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -260 0 -264.6 0 -255.4 0 -255.4 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -255.4 0 -255.4 0 -255.4 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -232.3 0 -250.8 0 -246.2 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -246.2 0 -236.9 0 -241.5 0 -246.2 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -246.2 0 -246.2 0 -246.2 0 -246.2 0 -250.8 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -232.3 0 -236.9 0 -232.3 0 -232.3 0 -232.3 0 -227.7 0 -232.3 0 -232.3 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -223.1 0 -204.6 0 -199.9 0 -232.3 0 -236.9 0 -236.9 0 -204.6 0 -227.7 0 -236.9 0 -236.9 0 -213.8 0 -260 0 -246.2 0 -246.2 0 -269.3 0 -273.9 0 -320.1 0 -350.3 0 -434.9001 0 -495.3001 0 -616.2001 0 -720.7001 0 -772.9001 0 -825.2001 0 -842.6001 0 -886.1001 0 -920.9001 0 -964.5001 0 -999.3001 0 -1052 0 -1107 0 -1084.4 0 -1168 0 -1192 0 -1192 0 -1168 0 -1168 0 -1132 0 -1119 0 -1069 0 -1052 0 -1034 0 -999.3001 0 -999.3001 0 -964.5001 0 -929.6001 0 -886.1001 0 -851.3001 0 -807.7001 0 -790.3001 0 -746.8001 0 -720.7001 0 -668.4001 0 -659.7001 0 -642.3001 0 -616.2001 0 -610.2001 0 -598.1001 0 -573.9001 0 -598.1001 0 -555.8001 0 -579.9001 0 -567.9001 0 -573.9001 0 -561.8001 0 -563.8334 0 -553.2883 0 -543.3413 0 -533.3648 0 -523.4471 0 -513.5001 0 -501.4001 0 -505.4001 0 -495.3001 0 -501.4001 0 -495.3001 0 -495.3001 0 -489.3001 0 -489.3001 0 -483.3001 0 -477.2001 0 -471.2001 0 -465.1001 0 -471.2001 0 -471.2001 0 -468.7601 0 -459.1001 0 -464.3259 0 -461.2291 0 -458.1162 0 -454.9678 0 -451.8388 0 -448.742 0 -445.6452 0 -442.5484 0 -428.9001 0 -434.9001 0 -422.8001 0 -416.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -416.8001 0 -422.8001 0 -411.92 0 -416.8001 0 -416.1223 0 -413.4112 0 -410.7 0 -404.45 0 -403.45 0 -402.45 0 -401.45 0 -400.45 0 -399.45 0 -398.7 0 -398.7 0 -398.7 0 -398.7 0 -392.6 0 -392.6 0 -398.7 0 -404.7 0 -398.7 0 -392.6 0 -392.6 0 -392.6 0 -398.7 0 -398.7 0 -398.7 0 -398.7 0 -404.7 0 -410.7 0 -416.8001 0 -410.7 0 -416.8001 0 -416.8001 0 -410.7 0 -422.8001 0 -422.8001 0 -422.8001 0 -410.7 0 -416.8001 0 -416.8001 0 -416.8001 0 -410.7 0 -416.8001 0 -416.8001 0 -416.8001 0 -416.8001 0 -422.8001 0 -423.119 0 -424.3948 0 -425.6706 0 -426.9465 0 -428.2223 0 -429.4883 0 -430.7432 0 -431.9981 0 -433.253 0 -434.5079 0 -435.7772 0 -437.053 0 -438.3288 0 -439.6046 0 -440.8805 0 -442.1373 0 -443.3922 0 -444.6471 0 -445.902 0 -447.1569 0 -448.4118 0 -449.6667 0 -450.9216 0 -452.1765 0 -453.4386 0 -454.7144 0 -455.9903 0 -457.2661 0 -458.5419 0 -459.8059 0 -461.0608 0 -462.3157 0 -463.5706 0 -464.8255 0 -466.0968 0 -467.3726 0 -468.6484 0 -469.9242 0 -471.2001 0 -471.2001 0 -459.1001 0 -465.1001 0 -465.1001 0 -459.1001 0 -447.0001 0 -453.0001 0 -447.0001 0 -447.0001 0 -441.0001 0 -447.0001 0 -441.0001 0 -434.9001 0 -441.0001 0 -441.0001 0 -441.0001 0 -441.0001 0 -447.0001 0 -447.0001 0 -447.0001 0 -447.0001 0 -447.0001 0 -447.0001 0 -434.9001 0 -434.9001 0 -434.9001 0 -422.8001 0 -434.9001 0 -428.9001 0 -434.9001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -428.9001 0 -428.9001 0 -428.9001 0 -428.9001 0 -416.8001 0 -416.8001 0 -416.8001 0 -416.8001 0 -404.7 0 -392.6 0 -326.1 0 -332.2 0 -310.8 0 -368.4 0 -392.6 0 -380.5 0 -386.6 0 -380.5 0 -380.5 0 -380.5 0 -374.5 0 -368.4 0 -374.5 0 -374.5 0 -374.5 0 -368.4 0 -368.4 0 -368.4 0 -368.4 0 -362.4 0 -362.4 0 -362.4 0 -362.4 0 -356.3 0 -356.3 0 -350.3 0 -362.4 0 -362.4 0 -315.5 0 -362.4 0 -356.3 0 -356.3 0 -362.4 0 -362.4 0 -368.4 0 -368.4 0 -362.4 0 -368.4 0 -368.4 0 -368.4 0 -362.4 0 -368.4 0 -368.4 0 -368.4 0 -374.5 0 -374.5 0 -374.5 0 -374.5 0 -368.4 0 -368.4 0 -374.5 0 -374.5 0 -380.5 0 -374.5 0 -380.5 0 -380.5 0 -380.5 0 -380.5 0 -380.5 0 -386.6 0 -386.6 0 -398.7 0 -392.6 0 -398.7 0 -398.7 0 -410.7 0 -410.7 0 -410.7 0 -416.8001 0 -410.7 0 -416.8001 0 -416.8001 0 -416.8001 0 -410.7 0 -410.7 0 -410.7 0 -404.7 0 -416.8001 0 -410.7 0 -404.7 0 -410.7 0 -410.7 0 -410.7 0 -410.7 0 -410.7 0 -410.7 0 -416.8001 0 -422.8001 0 -416.8001 0 -428.9001 0 -428.9001 0 -428.9001 0 -422.8001 0 -428.9001 0 -428.9001 0 -428.9001 0 -422.8001 0 -410.7 0 -422.8001 0 -416.8001 0 -416.8001 0 -422.8001 0 -416.8001 0 -422.8001 0 -416.8001 0 -422.8001 0 -428.9001 0 -428.9001 0 -428.9001 0 -428.9001 0 -428.9001 0 -428.9001 0 -428.9001 0 -422.8001 0 -422.8001 0 -416.8001 0 -416.8001 0 -410.7 0 -404.7 0 -392.6 0 -386.6 0 -392.6 0 -386.6 0 -380.5 0 -380.5 0 -374.5 0 -374.5 0 -374.5 0 -380.5 0 -386.6 0 -380.5 0 -380.5 0 -380.5 0 -380.5 0 -374.5 0 -362.4 0 -362.4 0 -356.3 0 -356.3 0 -356.3 0 -350.3 0 -350.3 0 -356.3 0 -350.3 0 -350.3 0 -350.3 0 -344.3 0 -344.3 0 -338.2 0 -338.2 0 -350.3 0 -344.3 0 -338.2 0 -344.3 0 -344.3 0 -344.3 0 -344.3 0 -338.2 0 -338.2 0 -338.2 0 -332.2 0 -338.2 0 -344.3 0 -344.3 0 -338.2 0 -344.3 0 -332.2 0 -332.2 0 -326.1 0 -326.1 0 -320.1 0 -320.1 0 -315.5 0 -320.1 0 -315.5 0 -315.5 0 -315.5 0 -310.8 0 -306.2 0 -310.8 0 -315.5 0 -310.8 0 -310.8 0 -306.2 0 -310.8 0 -310.8 0 -315.5 0 -315.5 0 -315.5 0 -315.5 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -306.2 0 -306.2 0 -306.2 0 -310.8 0 -310.8 0 -310.8 0 -306.2 0 -310.8 0 -306.2 0 -306.2 0 -306.2 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -306.2 0 -310.8 0 -310.8 0 -301.6 0 -301.6 0 -301.6 0 -246.2 0 -301.6 0 -301.6 0 -301.6 0 -255.4 0 -292.4 0 -297 0 -297 0 -297 0 -301.6 0 -297 0 -297 0 -297 0 -297 0 -297 0 -292.4 0 -292.4 0 -297 0 -292.4 0 -292.4 0 -292.4 0 -297 0 -292.4 0 -292.4 0 -292.4 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -283.1 0 -283.1 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -283.1 0 -283.1 0 -283.1 0 -283.1 0 -283.1 0 -278.5 0 -283.1 0 -278.5 0 -283.1 0 -283.1 0 -283.1 0 -283.1 0 -278.5 0 -283.1 0 -283.1 0 -278.5 0 -278.5 0 -273.9 0 -278.5 0 -273.9 0 -273.9 0 -273.9 0 -278.5 0 -278.5 0 -278.5 0 -273.9 0 -278.5 0 -278.5 0 -278.5 0 -278.5 0 -269.3 0 -278.5 0 -278.5 0 -273.9 0 -269.3 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -269.3 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -264.6 0 -264.6 0 -260 0 -255.4 0 -255.4 0 -264.6 0 -255.4 0 -232.3 0 -250.8 0 -255.4 0 -255.4 0 -260 0 -260 0 -260 0 -260 0 -255.4 0 -255.4 0 -255.4 0 -250.8 0 -255.4 0 -255.4 0 -255.4 0 -264.6 0 -255.4 0 -255.4 0 -255.4 0 -250.8 0 -255.4 0 -255.4 0 -250.8 0 -250.8 0 -246.2 0 -250.8 0 -246.2 0 -246.2 0 -250.8 0 -250.8 0 -250.8 0 -260 0 -260 0 -260 0 -260 0 -260 0 -255.4 0 -255.4 0 -255.4 0 -255.4 0 -255.4 0 -250.8 0 -250.8 0 -246.2 0 -246.2 0 -246.2 0 -246.2 0 -227.7 0 -246.2 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -246.2 0 -246.2 0 -246.2 0 -246.2 0 -246.2 0 -241.5 0 -246.2 0 -246.2 0 -241.5 0 -241.5 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -232.3 0 -236.9 0 -241.5 0 -241.5 0 -236.9 0 -236.9 0 -236.9 0 -236.9 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -246.2 0 -241.5 0 -236.9 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -246.2 0 -246.2 0 -236.9 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -232.3 0 -241.5 0 -236.9 0 -232.3 0 -204.6 0 -176.1 0 -232.3 0 -223.1 0 -236.9 0 -241.5 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -232.3 0 -241.5 0 -236.9 0 -241.5 0 -241.5 0 -246.2 0 -241.5 0 -241.5 0 -236.9 0 -241.5 0 -246.2 0 -227.7 0 -197 0 -236.9 0 -197 0 -185.1 0 -199.9 0 -185.1 0 -241.5 0 -246.2 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -241.5 0 -246.2 0 -241.5 0 -236.9 0 -246.2 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -236.9 0 -236.9 0 -241.5 0 -241.5 0 -246.2 0 -246.2 0 -246.2 0 -250.8 0 -241.5 0 -250.8 0 -250.8 0 -246.2 0 -236.9 0 -236.9 0 -241.5 0 -227.7 0 -227.7 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -232.3 0 -232.3 0 -236.9 0 -232.3 0 -241.5 0 -246.2 0 -246.2 0 -255.4 0 -255.4 0 -241.5 0 -246.2 0 -246.2 0 -250.8 0 -250.8 0 -255.4 0 -232.3 0 -241.5 0 -232.3 0 -236.9 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -241.5 0 -241.5 0 -236.9 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -236.9 0 -236.9 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -236.9 0 -241.5 0 -241.5 0 -241.5 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -227.7 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -227.7 0 -227.7 0 -232.3 0 -232.3 0 -232.3 0 -227.7 0 -232.3 0 -223.1 0 -188 0 -179.1 0 -204.6 0 -188 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -223.1 0 -223.1 0 -223.1 0 -223.1 0 -223.1 0 -218.4 0 -223.1 0 -223.1 0 -223.1 0 -223.1 0 -227.7 0 -223.1 0 -227.7 0 -227.7 0 -223.1 0 -213.8 0 -218.4 0 -188 0 -176.1 0 -185.1 0 -223.1 0 -223.1 0 -223.1 0 -223.1 0 -218.4 0 -213.8 0 -213.8 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -191 0 -218.4 0 -218.4 0 -218.4 0 -213.8 0 -218.4 0 -197 0 -218.4 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -209.2 0 -209.2 0 -209.2 0 -209.2 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -204.6 0 -204.6 0 -173.2 0 -204.6 0 -204.6 0 -194 0 -204.6 0 -197 0 -204.6 0 -209.2 0 -204.6 0 -204.6 0 -209.2 0 -209.2 0 -223.1 0 -227.7 0 -227.7 0 -227.7 0 -223.1 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -227.7 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -236.9 0 -236.9 0 -232.3 0 -227.7 0 -227.7 0 -232.3 0 -227.7 0 -232.3 0 -236.9 0 -232.3 0 -232.3 0 -223.1 0 -223.1 0 -223.1 0 -218.4 0 -227.7 0 -227.7 0 -223.1 0 -218.4 0 -223.1 0 -227.7 0 -223.1 0 -223.1 0 -227.7 0 -232.3 0 -241.5 0 -236.9 0 -236.9 0 -236.9 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -246.2 0 -246.2 0 -227.7 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -236.9 0 -241.5 0 -232.3 0 -232.3 0 -236.9 0 -241.5 0 -241.5 0 -246.2 0 -250.8 0 -250.8 0 -260 0 -264.6 0 -264.6 0 -273.9 0 -273.9 0 -269.3 0 -273.9 0 -273.9 0 -269.3 0 -260 0 -264.6 0 -204.6 0 -236.9 0 -260 0 -260 0 -250.8 0 -255.4 0 -250.8 0 -255.4 0 -250.8 0 -250.8 0 -241.5 0 -246.2 0 -246.2 0 -241.5 0 -241.5 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -241.5 0 -250.8 0 -250.8 0 -236.9 0 -236.9 0 -232.3 0 -241.5 0 -232.3 0 -232.3 0 -227.7 0 -227.7 0 -232.3 0 -232.3 0 -223.1 0 -227.7 0 -232.3 0 -227.7 0 -223.1 0 -227.7 0 -223.1 0 -223.1 0 -227.7 0 -227.7 0 -218.4 0 -227.7 0 -218.4 0 -227.7 0 -223.1 0 -227.7 0 -223.1 0 -213.8 0 -223.1 0 -223.1 0 -227.7 0 -223.1 0 -223.1 0 -218.4 0 -218.4 0 -223.1 0 -218.4 0 -223.1 0 -223.1 0 -223.1 0 -223.1 0 -223.1 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -213.8 0 -213.8 0 -209.2 0 -199.9 0 -179.1 0 -199.9 0 -197 0 -179.1 0 -197 0 -188 0 -204.6 0 -204.6 0 -209.2 0 -209.2 0 -213.8 0 -213.8 0 -218.4 0 -218.4 0 -218.4 0 -213.8 0 -209.2 0 -209.2 0 -204.6 0 -204.6 0 -209.2 0 -204.6 0 -204.6 0 -199.9 0 -209.2 0 -188 0 -204.6 0 -197 0 -199.9 0 -204.6 0 -199.9 0 -204.6 0 -209.2 0 -209.2 0 -204.6 0 -209.2 0 -209.2 0 -209.2 0 -213.8 0 -209.2 0 -209.2 0 -213.8 0 -209.2 0 -209.2 0 -204.6 0 -199.9 0 -199.9 0 -199.9 0 -204.6 0 -199.9 0 -197 0 -204.6 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -197 0 -199.9 0 -197 0 -197 0 -199.9 0 -199.9 0 -199.9 0 -197 0 -197 0 -197 0 -194 0 -194 0 -194 0 -197 0 -197 0 -197 0 -197 0 -199.9 0 -197 0 -197 0 -197 0 -197 0 -197 0 -197 0 -199.9 0 -197 0 -191 0 -191 0 -191 0 -194 0 -191 0 -188 0 -194 0 -194 0 -191 0 -191 0 -191 0 -191 0 -191 0 -188 0 -191 0 -191 0 -191 0 -191 0 -194 0 -194 0 -194 0 -197 0 -197 0 -197 0 -191 0 -179.1 0 -191 0 -188 0 -167.2 0 -185.1 0 -173.2 0 -152.3 0 -152.3 0 -191 0 -191 0 -191 0 -191 0 -191 0 -191 0 -188 0 -188 0 -188 0 -185.1 0 -188 0 -188 0 -188 0 -188 0 -188 0 -191 0 -191 0 -191 0 -194 0 -194 0 -194 0 -197 0 -197 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -204.6 0 -204.6 0 -199.9 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -199.9 0 -199.9 0 -197 0 -197 0 -197 0 -194 0 -197 0 -194 0 -194 0 -194 0 -194 0 -194 0 -194 0 -194 0 -191 0 -194 0 -191 0 -191 0 -191 0 -188 0 -188 0 -191 0 -188 0 -191 0 -182.1 0 -188 0 -188 0 -188 0 -188 0 -188 0 -188 0 -188 0 -188 0 -188 0 -188 0 -188 0 -185.1 0 -182.1 0 -182.1 0 -185.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -185.1 0 -182.1 0 -179.1 0 -158.3 0 -164.2 0 -179.1 0 -182.1 0 -164.2 0 -179.1 0 -185.1 0 -185.1 0 -188 0 -185.1 0 -185.1 0 -182.1 0 -182.1 0 -182.1 0 -179.1 0 -182.1 0 -167.2 0 -143.4 0 -143.4 0 -155.3 0 -161.3 0 -152.3 0 -131.5 0 -143.4 0 -140.4 0 -140.4 0 -143.4 0 -146.4 0 -161.3 0 -140.4 0 -152.3 0 -152.3 0 -152.3 0 -143.4 0 -149.3 0 -152.3 0 -158.3 0 -161.3 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -182.1 0 -182.1 0 -185.1 0 -188 0 -185.1 0 -185.1 0 -182.1 0 -182.1 0 -179.1 0 -179.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -179.1 0 -179.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -179.1 0 -179.1 0 -176.1 0 -179.1 0 -179.1 0 -179.1 0 -179.1 0 -179.1 0 -179.1 0 -179.1 0 -176.1 0 -176.1 0 -176.1 0 -179.1 0 -176.1 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -170.2 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -173.2 0 -176.1 0 -173.2 0 -173.2 0 -167.2 0 -173.2 0 -170.2 0 -173.2 0 -170.2 0 -167.2 0 -170.2 0 -167.2 0 -170.2 0 -167.2 0 -167.2 0 -170.2 0 -167.2 0 -167.2 0 -164.2 0 -158.3 0 -170.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -179.1 0 -179.1 0 -179.1 0 -170.2 0 -170.2 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -170.2 0 -170.2 0 -170.2 0 -161.3 0 -170.2 0 -167.2 0 -170.2 0 -167.2 0 -164.2 0 -167.2 0 -170.2 0 -167.2 0 -167.2 0 -167.2 0 -167.2 0 -173.2 0 -176.1 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -152.3 0 -143.4 0 -167.2 0 -146.4 0 -170.2 0 -173.2 0 -173.2 0 -164.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -170.2 0 -170.2 0 -167.2 0 -164.2 0 -164.2 0 -167.2 0 -170.2 0 -173.2 0 -167.2 0 -167.2 0 -164.2 0 -170.2 0 -140.4 0 -161.3 0 -143.4 0 -146.4 0 -143.4 0 -140.4 0 -140.4 0 -161.3 0 -167.2 0 -167.2 0 -167.2 0 -146.4 0 -149.3 0 -146.4 0 -131.5 0 -123.6 0 -128.5 0 -161.3 0 -164.2 0 -164.2 0 -164.2 0 -167.2 0 -167.2 0 -164.2 0 -161.3 0 -167.2 0 -167.2 0 -158.3 0 -167.2 0 -167.2 0 -164.2 0 -167.2 0 -167.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -167.2 0 -167.2 0 -164.2 0 -158.3 0 -128.5 0 -137.4 0 -143.4 0 -146.4 0 -137.4 0 -143.4 0 -146.4 0 -167.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -164.2 0 -161.3 0 -161.3 0 -161.3 0 -164.2 0 -164.2 0 -164.2 0 -161.3 0 -161.3 0 -161.3 0 -161.3 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -167.2 0 -164.2 0 -164.2 0 -164.2 0 -161.3 0 -164.2 0 -161.3 0 -164.2 0 -164.2 0 -164.2 0 -161.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -131.5 0 -131.5 0 -116.3 0 -121.2 0 -116.3 0 -123.6 0 -118.7 0 -123.6 0 -137.4 0 -164.2 0 -161.3 0 -161.3 0 -140.4 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -155.3 0 -158.3 0 -158.3 0 -155.3 0 -155.3 0 -155.3 0 -158.3 0 -155.3 0 -155.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -155.3 0 -155.3 0 -158.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -152.3 0 -152.3 0 -152.3 0 -126.1 0 -104 0 -118.7 0 -121.2 0 -121.2 0 -149.3 0 -128.5 0 -149.3 0 -155.3 0 -152.3 0 -152.3 0 -152.3 0 -149.3 0 -149.3 0 -152.3 0 -149.3 0 -149.3 0 -152.3 0 -152.3 0 -149.3 0 -149.3 0 -149.3 0 -152.3 0 -152.3 0 -152.3 0 -152.3 0 -152.3 0 -131.5 0 -152.3 0 -155.3 0 -152.3 0 -155.3 0 -152.3 0 -152.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -152.3 0 -152.3 0 -149.3 0 -149.3 0 -149.3 0 -146.4 0 -149.3 0 -149.3 0 -121.2 0 -116.3 0 -113.8 0 -111.3 0 -123.6 0 -108.9 0 -118.7 0 -113.8 0 -113.8 0 -111.3 0 -118.7 0 -121.2 0 -121.2 0 -116.3 0 -118.7 0 -121.2 0 -116.3 0 -123.6 0 -116.3 0 -118.7 0 -111.3 0 -113.8 0 -106.4 0 -140.4 0 -126.1 0 -123.6 0 -116.3 0 -111.3 0 -113.8 0 -99.09001 0 -116.3 0 -121.2 0 -111.3 0 -118.7 0 -123.6 0 -118.7 0 -118.7 0 -123.6 0 -158.3 0 -155.3 0 -146.4 0 -155.3 0 -152.3 0 -152.3 0 -152.3 0 -126.1 0 -121.2 0 -123.6 0 -155.3 0 -158.3 0 -167.2 0 -167.2 0 -164.2 0 -167.2 0 -167.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -170.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -176.1 0 -179.1 0 -185.1 0 -188 0 -199.9 0 -204.6 0 -223.1 0 -236.9 0 -241.5 0 -250.8 0 -250.8 0 -255.4 0 -255.4 0 -250.8 0 -241.5 0 -241.5 0 -236.9 0 -236.9 0 -232.3 0 -227.7 0 -223.1 0 -218.4 0 -213.8 0 -218.4 0 -204.6 0 -209.2 0 -199.9 0 -197 0 -197 0 -194 0 -197 0 -191 0 -194 0 -191 0 -188 0 -188 0 -191 0 -191 0 -188 0 -191 0 -191 0 -188 0 -182.1 0 -182.1 0 -185.1 0 -185.1 0 -185.1 0 -188 0 -185.1 0 -182.1 0 -179.1 0 -182.1 0 -182.1 0 -179.1 0 -170.2 0 -182.1 0 -182.1 0 -179.1 0 -182.1 0 -176.1 0 -176.1 0 -179.1 0 -173.2 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -176.1 0 -170.2 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -170.2 0 -170.2 0 -167.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -164.2 0 -146.4 0 -161.3 0 -164.2 0 -170.2 0 -164.2 0 -170.2 0 -176.1 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -167.2 0 -176.1 0 -176.1 0 -182.1 0 -182.1 0 -182.1 0 -185.1 0 -185.1 0 -188 0 -191 0 -188 0 -185.1 0 -188 0 -182.1 0 -188 0 -185.1 0 -182.1 0 -182.1 0 -182.1 0 -179.1 0 -176.1 0 -176.1 0 -179.1 0 -176.1 0 -173.2 0 -176.1 0 -173.2 0 -176.1 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -167.2 0 -167.2 0 -167.2 0 -167.2 0 -167.2 0 -164.2 0 -164.2 0 -167.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -161.3 0 -152.3 0 -158.3 0 -164.2 0 -161.3 0 -161.3 0 -161.3 0 -161.3 0 -155.3 0 -158.3 0 -155.3 0 -152.3 0 -149.3 0 -152.3 0 -143.4 0 -149.3 0 -146.4 0 -146.4 0 -134.5 0 -131.5 0 -128.5 0 -123.6 0 -131.5 0 -111.3 0 -134.5 0 -137.4 0 -140.4 0 -140.4 0 -143.4 0 -146.4 0 -146.4 0 -143.4 0 -143.4 0 -143.4 0 -140.4 0 -146.4 0 -149.3 0 -146.4 0 -146.4 0 -149.3 0 -149.3 0 -140.4 0 -143.4 0 -143.4 0 -143.4 0 -143.4 0 -140.4 0 -143.4 0 -143.4 0 -143.4 0 -146.4 0 -146.4 0 -143.4 0 -140.4 0 -143.4 0 -143.4 0 -140.4 0 -140.4 0 -143.4 0 -146.4 0 -149.3 0 -146.4 0 -146.4 0 -146.4 0 -143.4 0 -137.4 0 -137.4 0 -137.4 0 -140.4 0 -137.4 0 -137.4 0 -137.4 0 -134.5 0 -134.5 0 -134.5 0 -134.5 0 -134.5 0 -134.5 0 -137.4 0 -137.4 0 -137.4 0 -140.4 0 -140.4 0 -137.4 0 -137.4 0 -137.4 0 -123.6 0 -137.4 0 -134.5 0 -128.5 0 -101.5 0 -111.3 0 -113.8 0 -108.9 0 -96.64001 0 -101.5 0 -106.4 0 -108.9 0 -106.4 0 -113.8 0 -113.8 0 -104 0 -113.8 0 -108.9 0 -104 0 -108.9 0 -116.3 0 -101.5 0 -118.7 0 -106.4 0 -111.3 0 -106.4 0 -104 0 -116.3 0 -113.8 0 -116.3 0 -123.6 0 -108.9 0 -104 0 -111.3 0 -111.3 0 -104 0 -84.38001 0 -101.5 0 -89.29001 0 -81.93001 0 -111.3 0 -91.74001 0 -101.5 0 -96.64001 0 -106.4 0 -99.09001 0 -99.09001 0 -108.9 0 -108.9 0 -126.1 0 -126.1 0 -116.3 0 -101.5 0 -121.2 0 -131.5 0 -126.1 0 -111.3 0 -77.03001 0 -77.03001 0 -111.3 0 -106.4 0 -128.5 0 -131.5 0 -126.1 0 -126.1 0 -123.6 0 -123.6 0 -121.2 0 -123.6 0 -123.6 0 -123.6 0 -121.2 0 -118.7 0 -116.3 0 -116.3 0 -118.7 0 -121.2 0 -118.7 0 -121.2 0 -118.7 0 -118.7 0 -121.2 0 -121.2 0 -118.7 0 -116.3 0 -116.3 0 -116.3 0 -116.3 0 -116.3 0 -116.3 0 -116.3 0 -118.7 0 -116.3 0 -116.3 0 -118.7 0 -121.2 0 -123.6 0 -123.6 0 -121.2 0 -113.8 0 -116.3 0 -91.74001 0 -79.48001 0 -86.84001 0 -79.48001 0 -96.64001 0 -89.29001 0 -89.29001 0 -84.38001 0 -116.3 0 -91.74001 0 -113.8 0 -99.09001 0 -84.38001 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -77.03001 0 -77.03001 0 -96.64001 0 -106.4 0 -111.3 0 -116.3 0 -116.3 0 -116.3 0 -113.8 0 -116.3 0 -116.3 0 -116.3 0 -116.3 0 -113.8 0 -86.84001 0 -111.3 0 -108.9 0 -108.9 0 -96.64001 0 -96.64001 0 -101.5 0 -96.64001 0 -113.8 0 -116.3 0 -89.29001 0 -121.2 0 -126.1 0 -128.5 0 -126.1 0 -126.1 0 -126.1 0 -126.1 0 -128.5 0 -128.5 0 -126.1 0 -126.1 0 -123.6 0 -123.6 0 -126.1 0 -126.1 0 -126.1 0 -128.5 0 -128.5 0 -128.5 0 -126.1 0 -128.5 0 -131.5 0 -131.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -113.8 0 -111.3 0 -101.5 0 -96.64001 0 -104 0 -99.09001 0 -96.64001 0 -108.9 0 -106.4 0 -126.1 0 -128.5 0 -126.1 0 -128.5 0 -128.5 0 -121.2 0 -126.1 0 -106.4 0 -108.9 0 -118.7 0 -123.6 0 -99.09001 0 -101.5 0 -101.5 0 -101.5 0 -96.64001 0 -86.84001 0 -81.93001 0 -94.19001 0 -94.19001 0 -99.09001 0 -96.64001 0 -89.29001 0 -94.19001 0 -101.5 0 -101.5 0 -104 0 -104 0 -96.64001 0 -108.9 0 -101.5 0 -104 0 -106.4 0 -111.3 0 -116.3 0 -131.5 0 -128.5 0 -118.7 0 -116.3 0 -134.5 0 -137.4 0 -137.4 0 -137.4 0 -137.4 0 -137.4 0 -137.4 0 -137.4 0 -137.4 0 -137.4 0 -140.4 0 -143.4 0 -143.4 0 -146.4 0 -143.4 0 -143.4 0 -143.4 0 -146.4 0 -143.4 0 -140.4 0 -140.4 0 -140.4 0 -140.4 0 -137.4 0 -137.4 0 -134.5 0 -134.5 0 -134.5 0 -134.5 0 -131.5 0 -128.5 0 -131.5 0 -131.5 0 -131.5 0 -131.5 0 -131.5 0 -131.5 0 -131.5 0 -131.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -126.1 0 -123.6 0 -123.6 0 -123.6 0 -126.1 0 -123.6 0 -123.6 0 -121.2 0 -121.2 0 -118.7 0 -118.7 0 -118.7 0 -121.2 0 -118.7 0 -118.7 0 -118.7 0 -118.7 0 -118.7 0 -118.7 0 -116.3 0 -116.3 0 -118.7 0 -118.7 0 -116.3 0 -116.3 0 -116.3 0 -116.3 0 -118.7 0 -118.7 0 -116.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -116.3 0 -113.8 0 -116.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -108.9 0 -111.3 0 -86.84001 0 -94.19001 0 -99.09001 0 -104 0 -84.38001 0 -99.09001 0 -104 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -104 0 -104 0 -106.4 0 -106.4 0 -104 0 -104 0 -101.5 0 -104 0 -104 0 -101.5 0 -101.5 0 -104 0 -104 0 -104 0 -104 0 -104 0 -101.5 0 -104 0 -101.5 0 -101.5 0 -101.5 0 -99.09001 0 -101.5 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -84.38001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -96.64001 0 -77.03001 0 -79.48001 0 -89.29001 0 -91.74001 0 -91.74001 0 -91.74001 0 -89.29001 0 -89.29001 0 -91.74001 0 -91.74001 0 -89.29001 0 -89.29001 0 -94.19001 0 -86.84001 0 -91.74001 0 -91.74001 0 -94.19001 0 -94.19001 0 -91.74001 0 -91.74001 0 -91.74001 0 -89.29001 0 -89.29001 0 -89.29001 0 -89.29001 0 -89.29001 0 -86.84001 0 -86.84001 0 -84.38001 0 -86.84001 0 -89.29001 0 -89.29001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -84.38001 0 -77.03001 0 -77.03001 0 -77.03001 0 -81.93001 0 -84.38001 0 -86.84001 0 -84.38001 0 -84.38001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -84.38001 0 -84.38001 0 -84.38001 0 -81.93001 0 -84.38001 0 -86.84001 0 -86.84001 0 -86.84001 0 -84.38001 0 -84.38001 0 -84.38001 0 -84.38001 0 -84.38001 0 -81.93001 0 -84.38001 0 -84.38001 0 -84.38001 0 -84.38001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -84.38001 0 -86.84001 0 -86.84001 0 -86.84001 0 -89.29001 0 -89.29001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -84.38001 0 -77.03001 0 -81.93001 0 -77.03001 0 -86.84001 0 -81.93001 0 -89.29001 0 -91.74001 0 -91.74001 0 -89.29001 0 -89.29001 0 -89.29001 0 -89.29001 0 -86.84001 0 -99.09001 0 -128.5 0 -137.4 0 -128.5 0 -118.7 0 -116.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -94.19001 0 -77.03001 0 -77.03001 0 -106.4 0 -77.03001 0 -86.84001 0 -81.93001 0 -91.74001 0 -79.48001 0 -84.38001 0 -77.03001 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -104 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -104 0 -104 0 -104 0 -104 0 -106.4 0 -104 0 -106.4 0 -106.4 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -101.5 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -101.5 0 -104 0 -104 0 -101.5 0 -99.09001 0 -101.5 0 -99.09001 0 -101.5 0 -101.5 0 -99.09001 0 -99.09001 0 -101.5 0 -99.09001 0 -101.5 0 -101.5 0 -101.5 0 -101.5 0 -101.5 0 -101.5 0 -101.5 0 -86.84001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -99.09001 0 -77.03001 0 -99.09001 0 -99.09001 0 -94.19001 0 -94.19001 0 -96.64001 0 -99.09001 0 -101.5 0 -101.5 0 -99.09001 0 -101.5 0 -99.09001 0 -99.09001 0 -99.09001 0 -77.03001 0 -89.29001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -84.38001 0 -77.03001 0 -77.03001 0 -77.03001 0 -91.74001 0 -77.03001 0 -104 0 -108.9 0 -118.7 0 -123.6 0 -146.4 0 -158.3 0 -176.1 0 -179.1 0 -182.1 0 -191 0 -199.9 0 -194 0 -213.8 0 -218.4 0 -213.8 0 -218.4 0 - -912.2001 0 -920.9001 0 -929.6001 0 -964.5001 0 -999.3001 0 -1060 0 -1156 0 -1265 0 -1362 0 -1496 0 -1569 0 -1630 0 -1691 0 -1703 0 -1739 0 -1739 0 -1739 0 -1739 0 -1727 0 -1727 0 -1715 0 -1715 0 -1703 0 -1691 0 -1679 0 -1654 0 -1642 0 -1630 0 -1606 0 -1606 0 -1569 0 -1533 0 -1484 0 -1435 0 -1387 0 -1350 0 -1314 0 -1277 0 -1265 0 -1241 0 -1253 0 -1265 0 -1290 0 -1314 0 -1314 0 -1302 0 -1290 0 -1253 0 -1217 0 -1168 0 -1132 0 -1107 0 -1086 0 -1078 0 -1060 0 -1043 0 -1034 0 -1017 0 -1025 0 -990.6001 0 -973.2001 0 -955.8001 0 -929.6001 0 -912.2001 0 -894.8001 0 -877.4001 0 -868.7001 0 -868.7001 0 -860.0001 0 -851.3001 0 -851.3001 0 -842.6001 0 -833.9001 0 -842.6001 0 -842.6001 0 -851.3001 0 -842.6001 0 -842.6001 0 -851.3001 0 -851.3001 0 -851.3001 0 -851.3001 0 -851.3001 0 -842.6001 0 -842.6001 0 -833.9001 0 -825.2001 0 -825.2001 0 -816.5001 0 -816.5001 0 -807.7001 0 -790.3001 0 -781.6001 0 -772.9001 0 -755.5001 0 -746.8001 0 -738.1001 0 -729.4001 0 -712.0001 0 -703.3001 0 -694.6001 0 -685.9001 0 -668.4001 0 -659.7001 0 -651.0001 0 -642.3001 0 -633.6001 0 -616.2001 0 -616.2001 0 -610.2001 0 -604.1001 0 -598.1001 0 -598.1001 0 -592.0001 0 -592.0001 0 -586.0001 0 -579.9001 0 -525.6001 0 -501.4001 0 -519.5001 0 -507.4001 0 -495.3001 0 -477.2001 0 -459.1001 0 -477.2001 0 -483.3001 0 -465.1001 0 -501.4001 0 -489.3001 0 -471.2001 0 -459.1001 0 -453.0001 0 -477.2001 0 -471.2001 0 -471.2001 0 -447.0001 0 -459.1001 0 -428.9001 0 -447.0001 0 -428.9001 0 -398.7 0 -380.5 0 -386.6 0 -344.3 0 -356.3 0 -362.4 0 -362.4 0 -374.5 0 -356.3 0 -356.3 0 -356.3 0 -368.4 0 -392.6 0 -386.6 0 -386.6 0 -386.6 0 -386.6 0 -380.5 0 -374.5 0 -380.5 0 -374.5 0 -374.5 0 -368.4 0 -368.4 0 -362.4 0 -356.3 0 -356.3 0 -350.3 0 -344.3 0 -344.3 0 -338.2 0 -332.2 0 -326.1 0 -320.1 0 -320.1 0 -315.5 0 -315.5 0 -315.5 0 -310.8 0 -310.8 0 -306.2 0 -306.2 0 -306.2 0 -306.2 0 -301.6 0 -306.2 0 -306.2 0 -301.6 0 -264.6 0 -297 0 -273.9 0 -269.3 0 -283.1 0 -301.6 0 -301.6 0 -269.3 0 -264.6 0 -236.9 0 -310.8 0 -306.2 0 -310.8 0 -310.8 0 -306.2 0 -306.2 0 -306.2 0 -297 0 -306.2 0 -310.8 0 -310.8 0 -315.5 0 -320.1 0 -326.1 0 -326.1 0 -332.2 0 -338.2 0 -338.2 0 -344.3 0 -350.3 0 -368.4 0 -392.6 0 -404.7 0 -434.9001 0 -453.0001 0 -477.2001 0 -489.3001 0 -501.4001 0 -507.4001 0 -495.3001 0 -501.4001 0 -495.3001 0 -489.3001 0 -489.3001 0 -489.3001 0 -489.3001 0 -501.4001 0 -507.4001 0 -507.4001 0 -519.5001 0 -513.5001 0 -519.5001 0 -507.4001 0 -513.5001 0 -501.4001 0 -495.3001 0 -489.3001 0 -477.2001 0 -471.2001 0 -471.2001 0 -465.1001 0 -459.1001 0 -459.1001 0 -447.0001 0 -434.9001 0 -428.9001 0 -422.8001 0 -416.8001 0 -410.7 0 -410.7 0 -404.7 0 -380.5 0 -386.6 0 -380.5 0 -380.5 0 -386.6 0 -386.6 0 -380.5 0 -386.6 0 -392.6 0 -386.6 0 -374.5 0 -380.5 0 -362.4 0 -380.5 0 -386.6 0 -380.5 0 -416.8001 0 -441.0001 0 -465.1001 0 -489.3001 0 -519.5001 0 -537.6001 0 -561.8001 0 -598.1001 0 -624.9001 0 -677.2001 0 -685.9001 0 -712.0001 0 -729.4001 0 -720.7001 0 -720.7001 0 -703.3001 0 -677.2001 0 -651.0001 0 -604.1001 0 -586.0001 0 -573.9001 0 -555.8001 0 -543.7001 0 -525.6001 0 -513.5001 0 -501.4001 0 -489.3001 0 -483.3001 0 -471.2001 0 -459.1001 0 -459.1001 0 -453.0001 0 -447.0001 0 -447.0001 0 -428.9001 0 -428.9001 0 -428.9001 0 -428.9001 0 -422.8001 0 -422.8001 0 -404.7 0 -416.8001 0 -422.8001 0 -416.8001 0 -422.8001 0 -422.8001 0 -428.9001 0 -447.0001 0 -459.1001 0 -477.2001 0 -483.3001 0 -507.4001 0 -519.5001 0 -525.6001 0 -531.6001 0 -531.6001 0 -531.6001 0 -531.6001 0 -525.6001 0 -519.5001 0 -513.5001 0 -513.5001 0 -501.4001 0 -501.4001 0 -489.3001 0 -489.3001 0 -483.3001 0 -471.2001 0 -465.1001 0 -465.1001 0 -465.1001 0 -465.1001 0 -459.1001 0 -465.1001 0 -465.1001 0 -471.2001 0 -501.4001 0 -513.5001 0 -537.6001 0 -579.9001 0 -624.9001 0 -685.9001 0 -738.1001 0 -764.2001 0 -825.2001 0 -816.5001 0 -851.3001 0 -860.0001 0 -877.4001 0 -868.7001 0 -868.7001 0 -868.7001 0 -860.0001 0 -851.3001 0 -842.6001 0 -842.6001 0 -851.3001 0 -833.9001 0 -816.5001 0 -799.0001 0 -790.3001 0 -772.9001 0 -772.9001 0 -764.2001 0 -755.5001 0 -729.4001 0 -746.8001 0 -720.7001 0 -720.7001 0 -677.2001 0 -668.4001 0 -703.3001 0 -703.3001 0 -694.6001 0 -685.9001 0 -703.3001 0 -694.6001 0 -685.9001 0 -685.9001 0 -685.9001 0 -668.4001 0 -668.4001 0 -668.4001 0 -659.7001 0 -659.7001 0 -651.0001 0 -651.0001 0 -642.3001 0 -624.9001 0 -624.9001 0 -624.9001 0 -616.2001 0 -604.1001 0 -598.1001 0 -610.2001 0 -598.1001 0 -598.1001 0 -592.0001 0 -592.0001 0 -586.0001 0 -579.9001 0 -573.9001 0 -573.9001 0 -567.9001 0 -561.8001 0 -561.8001 0 -561.8001 0 -555.8001 0 -555.8001 0 -549.7001 0 -549.7001 0 -549.7001 0 -537.6001 0 -543.7001 0 -501.4001 0 -519.5001 0 -513.5001 0 -459.1001 0 -519.5001 0 -507.4001 0 -513.5001 0 -459.1001 0 -501.4001 0 -501.4001 0 -501.4001 0 -501.4001 0 -501.4001 0 -501.4001 0 -495.3001 0 -489.3001 0 -489.3001 0 -483.3001 0 -483.3001 0 -483.3001 0 -483.3001 0 -477.2001 0 -477.2001 0 -465.1001 0 -404.7 0 -410.7 0 -404.7 0 -398.7 0 -392.6 0 -380.5 0 -380.5 0 -386.6 0 -356.3 0 -422.8001 0 -392.6 0 -434.9001 0 -441.0001 0 -441.0001 0 -434.9001 0 -428.9001 0 -434.9001 0 -434.9001 0 -416.8001 0 -428.9001 0 -434.9001 0 -422.8001 0 -422.8001 0 -404.7 0 -350.3 0 -368.4 0 -362.4 0 -320.1 0 -392.6 0 -344.3 0 -315.5 0 -350.3 0 -326.1 0 -338.2 0 -350.3 0 -332.2 0 -398.7 0 -404.7 0 -398.7 0 -320.1 0 -332.2 0 -356.3 0 -344.3 0 -350.3 0 -392.6 0 -380.5 0 -374.5 0 -344.3 0 -315.5 0 -326.1 0 -320.1 0 -301.6 0 -306.2 0 -332.2 0 -350.3 0 -368.4 0 -380.5 0 -380.5 0 -374.5 0 -374.5 0 -368.4 0 -368.4 0 -362.4 0 -368.4 0 -368.4 0 -362.4 0 -362.4 0 -362.4 0 -356.3 0 -356.3 0 -356.3 0 -356.3 0 -356.3 0 -356.3 0 -350.3 0 -350.3 0 -344.3 0 -344.3 0 -332.2 0 -338.2 0 -338.2 0 -332.2 0 -326.1 0 -326.1 0 -326.1 0 -297 0 -306.2 0 -269.3 0 -297 0 -297 0 -320.1 0 -320.1 0 -315.5 0 -320.1 0 -320.1 0 -315.5 0 -315.5 0 -315.5 0 -315.5 0 -315.5 0 -320.1 0 -332.2 0 -332.2 0 -332.2 0 -338.2 0 -344.3 0 -344.3 0 -344.3 0 -344.3 0 -338.2 0 -338.2 0 -332.2 0 -332.2 0 -320.1 0 -320.1 0 -315.5 0 -310.8 0 -306.2 0 -306.2 0 -306.2 0 -297 0 -297 0 -292.4 0 -297 0 -292.4 0 -287.7 0 -283.1 0 -283.1 0 -278.5 0 -278.5 0 -278.5 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -269.3 0 -273.9 0 -273.9 0 -241.5 0 -241.5 0 -227.7 0 -241.5 0 -223.1 0 -223.1 0 -223.1 0 -241.5 0 -236.9 0 -255.4 0 -255.4 0 -213.8 0 -246.2 0 -241.5 0 -246.2 0 -246.2 0 -246.2 0 -241.5 0 -241.5 0 -236.9 0 -246.2 0 -241.5 0 -246.2 0 -246.2 0 -241.5 0 -241.5 0 -236.9 0 -232.3 0 -232.3 0 -236.9 0 -209.2 0 -227.7 0 -227.7 0 -232.3 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -232.3 0 -232.3 0 -232.3 0 -223.1 0 -227.7 0 -227.7 0 -227.7 0 -223.1 0 -227.7 0 -227.7 0 -227.7 0 -223.1 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -223.1 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -223.1 0 -218.4 0 -223.1 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -223.1 0 -227.7 0 -185.1 0 -236.9 0 -209.2 0 -232.3 0 -236.9 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -227.7 0 -227.7 0 -227.7 0 -232.3 0 -232.3 0 -209.2 0 -218.4 0 -264.6 0 -269.3 0 -273.9 0 -269.3 0 -255.4 0 -269.3 0 -283.1 0 -292.4 0 -292.4 0 -301.6 0 -326.1 0 -374.5 0 -441.0001 0 -507.4001 0 -549.7001 0 -604.1001 0 -677.2001 0 -764.2001 0 -851.3001 0 -929.6001 0 -999.3001 0 -1078 0 -1192 0 -1314 0 -1448 0 -1569 0 -1679 0 -1764 0 -1812 0 -1837 0 -1861 0 -1873 0 -1861 0 -1849 0 -1837 0 -1812 0 -1788 0 -1764 0 -1715 0 -1679 0 -1642 0 -1593 0 -1557 0 -1508 0 -1448 0 -1399 0 -1362 0 -1326 0 -1290 0 -1253 0 -1229 0 -1217 0 -1180 0 -1168 0 -1144 0 -1107 0 -1078 0 -1043 0 -1008 0 -981.9001 0 -947.0001 0 -912.2001 0 -894.8001 0 -868.7001 0 -833.9001 0 -807.7001 0 -790.3001 0 -781.6001 0 -764.2001 0 -746.8001 0 -738.1001 0 -720.7001 0 -703.3001 0 -694.6001 0 -677.2001 0 -659.7001 0 -651.0001 0 -633.6001 0 -616.2001 0 -610.2001 0 -604.1001 0 -592.0001 0 -586.0001 0 -579.9001 0 -573.9001 0 -561.8001 0 -561.8001 0 -555.8001 0 -549.7001 0 -543.7001 0 -537.6001 0 -531.6001 0 -531.6001 0 -525.6001 0 -525.6001 0 -519.5001 0 -519.5001 0 -519.5001 0 -513.5001 0 -513.5001 0 -513.5001 0 -513.5001 0 -513.5001 0 -513.5001 0 -453.0001 0 -428.9001 0 -428.9001 0 -447.0001 0 -441.0001 0 -459.1001 0 -483.3001 0 -453.0001 0 -441.0001 0 -513.5001 0 -507.4001 0 -501.4001 0 -501.4001 0 -495.3001 0 -495.3001 0 -489.3001 0 -489.3001 0 -483.3001 0 -477.2001 0 -477.2001 0 -477.2001 0 -471.2001 0 -465.1001 0 -410.7 0 -368.4 0 -350.3 0 -398.7 0 -362.4 0 -344.3 0 -356.3 0 -356.3 0 -332.2 0 -356.3 0 -356.3 0 -422.8001 0 -338.2 0 -386.6 0 -392.6 0 -428.9001 0 -428.9001 0 -338.2 0 -380.5 0 -320.1 0 -416.8001 0 -416.8001 0 -416.8001 0 -410.7 0 -356.3 0 -320.1 0 -306.2 0 -283.1 0 -315.5 0 -315.5 0 -310.8 0 -338.2 0 -287.7 0 -292.4 0 -332.2 0 -315.5 0 -297 0 -301.6 0 -310.8 0 -374.5 0 -368.4 0 -278.5 0 -292.4 0 -368.4 0 -368.4 0 -362.4 0 -368.4 0 -368.4 0 -297 0 -362.4 0 -362.4 0 -362.4 0 -350.3 0 -283.1 0 -283.1 0 -260 0 -246.2 0 -320.1 0 -338.2 0 -227.7 0 -260 0 -260 0 -255.4 0 -338.2 0 -332.2 0 -332.2 0 -301.6 0 -326.1 0 -326.1 0 -332.2 0 -332.2 0 -326.1 0 -297 0 -269.3 0 -301.6 0 -301.6 0 -315.5 0 -283.1 0 -315.5 0 -287.7 0 -260 0 -283.1 0 -306.2 0 -278.5 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -315.5 0 -315.5 0 -315.5 0 -260 0 -297 0 -301.6 0 -264.6 0 -310.8 0 -278.5 0 -236.9 0 -264.6 0 -241.5 0 -246.2 0 -250.8 0 -246.2 0 -232.3 0 -301.6 0 -297 0 -301.6 0 -297 0 -297 0 -297 0 -297 0 -297 0 -297 0 -297 0 -301.6 0 -297 0 -297 0 -301.6 0 -301.6 0 -297 0 -306.2 0 -306.2 0 -306.2 0 -301.6 0 -306.2 0 -306.2 0 -301.6 0 -301.6 0 -301.6 0 -301.6 0 -297 0 -297 0 -297 0 -292.4 0 -297 0 -297 0 -301.6 0 -306.2 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -306.2 0 -310.8 0 -306.2 0 -306.2 0 -301.6 0 -297 0 -287.7 0 -287.7 0 -283.1 0 -283.1 0 -278.5 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -264.6 0 -264.6 0 -264.6 0 -260 0 -260 0 -255.4 0 -255.4 0 -255.4 0 -255.4 0 -250.8 0 -246.2 0 -246.2 0 -246.2 0 -250.8 0 -241.5 0 -236.9 0 -306.2 0 -297 0 -278.5 0 -260 0 -255.4 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -255.4 0 -250.8 0 -250.8 0 - -260 0 -278.5 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -283.1 0 -287.7 0 -273.9 0 -278.5 0 -269.3 0 -269.3 0 -264.6 0 -264.6 0 -269.3 0 -255.4 0 -269.3 0 -250.8 0 -260 0 - -278.5 0 -269.3 0 -260 0 -250.8 0 -255.4 0 -264.6 0 -246.2 0 -255.4 0 -255.4 0 -260 0 -255.4 0 -241.5 0 -260 0 -250.8 0 -255.4 0 -255.4 0 -227.7 0 -250.8 0 -255.4 0 -260 0 -255.4 0 -260 0 -255.4 0 -264.6 0 -260 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -260 0 -264.6 0 -269.3 0 -269.3 0 -278.5 0 -283.1 0 -287.7 0 -287.7 0 -297 0 -287.7 0 -297 0 -292.4 0 -287.7 0 -287.7 0 -287.7 0 -292.4 0 -292.4 0 -283.1 0 -287.7 0 -287.7 0 -283.1 0 -292.4 0 -306.2 0 -301.6 0 -297 0 -297 0 -301.6 0 -310.8 0 -301.6 0 -306.2 0 -301.6 0 -338.2 0 -350.3 0 -374.5 0 -404.7 0 -422.8001 0 -428.9001 0 -434.9001 0 -441.0001 0 -422.8001 0 -422.8001 0 -416.8001 0 -422.8001 0 -416.8001 0 -410.7 0 -404.7 0 -398.7 0 -404.7 0 -398.7 0 -398.7 0 -398.7 0 -386.6 0 -392.6 0 -386.6 0 -386.6 0 -392.6 0 -392.6 0 -386.6 0 -392.6 0 -392.6 0 -380.5 0 -380.5 0 -386.6 0 -386.6 0 -386.6 0 -386.6 0 -392.6 0 -392.6 0 -386.6 0 -386.6 0 -368.4 0 -350.3 0 -374.5 0 -356.3 0 -362.4 0 -362.4 0 -332.2 0 -344.3 0 -344.3 0 -344.3 0 -344.3 0 -344.3 0 -338.2 0 -332.2 0 -332.2 0 -332.2 0 -326.1 0 -315.5 0 -315.5 0 -310.8 0 -310.8 0 -306.2 0 -306.2 0 -297 0 -301.6 0 -297 0 -297 0 -292.4 0 -287.7 0 -283.1 0 -283.1 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -255.4 0 -260 0 -260 0 -260 0 -255.4 0 -255.4 0 -255.4 0 -246.2 0 -246.2 0 -250.8 0 -250.8 0 -246.2 0 -246.2 0 -241.5 0 -236.9 0 -241.5 0 -241.5 0 -232.3 0 -232.3 0 -236.9 0 -236.9 0 -236.9 0 -232.3 0 -232.3 0 -236.9 0 -227.7 0 -218.4 0 -232.3 0 -227.7 0 -227.7 0 -227.7 0 -223.1 0 -223.1 0 -227.7 0 -227.7 0 -213.8 0 -223.1 0 -223.1 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -209.2 0 -213.8 0 -218.4 0 -213.8 0 -213.8 0 -213.8 0 -218.4 0 -213.8 0 -213.8 0 -213.8 0 -199.9 0 -209.2 0 -204.6 0 -197 0 -209.2 0 -179.1 0 -179.1 0 -179.1 0 -158.3 0 -176.1 0 -185.1 0 -185.1 0 -191 0 -197 0 -197 0 -199.9 0 -197 0 -194 0 -197 0 -197 0 -197 0 -197 0 -191 0 -197 0 -179.1 0 -173.2 0 -170.2 0 -176.1 0 -179.1 0 -194 0 -167.2 0 -176.1 0 -185.1 0 -164.2 0 -164.2 0 -164.2 0 -185.1 0 -182.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -188 0 -185.1 0 -182.1 0 -164.2 0 -152.3 0 - -170.2 0 -173.2 0 -164.2 0 -158.3 0 -149.3 0 -140.4 0 -158.3 0 -161.3 0 -164.2 0 -164.2 0 -143.4 0 -155.3 0 -155.3 0 -155.3 0 -161.3 0 -161.3 0 -161.3 0 -161.3 0 -161.3 0 -158.3 0 -161.3 0 -158.3 0 -161.3 0 -161.3 0 -164.2 0 -164.2 0 -146.4 0 -140.4 0 -161.3 0 -167.2 0 -164.2 0 -167.2 0 -164.2 0 -161.3 0 -161.3 0 -161.3 0 -161.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -164.2 0 -164.2 0 -161.3 0 -155.3 0 -161.3 0 -161.3 0 -161.3 0 -158.3 0 -161.3 0 -161.3 0 -158.3 0 -158.3 0 -134.5 0 -146.4 0 -143.4 0 -155.3 0 -152.3 0 -146.4 0 -152.3 0 -152.3 0 -152.3 0 -149.3 0 -152.3 0 -152.3 0 -152.3 0 -152.3 0 -149.3 0 -149.3 0 -152.3 0 -152.3 0 -152.3 0 -155.3 0 -131.5 0 -131.5 0 -131.5 0 -123.6 0 -134.5 0 -137.4 0 -126.1 0 -104 0 -118.7 0 -113.8 0 -121.2 0 -113.8 0 -126.1 0 -113.8 0 -121.2 0 -118.7 0 -143.4 0 -140.4 0 -140.4 0 -140.4 0 -140.4 0 -140.4 0 -140.4 0 -140.4 0 -121.2 0 -121.2 0 -140.4 0 -140.4 0 -134.5 0 -123.6 0 -113.8 0 -113.8 0 -126.1 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -131.5 0 -137.4 0 -140.4 0 -143.4 0 -146.4 0 -149.3 0 -152.3 0 -155.3 0 -155.3 0 -158.3 0 -158.3 0 -140.4 0 -143.4 0 -149.3 0 -155.3 0 -164.2 0 -161.3 0 -152.3 0 -158.3 0 -149.3 0 -158.3 0 -161.3 0 -167.2 0 -164.2 0 -167.2 0 -167.2 0 -164.2 0 -167.2 0 -161.3 0 -164.2 0 -170.2 0 -167.2 0 -191 0 -204.6 0 -209.2 0 -204.6 0 -204.6 0 -204.6 0 -209.2 0 -209.2 0 -209.2 0 -199.9 0 -209.2 0 -209.2 0 -204.6 0 -204.6 0 -209.2 0 -213.8 0 -204.6 0 -204.6 0 -209.2 0 -204.6 0 -209.2 0 -213.8 0 -213.8 0 -209.2 0 -218.4 0 -209.2 0 -213.8 0 -209.2 0 -199.9 0 -199.9 0 -199.9 0 -194 0 -191 0 -188 0 -188 0 -188 0 -185.1 0 -185.1 0 -182.1 0 -182.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -188 0 -188 0 -191 0 -199.9 0 -310.8 0 -501.4001 0 -610.2001 0 -703.3001 0 -746.8001 0 -781.6001 0 -781.6001 0 -772.9001 0 -764.2001 0 -720.7001 0 -694.6001 0 -651.0001 0 -616.2001 0 - -573.9001 0 -549.7001 0 -543.7001 0 -525.6001 0 -513.5001 0 -501.4001 0 -489.3001 0 -483.3001 0 -471.2001 0 -465.1001 0 -453.0001 0 -447.0001 0 -434.9001 0 -428.9001 0 -416.8001 0 -392.6 0 -386.6 0 -332.2 0 -386.6 0 -344.3 0 -392.6 0 -392.6 0 -392.6 0 -386.6 0 -392.6 0 -386.6 0 -386.6 0 -386.6 0 -380.5 0 -374.5 0 -368.4 0 -374.5 0 -374.5 0 -362.4 0 -368.4 0 -362.4 0 -362.4 0 -338.2 0 -306.2 0 -356.3 0 -315.5 0 -306.2 0 -356.3 0 -301.6 0 -332.2 0 -350.3 0 -344.3 0 -344.3 0 -344.3 0 -338.2 0 -332.2 0 -332.2 0 -320.1 0 -320.1 0 -315.5 0 -315.5 0 -315.5 0 -306.2 0 -301.6 0 -301.6 0 -292.4 0 -287.7 0 -283.1 0 -278.5 0 -273.9 0 -269.3 0 -264.6 0 -264.6 0 -260 0 -260 0 -250.8 0 -246.2 0 -250.8 0 -250.8 0 -246.2 0 -246.2 0 -246.2 0 -241.5 0 -241.5 0 - -232.3 0 -223.1 0 -232.3 0 -227.7 0 -218.4 0 -213.8 0 -227.7 0 -191 0 -194 0 -182.1 0 -179.1 0 -173.2 0 -185.1 0 -182.1 0 -199.9 0 -199.9 0 -204.6 0 -199.9 0 -197 0 -194 0 -194 0 -191 0 -191 0 -191 0 -191 0 -170.2 0 -161.3 0 -185.1 0 -185.1 0 -182.1 0 -164.2 0 -155.3 0 -155.3 0 -158.3 0 -134.5 0 -143.4 0 -134.5 0 -152.3 0 -167.2 0 -158.3 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -167.2 0 -164.2 0 -164.2 0 -164.2 0 -158.3 0 -164.2 0 -161.3 0 -161.3 0 -158.3 0 -158.3 0 -158.3 0 -179.1 0 -197 0 -182.1 0 -173.2 0 -170.2 0 -167.2 0 -164.2 0 -164.2 0 -167.2 0 -167.2 0 -164.2 0 -164.2 0 -164.2 0 -167.2 0 -173.2 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -173.2 0 -167.2 0 -164.2 0 -164.2 0 -161.3 0 -158.3 0 -161.3 0 -158.3 0 -188 0 -223.1 0 -223.1 0 - -185.1 0 -176.1 0 -179.1 0 -179.1 0 -179.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -179.1 0 -179.1 0 -179.1 0 -176.1 0 -173.2 0 -170.2 0 -170.2 0 -167.2 0 -158.3 0 -164.2 0 -167.2 0 -149.3 0 -170.2 0 -173.2 0 -176.1 0 -182.1 0 -185.1 0 -197 0 -204.6 0 -223.1 0 -227.7 0 -236.9 0 -236.9 0 -241.5 0 -232.3 0 -227.7 0 -223.1 0 -209.2 0 -204.6 0 -194 0 -197 0 -197 0 -197 0 -199.9 0 -197 0 -199.9 0 -199.9 0 -209.2 0 -250.8 0 -338.2 0 -453.0001 0 -519.5001 0 -561.8001 0 -573.9001 0 -586.0001 0 -598.1001 0 -598.1001 0 -598.1001 0 -592.0001 0 -592.0001 0 -579.9001 0 -567.9001 0 -561.8001 0 -549.7001 0 -531.6001 0 -519.5001 0 -501.4001 0 -495.3001 0 -483.3001 0 -471.2001 0 -459.1001 0 -447.0001 0 -434.9001 0 -422.8001 0 -410.7 0 -404.7 0 -398.7 0 -392.6 0 -380.5 0 -368.4 0 -362.4 0 -368.4 0 -350.3 0 -344.3 0 -332.2 0 -315.5 0 -310.8 0 -306.2 0 -301.6 0 -292.4 0 -283.1 0 -278.5 0 -273.9 0 -273.9 0 -273.9 0 -264.6 0 -260 0 -255.4 0 -255.4 0 -250.8 0 -246.2 0 -241.5 0 -236.9 0 -236.9 0 -232.3 0 -232.3 0 -246.2 0 -301.6 0 -465.1001 0 -624.9001 0 - -816.5001 0 -825.2001 0 -947.0001 0 -929.6001 0 -886.1001 0 -894.8001 0 -903.5001 0 -868.7001 0 -816.5001 0 -772.9001 0 -720.7001 0 -685.9001 0 -633.6001 0 -642.3001 0 -764.2001 0 -816.5001 0 -860.0001 0 -929.6001 0 -999.3001 0 -1043 0 -1052 0 -1060 0 -1043 0 -1017 0 -999.3001 0 -955.8001 0 -929.6001 0 -912.2001 0 -903.5001 0 -894.8001 0 -894.8001 0 -886.1001 0 -894.8001 0 -894.8001 0 -903.5001 0 -903.5001 0 -912.2001 0 -903.5001 0 -912.2001 0 -912.2001 0 -920.9001 0 -947.0001 0 -964.5001 0 -999.3001 0 -1052 0 -1107 0 -1192 0 -1277 0 -1338 0 -1423 0 -1508 0 -1569 0 -1642 0 -1679 0 -1739 0 -1764 0 -1776 0 -1788 0 -1800 0 -1800 0 -1776 0 -1764 0 -1751 0 -1715 0 -1691 0 -1642 0 -1581 0 -1521 0 -1435 0 -1350 0 -1253 0 -1156 0 -1043 0 -999.3001 0 -894.8001 0 -920.9001 0 -868.7001 0 -860.0001 0 -825.2001 0 -833.9001 0 -825.2001 0 -807.7001 0 -807.7001 0 -755.5001 0 -790.3001 0 -790.3001 0 -772.9001 0 -772.9001 0 -755.5001 0 -738.1001 0 -720.7001 0 -703.3001 0 -685.9001 0 -567.9001 0 -586.0001 0 -555.8001 0 -543.7001 0 -567.9001 0 -537.6001 0 -537.6001 0 -555.8001 0 -519.5001 0 -495.3001 0 -531.6001 0 -543.7001 0 -519.5001 0 -507.4001 0 -543.7001 0 -537.6001 0 -537.6001 0 -537.6001 0 -531.6001 0 -531.6001 0 -525.6001 0 -519.5001 0 -453.0001 0 -471.2001 0 -483.3001 0 -513.5001 0 -513.5001 0 -513.5001 0 -477.2001 0 -471.2001 0 -489.3001 0 -428.9001 0 -441.0001 0 -483.3001 0 -447.0001 0 -428.9001 0 -471.2001 0 -465.1001 0 -459.1001 0 -453.0001 0 -447.0001 0 -441.0001 0 -441.0001 0 -434.9001 0 -441.0001 0 -434.9001 0 -422.8001 0 -410.7 0 -416.8001 0 -374.5 0 -398.7 0 -404.7 0 -380.5 0 -398.7 0 -398.7 0 -398.7 0 -392.6 0 -386.6 0 -386.6 0 -386.6 0 -386.6 0 -380.5 0 -380.5 0 -380.5 0 -380.5 0 -374.5 0 -374.5 0 -374.5 0 -368.4 0 -362.4 0 -362.4 0 -356.3 0 -362.4 0 -356.3 0 -350.3 0 -350.3 0 -326.1 0 -320.1 0 -306.2 0 -273.9 0 -273.9 0 -292.4 0 -297 0 -344.3 0 -338.2 0 -344.3 0 -338.2 0 -338.2 0 -344.3 0 -344.3 0 -344.3 0 -338.2 0 -338.2 0 -338.2 0 -332.2 0 -332.2 0 -301.6 0 -292.4 0 -301.6 0 -292.4 0 -283.1 0 -260 0 -278.5 0 -283.1 0 -264.6 0 -287.7 0 -283.1 0 -283.1 0 -292.4 0 -264.6 0 -287.7 0 -283.1 0 -287.7 0 -287.7 0 -287.7 0 -297 0 -310.8 0 -306.2 0 -310.8 0 -287.7 0 -315.5 0 -292.4 0 -273.9 0 -269.3 0 -269.3 0 -278.5 0 -287.7 0 -269.3 0 -287.7 0 -260 0 -260 0 -283.1 0 -269.3 0 -283.1 0 -278.5 0 -283.1 0 -283.1 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -301.6 0 -297 0 -292.4 0 -287.7 0 -287.7 0 -269.3 0 -264.6 0 -264.6 0 -269.3 0 -273.9 0 -264.6 0 -260 0 -269.3 0 -269.3 0 -264.6 0 -264.6 0 -264.6 0 -260 0 -260 0 -255.4 0 -255.4 0 -255.4 0 -255.4 0 -255.4 0 -255.4 0 -250.8 0 -250.8 0 -250.8 0 -255.3993 0 -250.7785 0 -246.1577 0 -232.2954 0 -236.9162 0 -236.9162 0 -236.9162 0 -232.2954 0 -232.2954 0 -232.2954 0 -227.6746 0 -232.2954 0 -227.6746 0 - -232.2954 0 -227.6746 0 -223.0539 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -223.0539 0 -218.4331 0 -232.2954 0 -227.6746 0 -223.0539 0 -223.0539 0 -218.4331 0 -223.0539 0 -223.0539 0 -223.0539 0 -218.4331 0 -223.0539 0 -232.2954 0 -223.0539 0 -218.4331 0 -213.8123 0 -218.4331 0 -213.8123 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -204.5708 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -189.8775 0 -189.8775 0 -189.8775 0 -189.8775 0 -186.52 0 -183.1625 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -186.52 0 -183.1625 0 -179.805 0 -179.805 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -173.09 0 -176.4475 0 -173.09 0 -169.7325 0 -156.3025 0 -169.7325 0 -152.945 0 -159.66 0 -159.66 0 -149.5875 0 -136.1575 0 -149.5875 0 -163.0175 0 -159.66 0 -169.7325 0 -169.7325 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -169.7325 0 -169.7325 0 -173.09 0 -173.09 0 -173.09 0 -166.375 0 -166.375 0 -169.7325 0 -169.7325 0 -169.7325 0 -169.7325 0 -166.375 0 -166.375 0 -163.0175 0 -163.0175 0 -166.375 0 -163.0175 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -156.3025 0 -163.0175 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -146.23 0 -149.5875 0 -142.8725 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -142.8725 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -136.1575 0 -136.1575 0 -139.515 0 -129.4425 0 -136.1575 0 -139.515 0 -139.515 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -139.515 0 -136.1575 0 -139.515 0 -139.515 0 -139.515 0 -136.1575 0 -142.8725 0 -136.1575 0 -132.8 0 -132.8 0 -136.1575 0 -132.8 0 -126.085 0 -122.7275 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -122.7275 0 -122.7275 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -129.4425 0 -129.4425 0 -129.4425 0 -132.8 0 -136.1575 0 -136.1575 0 -142.8725 0 -142.8725 0 -142.8725 0 -156.3025 0 -149.5875 0 -152.945 0 -156.3025 0 -156.3025 0 -149.5875 0 -159.66 0 -152.945 0 -152.945 0 -152.945 0 -152.945 0 -146.23 0 -142.8725 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -146.23 0 -142.8725 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -129.4425 0 -132.8 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -119.37 0 -122.7275 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -122.7275 0 -119.37 0 -116.0125 0 -116.0125 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -76.75501 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -95.86751 0 -102.5825 0 -102.5825 0 -105.94 0 -105.94 0 -109.2975 0 -109.2975 0 -112.655 0 -116.0125 0 -112.655 0 -136.1575 0 -149.5875 0 -159.66 0 -156.3025 0 -146.23 0 -146.23 0 -149.5875 0 -139.515 0 -139.515 0 -126.085 0 -136.1575 0 -122.7275 0 -126.085 0 -122.7275 0 -119.37 0 -122.7275 0 -119.37 0 -116.0125 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -116.0125 0 -119.37 0 -119.37 0 -119.37 0 -116.0125 0 -116.0125 0 -116.0125 0 -112.655 0 -116.0125 0 -112.655 0 -116.0125 0 -109.2975 0 -112.655 0 -122.7275 0 -132.8 0 -139.515 0 -139.515 0 -142.8725 0 -139.515 0 -132.8 0 -132.8 0 -136.1575 0 -136.1575 0 -132.8 0 -126.085 0 -132.8 0 -132.8 0 -122.7275 0 -126.085 0 -122.7275 0 -112.655 0 -122.7275 0 -116.0125 0 -105.94 0 -109.2975 0 -105.94 0 -102.5825 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -76.75501 0 -92.51001 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -92.51001 0 -92.51001 0 -95.86751 0 -99.22501 0 -102.5825 0 -109.2975 0 -119.37 0 -116.0125 0 -146.23 0 -149.5875 0 -156.3025 0 -159.66 0 -156.3025 0 -159.66 0 -156.3025 0 -159.66 0 -152.945 0 -149.5875 0 -142.8725 0 -146.23 0 -142.8725 0 -139.515 0 -136.1575 0 -136.1575 0 -126.085 0 -132.8 0 -129.4425 0 -126.085 0 -122.7275 0 -119.37 0 -119.37 0 -116.0125 0 -112.655 0 -112.655 0 -109.2975 0 -105.94 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -102.5825 0 -99.22501 0 -92.51001 0 -61.00001 0 -76.75501 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.14001 0 -59.76001 0 -58.52001 0 -59.14001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -56.04001 0 -59.76001 0 -59.14001 0 -57.90001 0 -59.14001 0 -59.14001 0 -59.76001 0 -61.00001 0 -60.38001 0 -59.76001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.14001 0 -60.38001 0 -59.14001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -58.52001 0 -59.14001 0 -57.90001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.14001 0 -59.76001 0 -60.38001 0 -61.00001 0 -76.75501 0 -95.86751 0 -92.51001 0 -92.51001 0 -95.86751 0 -92.51001 0 -99.22501 0 -99.22501 0 -102.5825 0 -99.22501 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -99.22501 0 -95.86751 0 -92.51001 0 -92.51001 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -112.655 0 -109.2975 0 -102.5825 0 -105.94 0 -109.2975 0 -112.655 0 -109.2975 0 -105.94 0 -102.5825 0 -105.94 0 -105.94 0 -109.2975 0 -116.0125 0 -119.37 0 -126.085 0 -119.37 0 -119.37 0 -116.0125 0 -109.2975 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -109.2975 0 -105.94 0 -109.2975 0 -112.655 0 -119.37 0 -129.4425 0 -152.945 0 -179.805 0 -218.4331 0 -255.3993 0 -283.1239 0 -306.2277 0 -296.9862 0 -301.607 0 -315.4693 0 -320.09 0 -362.3915 0 -362.3915 0 -362.3915 0 -368.4345 0 -362.3915 0 -356.3484 0 -356.3484 0 -350.3053 0 -350.3053 0 -350.3053 0 -350.3053 0 -356.3484 0 -356.3484 0 -362.3915 0 -368.4345 0 -320.09 0 -310.8485 0 -306.2277 0 -306.2277 0 -296.9862 0 -296.9862 0 -287.7447 0 -273.8823 0 -264.6408 0 -269.2616 0 -269.2616 0 -269.2616 0 -301.607 0 -292.3654 0 -287.7447 0 -278.5031 0 -269.2616 0 -260.02 0 -255.3993 0 -250.7785 0 -241.537 0 -236.9162 0 -232.2954 0 -223.0539 0 -204.5708 0 -183.1625 0 -173.09 0 -196.5925 0 -183.1625 0 -142.8725 0 -152.945 0 -142.8725 0 -176.4475 0 -136.1575 0 -126.085 0 -166.375 0 -166.375 0 -163.0175 0 -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -149.5875 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -139.515 0 -136.1575 0 -139.515 0 -136.1575 0 -132.8 0 -132.8 0 -129.4425 0 -126.085 0 -122.7275 0 -119.37 0 -116.0125 0 -116.0125 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -109.2975 0 - -109.2975 0 -105.94 0 -112.655 0 -122.7275 0 -116.0125 0 -109.2975 0 -92.51001 0 -99.22501 0 -92.51001 0 -92.51001 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -57.28001 0 -92.51001 0 -92.51001 0 -61.00001 0 -59.14001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.08001 0 -50.46001 0 -50.46001 0 -51.08001 0 -51.08001 0 -50.46001 0 -50.46001 0 -50.46001 0 -49.84001 0 -49.84001 0 -49.22001 0 -49.22001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.98001 0 -48.60001 0 -47.98001 0 -48.60001 0 -47.98001 0 -48.60001 0 -49.22001 0 -47.98001 0 -47.98001 0 -46.74001 0 -48.60001 0 -41.78001 0 -44.88001 0 -42.40001 0 - -35.58 0 - -47.36001 0 -47.98001 0 -48.60001 0 - -52.94001 0 -54.80001 0 -55.42001 0 -54.18001 0 -52.32001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.70001 0 -51.08001 0 -50.46001 0 -49.22001 0 -48.60001 0 -47.36001 0 - -46.12001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.12001 0 -45.50001 0 -44.88001 0 - -42.40001 0 -43.02001 0 -43.64001 0 -42.40001 0 -43.64001 0 - -41.78001 0 - -43.64001 0 -43.64001 0 -43.02001 0 -43.64001 0 -44.26001 0 -43.64001 0 -44.26001 0 -44.26001 0 -44.26001 0 -44.26001 0 -44.26001 0 -42.40001 0 -19.2 0 -38.68 0 -39.92 0 -32.48 0 -38.06 0 - -35.58 0 -38.06 0 -35.58 0 -35.58 0 -41.16 0 -39.92 0 -43.64001 0 -43.64001 0 -43.64001 0 -31.86 0 -27.6 0 -44.26001 0 -43.64001 0 -43.64001 0 -44.26001 0 -44.26001 0 -44.26001 0 - -43.64001 0 -43.64001 0 -43.64001 0 -43.02001 0 -36.2 0 - -31.86 0 -45.50001 0 - -43.02001 0 -45.50001 0 -43.02001 0 -47.36001 0 -46.12001 0 -43.02001 0 -43.64001 0 -43.64001 0 -43.64001 0 -43.02001 0 -43.02001 0 -43.02001 0 -41.78001 0 -42.40001 0 - -44.26001 0 -46.74001 0 -47.98001 0 -50.46001 0 -54.18001 0 -54.80001 0 -54.80001 0 -53.56001 0 -52.94001 0 -52.32001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.80001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.66001 0 -57.28001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -60.38001 0 -51.2614 0 -121.5236 0 -124.5223 0 -130.7166 0 -124.5223 0 -121.5236 0 -118.589 0 -115.7171 0 -115.7171 0 -112.9069 0 -110.1572 0 -104.8347 0 -102.2597 0 -99.74084 0 -97.27695 0 -94.86702 0 -92.51001 0 -75.14358 0 -60.20362 0 -59.41532 0 -57.86275 0 -57.09837 0 -55.59313 0 -54.85215 0 -53.39319 0 -51.96452 0 - -58.63505 0 -124.5223 0 -121.5236 0 -118.589 0 -115.7171 0 -115.7171 0 -112.9069 0 -115.7171 0 -112.9069 0 -112.9069 0 -112.9069 0 -110.1572 0 -118.589 0 -127.5863 0 -137.1818 0 -154.5973 0 -186.5442 0 -219.4325 0 -253.988 0 -293.1068 0 -338.661 0 -358.1103 0 -358.1103 0 -363.1136 0 -363.1136 0 -353.1638 0 -343.4397 0 -338.661 0 -338.661 0 -343.4397 0 -343.4397 0 -343.4397 0 -343.4397 0 -343.4397 0 -338.661 0 -338.661 0 -338.661 0 -338.661 0 -343.4397 0 -338.661 0 -338.661 0 -333.9371 0 -329.2677 0 -324.6522 0 -314.5294 0 -303.6562 0 -293.1068 0 -292.0694 0 -268.0973 0 -263.3214 0 -249.4287 0 -253.0705 0 -231.8856 0 -223.5183 0 -219.4325 0 -211.4528 0 -203.7232 0 -199.95 0 -190.9217 0 -182.2556 0 -178.0545 0 -169.9081 0 -165.9599 0 -166.743 0 -154.5973 0 -154.5973 0 -158.3059 0 -162.093 0 -169.9081 0 -178.0545 0 -169.9081 0 -190.9217 0 -190.9217 0 -190.9217 0 -190.9217 0 -186.5442 0 -182.2556 0 -173.9391 0 -169.9081 0 -165.9599 0 -169.9081 0 -182.2556 0 -190.9217 0 -219.4325 0 -236.169 0 -227.669 0 -215.411 0 -211.4528 0 -203.7232 0 -199.95 0 -190.9217 0 -231.8856 0 -585.7261 0 -749.3084 0 -806.8843 0 -832.6165 0 -841.3381 0 -841.3381 0 -850.1325 0 -867.9417 0 -895.2133 0 -923.1653 0 -961.5148 0 -991.1038 0 -1001.127 0 -1011.231 0 -1011.231 0 -1001.127 0 -981.1611 0 -951.8103 0 -913.7716 0 -876.9574 0 -823.9673 0 -790.0854 0 -749.3084 0 -710.2306 0 -680.1559 0 -658.2748 0 -623.059 0 -616.2001 0 -593.2256 0 -578.3048 0 -563.6945 0 -563.6945 0 -556.5042 0 -549.3896 0 -549.3896 0 -542.35 0 -542.35 0 -535.385 0 -528.4937 0 -495.1235 0 -521.6757 0 -501.6548 0 -501.6548 0 -495.1235 0 -488.6625 0 -482.271 0 -469.6946 0 -457.3894 0 -451.3372 0 -445.351 0 -439.4304 0 -445.351 0 -427.7836 0 -433.5748 0 -433.5748 0 -427.7836 0 -422.0562 0 -405.2517 0 -410.7909 0 -405.2517 0 -394.358 0 -389.0022 0 -389.0022 0 -378.4703 0 -363.1136 0 -368.1744 0 -329.2677 0 -324.6522 0 -333.9371 0 -329.2677 0 -298.3415 0 -314.5294 0 -293.1068 0 -287.951 0 -293.1068 0 -272.9472 0 -309.0518 0 -293.1068 0 -293.1068 0 -277.8722 0 -277.8722 0 -272.9472 0 -272.9472 0 -263.3214 0 -258.6186 0 -253.988 0 -258.6186 0 -223.5183 0 -231.8856 0 -249.4287 0 -227.669 0 -215.411 0 -223.5183 0 -182.2556 0 -199.95 0 -195.3898 0 -207.5571 0 -203.7232 0 -211.4528 0 -215.411 0 -207.5571 0 -186.5442 0 -195.3898 0 -199.95 0 -182.2556 0 -195.3898 0 -190.9217 0 -190.9217 0 -190.9217 0 -195.3898 0 -190.9217 0 -169.9081 0 -186.5442 0 -162.093 0 -178.0545 0 -169.9081 0 -154.5973 0 -147.4097 0 -143.9279 0 -137.1818 0 -137.1818 0 -165.9599 0 -130.7166 0 -137.1818 0 -165.9599 0 -162.093 0 -165.9599 0 -158.3059 0 -154.5973 0 -143.9279 0 -158.3059 0 -150.9657 0 -147.4097 0 -150.9657 0 -158.3059 0 -143.9279 0 -147.4097 0 -147.4097 0 -115.7171 0 -150.9657 0 -130.7166 0 -121.5236 0 -118.589 0 -133.9147 0 -112.9069 0 -133.9147 0 -137.1818 0 -137.1818 0 -133.9147 0 -133.9147 0 -133.9147 0 -130.7166 0 -127.5863 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -127.5863 0 -124.5223 0 -127.5863 0 -124.5223 0 -121.5236 0 -124.5223 0 -115.7171 0 -115.7171 0 -115.7171 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -115.7171 0 -112.9069 0 -115.7171 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -110.1572 0 -112.9069 0 -110.1572 0 -110.1572 0 -107.4668 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -99.74084 0 -99.74084 0 -102.2597 0 -102.2597 0 -121.5236 0 -150.9657 0 -137.1818 0 -124.5223 0 -121.5236 0 -121.5236 0 -118.589 0 -118.589 0 -118.589 0 -121.5236 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -127.5863 0 -127.5863 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -127.5863 0 -130.7166 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -130.7166 0 -133.9147 0 -130.7166 0 -133.9147 0 -137.1818 0 -137.1818 0 -124.5223 0 -107.4668 0 -112.9069 0 -121.5236 0 -112.9069 0 -107.4668 0 -124.5223 0 -115.7171 0 -118.589 0 -154.5973 0 -219.4325 0 -244.9397 0 -244.9397 0 -263.3214 0 -268.0973 0 -272.9472 0 -272.9472 0 -272.9472 0 -272.9472 0 -272.9472 0 -272.9472 0 -277.8722 0 -268.0973 0 -244.9397 0 -227.669 0 -223.5183 0 -236.169 0 -240.5201 0 -253.988 0 -244.9397 0 -263.3214 0 -268.0973 0 -303.6562 0 -324.6522 0 -329.2677 0 -324.6522 0 -329.2677 0 -329.2677 0 -324.6522 0 -329.2677 0 -324.6522 0 -324.6522 0 -314.5294 0 -320.09 0 -324.6522 0 -324.6522 0 -324.6522 0 -320.09 0 -320.09 0 -309.0518 0 -303.6562 0 -303.6562 0 -287.951 0 -282.8731 0 -277.8722 0 -277.8722 0 -268.0973 0 -272.9472 0 -263.3214 0 -258.6186 0 -253.988 0 -249.4287 0 -244.9397 0 -244.9397 0 -227.669 0 -219.4325 0 -231.8856 0 -227.669 0 -223.5183 0 -219.4325 0 -219.4325 0 -219.4325 0 -211.4528 0 -207.5571 0 -203.7232 0 -199.95 0 -190.9217 0 -195.3898 0 -186.5442 0 -186.5442 0 -182.2556 0 -182.2556 0 -173.9391 0 -173.9391 0 -169.9081 0 -169.9081 0 -165.9599 0 -165.9599 0 -169.9081 0 -165.9599 0 -162.093 0 -162.093 0 -158.3059 0 -158.3059 0 -158.3059 0 -158.3059 0 -150.9657 0 -143.9279 0 -130.7166 0 -133.9147 0 -140.5191 0 -147.4097 0 -143.9279 0 -140.5191 0 -143.9279 0 -143.9279 0 -147.4097 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -140.5191 0 -140.5191 0 -143.9279 0 -140.5191 0 -140.5191 0 -137.1818 0 -140.5191 0 -143.9279 0 -140.5191 0 -143.9279 0 -137.1818 0 -137.1818 0 -140.5191 0 -140.5191 0 -143.9279 0 -143.9279 0 -140.5191 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -140.5191 0 -140.5191 0 -140.5191 0 -137.1818 0 -137.1818 0 -130.7166 0 -130.7166 0 -130.7166 0 -127.5863 0 -130.7166 0 -127.5863 0 -127.5863 0 -127.5863 0 -130.7166 0 -127.5863 0 -127.5863 0 -127.5863 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -127.5863 0 -127.5863 0 -121.5236 0 -99.74084 0 -112.9069 0 -115.7171 0 -118.589 0 -121.5236 0 -112.9069 0 -112.9069 0 -121.5236 0 -124.5223 0 -127.5863 0 -127.5863 0 -127.5863 0 -127.5863 0 -127.5863 0 -127.5863 0 -127.5863 0 -127.5863 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -118.589 0 -112.9069 0 -118.589 0 -118.589 0 -118.589 0 -115.7171 0 -115.7171 0 -112.9069 0 -118.589 0 -115.7171 0 -112.9069 0 -115.7171 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -107.4668 0 -107.4668 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -102.2597 0 -102.2597 0 -104.8347 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -102.2597 0 -102.2597 0 -99.74084 0 -99.74084 0 -99.74084 0 -99.74084 0 -99.74084 0 -99.74084 0 -97.27695 0 -97.27695 0 -99.74084 0 -97.27695 0 -97.27695 0 -97.27695 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -75.14358 0 -75.14358 0 -92.51001 0 -75.14358 0 -61.00001 0 -75.14358 0 -60.20362 0 -61.00001 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -58.63505 0 -58.63505 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -56.34185 0 -56.34185 0 -57.09837 0 -56.34185 0 -57.09837 0 -56.34185 0 -57.09837 0 -56.34185 0 -57.86275 0 -137.1818 0 -178.0545 0 -190.9217 0 -186.5442 0 -178.0545 0 -162.093 0 -150.9657 0 -143.9279 0 -140.5191 0 -140.5191 0 -140.5191 0 -140.5191 0 -143.9279 0 -154.5973 0 -162.093 0 -169.9081 0 -162.093 0 -186.5442 0 -211.4528 0 -223.5183 0 -219.4325 0 -236.169 0 -277.8722 0 -324.6522 0 -358.1103 0 -439.4304 0 -710.2306 0 -1084.262 0 -1430.581 0 -1672.562 0 -1980.76 0 -2184.043 0 -2336.317 0 -2520.939 0 -2642.306 0 -2717.406 0 -2794.255 0 -2872.884 0 -2872.884 0 -2926.308 0 -2953.326 0 -2872.884 0 -2926.308 0 -2899.495 0 -2820.265 0 -2667.147 0 -2568.923 0 -2404.199 0 -2184.043 0 -1870.329 0 -1659.084 0 -1479.105 0 -1314.67 0 -1206.19 0 -1095.03 0 -1001.127 0 -932.636 0 -867.9417 0 -823.9673 0 -773.5672 0 -733.4764 0 -702.6143 0 -672.7986 0 -658.2748 0 -629.9788 0 -608.4619 0 -578.3048 0 -556.5042 0 -542.35 0 -521.6757 0 -495.1235 0 -495.1235 0 -475.9486 0 -463.5084 0 -451.3372 0 -439.4304 0 -427.7836 0 -422.0562 0 -410.7909 0 -405.2517 0 -394.358 0 -394.358 0 -383.7065 0 -378.4703 0 -368.1744 0 -363.1136 0 -358.1103 0 -353.1638 0 -343.4397 0 -333.9371 0 -329.2677 0 -320.09 0 -303.6562 0 -309.0518 0 -298.3415 0 -293.1068 0 -293.1068 0 -282.8731 0 -282.8731 0 -268.0973 0 -272.9472 0 -268.0973 0 -263.3214 0 -258.6186 0 -253.988 0 -253.988 0 -249.4287 0 -244.9397 0 -240.5201 0 -236.169 0 -236.169 0 -236.169 0 -236.169 0 -227.669 0 -227.669 0 -219.4325 0 -219.4325 0 -219.4325 0 -215.411 0 -211.4528 0 -215.411 0 -215.411 0 -207.5571 0 -207.5571 0 -203.7232 0 -199.95 0 -203.7232 0 -199.95 0 -195.3898 0 -195.3898 0 -195.3898 0 -186.5442 0 -190.9217 0 -186.5442 0 -190.9217 0 -182.2556 0 -182.2556 0 -178.0545 0 -182.2556 0 -169.9081 0 -169.9081 0 -173.9391 0 -165.9599 0 -169.9081 0 -169.9081 0 -169.9081 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -162.093 0 -162.093 0 -158.3059 0 -154.5973 0 -154.5973 0 -158.3059 0 -154.5973 0 -150.9657 0 -158.3059 0 -154.5973 0 -150.9657 0 -150.9657 0 -137.1818 0 -150.9657 0 -150.9657 0 -147.4097 0 -143.9279 0 -143.9279 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -140.5191 0 -140.5191 0 -137.1818 0 -140.5191 0 -143.9279 0 -137.1818 0 -137.1818 0 -137.1818 0 -133.9147 0 -124.5223 0 -124.5223 0 -107.4668 0 -121.5236 0 -118.589 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -130.7166 0 -133.9147 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -127.5863 0 -127.5863 0 -130.7166 0 -112.9069 0 -104.8347 0 -60.20362 0 -60.20362 0 -61.00001 0 -57.86275 0 -75.14358 0 -54.11886 0 -57.86275 0 -60.20362 0 -99.74084 0 -75.14358 0 -75.14358 0 -60.20362 0 -59.41532 0 -61.00001 0 -75.14358 0 -61.00001 0 -94.86702 0 -75.14358 0 -59.41532 0 -97.27695 0 -127.5863 0 -130.7166 0 -99.74084 0 -59.41532 0 -57.09837 0 -94.86702 0 -54.85215 0 -61.00001 0 -61.00001 0 -59.41532 0 -61.00001 0 -54.85215 0 -118.589 0 -104.8347 0 -124.5223 0 -127.5863 0 -124.5223 0 -118.589 0 -118.589 0 -112.9069 0 -112.9069 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -112.9069 0 -110.1572 0 -112.9069 0 -110.1572 0 -107.4668 0 -107.4668 0 -107.4668 0 -107.4668 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -104.8347 0 -112.9069 0 -110.1572 0 -127.5863 0 -97.27695 0 -130.7166 0 -133.9147 0 -121.5236 0 -97.27695 0 -59.41532 0 -75.14358 0 -61.00001 0 -92.51001 0 -92.51001 0 -60.20362 0 -57.86275 0 -57.86275 0 -60.20362 0 -59.41532 0 -104.8347 0 -94.86702 0 -102.2597 0 -61.00001 0 -107.4668 0 -99.74084 0 -102.2597 0 -102.2597 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -99.74084 0 -99.74084 0 -99.74084 0 -115.7171 0 -169.9081 0 -173.9391 0 -186.5442 0 -203.7232 0 -207.5571 0 -207.5571 0 -215.411 0 -215.411 0 -211.4528 0 -207.5571 0 -203.7232 0 -199.95 0 -190.9217 0 -186.5442 0 -182.2556 0 -182.2556 0 -182.2556 0 -178.0545 0 -178.0545 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -173.9391 0 -169.9081 0 -162.093 0 -158.3059 0 -154.5973 0 -154.5973 0 -150.9657 0 -150.9657 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -130.7166 0 -127.5863 0 -104.8347 0 -110.1572 0 -104.8347 0 -121.5236 0 -112.9069 0 -130.7166 0 -130.7166 0 -133.9147 0 -130.7166 0 -130.7166 0 -130.7166 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -121.5236 0 -118.589 0 -107.4668 0 -102.2597 0 -115.7171 0 -92.51001 0 -97.27695 0 -58.63505 0 -75.14358 0 -56.34185 0 -61.00001 0 -55.59313 0 -56.34185 0 -57.09837 0 -58.63505 0 -61.00001 0 -99.74084 0 -107.4668 0 -104.8347 0 -102.2597 0 -102.2597 0 -102.2597 0 -61.00001 0 -61.00001 0 -92.51001 0 -94.86702 0 -97.27695 0 -97.27695 0 -97.27695 0 -52.6751 0 -54.85215 0 -51.96452 0 -55.59313 0 -55.59313 0 -53.39319 0 -56.34185 0 -53.39319 0 -52.6751 0 -51.2614 0 -57.86275 0 -53.39319 0 -75.14358 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -57.86275 0 -75.14358 0 -61.00001 0 -75.14358 0 -75.14358 0 -59.41532 0 -54.11886 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -55.59313 0 -58.63505 0 -59.41532 0 -58.63505 0 -59.41532 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -57.86275 0 -58.63505 0 -58.63505 0 -57.86275 0 -57.86275 0 -57.86275 0 -58.63505 0 -57.86275 0 -57.09837 0 -57.86275 0 -57.86275 0 -57.09837 0 -57.09837 0 -57.09837 0 -56.34185 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.09837 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -55.59313 0 -55.59313 0 -56.34185 0 -53.39319 0 -55.59313 0 -53.39319 0 -50.56569 0 -47.85577 0 -54.11886 0 -47.19624 0 -47.19624 0 -55.59313 0 -56.34185 0 -56.34185 0 -55.59313 0 -56.34185 0 -53.39319 0 -49.19625 0 -52.6751 0 -49.19625 0 -49.87733 0 -47.85577 0 -52.6751 0 -47.19624 0 -49.87733 0 -51.2614 0 -50.56569 0 -54.11886 0 -47.19624 0 -46.54379 0 -49.19625 0 -47.85577 0 -51.96452 0 -50.56569 0 -49.87733 0 -50.56569 0 -54.85215 0 -55.59313 0 -54.85215 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -49.87733 0 -53.39319 0 -49.19625 0 -49.19625 0 -51.2614 0 -49.87733 0 -46.54379 0 -47.85577 0 -47.85577 0 -45.89836 0 -46.54379 0 -49.19625 0 -45.2599 0 -47.19624 0 -43.38577 0 -47.19624 0 -45.2599 0 -45.89836 0 -46.54379 0 -47.19624 0 -49.87733 0 -50.56569 0 -47.85577 0 -47.85577 0 -47.85577 0 -51.2614 0 -45.89836 0 -48.52242 0 -49.19625 0 -47.19624 0 -46.54379 0 -48.52242 0 -47.19624 0 -49.19625 0 -49.87733 0 -44.00365 0 -44.00365 0 -44.00365 0 -41.57241 0 -43.38577 0 -44.62835 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.2614 0 -49.19625 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.96452 0 -51.2614 0 -50.56569 0 -51.2614 0 -51.2614 0 -50.56569 0 -50.56569 0 -51.2614 0 -50.56569 0 -49.87733 0 -50.56569 0 -50.56569 0 -47.85577 0 -50.56569 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.2614 0 -50.56569 0 -49.87733 0 -51.2614 0 -51.2614 0 -51.2614 0 -50.56569 0 -51.2614 0 -51.2614 0 - -50.56569 0 -49.19625 0 -49.19625 0 -49.87733 0 -50.56569 0 -49.19625 0 -50.56569 0 -50.56569 0 -50.56569 0 -51.2614 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.2614 0 -50.56569 0 -50.56569 0 -48.52242 0 -46.54379 0 -44.00365 0 -45.89836 0 -43.38577 0 -47.85577 0 -49.19625 0 -49.87733 0 -50.56569 0 -51.96452 0 -50.56569 0 -49.87733 0 -51.2614 0 -51.2614 0 -49.87733 0 -50.56569 0 -51.2614 0 -50.56569 0 -50.56569 0 -51.2614 0 -50.56569 0 -49.87733 0 -49.87733 0 -48.52242 0 -46.54379 0 -45.89836 0 -47.19624 0 -44.62835 0 -45.89836 0 -48.52242 0 -49.87733 0 -48.52242 0 -48.52242 0 -50.56569 0 -50.56569 0 -51.2614 0 -49.87733 0 -50.56569 0 -49.87733 0 -51.2614 0 -49.87733 0 -51.2614 0 -51.2614 0 -49.87733 0 -49.87733 0 -49.19625 0 -49.87733 0 -49.19625 0 -49.19625 0 -48.52242 0 -48.52242 0 -48.52242 0 -49.19625 0 -50.56569 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.2614 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -47.19624 0 -49.19625 0 -49.87733 0 -51.2614 0 -50.56569 0 -51.2614 0 -50.56569 0 -51.2614 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.2614 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -49.87733 0 -45.89836 0 -45.2599 0 -45.2599 0 -42.77463 0 -42.1702 0 -44.00365 0 -40.39657 0 -42.77463 0 -41.57241 0 -47.19624 0 -45.89836 0 -49.19625 0 -49.87733 0 -47.19624 0 -48.52242 0 -49.19625 0 -50.56569 0 -49.87733 0 -49.19625 0 -49.87733 0 -49.87733 0 -49.87733 0 -48.52242 0 -49.87733 0 -48.52242 0 -49.87733 0 -49.87733 0 -50.56569 0 -49.87733 0 -49.87733 0 -49.19625 0 -49.87733 0 -54.11886 0 -57.09837 0 -55.59313 0 -54.11886 0 -53.39319 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 - -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -51.2614 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -49.19625 0 -49.87733 0 -49.19625 0 -49.87733 0 -47.85577 0 -49.87733 0 -49.87733 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -49.87733 0 -50.56569 0 -50.56569 0 -49.87733 0 -50.56569 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.19625 0 -50.56569 0 -47.19624 0 -47.19624 0 -47.85577 0 -47.19624 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 - -50.56569 0 -50.56569 0 -49.87733 0 -49.87733 0 -50.56569 0 -49.87733 0 -50.56569 0 -49.87733 0 -45.89836 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.19625 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.19625 0 -42.77463 0 -45.89836 0 -44.00365 0 -46.54379 0 -47.85577 0 -48.52242 0 -49.19625 0 -47.85577 0 -49.19625 0 -45.89836 0 -48.52242 0 -49.19625 0 -49.19625 0 -48.52242 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.19624 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.87733 0 -49.19625 0 -48.52242 0 -49.19625 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.85577 0 -48.52242 0 -49.87733 0 -49.87733 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.85577 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.87733 0 -49.19625 0 -49.19625 0 -49.87733 0 -49.19625 0 -49.19625 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 - -49.87733 0 -49.87733 0 -50.56569 0 -50.56569 0 -49.87733 0 -49.87733 0 -50.56569 0 -50.56569 0 -50.56569 0 -49.87733 0 -49.87733 0 -50.56569 0 -49.19625 0 -49.19625 0 -49.87733 0 -51.2614 0 -52.6751 0 -54.85215 0 -58.63505 0 -75.14358 0 -61.00001 0 -92.51001 0 -97.27695 0 -102.2597 0 -102.2597 0 -107.4668 0 -104.8347 0 -107.4668 0 -107.4668 0 -107.4668 0 -107.4668 0 -104.8347 0 -104.8347 0 -104.8347 0 -107.4668 0 -107.4668 0 -104.8347 0 -104.8347 0 -104.8347 0 -107.4668 0 -104.8347 0 -102.2597 0 -104.8347 0 -102.2597 0 -102.2597 0 -102.2597 0 -102.2597 0 -99.74084 0 -99.74084 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -94.86702 0 -92.51001 0 -94.86702 0 -92.51001 0 -92.51001 0 -92.51001 0 - -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -56.34185 0 -56.34185 0 -56.34185 0 -55.59313 0 -55.59313 0 -56.34185 0 -55.59313 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -55.59313 0 -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.11886 0 -54.85215 0 -54.85215 0 -54.85215 0 -55.59313 0 -54.85215 0 -56.34185 0 -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.11886 0 -54.11886 0 -53.39319 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -55.59313 0 -55.59313 0 -56.34185 0 -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.85215 0 -53.39319 0 -54.11886 0 -54.11886 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.11886 0 -54.11886 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.85215 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -54.11886 0 -53.39319 0 -52.6751 0 -53.39319 0 -52.6751 0 -53.39319 0 -52.6751 0 -53.39319 0 -53.39319 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -53.39319 0 -53.39319 0 -54.11886 0 -53.39319 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -52.6751 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -53.39319 0 -54.11886 0 -53.39319 0 -53.39319 0 -53.39319 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -52.6751 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -51.96452 0 -52.6751 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -53.39319 0 -53.39319 0 -54.11886 0 -53.39319 0 -53.39319 0 -53.39319 0 -52.6751 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -52.6751 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -53.39319 0 -53.39319 0 -53.39319 0 -54.11886 0 -54.85215 0 -54.85215 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.11886 0 -53.39319 0 -54.11886 0 -53.39319 0 -52.6751 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.85215 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.85215 0 -55.59313 0 -56.34185 0 -55.59313 0 -55.59313 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 - -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -76.75501 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -59.76001 0 -61.00001 0 -61.00001 0 -59.76001 0 -57.90001 0 -57.90001 0 -57.90001 0 -60.38001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -61.00001 0 -76.75501 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -92.51001 0 -76.75501 0 -61.00001 0 -76.75501 0 -92.51001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -92.51001 0 -76.75501 0 -92.51001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -76.75501 0 -60.38001 0 -61.00001 0 -57.28001 0 -57.90001 0 -59.76001 0 -58.52001 0 -59.14001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -60.38001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -95.86751 0 -95.86751 0 -61.00001 0 -76.75501 0 -61.00001 0 -59.76001 0 -58.52001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -58.52001 0 -57.90001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -95.86751 0 -61.00001 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -61.00001 0 -60.38001 0 -59.14001 0 -60.38001 0 -76.75501 0 -61.00001 0 -60.38001 0 -59.76001 0 -59.14001 0 -59.14001 0 -60.38001 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -60.38001 0 -59.14001 0 -61.00001 0 -59.14001 0 -61.00001 0 -60.38001 0 -92.51001 0 -56.04001 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -76.75501 0 -92.51001 0 -76.75501 0 -92.51001 0 -76.75501 0 -61.00001 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -58.52001 0 -61.00001 0 -60.38001 0 -57.90001 0 -59.76001 0 -61.00001 0 -60.38001 0 -61.00001 0 -92.51001 0 -99.22501 0 -92.51001 0 -59.14001 0 -59.76001 0 -129.4425 0 -132.8 0 -136.1575 0 -122.7275 0 -102.5825 0 -95.86751 0 -95.86751 0 -102.5825 0 -116.0125 0 -116.0125 0 -112.655 0 -109.2975 0 -109.2975 0 -102.5825 0 -109.2975 0 -105.94 0 -105.94 0 -102.5825 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -76.75501 0 -92.51001 0 -99.22501 0 -95.86751 0 - -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -92.51001 0 -95.86751 0 -92.51001 0 -95.86751 0 -95.86751 0 -99.22501 0 -99.22501 0 -92.51001 0 -92.51001 0 - -92.51001 0 -92.51001 0 -76.75501 0 - -95.86751 0 - -105.94 0 -109.2975 0 -105.94 0 -105.94 0 -105.94 0 -109.2975 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -116.0125 0 -112.655 0 -116.0125 0 -112.655 0 -112.655 0 -112.655 0 - -139.515 0 -142.8725 0 -139.515 0 -139.515 0 -136.1575 0 -139.515 0 -139.515 0 - -139.515 0 -136.1575 0 -136.1575 0 -132.8 0 -129.4425 0 -129.4425 0 -122.7275 0 -122.7275 0 - -126.085 0 -126.085 0 -132.8 0 -142.8725 0 -132.8 0 -126.085 0 -122.7275 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -109.2975 0 -99.22501 0 -92.51001 0 -58.52001 0 -57.28001 0 -57.28001 0 -54.80001 0 -56.66001 0 -57.90001 0 -59.14001 0 -59.14001 0 -59.76001 0 -60.38001 0 -95.86751 0 -116.0125 0 -126.085 0 -119.37 0 -112.655 0 -112.655 0 -122.7275 0 -136.1575 0 -132.8 0 -132.8 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -136.1575 0 -139.515 0 -136.1575 0 -76.75501 0 -95.86751 0 -109.2975 0 -122.7275 0 -129.4425 0 -126.085 0 -122.7275 0 -129.4425 0 -122.7275 0 -126.085 0 -122.7275 0 -122.7275 0 -119.37 0 -119.37 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -116.0125 0 -116.0125 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -99.22501 0 -102.5825 0 -105.94 0 -105.94 0 -102.5825 0 -99.22501 0 -99.22501 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -102.5825 0 -76.75501 0 -59.76001 0 -57.90001 0 -57.28001 0 -56.04001 0 -57.90001 0 -55.42001 0 -59.76001 0 -59.76001 0 -95.86751 0 -61.00001 0 -102.5825 0 -116.0125 0 -122.7275 0 -102.5825 0 -92.51001 0 -95.86751 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -99.22501 0 -99.22501 0 -99.22501 0 -102.5825 0 -102.5825 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -76.75501 0 -76.75501 0 -61.00001 0 -92.51001 0 -76.75501 0 -92.51001 0 -95.86751 0 -95.86751 0 -99.22501 0 -102.5825 0 -99.22501 0 -99.22501 0 -102.5825 0 -99.22501 0 -92.51001 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -76.75501 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -99.22501 0 -92.51001 0 -95.86751 0 -99.22501 0 -102.5825 0 -102.5825 0 -99.22501 0 -99.22501 0 -102.5825 0 -99.22501 0 -99.22501 0 -92.51001 0 -99.22501 0 -95.86751 0 -95.86751 0 -99.22501 0 -95.86751 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -99.22501 0 -99.22501 0 -95.86751 0 -99.22501 0 -95.86751 0 -59.14001 0 -95.86751 0 -99.22501 0 -99.22501 0 -95.86751 0 -92.51001 0 -95.86751 0 -92.51001 0 -95.86751 0 -99.22501 0 -102.5825 0 -105.94 0 -109.2975 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -105.94 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -60.38001 0 -57.90001 0 -92.51001 0 -57.90001 0 -58.52001 0 -92.51001 0 -92.51001 0 -99.22501 0 -60.38001 0 -57.28001 0 -76.75501 0 -57.28001 0 -92.51001 0 -59.14001 0 -92.51001 0 -92.51001 0 -102.5825 0 -95.86751 0 -92.51001 0 -76.75501 0 -92.51001 0 -92.51001 0 -76.75501 0 -57.90001 0 -59.14001 0 -61.00001 0 -59.76001 0 -95.86751 0 -76.75501 0 -95.86751 0 -76.75501 0 -92.51001 0 -76.75501 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -92.51001 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -92.51001 0 -95.86751 0 -95.86751 0 -99.22501 0 -92.51001 0 -92.51001 0 -99.22501 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -92.51001 0 -99.22501 0 -92.51001 0 -92.51001 0 -95.86751 0 -92.51001 0 -95.86751 0 -95.86751 0 -99.22501 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -92.51001 0 -58.52001 0 -60.38001 0 -61.00001 0 -57.28001 0 -60.38001 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -102.5825 0 -105.94 0 -102.5825 0 -102.5825 0 -105.94 0 -102.5825 0 -105.94 0 -105.94 0 -95.86751 0 -95.86751 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -99.22501 0 -95.86751 0 -99.22501 0 -99.22501 0 -95.86751 0 -99.22501 0 -99.22501 0 -102.5825 0 -105.94 0 -109.2975 0 -102.5825 0 -99.22501 0 -102.5825 0 -102.5825 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -102.5825 0 -105.94 0 -105.94 0 -105.94 0 -92.51001 0 -102.5825 0 -95.86751 0 -60.38001 0 -56.04001 0 -54.80001 0 -55.42001 0 -56.66001 0 -55.42001 0 -54.80001 0 -54.18001 0 -53.56001 0 -52.94001 0 -51.08001 0 -50.46001 0 -52.32001 0 -52.94001 0 -53.56001 0 -57.90001 0 -61.00001 0 -92.51001 0 -95.86751 0 -92.51001 0 -76.75501 0 -76.75501 0 -60.38001 0 -58.52001 0 -56.04001 0 -56.04001 0 - -59.76001 0 -95.86751 0 -76.75501 0 -59.76001 0 -59.76001 0 -61.00001 0 -58.52001 0 -60.38001 0 -105.94 0 -99.22501 0 -99.22501 0 -99.22501 0 -109.2975 0 -95.86751 0 -112.655 0 -139.515 0 -149.5875 0 -152.945 0 -152.945 0 -152.945 0 -166.375 0 -241.537 0 -278.5031 0 -255.3993 0 -223.0539 0 -209.1916 0 -223.0539 0 -218.4331 0 -218.4331 0 -223.0539 0 -223.0539 0 -236.9162 0 -223.0539 0 -199.95 0 -186.52 0 -176.4475 0 -149.5875 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -136.1575 0 -142.8725 0 -156.3025 0 -163.0175 0 -173.09 0 -186.52 0 -236.9162 0 -241.537 0 -273.8823 0 -306.2277 0 -332.1762 0 -362.3915 0 -374.4776 0 -386.5637 0 -310.8485 0 -209.1916 0 -105.94 0 -57.90001 0 -76.75501 0 -61.00001 0 -99.22501 0 -116.0125 0 -139.515 0 -136.1575 0 -132.8 0 -136.1575 0 -109.2975 0 -105.94 0 -116.0125 0 -142.8725 0 -132.8 0 -146.23 0 -152.945 0 -152.945 0 -149.5875 0 -142.8725 0 -139.515 0 -139.515 0 -136.1575 0 -132.8 0 -126.085 0 -126.085 0 -119.37 0 -119.37 0 -119.37 0 -122.7275 0 -126.085 0 -126.085 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -116.0125 0 -95.86751 0 -116.0125 0 -95.86751 0 -112.655 0 -57.28001 0 -99.22501 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -112.655 0 -112.655 0 -112.655 0 -116.0125 0 -105.94 0 -105.94 0 -102.5825 0 -76.75501 0 -92.51001 0 -99.22501 0 -76.75501 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -61.00001 0 -92.51001 0 -95.86751 0 -95.86751 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -99.22501 0 -105.94 0 -112.655 0 -119.37 0 -122.7275 0 -122.7275 0 -126.085 0 -126.085 0 -129.4425 0 -132.8 0 -139.515 0 -146.23 0 -149.5875 0 -152.945 0 -159.66 0 -166.375 0 -166.375 0 -169.7325 0 -169.7325 0 -169.7325 0 -176.4475 0 -183.1625 0 -186.52 0 -189.8775 0 - -193.235 0 -196.5925 0 -209.1916 0 -218.4331 0 -232.2954 0 -246.1577 0 -250.7785 0 -260.02 0 -269.2616 0 -278.5031 0 -283.1239 0 -296.9862 0 -306.2277 0 -326.1331 0 -350.3053 0 -386.5637 0 -434.9082 0 -501.3819 0 -555.7695 0 -616.2001 0 -694.5541 0 -781.6141 0 -851.2621 0 -920.9101 0 -981.8521 0 -1042.794 0 -1119.341 0 -1167.962 0 -1216.582 0 -1277.359 0 -1313.824 0 -1313.824 0 -1362.445 0 -1374.6 0 -1362.445 0 -1350.29 0 -1374.6 0 -1362.445 0 -1350.29 0 -1338.135 0 -1313.824 0 -1277.359 0 -1289.514 0 -1240.893 0 -1228.738 0 -1204.427 0 -1167.962 0 -1155.806 0 -1107.185 0 -1086.324 0 -1060.206 0 -1042.794 0 -1007.97 0 -990.5581 0 -964.4401 0 -947.0281 0 -929.6161 0 -920.9101 0 -894.7921 0 -859.9681 0 -833.8501 0 -825.1441 0 -807.7321 0 -772.9081 0 -764.2021 0 -720.6721 0 -703.2601 0 -703.2601 0 -677.1421 0 -677.1421 0 -659.7301 0 -616.2001 0 -616.2001 0 -610.157 0 -598.0709 0 -579.9417 0 -585.9848 0 -567.8556 0 -567.8556 0 -549.7264 0 -555.7695 0 -531.5972 0 -537.6403 0 -525.5541 0 -525.5541 0 -513.468 0 -513.468 0 -489.2958 0 -495.3388 0 -489.2958 0 -465.1235 0 -483.2527 0 -471.1666 0 -453.0374 0 -465.1235 0 -459.0805 0 -459.0805 0 -446.9943 0 -446.9943 0 -446.9943 0 -453.0374 0 -440.9513 0 -434.9082 0 -440.9513 0 -428.8652 0 -422.8221 0 -434.9082 0 -434.9082 0 -428.8652 0 -416.779 0 -416.779 0 -410.736 0 -410.736 0 -410.736 0 -404.6929 0 -410.736 0 -410.736 0 -404.6929 0 -404.6929 0 -404.6929 0 -398.6498 0 -392.6068 0 -398.6498 0 -398.6498 0 -398.6498 0 -398.6498 0 -404.6929 0 -392.6068 0 -392.6068 0 -386.5637 0 -398.6498 0 -404.6929 0 -398.6498 0 -398.6498 0 -392.6068 0 -398.6498 0 -392.6068 0 -392.6068 0 -386.5637 0 -386.5637 0 -392.6068 0 -392.6068 0 -386.5637 0 -386.5637 0 -386.5637 0 -380.5207 0 -380.5207 0 -380.5207 0 -380.5207 0 -374.4776 0 -386.5637 0 -380.5207 0 -374.4776 0 -374.4776 0 -374.4776 0 -368.4345 0 -368.4345 0 -374.4776 0 -368.4345 0 -368.4345 0 -368.4345 0 -368.4345 0 -362.3915 0 -356.3484 0 -356.3484 0 -356.3484 0 -350.3053 0 -344.2623 0 -350.3053 0 - -344.2623 0 -344.2623 0 -338.2192 0 -344.2623 0 -338.2192 0 -338.2192 0 -344.2623 0 -344.2623 0 -338.2192 0 -338.2192 0 -338.2192 0 -338.2192 0 -338.2192 0 -326.1331 0 -332.1762 0 -332.1762 0 -332.1762 0 -296.9862 0 -292.3654 0 -283.1239 0 -246.1577 0 -264.6408 0 -264.6408 0 -287.7447 0 -315.4693 0 -315.4693 0 -315.4693 0 -315.4693 0 -315.4693 0 -310.8485 0 -310.8485 0 -315.4693 0 -310.8485 0 -315.4693 0 -310.8485 0 -310.8485 0 -315.4693 0 -315.4693 0 -315.4693 0 -310.8485 0 -310.8485 0 -310.8485 0 -315.4693 0 -306.2277 0 -306.2277 0 -306.2277 0 -306.2277 0 -301.607 0 -306.2277 0 -306.2277 0 -301.607 0 -306.2277 0 -306.2277 0 -301.607 0 -306.2277 0 -310.8485 0 -310.8485 0 -310.8485 0 -315.4693 0 -310.8485 0 -310.8485 0 -315.4693 0 -315.4693 0 -310.8485 0 -306.2277 0 -310.8485 0 -306.2277 0 -301.607 0 -296.9862 0 -296.9862 0 -296.9862 0 -292.3654 0 -296.9862 0 -292.3654 0 -292.3654 0 -287.7447 0 -292.3654 0 -296.9862 0 -292.3654 0 -296.9862 0 -292.3654 0 -292.3654 0 -296.9862 0 -296.9862 0 -292.3654 0 -292.3654 0 -296.9862 0 -283.1239 0 -283.1239 0 -283.1239 0 -283.1239 0 -278.5031 0 -273.8823 0 -269.2616 0 -269.2616 0 -264.6408 0 -269.2616 0 -264.6408 0 -269.2616 0 -269.2616 0 -273.8823 0 -273.8823 0 -273.8823 0 -278.5031 0 -278.5031 0 -273.8823 0 -269.2616 0 -273.8823 0 -278.5031 0 -278.5031 0 -278.5031 0 -269.2616 0 -273.8823 0 -273.8823 0 -269.2616 0 -273.8823 0 -269.2616 0 -269.2616 0 -264.6408 0 -260.02 0 -255.3993 0 -255.3993 0 -260.02 0 -264.6408 0 - -264.6408 0 -260.02 0 -264.6408 0 -264.6408 0 -264.6408 0 -264.6408 0 -260.02 0 -260.02 0 -260.02 0 -260.02 0 -264.6408 0 -260.02 0 -260.02 0 -255.3993 0 -260.02 0 -255.3993 0 -255.3993 0 -250.7785 0 -246.1577 0 -246.1577 0 -250.7785 0 -250.7785 0 -250.7785 0 -255.3993 0 -250.7785 0 -250.7785 0 -255.3993 0 -250.7785 0 -255.3993 0 -250.7785 0 -250.7785 0 -250.7785 0 -246.1577 0 -250.7785 0 -250.7785 0 -250.7785 0 -250.7785 0 -250.7785 0 -246.1577 0 -246.1577 0 -236.9162 0 -246.1577 0 -236.9162 0 -241.537 0 -241.537 0 -241.537 0 -246.1577 0 -246.1577 0 -241.537 0 -241.537 0 -241.537 0 -241.537 0 -246.1577 0 -241.537 0 -241.537 0 -241.537 0 -241.537 0 -246.1577 0 -241.537 0 -246.1577 0 -246.1577 0 -241.537 0 -241.537 0 -241.537 0 -241.537 0 -236.9162 0 -241.537 0 -241.537 0 -236.9162 0 -241.537 0 -241.537 0 -241.537 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -232.2954 0 -232.2954 0 -236.9162 0 -223.0539 0 -227.6746 0 -232.2954 0 -227.6746 0 -227.6746 0 -227.6746 0 -232.2954 0 -227.6746 0 -232.2954 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -223.0539 0 -223.0539 0 -223.0539 0 -223.0539 0 -213.8123 0 -193.235 0 -213.8123 0 -213.8123 0 -199.95 0 -204.5708 0 -179.805 0 -173.09 0 -173.09 0 -199.95 0 -213.8123 0 -213.8123 0 -218.4331 0 -218.4331 0 -213.8123 0 -213.8123 0 -213.8123 0 -193.235 0 -213.8123 0 -213.8123 0 -213.8123 0 -218.4331 0 -218.4331 0 -213.8123 0 -199.95 0 -179.805 0 -156.3025 0 -193.235 0 -209.1916 0 -213.8123 0 -209.1916 0 -209.1916 0 -204.5708 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -213.8123 0 -213.8123 0 -213.8123 0 -218.4331 0 -218.4331 0 -218.4331 0 -218.4331 0 -218.4331 0 -218.4331 0 -204.5708 0 -204.5708 0 -204.5708 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -204.5708 0 -199.95 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -209.1916 0 -199.95 0 -199.95 0 -169.7325 0 -193.235 0 -149.5875 0 -169.7325 0 -173.09 0 -159.66 0 -173.09 0 -196.5925 0 -179.805 0 -176.4475 0 -193.235 0 -193.235 0 -199.95 0 -204.5708 0 -199.95 0 -199.95 0 -209.1916 0 -199.95 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -204.5708 0 -204.5708 0 -209.1916 0 -199.95 0 -189.8775 0 -209.1916 0 -204.5708 0 -199.95 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -199.95 0 -209.1916 0 -204.5708 0 -204.5708 0 -209.1916 0 -204.5708 0 -199.95 0 -204.5708 0 -204.5708 0 -199.95 0 -209.1916 0 -199.95 0 -204.5708 0 -204.5708 0 -179.805 0 -186.52 0 -173.09 0 -183.1625 0 -199.95 0 -204.5708 0 -209.1916 0 -209.1916 0 -213.8123 0 -209.1916 0 -204.5708 0 -209.1916 0 -209.1916 0 -213.8123 0 -204.5708 0 -204.5708 0 -209.1916 0 -209.1916 0 -204.5708 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -199.95 0 -204.5708 0 -204.5708 0 -204.5708 0 -199.95 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -204.5708 0 -199.95 0 -199.95 0 -204.5708 0 -204.5708 0 -204.5708 0 -204.5708 0 -209.1916 0 -199.95 0 -204.5708 0 -189.8775 0 -173.09 0 -204.5708 0 -189.8775 0 -179.805 0 -183.1625 0 -196.5925 0 -196.5925 0 -199.95 0 -199.95 0 -204.5708 0 -204.5708 0 -209.1916 0 -209.1916 0 -209.1916 0 -213.8123 0 -209.1916 0 -213.8123 0 -209.1916 0 -213.8123 0 -209.1916 0 -196.5925 0 -183.1625 0 -193.235 0 -189.8775 0 -169.7325 0 -166.375 0 -152.945 0 -163.0175 0 -156.3025 0 -176.4475 0 -204.5708 0 -204.5708 0 -186.52 0 -189.8775 0 -199.95 0 -186.52 0 -176.4475 0 -163.0175 0 -176.4475 0 -183.1625 0 -169.7325 0 -176.4475 0 -179.805 0 -179.805 0 -166.375 0 -169.7325 0 -183.1625 0 -189.8775 0 -186.52 0 -169.7325 0 -169.7325 0 -152.945 0 -152.945 0 -176.4475 0 -193.235 0 -196.5925 0 -199.95 0 -196.5925 0 -199.95 0 -196.5925 0 -199.95 0 -186.52 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -196.5925 0 -193.235 0 -193.235 0 -189.8775 0 -189.8775 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -183.1625 0 -193.235 0 -193.235 0 -193.235 0 -186.52 0 -189.8775 0 -186.52 0 -183.1625 0 -183.1625 0 -179.805 0 -183.1625 0 -169.7325 0 -149.5875 0 -156.3025 0 -146.23 0 -156.3025 0 -152.945 0 -166.375 0 -149.5875 0 -163.0175 0 -166.375 0 -179.805 0 -176.4475 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -176.4475 0 -179.805 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -179.805 0 -179.805 0 -179.805 0 -183.1625 0 -186.52 0 -189.8775 0 -196.5925 0 -199.95 0 -199.95 0 -204.5708 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -189.8775 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -189.8775 0 -186.52 0 -189.8775 0 -189.8775 0 -189.8775 0 -189.8775 0 -193.235 0 -189.8775 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -189.8775 0 -193.235 0 -189.8775 0 -193.235 0 -176.4475 0 -189.8775 0 -179.805 0 -156.3025 0 -152.945 0 -183.1625 0 -186.52 0 -186.52 0 -189.8775 0 -189.8775 0 -186.52 0 -189.8775 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -189.8775 0 -189.8775 0 -189.8775 0 -189.8775 0 -186.52 0 -173.09 0 -163.0175 0 -173.09 0 -152.945 0 -159.66 0 -156.3025 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -183.1625 0 -183.1625 0 -186.52 0 -183.1625 0 -186.52 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -176.4475 0 -179.805 0 -179.805 0 -183.1625 0 -179.805 0 -179.805 0 -176.4475 0 -173.09 0 -179.805 0 -179.805 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -179.805 0 -179.805 0 -152.945 0 -176.4475 0 -176.4475 0 -166.375 0 -179.805 0 -179.805 0 -179.805 0 -196.5925 0 -223.0539 0 -236.9162 0 -236.9162 0 -250.7785 0 -250.7785 0 -250.7785 0 -250.7785 0 -255.3993 0 -250.7785 0 -246.1577 0 -241.537 0 -241.537 0 -246.1577 0 -255.3993 0 -260.02 0 -273.8823 0 -287.7446 0 -301.607 0 -310.8485 0 -310.8485 0 -310.8485 0 -301.607 0 -296.9862 0 -296.9862 0 -287.7447 0 -273.8823 0 -264.6408 0 -260.02 0 -255.3993 0 -250.7785 0 -246.1577 0 -241.537 0 -236.9162 0 -232.2954 0 -232.2954 0 -232.2954 0 -223.0539 0 -227.6746 0 -227.6746 0 -227.6746 0 -223.0539 0 -218.4331 0 -213.8123 0 -213.8123 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -204.5708 0 - -204.5708 0 -204.5708 0 -204.5708 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -193.235 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -189.8775 0 -193.235 0 -189.8775 0 -193.235 0 -189.8775 0 -186.52 0 -189.8775 0 -173.09 0 -183.1625 0 -166.375 0 -166.375 0 -186.52 0 -189.8775 0 -189.8775 0 -189.8775 0 -183.1625 0 -186.52 0 -183.1625 0 -183.1625 0 -179.805 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -169.7325 0 -179.805 0 -173.09 0 -173.09 0 -169.7325 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -176.4475 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -179.805 0 -179.805 0 -176.4475 0 -173.09 0 -169.7325 0 -173.09 0 -169.7325 0 -166.375 0 -159.66 0 -156.3025 0 -139.515 0 -146.23 0 -169.7325 0 -169.7325 0 -169.7325 0 -169.7325 0 -173.09 0 -169.7325 0 -173.09 0 -173.09 0 -173.09 0 -156.3025 0 -173.09 0 -173.09 0 -173.09 0 -169.7325 0 -169.7325 0 -166.375 0 -169.7325 0 -166.375 0 -169.7325 0 -169.7325 0 -169.7325 0 -169.7325 0 -166.375 0 -166.375 0 -166.375 0 -163.0175 0 -166.375 0 -166.375 0 -166.375 0 -169.7325 0 -169.7325 0 -169.7325 0 -169.7325 0 -169.7325 0 -166.375 0 -166.375 0 -166.375 0 -169.7325 0 -166.375 0 -166.375 0 -163.0175 0 -166.375 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -119.37 0 -149.5875 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -129.4425 0 -163.0175 0 -159.66 0 -159.66 0 -163.0175 0 -166.375 0 -163.0175 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -163.0175 0 -163.0175 0 -159.66 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -163.0175 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -156.3025 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -163.0175 0 -159.66 0 -156.3025 0 -156.3025 0 -152.945 0 -156.3025 0 -152.945 0 -156.3025 0 -152.945 0 - -152.945 0 -156.3025 0 -152.945 0 -152.945 0 -156.3025 0 -152.945 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -122.7275 0 -122.7275 0 -109.2975 0 -126.085 0 -152.945 0 -136.1575 0 -136.1575 0 -156.3025 0 -159.66 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -152.945 0 -152.945 0 -152.945 0 -152.945 0 -156.3025 0 -156.3025 0 -129.4425 0 -122.7275 0 -122.7275 0 -109.2975 0 -119.37 0 -126.085 0 -109.2975 0 -99.22501 0 -102.5825 0 -102.5825 0 -99.22501 0 -105.94 0 -112.655 0 -119.37 0 -112.655 0 -122.7275 0 -116.0125 0 -116.0125 0 -126.085 0 -112.655 0 -122.7275 0 -132.8 0 -112.655 0 -109.2975 0 -116.0125 0 -105.94 0 -116.0125 0 -102.5825 0 -116.0125 0 -109.2975 0 -59.76001 0 -102.5825 0 -109.2975 0 -122.7275 0 -105.94 0 -126.085 0 -102.5825 0 -126.085 0 -126.085 0 -112.655 0 -112.655 0 -105.94 0 -109.2975 0 -122.7275 0 -152.945 0 -142.8725 0 -132.8 0 -132.8 0 -109.2975 0 -132.8 0 -122.7275 0 -129.4425 0 -132.8 0 -109.2975 0 -116.0125 0 -116.0125 0 -152.945 0 -156.3025 0 -159.66 0 -152.945 0 -152.945 0 -156.3025 0 -152.945 0 -149.5875 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -152.945 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -146.23 0 -149.5875 0 -146.23 0 -146.23 0 -142.8725 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -146.23 0 -146.23 0 -109.2975 0 -116.0125 0 -109.2975 0 -116.0125 0 -112.655 0 -116.0125 0 -126.085 0 -142.8725 0 -142.8725 0 -139.515 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -142.8725 0 -146.23 0 -149.5875 0 -146.23 0 -149.5875 0 -149.5875 0 -146.23 0 -142.8725 0 -142.8725 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -142.8725 0 -139.515 0 -126.085 0 -129.4425 0 -139.515 0 -136.1575 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -136.1575 0 -136.1575 0 -139.515 0 -139.515 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -136.1575 0 -136.1575 0 -136.1575 0 -139.515 0 -139.515 0 -136.1575 0 -139.515 0 -142.8725 0 -142.8725 0 - -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -146.23 0 -149.5875 0 -152.945 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -152.945 0 -156.3025 0 - -152.945 0 -156.3025 0 -152.945 0 -156.3025 0 -152.945 0 -149.5875 0 -152.945 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -156.3025 0 -159.66 0 - -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -156.3025 0 -152.945 0 -152.945 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -149.5875 0 -149.5875 0 -152.945 0 -146.23 0 -149.5875 0 -146.23 0 -152.945 0 -149.5875 0 -149.5875 0 - -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -146.23 0 -139.515 0 -146.23 0 -149.5875 0 -146.23 0 -142.8725 0 -149.5875 0 -149.5875 0 -149.5875 0 -152.945 0 -152.945 0 -149.5875 0 -149.5875 0 -152.945 0 -152.945 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -116.0125 0 -112.655 0 -119.37 0 -109.2975 0 -99.22501 0 -99.22501 0 -92.51001 0 -105.94 0 -142.8725 0 -142.8725 0 -126.085 0 -146.23 0 -146.23 0 -149.5875 0 -149.5875 0 -146.23 0 -146.23 0 -152.945 0 -146.23 0 -149.5875 0 -152.945 0 -149.5875 0 -146.23 0 -152.945 0 -152.945 0 -149.5875 0 -152.945 0 -146.23 0 -149.5875 0 -142.8725 0 -146.23 0 -142.8725 0 -142.8725 0 -146.23 0 -139.515 0 -142.8725 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -149.5875 0 -142.8725 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -139.515 0 -142.8725 0 -139.515 0 -129.4425 0 -139.515 0 -136.1575 0 -132.8 0 -136.1575 0 -139.515 0 -136.1575 0 -139.515 0 -136.1575 0 -139.515 0 -142.8725 0 -136.1575 0 -139.515 0 -146.23 0 -142.8725 0 -139.515 0 -139.515 0 -142.8725 0 -142.8725 0 -132.8 0 -132.8 0 -126.085 0 -119.37 0 -109.2975 0 -116.0125 0 -92.51001 0 -119.37 0 -122.7275 0 -116.0125 0 -132.8 0 -132.8 0 -136.1575 0 -136.1575 0 -132.8 0 -136.1575 0 -136.1575 0 -132.8 0 -136.1575 0 -136.1575 0 -136.1575 0 -139.515 0 -139.515 0 -132.8 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -129.4425 0 -132.8 0 -129.4425 0 -129.4425 0 -126.085 0 -129.4425 0 -132.8 0 -129.4425 0 -132.8 0 -129.4425 0 -132.8 0 -132.8 0 -136.1575 0 -132.8 0 -129.4425 0 -132.8 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -119.37 0 -109.2975 0 -119.37 0 -119.37 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -119.37 0 -122.7275 0 -122.7275 0 -119.37 0 -122.7275 0 -119.37 0 -122.7275 0 -119.37 0 -119.37 0 -116.0125 0 -119.37 0 -119.37 0 -116.0125 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -116.0125 0 -112.655 0 -105.94 0 -61.00001 0 -116.0125 0 -109.2975 0 -58.52001 0 -112.655 0 -116.0125 0 -109.2975 0 -109.2975 0 -59.14001 0 -99.22501 0 -59.76001 0 -59.76001 0 -58.52001 0 -54.18001 0 -58.52001 0 -55.42001 0 -54.18001 0 -54.80001 0 -57.28001 0 -53.56001 0 -55.42001 0 -55.42001 0 -59.14001 0 -56.66001 0 -57.28001 0 -55.42001 0 -59.14001 0 -55.42001 0 -58.52001 0 -57.90001 0 -57.90001 0 -105.94 0 -116.0125 0 -112.655 0 -112.655 0 -99.22501 0 -61.00001 0 -59.14001 0 -57.90001 0 -58.52001 0 -92.51001 0 -109.2975 0 -95.86751 0 - -105.94 0 -105.94 0 -109.2975 0 -105.94 0 -112.655 0 -105.94 0 -105.94 0 -109.2975 0 -102.5825 0 -99.22501 0 -102.5825 0 -109.2975 0 -102.5825 0 -99.22501 0 -102.5825 0 -105.94 0 -109.2975 0 -109.2975 0 -112.655 0 -112.655 0 -109.2975 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -105.94 0 -95.86751 0 -95.86751 0 -105.94 0 -55.42001 0 -56.66001 0 -54.80001 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -116.0125 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -112.655 0 -112.655 0 -105.94 0 -112.655 0 -112.655 0 -116.0125 0 -116.0125 0 -116.0125 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -112.655 0 -109.2975 0 -109.2975 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -112.655 0 -109.2975 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -109.2975 0 -109.2975 0 -112.655 0 -109.2975 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -159.66 0 -189.8775 0 -218.4331 0 -223.0539 0 -213.8123 0 -241.537 0 -283.1239 0 -292.3654 0 -301.607 0 -332.1762 0 -356.3484 0 - -404.6929 0 -440.9513 0 -525.5541 0 -616.2001 0 -720.6721 0 -816.4381 0 -894.7921 0 -973.1461 0 -1016.676 0 -1060.206 0 -1086.324 0 -1143.651 0 -1228.738 0 -1301.669 0 -1362.445 0 -1411.066 0 -1459.687 0 -1471.842 0 -1496.153 0 -1496.153 0 -1471.842 0 -1435.377 0 -1423.221 0 -1386.756 0 -1325.98 0 -1301.669 0 -1265.203 0 -1216.582 0 -1204.427 0 -1192.272 0 -1180.117 0 -1180.117 0 -1180.117 0 -1167.962 0 -1167.962 0 -1155.806 0 -1167.962 0 -1155.806 0 -1155.806 0 -1155.806 0 -1155.806 0 -1155.806 0 -1155.806 0 -1143.651 0 -1131.496 0 -1119.341 0 -1107.185 0 -1095.03 0 -1068.912 0 -1051.5 0 -1034.088 0 -1025.382 0 -1007.97 0 -990.5581 0 -964.4401 0 -955.7341 0 -947.0281 0 -920.9101 0 -894.7921 0 -868.6741 0 -851.2621 0 -825.1441 0 -799.0261 0 -772.9081 0 -755.4961 0 -738.0841 0 -720.6721 0 -703.2601 0 -685.8481 0 -668.4361 0 -659.7301 0 -642.3181 0 -633.6121 0 -616.2001 0 -610.157 0 -604.114 0 -598.0709 0 -585.9848 0 -573.8986 0 -567.8556 0 -561.8125 0 -549.7264 0 -543.6833 0 -537.6403 0 -531.5972 0 -525.5541 0 -519.5111 0 -513.468 0 - -507.425 0 -501.3819 0 -495.3388 0 -495.3388 0 -489.2958 0 -489.2958 0 -489.2958 0 -483.2527 0 -483.2527 0 -483.2527 0 -477.2096 0 -477.2096 0 -477.2096 0 -477.2096 0 -477.2096 0 -483.2527 0 -477.2096 0 -483.2527 0 -483.2527 0 -489.2958 0 -495.3388 0 -501.3819 0 -507.425 0 -513.468 0 -513.468 0 -519.5111 0 -519.5111 0 -519.5111 0 -513.468 0 -513.468 0 -519.5111 0 -525.5541 0 -525.5541 0 -525.5541 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -513.468 0 -513.468 0 -525.5541 0 -537.6403 0 -537.6403 0 -531.5972 0 -531.5972 0 -531.5972 0 -525.5541 0 -525.5541 0 -531.5972 0 -537.6403 0 -549.7264 0 -549.7264 0 -561.8125 0 -573.8986 0 -592.0278 0 -610.157 0 -633.6121 0 -651.0241 0 -668.4361 0 -677.1421 0 -685.8481 0 -677.1421 0 -677.1421 0 -677.1421 0 -668.4361 0 -659.7301 0 -659.7301 0 -651.0241 0 -651.0241 0 -651.0241 0 -642.3181 0 -633.6121 0 -624.9061 0 -610.157 0 -604.114 0 -598.0709 0 -567.8556 0 -579.9417 0 -573.8986 0 -561.8125 0 - -555.7695 0 -555.7695 0 -555.7695 0 -549.7264 0 -549.7264 0 -543.6833 0 -543.6833 0 -537.6403 0 -537.6403 0 -537.6403 0 -531.5972 0 -531.5972 0 -531.5972 0 -531.5972 0 -537.6403 0 -537.6403 0 -543.6833 0 -543.6833 0 -549.7264 0 -555.7695 0 -567.8556 0 -573.8986 0 -579.9417 0 -585.9848 0 -598.0709 0 -604.114 0 -616.2001 0 -624.9061 0 -642.3181 0 -642.3181 0 -651.0241 0 -659.7301 0 -659.7301 0 -651.0241 0 - -642.3181 0 -624.9061 0 -624.9061 0 -604.114 0 -501.3819 0 -525.5541 0 -501.3819 0 -513.468 0 -501.3819 0 -567.8556 0 -543.6833 0 -507.425 0 -549.7264 0 -555.7695 0 -549.7264 0 -537.6403 0 -495.3388 0 -513.468 0 -507.425 0 -525.5541 0 -513.468 0 -519.5111 0 -513.468 0 -507.425 0 -483.2527 0 -507.425 0 -495.3388 0 -501.3819 0 -501.3819 0 -477.2096 0 -495.3388 0 -489.2958 0 -471.1666 0 -495.3388 0 -507.425 0 -519.5111 0 -519.5111 0 -543.6833 0 -555.7695 0 -573.8986 0 -592.0278 0 -604.114 0 -624.9061 0 -651.0241 0 -633.6121 0 -677.1421 0 -685.8481 0 -694.5541 0 -633.6121 0 -677.1421 0 -668.4361 0 -668.4361 0 -668.4361 0 -659.7301 0 -651.0241 0 -651.0241 0 -659.7301 0 -624.9061 0 -642.3181 0 -624.9061 0 -633.6121 0 -624.9061 0 -633.6121 0 -624.9061 0 -633.6121 0 -616.2001 0 -610.157 0 -598.0709 0 -598.0709 0 -592.0278 0 -573.8986 0 -567.8556 0 -573.8986 0 -579.9417 0 -561.8125 0 -567.8556 0 -525.5541 0 -555.7695 0 -549.7264 0 -549.7264 0 -543.6833 0 -531.5972 0 -537.6403 0 -525.5541 0 -537.6403 0 -519.5111 0 -519.5111 0 -513.468 0 -519.5111 0 -513.468 0 -507.425 0 -507.425 0 -501.3819 0 -495.3388 0 -489.2958 0 -489.2958 0 -489.2958 0 -489.2958 0 -489.2958 0 -489.2958 0 -483.2527 0 -459.0805 0 -477.2096 0 -465.1235 0 -471.1666 0 -471.1666 0 -471.1666 0 -465.1235 0 -465.1235 0 -465.1235 0 -459.0805 0 -465.1235 0 -459.0805 0 -453.0374 0 -446.9943 0 -440.9513 0 -459.0805 0 -446.9943 0 -453.0374 0 -440.9513 0 -434.9082 0 -434.9082 0 -434.9082 0 -440.9513 0 -410.736 0 -386.5637 0 -422.8221 0 -350.3053 0 -398.6498 0 -416.779 0 -344.2623 0 -398.6498 0 -404.6929 0 -404.6929 0 -410.736 0 -410.736 0 -404.6929 0 -404.6929 0 -404.6929 0 -398.6498 0 -398.6498 0 -398.6498 0 -398.6498 0 -392.6068 0 -398.6498 0 -392.6068 0 -392.6068 0 -392.6068 0 -386.5637 0 -386.5637 0 -380.5207 0 -386.5637 0 -398.6498 0 -410.736 0 -404.6929 0 -404.6929 0 -398.6498 0 -392.6068 0 -392.6068 0 -398.6498 0 -392.6068 0 -386.5637 0 -386.5637 0 -386.5637 0 -392.6068 0 - -386.5637 0 -392.6068 0 -386.5637 0 -374.4776 0 -380.5207 0 -386.5637 0 -326.1331 0 -326.1331 0 -301.607 0 -315.4693 0 -315.4693 0 -292.3654 0 -315.4693 0 -326.1331 0 -320.09 0 -368.4345 0 -374.4776 0 -374.4776 0 -362.3915 0 -315.4693 0 - -362.3915 0 -356.3484 0 -362.3915 0 -362.3915 0 -374.4776 0 -368.4345 0 -374.4776 0 -326.1331 0 -356.3484 0 -350.3053 0 -344.2623 0 -344.2623 0 -362.3915 0 -332.1762 0 -315.4693 0 -356.3484 0 -356.3484 0 -356.3484 0 -350.3053 0 -356.3484 0 -350.3053 0 -350.3053 0 -356.3484 0 -320.09 0 -350.3053 0 -350.3053 0 -350.3053 0 -350.3053 0 -356.3484 0 -350.3053 0 -315.4693 0 -338.2192 0 -306.2277 0 -287.7446 0 -320.09 0 -344.2623 0 -344.2623 0 -338.2192 0 - -344.2623 0 -344.2623 0 -338.2192 0 -344.2623 0 -338.2192 0 -338.2192 0 -338.2192 0 -338.2192 0 -338.2192 0 - -338.2192 0 -332.1762 0 -332.1762 0 -338.2192 0 -326.1331 0 -326.1331 0 -320.09 0 -332.1762 0 -320.09 0 -326.1331 0 -326.1331 0 -326.1331 0 -320.09 0 -326.1331 0 -326.1331 0 -338.2192 0 -332.1762 0 -344.2623 0 -344.2623 0 -344.2623 0 -344.2623 0 -356.3484 0 -350.3053 0 -344.2623 0 -362.3915 0 -362.3915 0 -368.4345 0 -380.5207 0 -374.4776 0 -338.2192 0 -356.3484 0 -326.1331 0 -362.3915 0 -362.3915 0 -301.607 0 -350.3053 0 -350.3053 0 -362.3915 0 -350.3053 0 -344.2623 0 -350.3053 0 -344.2623 0 -338.2192 0 -332.1762 0 -338.2192 0 -315.4693 0 -310.8485 0 -332.1762 0 -332.1762 0 -326.1331 0 -292.3654 0 -296.9862 0 -283.1239 0 - -278.5031 0 -283.1239 0 -269.2616 0 -269.2616 0 -241.537 0 -264.6408 0 -255.3993 0 -255.3993 0 -246.1577 0 -250.7785 0 -250.7785 0 -278.5031 0 -301.607 0 -306.2277 0 -306.2277 0 -301.607 0 -301.607 0 -301.607 0 -273.8823 0 -296.9862 0 -296.9862 0 -306.2277 0 -283.1239 0 -296.9862 0 -292.3654 0 -296.9862 0 -292.3654 0 -278.5031 0 -283.1239 0 -287.7447 0 -287.7446 0 -292.3654 0 -287.7447 0 -287.7446 0 -287.7446 0 -283.1239 0 -287.7446 0 -292.3654 0 -292.3654 0 -292.3654 0 -306.2277 0 -315.4693 0 -320.09 0 -320.09 0 -350.3053 0 -296.9862 0 -338.2192 0 -356.3484 0 -362.3915 0 -374.4776 0 -392.6068 0 -404.6929 0 -428.8652 0 -440.9513 0 -465.1235 0 -483.2527 0 -501.3819 0 -585.9848 0 -642.3181 0 -729.3781 0 -781.6141 0 -799.0261 0 -790.3201 0 -764.2021 0 -738.0841 0 -703.2601 0 -668.4361 0 -642.3181 0 -624.9061 0 -598.0709 0 -598.0709 0 -592.0278 0 -616.2001 0 -642.3181 0 -677.1421 0 -720.6721 0 -746.7901 0 -790.3201 0 -799.0261 0 -807.7321 0 -799.0261 0 -799.0261 0 -790.3201 0 -799.0261 0 -807.7321 0 -825.1441 0 -842.5561 0 -868.6741 0 -886.0861 0 -903.4981 0 -903.4981 0 -920.9101 0 -929.6161 0 -920.9101 0 -912.2041 0 -903.4981 0 -903.4981 0 -886.0861 0 -868.6741 0 -859.9681 0 -842.5561 0 -833.8501 0 -807.7321 0 -790.3201 0 -764.2021 0 -746.7901 0 -720.6721 0 -694.5541 0 -677.1421 0 -651.0241 0 -642.3181 0 -624.9061 0 -610.157 0 -604.114 0 -598.0709 0 -592.0278 0 -519.5111 0 -459.0805 0 -459.0805 0 -440.9513 0 -446.9943 0 -434.9082 0 -465.1235 0 -459.0805 0 -404.6929 0 -410.736 0 -440.9513 0 -428.8652 0 -422.8221 0 -434.9082 0 -404.6929 0 -440.9513 0 -483.2527 0 -471.1666 0 -471.1666 0 -465.1235 0 -446.9943 0 -446.9943 0 -453.0374 0 -446.9943 0 -404.6929 0 -434.9082 0 -428.8652 0 -422.8221 0 -416.779 0 -410.736 0 -410.736 0 -404.6929 0 -398.6498 0 -398.6498 0 -392.6068 0 -392.6068 0 -392.6068 0 -386.5637 0 -380.5207 0 -380.5207 0 -380.5207 0 -374.4776 0 -374.4776 0 -374.4776 0 -368.4345 0 -368.4345 0 -368.4345 0 -368.4345 0 -368.4345 0 -362.3915 0 -362.3915 0 -356.3484 0 -356.3484 0 -356.3484 0 -350.3053 0 -350.3053 0 -350.3053 0 -338.2192 0 -344.2623 0 - -332.1762 0 -326.1331 0 -332.1762 0 -326.1331 0 -320.09 0 -315.4693 0 -320.09 0 -326.1331 0 -315.4693 0 -315.4693 0 -315.4693 0 -320.09 0 -320.09 0 -320.09 0 -320.09 0 -273.8823 0 -306.2277 0 -255.3993 0 -264.6408 0 -273.8823 0 -260.02 0 -278.5031 0 -306.2277 0 -310.8485 0 -296.9862 0 -296.9862 0 -306.2277 0 -287.7446 0 -283.1239 0 -273.8823 0 -301.607 0 -306.2277 0 -301.607 0 -306.2277 0 -306.2277 0 -296.9862 0 -296.9862 0 -301.607 0 -301.607 0 -292.3654 0 -296.9862 0 -296.9862 0 -292.3654 0 - -287.7447 0 -296.9862 0 -292.3654 0 -296.9862 0 -292.3654 0 -296.9862 0 -287.7446 0 -296.9862 0 -310.8485 0 -332.1762 0 -332.1762 0 -332.1762 0 -338.2192 0 -356.3484 0 -350.3053 0 -350.3053 0 -310.8485 0 -368.4345 0 -374.4776 0 -392.6068 0 -398.6498 0 -410.736 0 -434.9082 0 -453.0374 0 -483.2527 0 -501.3819 0 -537.6403 0 -610.157 0 -799.0261 0 -999.2641 0 -1167.962 0 -1265.203 0 -1325.98 0 -1313.824 0 -1325.98 0 -1301.669 0 -1265.203 0 -1289.514 0 -1265.203 0 -1301.669 0 -1325.98 0 -1350.29 0 -1398.911 0 -1459.687 0 -1496.153 0 -1532.618 0 -1556.929 0 -1593.395 0 -1605.55 0 -1605.55 0 -1654.171 0 -1702.792 0 -1763.568 0 -1824.344 0 -2166.984 0 -2683.735 0 -3106.531 0 -3529.328 0 -4046.078 0 -4233.988 0 -4703.761 0 -4891.671 0 -5032.603 0 -5361.444 0 -5267.489 0 -5455.399 0 -5549.354 0 -5502.376 0 -5502.376 0 -5455.399 0 -5408.422 0 -5314.467 0 -5173.535 0 -5032.603 0 -5032.603 0 -4844.693 0 -4562.829 0 -4515.852 0 -4233.988 0 -3858.169 0 -3529.328 0 -3200.486 0 -3106.531 0 -2777.69 0 -2542.803 0 -2260.939 0 -2026.052 0 -1885.12 0 -1812.189 0 -1739.257 0 -1678.481 0 -1581.239 0 -1532.618 0 -1471.842 0 -1435.377 0 -1386.756 0 -1350.29 0 -1301.669 0 -1289.514 0 -1253.048 0 -1228.738 0 -1180.117 0 -1143.651 0 -1107.185 0 -1068.912 0 -1077.618 0 -1060.206 0 -1060.206 0 -1042.794 0 -1034.088 0 -1025.382 0 -1016.676 0 -999.2641 0 -990.5581 0 -981.8521 0 -973.1461 0 -981.8521 0 -990.5581 0 -1042.794 0 -1095.03 0 -1095.03 0 -1107.185 0 -1119.341 0 -1119.341 0 -1131.496 0 -1180.117 0 -1240.893 0 -1301.669 0 -1483.998 0 -1702.792 0 -2495.826 0 -3623.282 0 -4703.761 0 -5314.467 0 -5925.172 0 -6347.969 0 -6864.719 0 -7099.606 0 -7475.425 0 -7663.334 0 -7992.176 0 -8086.131 0 -8414.972 0 -8696.836 0 -9072.655 0 -9119.632 0 -9260.564 0 -9495.451 0 -9401.496 0 -9448.474 0 -9307.542 0 -9119.632 0 -8884.745 0 -8461.949 0 -7992.176 0 -7381.47 0 -7005.651 0 -6535.878 0 -6019.127 0 -5690.286 0 -5314.467 0 -4938.648 0 -4515.852 0 -4280.965 0 -3952.124 0 -3811.192 0 -3529.328 0 -3388.395 0 -3200.486 0 -2965.599 0 -2918.622 0 -2730.713 0 -2589.78 0 -2448.848 0 -2213.962 0 -2026.052 0 -1885.12 0 -1848.655 0 -1800.034 0 -1763.568 0 -1702.792 0 -1666.326 0 -1617.705 0 -1569.084 0 -1569.084 0 -1544.774 0 -1508.308 0 -1508.308 0 -1483.998 0 -1471.842 0 -1435.377 0 -1447.532 0 -1423.221 0 -1423.221 0 -1423.221 0 -1423.221 0 -1398.911 0 -1398.911 0 -1386.756 0 -1386.756 0 -1386.756 0 -1374.6 0 -1374.6 0 -1362.445 0 -1350.29 0 -1313.824 0 -1313.824 0 -1301.669 0 -1289.514 0 -1265.203 0 -1228.738 0 -1204.427 0 -1204.427 0 -1119.341 0 -1095.03 0 -1119.341 0 -1143.651 0 -1077.618 0 -1107.185 0 -1119.341 0 -1107.185 0 -1107.185 0 -1107.185 0 -1086.324 0 -1068.912 0 -1077.618 0 -1068.912 0 -1060.206 0 -1060.206 0 -1060.206 0 -1042.794 0 -1042.794 0 -1034.088 0 -1016.676 0 -999.2641 0 -1007.97 0 -999.2641 0 -981.8521 0 -981.8521 0 -973.1461 0 -886.0861 0 -868.6741 0 -938.3221 0 -938.3221 0 -929.6161 0 -920.9101 0 -912.2041 0 -903.4981 0 -903.4981 0 -894.7921 0 -886.0861 0 -868.6741 0 -868.6741 0 -859.9681 0 -859.9681 0 -833.8501 0 -842.5561 0 -825.1441 0 -825.1441 0 -816.4381 0 -807.7321 0 -790.3201 0 -790.3201 0 -729.3781 0 -729.3781 0 -772.9081 0 -764.2021 0 -772.9081 0 -764.2021 0 -764.2021 0 -755.4961 0 -755.4961 0 -746.7901 0 -729.3781 0 -738.0841 0 -729.3781 0 -720.6721 0 -720.6721 0 -720.6721 0 -711.9661 0 -711.9661 0 -746.7901 0 -738.0841 0 -720.6721 0 -729.3781 0 -720.6721 0 -711.9661 0 -720.6721 0 -711.9661 0 -729.3781 0 - -720.6721 0 -720.6721 0 -738.0841 0 -738.0841 0 -738.0841 0 -729.3781 0 -738.0841 0 -746.7901 0 -746.7901 0 -746.7901 0 -738.0841 0 -738.0841 0 -746.7901 0 -746.7901 0 -764.2021 0 -772.9081 0 -781.6141 0 -859.9681 0 -1007.97 0 -1277.359 0 -1654.171 0 -2166.984 0 -3059.554 0 -3576.305 0 -3999.101 0 -4280.965 0 -4421.897 0 -4609.807 0 -4703.761 0 -4562.829 0 -4609.807 0 -4656.784 0 -4844.693 0 -4985.625 0 -5079.58 0 -5126.557 0 -5455.399 0 -5831.218 0 -6441.923 0 -7099.606 0 -7804.266 0 -8227.063 0 -8790.791 0 -9307.542 0 -9589.406 0 -9683.36 0 -9777.315 0 -9683.36 0 -9777.315 0 -9636.383 0 -9495.451 0 -8884.745 0 -8367.995 0 -7663.334 0 -7052.629 0 -6441.923 0 -5549.354 0 -4985.625 0 -4187.01 0 -3717.237 0 -3482.35 0 -3153.509 0 -2871.645 0 -2730.713 0 -2495.826 0 -2354.894 0 -2260.939 0 -2166.984 0 -2120.007 0 -2120.007 0 -1979.075 0 -1979.075 0 -1932.098 0 -1848.655 0 -1787.878 0 -1775.723 0 -1775.723 0 -1690.637 0 -1654.171 0 -1605.55 0 -1569.084 0 -1508.308 0 -1508.308 0 -1459.687 0 -1411.066 0 -1411.066 0 -1398.911 0 -1325.98 0 -1325.98 0 -1313.824 0 -1289.514 0 -1216.582 0 -1204.427 0 -1086.324 0 -1155.806 0 -1143.651 0 -1143.651 0 -1119.341 0 -1095.03 0 -1077.618 0 -1060.206 0 -1042.794 0 -1034.088 0 -1016.676 0 -1007.97 0 -990.5581 0 -981.8521 0 -973.1461 0 -964.4401 0 -955.7341 0 -912.2041 0 -842.5561 0 -842.5561 0 -807.7321 0 -825.1441 0 -781.6141 0 -799.0261 0 -772.9081 0 -764.2021 0 -781.6141 0 -790.3201 0 -842.5561 0 -833.8501 0 -833.8501 0 -816.4381 0 -825.1441 0 -799.0261 0 -790.3201 0 -807.7321 0 -790.3201 0 -781.6141 0 -764.2021 0 -772.9081 0 -703.2601 0 -642.3181 0 -651.0241 0 -642.3181 0 -651.0241 0 -604.114 0 -604.114 0 -610.157 0 -604.114 0 -604.114 0 -610.157 0 -604.114 0 -598.0709 0 -651.0241 0 -694.5541 0 -685.8481 0 -694.5541 0 -610.157 0 -592.0278 0 -610.157 0 -592.0278 0 -573.8986 0 -633.6121 0 -598.0709 0 -604.114 0 -604.114 0 -694.5541 0 -738.0841 0 -755.4961 0 -772.9081 0 -764.2021 0 -764.2021 0 -764.2021 0 -755.4961 0 -781.6141 0 -799.0261 0 -1007.97 0 -1228.738 0 -1520.463 0 -1714.947 0 -1860.81 0 -2120.007 0 -2542.803 0 -2636.758 0 -2730.713 0 -2542.803 0 -2448.848 0 -2213.962 0 -1979.075 0 -1629.86 0 -1581.239 0 -1496.153 0 -1411.066 0 -1338.135 0 -1362.445 0 -1313.824 0 -1265.203 0 -1228.738 0 -1192.272 0 -1155.806 0 -1131.496 0 -1119.341 0 -1086.324 0 -1077.618 0 -1068.912 0 -1060.206 0 -1060.206 0 -1051.5 0 -1051.5 0 -1042.794 0 -1034.088 0 -1025.382 0 -1016.676 0 -964.4401 0 -1007.97 0 -999.2641 0 -990.5581 0 -973.1461 0 -938.3221 0 -833.8501 0 -912.2041 0 -894.7921 0 -903.4981 0 -894.7921 0 -894.7921 0 -903.4981 0 -929.6161 0 -973.1461 0 -1016.676 0 -1077.618 0 -1155.806 0 -1240.893 0 -1362.445 0 -1556.929 0 -1848.655 0 -3012.577 0 -4140.033 0 -4938.648 0 -5737.263 0 -6394.946 0 -6864.719 0 -7005.651 0 -7287.516 0 -7240.538 0 -7287.516 0 -7240.538 0 -7099.606 0 -6958.674 0 -6676.81 0 -6254.014 0 -5972.15 0 -5408.422 0 -4844.693 0 -4609.807 0 -4140.033 0 -3670.26 0 -3247.463 0 -2871.645 0 -2683.735 0 -2495.826 0 -2307.916 0 -2120.007 0 -1932.098 0 -1860.81 0 -1800.034 0 -1763.568 0 -1714.947 0 -1702.792 0 -1654.171 0 -1617.705 0 -1556.929 0 -1520.463 0 -1471.842 0 -1423.221 0 -1398.911 0 -1313.824 0 -1289.514 0 -1265.203 0 -1240.893 0 -1204.427 0 -1167.962 0 -1155.806 0 -1155.806 0 -1131.496 0 -1119.341 0 -1095.03 0 -1077.618 0 -1068.912 0 -1051.5 0 -1034.088 0 -1025.382 0 -1016.676 0 -1007.97 0 -990.5581 0 -981.8521 0 -964.4401 0 -947.0281 0 -938.3221 0 -938.3221 0 -929.6161 0 -920.9101 0 -903.4981 0 -903.4981 0 -903.4981 0 -886.0861 0 -886.0861 0 -877.3801 0 -851.2621 0 -859.9681 0 -851.2621 0 -851.2621 0 -825.1441 0 -833.8501 0 -833.8501 0 -833.8501 0 -833.8501 0 -825.1441 0 -816.4381 0 -825.1441 0 -825.1441 0 -825.1441 0 -833.8501 0 -842.5561 0 -851.2621 0 -859.9681 0 -859.9681 0 -868.6741 0 -868.6741 0 -877.3801 0 -868.6741 0 -859.9681 0 -859.9681 0 -859.9681 0 -851.2621 0 -842.5561 0 -833.8501 0 -833.8501 0 -825.1441 0 -816.4381 0 -816.4381 0 -799.0261 0 -790.3201 0 -799.0261 0 -799.0261 0 -790.3201 0 -781.6141 0 -764.2021 0 -781.6141 0 -781.6141 0 -781.6141 0 -781.6141 0 -781.6141 0 -772.9081 0 -764.2021 0 -746.7901 0 -746.7901 0 -633.6121 0 -624.9061 0 -616.2001 0 -616.2001 0 -592.0278 0 -579.9417 0 -592.0278 0 -573.8986 0 -579.9417 0 -567.8556 0 -579.9417 0 -651.0241 0 -651.0241 0 -651.0241 0 -633.6121 0 -624.9061 0 -624.9061 0 -633.6121 0 -624.9061 0 -616.2001 0 -610.157 0 -610.157 0 -616.2001 0 -610.157 0 -610.157 0 -604.114 0 -567.8556 0 -598.0709 0 -592.0278 0 -585.9848 0 -585.9848 0 -585.9848 0 -585.9848 0 -579.9417 0 -573.8986 0 -567.8556 0 -567.8556 0 -567.8556 0 -567.8556 0 -567.8556 0 -561.8125 0 -561.8125 0 -561.8125 0 -555.7695 0 -555.7695 0 -549.7264 0 -543.6833 0 -543.6833 0 -543.6833 0 -537.6403 0 -537.6403 0 -531.5972 0 -525.5541 0 -525.5541 0 -525.5541 0 -519.5111 0 -519.5111 0 -507.425 0 -519.5111 0 -519.5111 0 -513.468 0 -513.468 0 -513.468 0 -495.3388 0 -525.5541 0 -537.6403 0 -531.5972 0 -525.5541 0 -519.5111 0 -519.5111 0 -525.5541 0 -525.5541 0 -513.468 0 -513.468 0 -513.468 0 -507.425 0 -501.3819 0 -495.3388 0 -495.3388 0 -495.3388 0 -495.3388 0 -489.2958 0 -489.2958 0 -483.2527 0 -489.2958 0 -489.2958 0 -489.2958 0 -489.2958 0 -483.2527 0 -483.2527 0 -477.2096 0 -471.1666 0 -477.2096 0 -477.2096 0 -483.2527 0 -483.2527 0 -477.2096 0 -477.2096 0 -477.2096 0 -489.2958 0 -501.3819 0 -501.3819 0 -501.3819 0 -501.3819 0 -501.3819 0 -495.3388 0 -495.3388 0 -495.3388 0 -489.2958 0 -483.2527 0 -483.2527 0 -495.3388 0 -489.2958 0 -495.3388 0 -495.3388 0 -495.3388 0 -501.3819 0 -489.2958 0 -501.3819 0 -501.3819 0 -501.3819 0 -495.3388 0 -483.2527 0 -483.2527 0 -483.2527 0 -477.2096 0 -471.1666 0 -459.0805 0 -453.0374 0 -459.0805 0 -453.0374 0 -446.9943 0 -440.9513 0 -440.9513 0 -440.9513 0 -434.9082 0 -428.8652 0 -422.8221 0 -428.8652 0 -428.8652 0 -422.8221 0 -416.779 0 -416.779 0 -416.779 0 -416.779 0 -398.6498 0 -368.4345 0 -380.5207 0 -332.1762 0 -356.3484 0 -306.2277 0 -326.1331 0 -356.3484 0 -338.2192 0 -386.5637 0 -380.5207 0 -380.5207 0 -380.5207 0 -380.5207 0 -374.4776 0 -368.4345 0 -368.4345 0 -374.4776 0 -368.4345 0 -368.4345 0 -368.4345 0 -368.4345 0 -374.4776 0 -374.4776 0 -350.3053 0 -362.3915 0 -356.3484 0 -310.8485 0 -338.2192 0 -356.3484 0 - -344.2623 0 -344.2623 0 -344.2623 0 -344.2623 0 -344.2623 0 -344.2623 0 -344.2623 0 -344.2623 0 -338.2192 0 -332.1762 0 -332.1762 0 -326.1331 0 -310.8485 0 -332.1762 0 -283.1239 0 -310.8485 0 -315.4693 0 -326.1331 0 -320.09 0 -320.09 0 -326.1331 0 -326.1331 0 -320.09 0 -320.09 0 -315.4693 0 -315.4693 0 -320.09 0 -320.09 0 -315.4693 0 -315.4693 0 -310.8485 0 -310.8485 0 -315.4693 0 -310.8485 0 -310.8485 0 -301.607 0 -306.2277 0 -306.2277 0 -306.2277 0 -301.607 0 -310.8485 0 -315.4693 0 -320.09 0 -326.1331 0 -326.1331 0 -326.1331 0 -326.1331 0 -326.1331 0 -326.1331 0 -326.1331 0 -362.3915 0 -428.8652 0 -489.2958 0 - -519.5111 0 -507.425 0 -489.2958 0 -477.2096 0 -465.1235 0 -446.9943 0 -434.9082 0 -422.8221 0 -416.779 0 -410.736 0 -404.6929 0 -392.6068 0 -392.6068 0 -380.5207 0 -380.5207 0 -374.4776 0 -374.4776 0 -374.4776 0 -380.5207 0 -398.6498 0 -422.8221 0 -465.1235 0 -519.5111 0 -573.8986 0 -610.157 0 -642.3181 0 -659.7301 0 -668.4361 0 -659.7301 0 -633.6121 0 -624.9061 0 -604.114 0 -592.0278 0 -573.8986 0 -561.8125 0 -549.7264 0 -537.6403 0 -531.5972 0 -519.5111 0 -507.425 0 -495.3388 0 -495.3388 0 -489.2958 0 -477.2096 0 -489.2958 0 -489.2958 0 -483.2527 0 -483.2527 0 -483.2527 0 -477.2096 0 -477.2096 0 -477.2096 0 -471.1666 0 -471.1666 0 -477.2096 0 -477.2096 0 -489.2958 0 -501.3819 0 -519.5111 0 -543.6833 0 -579.9417 0 -610.157 0 -642.3181 0 -668.4361 0 -694.5541 0 -711.9661 0 -729.3781 0 -755.4961 0 -772.9081 0 -790.3201 0 -807.7321 0 -816.4381 0 -825.1441 0 -807.7321 0 -790.3201 0 -772.9081 0 -738.0841 0 -729.3781 0 -711.9661 0 -677.1421 0 -659.7301 0 -642.3181 0 -616.2001 0 -585.9848 0 - -579.9417 0 -555.7695 0 -543.6833 0 -537.6403 0 -519.5111 0 -519.5111 0 -507.425 0 -495.3388 0 -495.3388 0 -483.2527 0 -477.2096 0 -483.2527 0 -483.2527 0 -471.1666 0 -483.2527 0 -483.2527 0 -489.2958 0 -489.2958 0 -489.2958 0 -495.3388 0 -507.425 0 -489.2958 0 -501.3819 0 -483.2527 0 -471.1666 0 -489.2958 0 -434.9082 0 -477.2096 0 -471.1666 0 -477.2096 0 -465.1235 0 -459.0805 0 -440.9513 0 -453.0374 0 -440.9513 0 -434.9082 0 -410.736 0 -398.6498 0 -428.8652 0 -380.5207 0 -356.3484 0 -362.3915 0 -338.2192 0 -350.3053 0 -315.4693 0 -296.9862 0 -310.8485 0 -320.09 0 -301.607 0 -287.7446 0 -301.607 0 -332.1762 0 -320.09 0 -315.4693 0 -332.1762 0 -310.8485 0 -315.4693 0 -310.8485 0 -306.2277 0 -296.9862 0 -315.4693 0 -315.4693 0 -301.607 0 -287.7446 0 -269.2616 0 -283.1239 0 -278.5031 0 -278.5031 0 -283.1239 0 -287.7446 0 -283.1239 0 -273.8823 0 -287.7446 0 -250.7785 0 -264.6408 0 -269.2616 0 -269.2616 0 -287.7447 0 -310.8485 0 -278.5031 0 -269.2616 0 -273.8823 0 -287.7446 0 -287.7446 0 -296.9862 0 -273.8823 0 -283.1239 0 -278.5031 0 -269.2616 0 -269.2616 0 -250.7785 0 -283.1239 0 -241.537 0 -264.6408 0 -246.1577 0 -255.3993 0 -232.2954 0 -232.2954 0 -260.02 0 -255.3993 0 -241.537 0 -278.5031 0 -255.3993 0 -264.6408 0 -236.9162 0 -269.2616 0 -255.3993 0 -260.02 0 -283.1239 0 -283.1239 0 -260.02 0 -227.6746 0 -255.3993 0 -250.7785 0 -246.1577 0 -246.1577 0 -241.537 0 -227.6746 0 -218.4331 0 -223.0539 0 -213.8123 0 -227.6746 0 -213.8123 0 -232.2954 0 -232.2954 0 -278.5031 0 -273.8823 0 -278.5031 0 -218.4331 0 -218.4331 0 -227.6746 0 -236.9162 0 -218.4331 0 -227.6746 0 -223.0539 0 -223.0539 0 -223.0539 0 -241.537 0 -236.9162 0 -232.2954 0 -223.0539 0 -241.537 0 -213.8123 0 -199.95 0 -196.5925 0 -223.0539 0 -186.52 0 -213.8123 0 -218.4331 0 -250.7785 0 -250.7785 0 -255.3993 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -250.7785 0 -241.537 0 -246.1577 0 -250.7785 0 -250.7785 0 -250.7785 0 -236.9162 0 -241.537 0 -223.0539 0 -190.9217 0 -195.3898 0 -178.0545 0 -165.9599 0 -178.0545 0 -178.0545 0 -178.0545 0 -240.5201 0 -203.7232 0 -231.8856 0 -231.8856 0 -227.669 0 -231.8856 0 -227.669 0 -227.669 0 -215.411 0 -227.669 0 -227.669 0 -227.669 0 -190.9217 0 -190.9217 0 -199.95 0 -186.5442 0 -182.2556 0 -190.9217 0 -169.9081 0 -173.9391 0 -162.093 0 -173.9391 0 -169.9081 0 -158.3059 0 -195.3898 0 -182.2556 0 -215.411 0 -211.4528 0 -211.4528 0 -211.4528 0 -211.4528 0 -215.411 0 -215.411 0 -215.411 0 -215.411 0 -215.411 0 -215.411 0 -207.5571 0 -207.5571 0 -211.4528 0 -169.9081 0 -178.0545 0 -162.093 0 -169.9081 0 -169.9081 0 -165.9599 0 -169.9081 0 -158.3059 0 -186.5442 0 -203.7232 0 -203.7232 0 -203.7232 0 -199.95 0 -199.95 0 -182.2556 0 -173.9391 0 -195.3898 0 -165.9599 0 -165.9599 0 -178.0545 0 -195.3898 0 -195.3898 0 -165.9599 0 -169.9081 0 -162.093 0 -165.9599 0 -195.3898 0 -195.3898 0 -199.95 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -195.3898 0 -195.3898 0 -195.3898 0 -199.95 0 -199.95 0 -199.95 0 -195.3898 0 -195.3898 0 -190.9217 0 -190.9217 0 -190.9217 0 -143.9279 0 -150.9657 0 -182.2556 0 -165.9599 0 -186.5442 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -173.9391 0 -178.0545 0 -178.0545 0 -169.9081 0 -162.093 0 -165.9599 0 -162.093 0 -169.9081 0 -147.4097 0 -154.5973 0 -158.3059 0 -154.5973 0 -130.7166 0 -162.093 0 -158.3059 0 -162.093 0 -162.093 0 -162.093 0 -162.093 0 -154.5973 0 -158.3059 0 -158.3059 0 -158.3059 0 -158.3059 0 -158.3059 0 -162.093 0 -140.5191 0 -124.5223 0 -118.589 0 -118.589 0 -121.5236 0 -121.5236 0 -115.7171 0 -118.589 0 -115.7171 0 -118.589 0 -115.7171 0 -110.1572 0 -133.9147 0 -140.5191 0 -143.9279 0 -140.5191 0 -143.9279 0 -137.1818 0 -127.5863 0 -140.5191 0 -140.5191 0 -140.5191 0 -143.9279 0 -143.9279 0 -133.9147 0 -115.7171 0 -115.7171 0 -112.9069 0 -137.1818 0 -130.7166 0 -127.5863 0 -112.9069 0 -115.7171 0 -130.7166 0 -118.589 0 -127.5863 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -133.9147 0 -133.9147 0 -137.1818 0 -137.1818 0 -137.1818 0 -140.5191 0 -140.5191 0 -140.5191 0 -107.4668 0 -102.2597 0 -107.4668 0 -97.27695 0 -99.74084 0 -107.4668 0 -124.5223 0 - -127.5863 0 -127.5863 0 -127.5863 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -121.5236 0 -124.5223 0 -124.5223 0 -124.5223 0 -121.5236 0 -121.5236 0 -124.5223 0 -124.5223 0 -124.5223 0 -127.5863 0 -124.5223 0 -110.1572 0 -124.5223 0 -121.5236 0 -115.7171 0 -121.5236 0 -118.589 0 -118.589 0 -118.589 0 -121.5236 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -115.7171 0 -121.5236 0 -118.589 0 -118.589 0 -94.86702 0 -102.2597 0 -97.27695 0 -92.51001 0 -97.27695 0 -75.14358 0 -75.14358 0 -59.41532 0 -59.41532 0 -58.63505 0 -75.14358 0 -94.86702 0 -97.27695 0 -92.51001 0 -94.86702 0 -94.86702 0 -75.14358 0 -57.86275 0 -61.00001 0 -97.27695 0 -99.74084 0 -60.20362 0 -94.86702 0 - -75.14358 0 -59.41532 0 -59.41532 0 -59.41532 0 -57.86275 0 -58.63505 0 -60.20362 0 -54.85215 0 -58.63505 0 -54.85215 0 -57.09837 0 -56.34185 0 -60.20362 0 -59.41532 0 -57.09837 0 -58.63505 0 -61.00001 0 -75.14358 0 -61.00001 0 -59.41532 0 -57.09837 0 -56.34185 0 -56.34185 0 -54.85215 0 -56.34185 0 -59.41532 0 -59.41532 0 -61.00001 0 -59.41532 0 -54.85215 0 -57.86275 0 -55.59313 0 -54.85215 0 -56.34185 0 -57.09837 0 -59.41532 0 -57.86275 0 -60.20362 0 -61.00001 0 -54.85215 0 -75.14358 0 -94.86702 0 -97.27695 0 -57.86275 0 -99.74084 0 -102.2597 0 -102.2597 0 -104.8347 0 -107.4668 0 -110.1572 0 -112.9069 0 -115.7171 0 -121.5236 0 -127.5863 0 -127.5863 0 -124.5223 0 -133.9147 0 -112.9069 0 -124.5223 0 -130.7166 0 -133.9147 0 -133.9147 0 -130.7166 0 -127.5863 0 -127.5863 0 -127.5863 0 -124.5223 0 -121.5236 0 -118.589 0 -118.589 0 -115.7171 0 -115.7171 0 -112.9069 0 -110.1572 0 -110.1572 0 -107.4668 0 -104.8347 0 -102.2597 0 -97.27695 0 -99.74084 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -92.51001 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -56.34185 0 -61.00001 0 -61.00001 0 -75.14358 0 -92.51001 0 -75.14358 0 -61.00001 0 -75.14358 0 -61.00001 0 -75.14358 0 -75.14358 0 -75.14358 0 -92.51001 0 -75.14358 0 -61.00001 0 -75.14358 0 -75.14358 0 -61.00001 0 -75.14358 0 -75.14358 0 -75.14358 0 -92.51001 0 -57.86275 0 -61.00001 0 -53.39319 0 -57.86275 0 -56.34185 0 -51.96452 0 -59.41532 0 -57.09837 0 -104.8347 0 -143.9279 0 -154.5973 0 -147.4097 0 -137.1818 0 -130.7166 0 -133.9147 0 -137.1818 0 -137.1818 0 -137.1818 0 -143.9279 0 -190.9217 0 -244.9397 0 -268.0973 0 -268.0973 0 -258.6186 0 -249.4287 0 -236.169 0 -223.5183 0 -215.411 0 -203.7232 0 -199.95 0 -199.95 0 -207.5571 0 -215.411 0 -227.669 0 -231.8856 0 -240.5201 0 -263.3214 0 -320.09 0 -378.4703 0 -427.7836 0 -457.3894 0 -463.5084 0 -463.5084 0 -457.3894 0 -445.351 0 -433.5748 0 -416.3922 0 -399.7743 0 -389.0022 0 -378.4703 0 -368.1744 0 -358.1103 0 -358.1103 0 -363.1136 0 -373.2931 0 -399.7743 0 -451.3372 0 -535.385 0 -608.4619 0 -672.7986 0 -741.3586 0 -790.0854 0 -815.39 0 -841.3381 0 -850.1325 0 -850.1325 0 -823.9673 0 -806.8843 0 -781.7915 0 -749.3084 0 -733.4764 0 -702.6143 0 -687.5773 0 -672.7986 0 -672.7986 0 -665.5051 0 -672.7986 0 -680.1559 0 -672.7986 0 -680.1559 0 -680.1559 0 -680.1559 0 -687.5773 0 -672.7986 0 -651.1075 0 -636.9599 0 -616.2001 0 -578.3048 0 -549.3896 0 -542.35 0 -528.4937 0 -514.9303 0 -501.6548 0 -482.271 0 -469.6946 0 -457.3894 0 -457.3894 0 -439.4304 0 -433.5748 0 -416.3922 0 -416.3922 0 -399.7743 0 -416.3922 0 -394.358 0 -378.4703 0 -378.4703 0 -368.1744 0 -373.2931 0 -368.1744 0 -358.1103 0 -368.1744 0 -363.1136 0 -353.1638 0 -348.2738 0 -338.661 0 -338.661 0 -338.661 0 -338.661 0 -329.2677 0 -320.09 0 -329.2677 0 -320.09 0 -320.09 0 -320.09 0 -320.09 0 -303.6562 0 -309.0518 0 -298.3415 0 -298.3415 0 -293.1068 0 -298.3415 0 -293.1068 0 -293.1068 0 -293.1068 0 -287.951 0 -287.951 0 -282.8731 0 -282.8731 0 -277.8722 0 -287.951 0 -277.8722 0 -277.8722 0 -277.8722 0 -277.8722 0 -282.8731 0 -277.8722 0 -282.8731 0 -282.8731 0 -277.8722 0 -272.9472 0 -249.4287 0 -277.8722 0 -277.8722 0 -249.4287 0 -268.0973 0 -268.0973 0 -272.9472 0 -268.0973 0 -277.8722 0 -293.1068 0 -303.6562 0 -324.6522 0 -338.661 0 -353.1638 0 -378.4703 0 -383.7065 0 -399.7743 0 -405.2517 0 -410.7909 0 -416.3922 0 -410.7909 0 -416.3922 0 -416.3922 0 -416.3922 0 -363.1136 0 -348.2738 0 -348.2738 0 -389.0022 0 -394.358 0 -405.2517 0 -410.7909 0 -405.2517 0 -389.0022 0 -389.0022 0 -378.4703 0 -378.4703 0 -368.1744 0 -363.1136 0 -358.1103 0 -309.0518 0 -343.4397 0 -333.9371 0 -324.6522 0 -309.0518 0 -272.9472 0 -258.6186 0 -263.3214 0 -258.6186 0 -258.6186 0 -258.6186 0 -227.669 0 -223.5183 0 -236.169 0 -227.669 0 -219.4325 0 -244.9397 0 -253.988 0 -249.4287 0 -249.4287 0 -249.4287 0 -253.988 0 -249.4287 0 -236.169 0 -227.669 0 -231.8856 0 -240.5201 0 -231.8856 0 -227.669 0 -186.5442 0 -215.411 0 -207.5571 0 -182.2556 0 -182.2556 0 -178.0545 0 -173.9391 0 -169.9081 0 -173.9391 0 -195.3898 0 -186.5442 0 -207.5571 0 -207.5571 0 -207.5571 0 -203.7232 0 -199.95 0 -199.95 0 -178.0545 0 -199.95 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -173.9391 0 -182.2556 0 -165.9599 0 -150.9657 0 -182.2556 0 -169.9081 0 -133.9147 0 -140.5191 0 -147.4097 0 -154.5973 0 -169.9081 0 -169.9081 0 -158.3059 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -140.5191 0 -147.4097 0 -154.5973 0 -121.5236 0 -127.5863 0 -154.5973 0 -162.093 0 -158.3059 0 -154.5973 0 -158.3059 0 -154.5973 0 -158.3059 0 -158.3059 0 -165.9599 0 -162.093 0 -158.3059 0 -154.5973 0 -150.9657 0 -150.9657 0 -147.4097 0 -147.4097 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -140.5191 0 -137.1818 0 -137.1818 0 -133.9147 0 -130.7166 0 -130.7166 0 -127.5863 0 -124.5223 0 -61.00001 0 -121.5236 0 -127.5863 0 -130.7166 0 -130.7166 0 -133.9147 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -127.5863 0 -127.5863 0 -127.5863 0 -121.5236 0 -112.9069 0 -121.5236 0 -118.589 0 -107.4668 0 -112.9069 0 -115.7171 0 -102.2597 0 -61.00001 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 - -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -57.09837 0 -54.11886 0 -57.09837 0 -55.59313 0 -55.59313 0 -61.00001 0 -61.00001 0 -56.34185 0 -61.00001 0 -75.14358 0 -58.63505 0 -54.11886 0 -53.39319 0 -54.85215 0 -53.39319 0 -52.6751 0 -51.2614 0 -55.59313 0 -51.2614 0 -59.41532 0 -54.11886 0 -54.11886 0 -51.2614 0 -54.85215 0 -53.39319 0 -51.2614 0 -56.34185 0 -53.39319 0 -54.85215 0 -57.86275 0 -51.96452 0 -54.11886 0 -54.85215 0 -54.85215 0 -54.11886 0 -51.96452 0 -49.19625 0 -53.39319 0 -55.59313 0 -50.56569 0 -55.59313 0 -50.56569 0 -54.11886 0 -51.96452 0 -49.87733 0 -45.89836 0 -50.56569 0 -50.56569 0 -52.6751 0 -51.96452 0 -49.87733 0 -54.11886 0 -49.19625 0 -52.6751 0 -53.39319 0 -53.39319 0 -51.2614 0 -55.59313 0 -55.59313 0 -53.39319 0 -54.85215 0 -55.59313 0 -51.2614 0 -54.11886 0 -48.52242 0 -51.96452 0 -50.56569 0 -52.6751 0 -45.2599 0 -47.85577 0 -47.85577 0 -47.85577 0 -53.39319 0 -52.6751 0 -51.96452 0 -54.11886 0 -54.11886 0 -54.11886 0 -51.96452 0 -54.11886 0 -52.6751 0 -54.11886 0 -49.87733 0 -53.39319 0 -50.56569 0 - -45.2599 0 -45.89836 0 -44.62835 0 -45.89836 0 -45.2599 0 -45.2599 0 -39.2467 0 -45.2599 0 -46.54379 0 -47.19624 0 -44.00365 0 -45.89836 0 -49.87733 0 -49.19625 0 -45.89836 0 -48.52242 0 -47.19624 0 -45.89836 0 -45.89836 0 -47.85577 0 -44.62835 0 -47.85577 0 -49.87733 0 -44.00365 0 -41.57241 0 -41.57241 0 -45.89836 0 -41.57241 0 -41.57241 0 -42.1702 0 -42.77463 0 -45.89836 0 -41.57241 0 -41.57241 0 -40.98122 0 -45.2599 0 -45.89836 0 -43.38577 0 -50.56569 0 -51.96452 0 -51.96452 0 -51.2614 0 -52.6751 0 -53.39319 0 -54.11886 0 -54.11886 0 -53.39319 0 -53.39319 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.2614 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.2614 0 -50.56569 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.2614 0 -50.56569 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -50.56569 0 -50.56569 0 -50.56569 0 -49.87733 0 -50.56569 0 -49.87733 0 -49.87733 0 -49.19625 0 -49.19625 0 -48.52242 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.19624 0 -47.85577 0 -47.85577 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.19624 0 -47.19624 0 -47.85577 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -49.19625 0 -48.52242 0 -48.52242 0 -47.19624 0 -49.87733 0 -49.87733 0 -50.56569 0 -50.56569 0 -51.2614 0 -53.39319 0 -54.85215 0 -55.59313 0 -57.09837 0 -54.85215 0 -53.39319 0 -59.41532 0 -59.41532 0 -59.41532 0 -60.20362 0 -60.20362 0 -60.20362 0 -61.00001 0 -61.00001 0 -75.14358 0 -94.86702 0 -94.86702 0 -97.27695 0 -99.74084 0 -104.8347 0 -107.4668 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -107.4668 0 - -99.74084 0 -97.27695 0 -97.27695 0 -97.27695 0 -99.74084 0 -99.74084 0 -102.2597 0 -104.8347 0 -107.4668 0 -110.1572 0 -115.7171 0 -118.589 0 -124.5223 0 -127.5863 0 -133.9147 0 -140.5191 0 -147.4097 0 -154.5973 0 -162.093 0 -165.9599 0 -173.9391 0 -178.0545 0 -182.2556 0 -182.2556 0 -186.5442 0 -186.5442 0 -190.9217 0 -199.95 0 -199.95 0 -190.9217 0 -186.5442 0 -182.2556 0 -182.2556 0 -173.9391 0 -173.9391 0 -169.9081 0 -169.9081 0 -162.093 0 -162.093 0 -154.5973 0 -154.5973 0 -140.5191 0 -147.4097 0 -143.9279 0 -140.5191 0 -133.9147 0 -130.7166 0 -127.5863 0 -118.589 0 -110.1572 0 -118.589 0 -118.589 0 -115.7171 0 -115.7171 0 -112.9069 0 -112.9069 0 -112.9069 0 -110.1572 0 -107.4668 0 -107.4668 0 -107.4668 0 -75.14358 0 -59.41532 0 -59.41532 0 -57.09837 0 -61.00001 0 -59.41532 0 -59.41532 0 -57.09837 0 -55.59313 0 -58.63505 0 -54.85215 0 -51.96452 0 -53.39319 0 -55.59313 0 -54.85215 0 -55.59313 0 -57.09837 0 -55.59313 0 -61.00001 0 -60.20362 0 -58.63505 0 -60.20362 0 -59.41532 0 -59.41532 0 -59.41532 0 -57.09837 0 -57.86275 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -58.63505 0 -57.09837 0 -57.86275 0 -57.86275 0 -55.59313 0 -54.85215 0 -57.09837 0 -56.34185 0 -57.09837 0 -57.09837 0 -57.09837 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -54.11886 0 -55.59313 0 -55.59313 0 -53.39319 0 -54.11886 0 -55.59313 0 -54.11886 0 -54.85215 0 -52.6751 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.11886 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -51.96452 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -50.56569 0 -49.19625 0 -51.2614 0 -49.19625 0 -48.52242 0 -47.85577 0 -49.87733 0 -45.2599 0 -49.19625 0 -47.85577 0 -48.52242 0 -47.19624 0 -44.62835 0 -51.2614 0 -54.11886 0 -54.11886 0 -55.59313 0 -59.41532 0 -92.51001 0 -97.27695 0 -99.74084 0 -102.2597 0 -112.9069 0 -112.9069 0 -115.7171 0 -115.7171 0 -118.589 0 -121.5236 0 -121.5236 0 -121.5236 0 -99.74084 0 -127.5863 0 -124.5223 0 -121.5236 0 -124.5223 0 -127.5863 0 -130.7166 0 -133.9147 0 -137.1818 0 -173.9391 0 -195.3898 0 -236.169 0 -236.169 0 -244.9397 0 -258.6186 0 -263.3214 0 -268.0973 0 -277.8722 0 -600.804 0 -981.1611 0 - -383.7065 0 -394.358 0 -463.5084 0 -495.1235 0 -563.6945 0 -765.4122 0 -1011.231 0 -1021.416 0 -951.8103 0 -876.9574 0 -798.4495 0 -773.5672 0 -781.7915 0 -823.9673 0 -876.9574 0 -913.7716 0 -913.7716 0 -876.9574 0 -850.1325 0 -798.4495 0 -749.3084 0 -717.9128 0 -680.1559 0 -651.1075 0 -629.9788 0 -600.804 0 -570.9612 0 -556.5042 0 -535.385 0 -521.6757 0 -508.2568 0 -495.1235 0 -482.271 0 -463.5084 0 -457.3894 0 -439.4304 0 -433.5748 0 -427.7836 0 -422.0562 0 -405.2517 0 -399.7743 0 -389.0022 0 -383.7065 0 -373.2931 0 -368.1744 0 -358.1103 0 - -162.093 0 -150.9657 0 -158.3059 0 -154.5973 0 -207.5571 0 -199.95 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -190.9217 0 -186.5442 0 -186.5442 0 -186.5442 0 -186.5442 0 -182.2556 0 -182.2556 0 -178.0545 0 -178.0545 0 -173.9391 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -154.5973 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -162.093 0 -162.093 0 -158.3059 0 -158.3059 0 -154.5973 0 -150.9657 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -140.5191 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -133.9147 0 -133.9147 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -112.9069 0 -118.589 0 -107.4668 0 -127.5863 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -121.5236 0 -124.5223 0 -124.5223 0 -124.5223 0 -121.5236 0 -121.5236 0 -121.5236 0 -121.5236 0 -121.5236 0 -121.5236 0 -75.14358 0 -61.00001 0 -104.8347 0 -121.5236 0 -118.589 0 -115.7171 0 -118.589 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -112.9069 0 -112.9069 0 -115.7171 0 -112.9069 0 -112.9069 0 -112.9069 0 -110.1572 0 -112.9069 0 -107.4668 0 -107.4668 0 -107.4668 0 -104.8347 0 -99.74084 0 -104.8347 0 -104.8347 0 -104.8347 0 -104.8347 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -104.8347 0 -102.2597 0 -102.2597 0 -102.2597 0 -102.2597 0 -104.8347 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -102.2597 0 -99.74084 0 -102.2597 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -94.86702 0 -94.86702 0 -94.86702 0 -75.14358 0 -92.51001 0 -75.14358 0 -75.14358 0 -75.14358 0 -61.00001 0 -75.14358 0 -61.00001 0 -75.14358 0 -75.14358 0 -75.14358 0 -75.14358 0 -75.14358 0 -75.14358 0 -75.14358 0 -75.14358 0 -75.14358 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.20362 0 -60.20362 0 -59.41532 0 -59.41532 0 -58.63505 0 -59.41532 0 -58.63505 0 -57.86275 0 -58.63505 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -58.63505 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.09837 0 -58.63505 0 -57.86275 0 -57.86275 0 -57.09837 0 -56.34185 0 -56.34185 0 -56.34185 0 -55.59313 0 -55.59313 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -57.09837 0 -57.09837 0 -57.86275 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -55.59313 0 -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.11886 0 -53.39319 0 -53.39319 0 -54.11886 0 -54.11886 0 -54.11886 0 -53.39319 0 -53.39319 0 -54.11886 0 -54.11886 0 -57.09837 0 -92.51001 0 -97.27695 0 -104.8347 0 -104.8347 0 -104.8347 0 -107.4668 0 -110.1572 0 -112.9069 0 -112.9069 0 -115.7171 0 -118.589 0 -115.7171 0 -118.589 0 -115.7171 0 -115.7171 0 -118.589 0 -118.589 0 -121.5236 0 -124.5223 0 -127.5863 0 -124.5223 0 -127.5863 0 -124.5223 0 -121.5236 0 -124.5223 0 -124.5223 0 -124.5223 0 -118.589 0 -118.589 0 -115.7171 0 -112.9069 0 -115.7171 0 -112.9069 0 -115.7171 0 -121.5236 0 -121.5236 0 -121.5236 0 -124.5223 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -127.5863 0 -127.5863 0 -127.5863 0 -124.5223 0 -121.5236 0 -118.589 0 -118.589 0 -112.9069 0 -110.1572 0 -107.4668 0 -107.4668 0 -104.8347 0 -102.2597 0 -102.2597 0 -99.74084 0 -92.51001 0 -92.51001 0 -75.14358 0 -92.51001 0 -75.14358 0 -75.14358 0 -75.14358 0 -60.20362 0 -60.20362 0 -54.85215 0 -60.20362 0 -60.20362 0 -60.20362 0 -59.41532 0 -57.86275 0 -57.86275 0 -58.63505 0 -59.41532 0 -59.41532 0 -57.09837 0 -58.63505 0 -57.86275 0 -57.09837 0 -56.34185 0 -56.34185 0 -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.85215 0 -54.11886 0 -54.11886 0 -53.39319 0 -53.39319 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.2614 0 -49.19625 0 -51.96452 0 -42.77463 0 -44.62835 0 -42.1702 0 -46.54379 0 -42.77463 0 -40.98122 0 -41.57241 0 -40.39657 0 -46.54379 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.87733 0 -49.87733 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.87733 0 -49.19625 0 -51.08001 0 -46.12001 0 -43.02001 0 -41.78001 0 -41.16 0 -41.16001 0 -43.64001 0 -44.88001 0 -42.40001 0 -41.78 0 -44.26001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -43.64001 0 -41.78 0 -41.78 0 -41.16 0 -43.02001 0 -42.40001 0 -41.78001 0 -47.36001 0 -46.12001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -46.12001 0 -46.74001 0 -47.36001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -47.36001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -44.88001 0 -45.50001 0 -45.50001 0 -46.12001 0 -46.12001 0 -46.12001 0 -45.50001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.12001 0 -45.50001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -45.50001 0 -46.12001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -47.36001 0 -46.74001 0 -46.74001 0 -47.36001 0 -46.74001 0 -46.12001 0 -45.50001 0 -44.88001 0 -44.88001 0 -45.50001 0 -44.88001 0 -44.88001 0 -45.50001 0 -46.12001 0 -45.50001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.74001 0 -47.36001 0 -46.74001 0 -47.36001 0 -46.74001 0 -46.74001 0 -46.12001 0 -47.36001 0 -45.50001 0 -46.12001 0 -43.64001 0 -41.78 0 -41.78 0 -42.40001 0 -40.54 0 -44.88001 0 -44.26001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -45.50001 0 -46.12001 0 -46.12001 0 -44.88001 0 -46.12001 0 -45.50001 0 -46.12001 0 -45.50001 0 -46.12001 0 -45.50001 0 -44.88001 0 -45.50001 0 -44.26001 0 -39.92 0 -40.54 0 -42.40001 0 -39.92 0 -43.64001 0 -36.2 0 -39.3 0 -41.16001 0 -44.88001 0 -46.12001 0 -44.26001 0 -46.12001 0 -38.06 0 -39.3 0 -39.92 0 -46.12001 0 -44.88001 0 -45.50001 0 -46.12001 0 -46.12001 0 -44.88001 0 -42.40001 0 -42.40001 0 -38.68 0 -43.02001 0 -45.50001 0 -44.88001 0 -44.88001 0 -45.50001 0 -41.16001 0 -35.58 0 -44.26001 0 -45.50001 0 -44.88001 0 -45.50001 0 -46.12001 0 -45.50001 0 -46.12001 0 -45.50001 0 -46.12001 0 -45.50001 0 -46.12001 0 -46.12001 0 -45.50001 0 -45.50001 0 -44.88001 0 -45.50001 0 -45.50001 0 -44.88001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -45.50001 0 -45.50001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -44.88001 0 -46.12001 0 -43.64001 0 -42.40001 0 -46.12001 0 -43.64001 0 -43.64001 0 -44.88001 0 -46.12001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.12001 0 -43.64001 0 -39.3 0 -40.54 0 -41.78 0 -40.54 0 -38.68 0 -36.2 0 -38.68 0 -41.16 0 -39.3 0 -37.44 0 -36.82 0 -41.78 0 -41.78 0 -41.16001 0 -40.54 0 -40.54 0 -41.16001 0 -43.02001 0 -40.54 0 -40.54 0 -38.68 0 -43.02001 0 -44.26001 0 -44.88001 0 -43.64001 0 -43.64001 0 -44.26001 0 -41.78 0 -43.64001 0 -38.06 0 -43.64001 0 -38.06 0 -38.68 0 -39.3 0 -39.3 0 -43.02001 0 -43.64001 0 -43.64001 0 -42.40001 0 -44.26001 0 -43.64001 0 -44.26001 0 -44.26001 0 -44.26001 0 -44.26001 0 -43.64001 0 -43.64001 0 -38.68 0 -37.44 0 -36.82 0 -36.2 0 -34.34 0 -37.44 0 -35.58 0 -34.34 0 -34.96 0 -35.58 0 -36.82 0 -38.06 0 -39.3 0 -37.44 0 -40.54 0 -41.16 0 -39.92 0 -41.78 0 -43.02001 0 -43.02001 0 -43.02001 0 -42.40001 0 -42.40001 0 -42.40001 0 -41.78001 0 -38.06 0 -34.96 0 -37.44 0 -33.1 0 -33.72 0 -36.82 0 -34.96 0 -34.96 0 -35.58 0 -37.44 0 -38.06 0 -39.92 0 -41.78001 0 -41.78 0 -41.78 0 -42.40001 0 -41.78 0 -41.78 0 -41.78001 0 -42.40001 0 -41.78 0 -42.40001 0 -41.78 0 -41.78 0 -38.06 0 -37.44 0 -35.58 0 -35.58 0 -34.34 0 -35.58 0 -34.96 0 -32.48 0 -36.82 0 -33.1 0 -39.92 0 -41.16 0 -41.16001 0 -41.16 0 -41.16001 0 -41.16 0 -41.16001 0 -41.16001 0 -41.16001 0 -41.16001 0 -41.16001 0 -41.16001 0 -41.16001 0 -41.16 0 -39.3 0 -37.44 0 -36.82 0 -34.34 0 -35.58 0 -34.96 0 -35.58 0 -36.82 0 -37.44 0 -39.92 0 -39.92 0 -40.54 0 -41.16001 0 -41.16001 0 -41.16 0 -40.54 0 -41.16001 0 -40.54 0 -41.16 0 -40.54 0 -41.16001 0 -41.16 0 -41.78001 0 -41.78001 0 -42.40001 0 -41.78 0 -41.78001 0 -39.92 0 -37.44 0 -43.02001 0 -41.78 0 -43.02001 0 -43.02001 0 -44.26001 0 -47.36001 0 -47.36001 0 -47.98001 0 -48.60001 0 -49.84001 0 -51.08001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.70001 0 -52.32001 0 -52.32001 0 -54.80001 0 -49.84001 0 -55.42001 0 -56.04001 0 -55.42001 0 -54.18001 0 -52.32001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.66001 0 -51.08001 0 -57.90001 0 -58.52001 0 -57.28001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.76001 0 -60.38001 0 -76.75501 0 -92.51001 0 -102.5825 0 -105.94 0 -112.655 0 -116.0125 0 -112.9069 0 -107.4668 0 -112.9069 0 -110.1572 0 -115.7171 0 -115.7171 0 -115.7171 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -121.5236 0 -121.5236 0 -121.5236 0 -121.5236 0 -124.5223 0 -121.5236 0 -121.5236 0 -121.5236 0 -121.5236 0 -118.589 0 -115.7171 0 -112.9069 0 -112.9069 0 -110.1572 0 -107.4668 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -99.74084 0 -97.27695 0 -97.27695 0 -97.27695 0 -94.86702 0 -92.51001 0 -75.14358 0 -75.14358 0 -75.14358 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.20362 0 -60.20362 0 -59.41532 0 -59.41532 0 -54.85215 0 -52.6751 0 -51.96452 0 -54.11886 0 -56.34185 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.86275 0 -56.34185 0 -56.34185 0 -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -47.85577 0 -47.19624 0 -47.85577 0 -50.56569 0 -48.52242 0 -49.87733 0 -46.54379 0 -47.19624 0 -49.87733 0 -47.19624 0 -43.38577 0 -46.54379 0 -49.87733 0 -47.19624 0 -51.2614 0 -47.19624 0 -49.87733 0 -50.56569 0 -51.2614 0 -51.2614 0 -50.56569 0 -44.00365 0 -43.38577 0 -40.98122 0 -44.62835 0 -46.54379 0 -45.89836 0 -45.89836 0 -46.54379 0 -44.00365 0 -44.62835 0 -42.77463 0 -44.62835 0 -42.77463 0 -42.1702 0 -45.2599 0 -44.00365 0 -43.64001 0 -45.50001 0 -42.40001 0 -43.64001 0 -43.64001 0 -43.02001 0 -44.26001 0 -42.40001 0 -38.68 0 -41.16001 0 -43.64001 0 -42.40001 0 -43.02001 0 -43.02001 0 -44.88001 0 -42.40001 0 -43.64001 0 -43.02001 0 -43.02001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -46.74001 0 -48.60001 0 -49.22001 0 -48.60001 0 -49.22001 0 -49.22001 0 -50.46001 0 -54.18001 0 -57.90001 0 -61.00001 0 -59.76001 0 -57.28001 0 -57.28001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -59.14001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -99.22501 0 -92.51001 0 -57.90001 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -76.75501 0 -92.51001 0 -76.75501 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -76.75501 0 -76.75501 0 -92.51001 0 -92.51001 0 -59.76001 0 -59.14001 0 -57.90001 0 -57.28001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.66001 0 -54.80001 0 -56.04001 0 -57.28001 0 -56.66001 0 -56.04001 0 -56.04001 0 -61.00001 0 -119.37 0 -132.8 0 -132.8 0 -129.4425 0 -129.4425 0 -129.4425 0 -132.8 0 -132.8 0 -139.515 0 -139.515 0 -142.8725 0 -139.515 0 -139.515 0 -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -136.1575 0 -146.23 0 -152.945 0 -166.375 0 -176.4475 0 -183.1625 0 -193.235 0 -204.5708 0 -218.4331 0 -227.6746 0 -236.9162 0 -241.537 0 -246.1577 0 -255.3993 0 -264.6408 0 -269.2616 0 -273.8823 0 -273.8823 0 -246.1577 0 -232.2954 0 -236.9162 0 -223.0539 0 -227.6746 0 -209.1916 0 -223.0539 0 -241.537 0 -232.2954 0 -223.0539 0 -213.8123 0 -209.1916 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -193.235 0 -189.8775 0 -189.8775 0 -186.52 0 -183.1625 0 -183.1625 0 -183.1625 0 -186.52 0 -183.1625 0 -179.805 0 -179.805 0 -159.66 0 -169.7325 0 -173.09 0 -169.7325 0 -146.23 0 -179.805 0 -179.805 0 -179.805 0 -176.4475 0 -169.7325 0 -159.66 0 -139.515 0 -142.8725 0 -142.8725 0 -146.23 0 -149.5875 0 -146.23 0 -139.515 0 -136.1575 0 -139.515 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -119.37 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -109.2975 0 -76.75501 0 -57.90001 0 -59.14001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -59.76001 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -60.38001 0 -76.75501 0 -61.00001 0 -54.80001 0 -52.32001 0 -52.32001 0 -53.56001 0 -52.94001 0 -50.46001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -51.70001 0 -52.32001 0 -57.90001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -49.22001 0 -49.22001 0 -52.94001 0 -49.22001 0 -50.46001 0 -50.46001 0 -51.70001 0 -51.70001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -51.08001 0 -49.84001 0 -51.70001 0 -49.22001 0 -48.60001 0 -48.60001 0 -47.98001 0 -46.12001 0 -46.74001 0 -49.22001 0 -47.36001 0 -47.98001 0 -48.60001 0 -52.94001 0 -56.04001 0 -55.42001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.18001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -55.42001 0 -56.04001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.18001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.70001 0 -51.70001 0 -51.70001 0 -49.84001 0 -51.08001 0 -46.74001 0 -43.64001 0 -43.02001 0 -44.26001 0 -45.50001 0 -45.50001 0 -49.84001 0 -50.46001 0 -50.46001 0 -50.46001 0 -51.08001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -49.84001 0 -50.46001 0 -49.84001 0 -47.98001 0 -47.36001 0 -40.54 0 -46.12001 0 -42.40001 0 -42.40001 0 -44.88001 0 -44.26001 0 -42.40001 0 -45.50001 0 -49.22001 0 -49.84001 0 -49.84001 0 -49.84001 0 -49.84001 0 -49.22001 0 -49.84001 0 -49.84001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.84001 0 -48.60001 0 -49.84001 0 -49.22001 0 -46.12001 0 -46.74001 0 -47.36001 0 -46.12001 0 -46.12001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -46.74001 0 -45.50001 0 -43.64001 0 -41.78001 0 -41.78001 0 -47.98001 0 -47.98001 0 -47.36001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -47.98001 0 -47.98001 0 -48.60001 0 -47.98001 0 -48.60001 0 -47.36001 0 -47.98001 0 -42.40001 0 -41.16001 0 -43.64001 0 -42.40001 0 -41.78 0 -41.16001 0 -42.40001 0 -39.3 0 -43.64001 0 -47.36001 0 -43.64001 0 -44.88001 0 -42.40001 0 -43.02001 0 -38.68 0 -41.78001 0 -44.88001 0 -44.88001 0 -45.50001 0 -44.88001 0 -38.06 0 -39.3 0 -41.16001 0 -40.54 0 -39.3 0 -38.68 0 -39.92 0 -38.06 0 -44.88001 0 -43.64001 0 -44.88001 0 -47.98001 0 -51.70001 0 -53.56001 0 -56.04001 0 -59.14001 0 -92.51001 0 -132.8 0 -166.375 0 -176.4475 0 -199.95 0 -241.537 0 -292.3654 0 -296.9862 0 -273.8823 0 -255.3993 0 -232.2954 0 -223.0539 0 -218.4331 0 -199.95 0 -196.5925 0 -193.235 0 -189.8775 0 -189.8775 0 -186.52 0 -183.1625 0 -179.805 0 -179.805 0 -176.4475 0 -173.09 0 -169.7325 0 -166.375 0 -166.375 0 -159.66 0 -152.945 0 -146.23 0 -139.515 0 -132.8 0 -126.085 0 -119.37 0 -112.655 0 -109.2975 0 -60.38001 0 -57.28001 0 -55.42001 0 -61.00001 0 -54.18001 0 -58.52001 0 -57.28001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.14001 0 -58.52001 0 -57.90001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -47.36001 0 -46.74001 0 -47.98001 0 -53.56001 0 -46.12001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.70001 0 -51.70001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.08001 0 -50.46001 0 -50.46001 0 -49.84001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.84001 0 -49.84001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -51.08001 0 -50.46001 0 -50.46001 0 -49.84001 0 -50.46001 0 -49.84001 0 -48.60001 0 -45.50001 0 -50.46001 0 -47.36001 0 -49.22001 0 -48.60001 0 -47.98001 0 - -40.54 0 - -41.16001 0 -46.12001 0 -48.60001 0 -46.74001 0 -43.64001 0 -41.78001 0 -44.88001 0 -46.12001 0 -46.12001 0 -46.12001 0 -45.50001 0 -46.12001 0 -46.74001 0 -46.74001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.98001 0 -48.60001 0 -47.98001 0 -47.98001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -47.36001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.84001 0 -41.16 0 -42.40001 0 -46.74001 0 -46.12001 0 -48.60001 0 -48.60001 0 -48.60001 0 -38.68 0 -38.06 0 -36.82 0 -37.44 0 -40.54 0 -37.44 0 -46.74001 0 -39.3 0 -45.50001 0 -46.74001 0 -46.12001 0 -46.12001 0 -46.74001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.74001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 - -48.60001 0 -48.60001 0 - -48.60001 0 -47.98001 0 -46.12001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.84001 0 -49.22001 0 -49.84001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -48.60001 0 -47.98001 0 -49.22001 0 -47.98001 0 -48.60001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.36001 0 -47.36001 0 -48.60001 0 -49.22001 0 -48.60001 0 -47.98001 0 -46.12001 0 -47.98001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.84001 0 -49.84001 0 - -49.84001 0 -50.46001 0 -49.84001 0 -49.84001 0 -49.84001 0 -49.84001 0 -50.46001 0 -50.46001 0 -50.46001 0 -49.84001 0 -50.46001 0 -50.46001 0 -49.22001 0 -47.98001 0 -49.22001 0 -49.84001 0 -49.84001 0 -49.22001 0 -49.22001 0 -49.84001 0 -49.84001 0 -49.84001 0 -49.84001 0 -50.46001 0 -50.46001 0 -50.46001 0 -51.08001 0 -51.70001 0 -50.46001 0 -51.08001 0 -50.46001 0 -51.08001 0 -51.08001 0 -50.46001 0 -50.46001 0 -49.84001 0 -50.46001 0 -51.08001 0 -51.08001 0 -50.46001 0 -50.46001 0 -50.46001 0 -51.08001 0 -51.08001 0 -50.46001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -50.46001 0 -52.32001 0 -52.32001 0 -51.08001 0 -51.08001 0 -48.60001 0 -51.08001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.70001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -52.32001 0 -52.94001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -52.32001 0 -51.70001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.94001 0 -53.56001 0 -52.32001 0 -52.32001 0 -51.70001 0 -50.46001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -51.70001 0 -52.94001 0 -46.74001 0 -51.08001 0 -49.84001 0 -49.84001 0 -51.08001 0 -53.56001 0 -50.46001 0 -52.94001 0 -52.94001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -54.80001 0 -54.80001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.80001 0 -54.18001 0 -55.42001 0 -54.18001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -52.94001 0 -54.18001 0 -52.94001 0 -54.80001 0 -54.18001 0 -54.80001 0 -52.94001 0 -51.70001 0 -54.80001 0 -51.08001 0 -52.94001 0 -54.80001 0 -54.18001 0 -54.80001 0 -53.56001 0 -54.80001 0 -52.32001 0 -52.94001 0 -56.66001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -55.42001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -52.32001 0 -51.08001 0 -51.70001 0 -51.08001 0 -49.84001 0 -51.08001 0 -52.94001 0 -52.94001 0 -52.32001 0 -51.70001 0 -51.70001 0 -54.18001 0 -49.84001 0 -52.94001 0 -52.32001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -52.32001 0 -54.18001 0 -54.80001 0 -54.80001 0 -53.56001 0 -53.56001 0 -52.94001 0 -54.18001 0 -52.94001 0 -52.32001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.80001 0 -56.04001 0 -54.80001 0 -55.42001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -51.08001 0 -54.18001 0 -53.56001 0 -53.56001 0 -52.32001 0 -54.80001 0 -52.32001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -52.32001 0 -54.18001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -53.56001 0 -52.94001 0 -53.56001 0 -52.32001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -44.26001 0 -50.46001 0 -51.08001 0 -49.84001 0 -52.94001 0 -51.70001 0 -52.32001 0 -52.94001 0 -54.18001 0 -53.56001 0 -52.94001 0 -53.56001 0 -54.18001 0 -53.56001 0 -52.94001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -54.18001 0 -52.94001 0 -51.70001 0 -51.70001 0 -49.84001 0 -49.22001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -53.56001 0 -52.94001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.80001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -52.94001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 - -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -53.56001 0 -52.94001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.80001 0 -54.80001 0 -52.94001 0 -52.94001 0 -52.94001 0 -51.70001 0 -51.70001 0 -52.32001 0 -49.84001 0 -53.56001 0 -52.94001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -52.94001 0 -52.32001 0 -52.94001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.32001 0 -54.18001 0 -53.56001 0 -52.32001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.94001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.32001 0 -50.46001 0 -51.70001 0 -51.70001 0 -52.32001 0 -52.32001 0 -51.08001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.32001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.32001 0 -51.70001 0 -51.08001 0 -49.22001 0 -48.60001 0 -41.78001 0 -44.88001 0 -43.02001 0 -43.02001 0 -44.26001 0 -49.84001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.70001 0 -46.12001 0 -48.60001 0 -49.22001 0 -43.64001 0 -47.36001 0 -47.36001 0 -51.70001 0 -52.32001 0 -52.94001 0 -53.56001 0 -52.32001 0 -53.56001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -52.94001 0 -53.56001 0 -54.18001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.18001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -48.60001 0 -46.74001 0 -44.88001 0 -46.74001 0 -48.60001 0 -48.60001 0 -54.18001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.18001 0 -55.42001 0 -56.04001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -55.42001 0 -55.42001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -48.60001 0 -54.18001 0 -49.22001 0 -47.98001 0 -54.18001 0 -54.80001 0 -54.18001 0 -51.08001 0 -52.94001 0 -53.56001 0 -48.60001 0 -49.84001 0 -51.08001 0 -49.22001 0 -46.12001 0 -50.46001 0 -54.18001 0 -51.08001 0 -52.94001 0 -53.56001 0 -55.42001 0 -55.42001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -57.28001 0 -55.42001 0 -55.42001 0 -54.80001 0 -51.70001 0 -53.56001 0 -52.94001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.18001 0 -54.80001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.80001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.66001 0 -55.42001 0 -55.42001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.66001 0 -57.28001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.28001 0 -56.66001 0 -56.04001 0 -57.28001 0 -57.90001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -55.42001 0 -48.60001 0 -50.46001 0 -51.08001 0 -47.98001 0 -51.08001 0 -48.60001 0 -49.22001 0 -50.46001 0 -53.56001 0 -52.94001 0 -49.22001 0 -50.46001 0 -49.84001 0 -51.70001 0 -51.70001 0 -47.98001 0 -54.80001 0 -56.66001 0 -56.04001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -55.42001 0 -56.66001 0 -52.94001 0 -54.80001 0 -55.42001 0 -51.08001 0 -56.66001 0 -56.66001 0 -56.66001 0 -55.42001 0 -51.08001 0 -53.56001 0 -55.42001 0 -54.80001 0 -55.42001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 - -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -52.32001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -59.14001 0 -58.52001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -55.42001 0 -57.90001 0 -57.90001 0 -51.08001 0 -57.28001 0 -56.66001 0 -52.94001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.04001 0 -57.28001 0 -57.90001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -58.52001 0 -57.90001 0 -58.52001 0 -57.90001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -49.84001 0 -55.42001 0 -57.90001 0 -57.90001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -54.80001 0 -53.56001 0 -53.56001 0 -52.32001 0 -51.08001 0 -49.22001 0 -47.36001 0 -44.26001 0 -43.02001 0 -43.02001 0 -45.50001 0 -47.98001 0 -48.60001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.98001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.84001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -53.56001 0 -53.56001 0 -54.18001 0 -55.42001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -55.42001 0 -57.90001 0 -58.52001 0 -59.14001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -76.75501 0 -112.655 0 -126.085 0 -129.4425 0 -116.0125 0 -95.86751 0 -116.0125 0 -105.94 0 -95.86751 0 -76.75501 0 -60.38001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -58.52001 0 -57.90001 0 -58.52001 0 -61.00001 0 -92.51001 0 -95.86751 0 -99.22501 0 -102.5825 0 -112.655 0 -112.655 0 -116.0125 0 -112.655 0 -112.655 0 -126.085 0 -278.5031 0 -241.537 0 -218.4331 0 -213.8123 0 -241.537 0 -241.537 0 -232.2954 0 -232.2954 0 - -199.95 0 -189.8775 0 -196.5925 0 -196.5925 0 -204.5708 0 -196.5925 0 - -37500 0 -189.8775 0 -196.5925 0 -199.95 0 -193.235 0 -183.1625 0 -176.4475 0 -166.375 0 -159.66 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 - -37500 0 -112.655 0 -105.94 0 -102.5825 0 -105.94 0 -112.655 0 -126.085 0 -149.5875 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -102.5825 0 -102.5825 0 -95.86751 0 -92.51001 0 -61.00001 0 -92.51001 0 -95.86751 0 -102.5825 0 -105.94 0 -116.0125 0 -126.085 0 -132.8 0 -146.23 0 -159.66 0 -37500 0 -37500 0 -37500 0 -37500 0 -132.8 0 -126.085 0 -119.37 0 -112.655 0 -109.2975 0 -102.5825 0 -102.5825 0 -37500 0 -99.22501 0 -102.5825 0 -102.5825 0 -102.5825 0 -109.2975 0 -116.0125 0 -122.7275 0 -136.1575 0 -149.5875 0 -166.375 0 -176.4475 0 -183.1625 0 -179.805 0 -176.4475 0 -166.375 0 -159.66 0 -156.3025 0 -149.5875 0 -146.23 0 -142.8725 0 -139.515 0 -132.8 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -122.7275 0 -126.085 0 -132.8 0 -139.515 0 -146.23 0 -159.66 0 -169.7325 0 -176.4475 0 -179.805 0 -176.4475 0 -169.7325 0 -163.0175 0 -156.3025 0 -149.5875 0 -149.5875 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 - -119.37 0 -119.37 0 -132.8 0 -126.085 0 -129.4425 0 -142.8725 0 -156.3025 0 -169.7325 0 -183.1625 0 -193.235 0 -196.5925 0 -186.52 0 -173.09 0 -166.375 0 -166.375 0 -166.375 0 -166.375 0 -163.0175 0 -156.3025 0 -152.945 0 -149.5875 0 -142.8725 0 -139.515 0 -129.4425 0 -116.0125 0 -112.655 0 -129.4425 0 -146.23 0 -139.515 0 -149.5875 0 -166.375 0 -166.375 0 -173.09 0 -173.09 0 -166.375 0 -163.0175 0 -156.3025 0 -166.375 0 -169.7325 0 -176.4475 0 -173.09 0 -173.09 0 -95.86751 0 -92.51001 0 -109.2975 0 -112.655 0 -126.085 0 -152.945 0 -146.23 0 -142.8725 0 -139.515 0 -142.8725 0 -139.515 0 -136.1575 0 -132.8 0 -136.1575 0 -132.8 0 -129.4425 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -116.0125 0 -116.0125 0 -112.655 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -102.5825 0 -102.5825 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -54.80001 0 -49.84001 0 -49.22001 0 -50.46001 0 -49.22001 0 -47.98001 0 -48.60001 0 -49.22001 0 -57.28001 0 -54.80001 0 -54.18001 0 -51.70001 0 -54.80001 0 -55.42001 0 -52.32001 0 -51.70001 0 -49.84001 0 -50.46001 0 -53.56001 0 -55.42001 0 -51.08001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.70001 0 -49.22001 0 -51.70001 0 -51.70001 0 -52.94001 0 -52.32001 0 -47.98001 0 -51.70001 0 -52.32001 0 -51.08001 0 -53.56001 0 -50.46001 0 -50.46001 0 -51.70001 0 -51.70001 0 -59.14001 0 -60.38001 0 -56.66001 0 -57.90001 0 -59.14001 0 -59.76001 0 -56.04001 0 -54.18001 0 -55.42001 0 -59.14001 0 -57.90001 0 -59.14001 0 -56.04001 0 -56.04001 0 -58.52001 0 -56.66001 0 -56.04001 0 -59.76001 0 -59.14001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -58.52001 0 -59.14001 0 -92.51001 0 -61.00001 0 -163.0175 0 -159.66 0 -163.0175 0 -199.95 0 -199.95 0 -126.085 0 - -60.38001 0 -54.80001 0 -52.32001 0 -52.32001 0 -59.14001 0 -102.5825 0 -99.22501 0 -76.75501 0 -59.14001 0 -76.75501 0 -126.085 0 -136.1575 0 -132.8 0 -119.37 0 -119.37 0 -116.0125 0 -112.655 0 -105.94 0 -105.94 0 -102.5825 0 -99.22501 0 -99.22501 0 -102.5825 0 -99.22501 0 -95.86751 0 -92.51001 0 -92.51001 0 -76.75501 0 -92.51001 0 -61.00001 0 -76.75501 0 -61.00001 0 -61.00001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -60.38001 0 -61.00001 0 -76.75501 0 -60.38001 0 -57.28001 0 -61.00001 0 -61.00001 0 -59.76001 0 -61.00001 0 -76.75501 0 -76.75501 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -76.75501 0 -61.00001 0 -59.76001 0 -58.52001 0 -59.76001 0 -56.04001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.04001 0 -59.76001 0 -60.38001 0 -59.76001 0 -57.28001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -92.51001 0 -76.75501 0 -61.00001 0 -59.76001 0 -56.04001 0 -56.66001 0 -99.22501 0 -95.86751 0 -95.86751 0 -99.22501 0 -105.94 0 -92.51001 0 -95.86751 0 -109.2975 0 -105.94 0 -61.00001 0 -61.00001 0 -76.75501 0 -109.2975 0 -139.515 0 - -142.8725 0 -139.515 0 -129.4425 0 -126.085 0 -129.4425 0 -139.515 0 -139.515 0 -129.4425 0 -119.37 0 -105.94 0 -95.86751 0 -92.51001 0 - -105.94 0 -119.37 0 -132.8 0 -139.515 0 -139.515 0 -136.1575 0 -129.4425 0 -122.7275 0 -119.37 0 -116.0125 0 -112.655 0 -116.0125 0 -116.0125 0 -102.5825 0 -102.5825 0 -102.5825 0 -109.2975 0 -102.5825 0 -119.37 0 -92.51001 0 -56.66001 0 -57.28001 0 -56.04001 0 -122.7275 0 -126.085 0 -122.7275 0 -116.0125 0 -109.2975 0 -99.22501 0 - -105.94 0 -119.37 0 -136.1575 0 -152.945 0 -166.375 0 -186.52 0 -196.5925 0 -218.4331 0 -232.2954 0 -264.6408 0 -246.1577 0 -196.5925 0 -129.4425 0 -61.00001 0 -53.56001 0 -58.52001 0 -109.2975 0 -61.00001 0 -76.75501 0 -105.94 0 -122.7275 0 -129.4425 0 -132.8 0 -102.5825 0 -112.655 0 -92.51001 0 -116.0125 0 -116.0125 0 -129.4425 0 -102.5825 0 -116.0125 0 -126.085 0 -126.085 0 -112.655 0 -60.38001 0 -54.80001 0 -59.76001 0 -57.90001 0 -57.90001 0 -57.28001 0 -59.14001 0 -95.86751 0 -109.2975 0 -109.2975 0 -116.0125 0 -109.2975 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -99.22501 0 -59.76001 0 -57.90001 0 -102.5825 0 -56.04001 0 -59.76001 0 -76.75501 0 -99.22501 0 -56.66001 0 -61.00001 0 -105.94 0 -92.51001 0 -102.5825 0 -61.00001 0 -57.28001 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -99.22501 0 -95.86751 0 -99.22501 0 -99.22501 0 -99.22501 0 -102.5825 0 -99.22501 0 -99.22501 0 -102.5825 0 -102.5825 0 -99.22501 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -59.14001 0 -92.51001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -76.75501 0 -76.75501 0 -92.51001 0 -76.75501 0 -95.86751 0 -76.75501 0 -95.86751 0 -92.51001 0 -61.00001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -92.51001 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -57.28001 0 -54.18001 0 -57.28001 0 -56.66001 0 -54.18001 0 -56.04001 0 -55.42001 0 -54.80001 0 -55.42001 0 -55.42001 0 -58.52001 0 -61.00001 0 -59.14001 0 -56.66001 0 -54.18001 0 -51.08001 0 -52.32001 0 -52.32001 0 -59.14001 0 -50.46001 0 -52.94001 0 -51.08001 0 -53.56001 0 -52.32001 0 -49.22001 0 -52.32001 0 -56.04001 0 -54.18001 0 -51.70001 0 -55.42001 0 -57.28001 0 -55.42001 0 -76.75501 0 -92.51001 0 -76.75501 0 -61.00001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -61.00001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -76.75501 0 -92.51001 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -60.38001 0 -61.00001 0 -60.38001 0 -59.14001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -92.51001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -61.00001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -59.76001 0 -60.38001 0 -59.76001 0 -55.42001 0 -55.42001 0 -52.32001 0 -51.70001 0 -52.32001 0 -49.84001 0 -51.70001 0 -50.46001 0 -51.08001 0 -54.80001 0 -54.18001 0 -51.70001 0 -53.56001 0 -52.94001 0 -56.04001 0 -59.76001 0 -55.42001 0 -59.76001 0 -52.32001 0 -54.18001 0 -76.75501 0 -59.76001 0 -58.52001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -56.04001 0 -56.04001 0 -59.14001 0 -56.66001 0 -57.28001 0 -58.52001 0 -57.28001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -55.42001 0 -57.28001 0 -53.56001 0 -51.70001 0 -54.18001 0 -56.04001 0 -57.90001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -55.42001 0 -52.32001 0 -51.08001 0 -56.66001 0 -59.76001 0 -51.70001 0 -52.94001 0 -51.70001 0 -60.38001 0 -59.76001 0 -76.75501 0 -59.76001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -58.52001 0 -58.52001 0 -59.14001 0 -51.70001 0 -59.14001 0 -57.28001 0 -58.52001 0 -57.90001 0 -58.52001 0 -59.14001 0 -60.38001 0 -59.76001 0 -60.38001 0 -61.00001 0 -76.75501 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -92.51001 0 -76.75501 0 -76.75501 0 - -60.38001 0 -60.38001 0 -60.38001 0 -52.94001 0 -52.32001 0 -59.76001 0 -58.52001 0 -60.38001 0 -60.38001 0 -76.75501 0 -60.38001 0 -59.76001 0 -57.28001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 - -61.00001 0 -61.00001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -92.51001 0 -95.86751 0 -92.51001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -95.86751 0 -95.86751 0 -61.00001 0 -61.00001 0 -61.00001 0 -54.18001 0 -56.66001 0 -56.04001 0 -56.66001 0 -57.28001 0 -54.80001 0 -53.56001 0 -56.66001 0 -59.76001 0 -60.38001 0 -61.00001 0 -60.38001 0 -59.76001 0 -55.42001 0 -55.42001 0 -52.94001 0 -55.42001 0 -55.42001 0 -56.04001 0 -76.75501 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -61.00001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -92.51001 0 -92.51001 0 -76.75501 0 -92.51001 0 -76.75501 0 -76.75501 0 -92.51001 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -61.00001 0 -76.75501 0 -92.51001 0 -102.5825 0 -76.75501 0 -56.04001 0 -56.66001 0 -56.66001 0 -43.64001 0 -41.16 0 -40.54 0 -41.16 0 -44.26001 0 -52.32001 0 -57.90001 0 -166.375 0 -156.3025 0 -122.7275 0 -105.94 0 -95.86751 0 -119.37 0 -126.085 0 -122.7275 0 -112.655 0 -99.22501 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -61.00001 0 -59.14001 0 -76.75501 0 -60.38001 0 -60.38001 0 -55.42001 0 -57.28001 0 -122.7275 0 -116.0125 0 -102.5825 0 -76.75501 0 -57.28001 0 -54.80001 0 -61.00001 0 -119.37 0 -119.37 0 -119.37 0 -116.0125 0 -109.2975 0 -102.5825 0 -95.86751 0 -92.51001 0 -76.75501 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -76.75501 0 -56.66001 0 -57.28001 0 -95.86751 0 -61.00001 0 -76.75501 0 -55.42001 0 -95.86751 0 -54.80001 0 -56.04001 0 -57.28001 0 -60.38001 0 -92.51001 0 -61.00001 0 -58.52001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -56.66001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -60.38001 0 -55.42001 0 -54.80001 0 -76.75501 0 -54.18001 0 -92.51001 0 -56.04001 0 -58.52001 0 -54.80001 0 -54.18001 0 -56.66001 0 -55.42001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -58.52001 0 -58.52001 0 -56.04001 0 -55.42001 0 -56.66001 0 -59.76001 0 -52.94001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.14001 0 -59.14001 0 -58.52001 0 -49.84001 0 - -122.7275 0 -119.37 0 -122.7275 0 -119.37 0 -122.7275 0 -122.7275 0 -122.7275 0 -116.0125 0 -119.37 0 -116.0125 0 -102.5825 0 -116.0125 0 -122.7275 0 -132.8 0 -116.0125 0 -126.085 0 -136.1575 0 -136.1575 0 -136.1575 0 -139.515 0 -142.8725 0 -142.8725 0 - -132.8 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -136.1575 0 -139.515 0 -136.1575 0 -136.1575 0 - -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -129.4425 0 -132.8 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -129.4425 0 -129.4425 0 -132.8 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -76.75501 0 -60.38001 0 -60.38001 0 -126.085 0 -126.085 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -61.00001 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -112.655 0 -99.22501 0 -59.76001 0 -59.76001 0 -58.52001 0 -59.14001 0 -57.90001 0 -57.90001 0 -61.00001 0 -116.0125 0 -116.0125 0 -112.655 0 -76.75501 0 -95.86751 0 -109.2975 0 -109.2975 0 -105.94 0 -109.2975 0 -95.86751 0 -105.94 0 -105.94 0 -109.2975 0 -109.2975 0 -95.86751 0 -92.51001 0 -112.655 0 -57.90001 0 -56.66001 0 -57.90001 0 -57.28001 0 -57.90001 0 -59.14001 0 -61.00001 0 -59.76001 0 -59.14001 0 -92.51001 0 -99.22501 0 -76.75501 0 -119.37 0 -116.0125 0 -109.2975 0 -92.51001 0 -116.0125 0 -116.0125 0 -112.655 0 -58.52001 0 -112.655 0 -112.655 0 -116.0125 0 -116.0125 0 -116.0125 0 -116.0125 0 -112.655 0 -116.0125 0 -112.655 0 -109.2975 0 -109.2975 0 -112.655 0 -59.76001 0 -102.5825 0 -109.2975 0 -105.94 0 -99.22501 0 -102.5825 0 -58.52001 0 -95.86751 0 -61.00001 0 -99.22501 0 -99.22501 0 -99.22501 0 -92.51001 0 -57.90001 0 -92.51001 0 -56.66001 0 -61.00001 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -61.00001 0 -55.42001 0 -56.66001 0 -57.28001 0 -57.90001 0 -52.94001 0 -56.04001 0 -55.42001 0 -55.42001 0 -59.76001 0 -61.00001 0 -76.75501 0 -76.75501 0 -60.38001 0 -61.00001 0 -60.38001 0 -76.75501 0 -61.00001 0 -60.38001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -56.04001 0 -53.56001 0 -54.80001 0 -53.56001 0 -52.94001 0 -54.18001 0 -56.04001 0 -58.52001 0 -56.66001 0 -56.04001 0 -51.70001 0 -57.28001 0 -54.18001 0 -61.00001 0 -59.14001 0 -54.80001 0 -59.14001 0 -56.66001 0 -59.14001 0 -56.04001 0 -57.90001 0 -58.52001 0 -56.66001 0 -58.52001 0 -59.14001 0 -51.08001 0 -51.08001 0 -49.84001 0 -57.90001 0 -51.70001 0 -51.08001 0 -50.46001 0 -52.32001 0 -52.32001 0 -56.04001 0 -53.56001 0 -52.32001 0 -54.18001 0 -49.84001 0 -50.46001 0 -52.94001 0 -49.84001 0 -57.90001 0 -61.00001 0 -59.14001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -61.00001 0 -59.14001 0 -59.76001 0 -59.76001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.14001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.90001 0 -58.52001 0 -59.76001 0 -58.52001 0 -57.90001 0 -57.28001 0 -49.84001 0 -55.42001 0 -50.46001 0 -55.42001 0 -54.18001 0 -55.42001 0 -55.42001 0 -56.04001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.04001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -54.80001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -54.80001 0 -56.04001 0 -56.04001 0 -49.84001 0 -51.08001 0 -52.32001 0 -52.94001 0 -54.80001 0 -54.80001 0 -51.08001 0 -54.18001 0 -54.80001 0 -56.04001 0 -54.80001 0 -57.28001 0 -55.42001 0 -54.18001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.66001 0 -52.32001 0 -55.42001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.18001 0 -56.04001 0 -56.04001 0 -56.66001 0 -55.42001 0 -54.18001 0 -56.04001 0 -55.42001 0 -53.56001 0 -54.18001 0 -56.04001 0 -55.42001 0 -54.80001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -51.08001 0 -54.18001 0 -56.04001 0 -56.04001 0 -49.84001 0 -54.80001 0 -56.04001 0 -54.80001 0 -54.80001 0 -51.70001 0 -54.80001 0 -56.04001 0 -56.04001 0 -55.42001 0 -49.22001 0 -55.42001 0 -51.70001 0 -54.18001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -55.42001 0 -54.80001 0 -56.04001 0 -55.42001 0 -55.42001 0 -54.80001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -54.80001 0 -54.18001 0 -54.80001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.80001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -54.18001 0 -55.42001 0 -52.94001 0 -52.94001 0 -53.56001 0 -49.84001 0 -52.94001 0 -50.46001 0 -56.04001 0 -54.80001 0 -52.32001 0 -54.18001 0 -56.04001 0 -53.56001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -54.18001 0 -47.98001 0 -54.18001 0 -46.74001 0 -50.46001 0 -48.60001 0 -51.08001 0 -51.70001 0 -47.98001 0 -44.26001 0 -48.60001 0 -49.22001 0 -47.36001 0 -50.46001 0 -50.46001 0 -51.08001 0 -52.94001 0 -51.70001 0 -47.36001 0 -43.64001 0 -49.22001 0 -49.84001 0 -49.22001 0 -52.32001 0 -54.80001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -55.42001 0 -55.42001 0 -56.04001 0 -55.42001 0 -56.04001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -54.80001 0 -55.42001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.32001 0 -53.56001 0 -52.94001 0 -52.94001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -52.94001 0 -54.18001 0 -53.56001 0 -54.80001 0 -54.18001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -51.70001 0 -56.66001 0 -57.90001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -58.52001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -76.75501 0 -92.51001 0 -76.75501 0 -59.14001 0 -95.86751 0 -95.86751 0 -95.86751 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -102.5825 0 -102.5825 0 -99.22501 0 -99.22501 0 -92.51001 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -58.52001 0 -57.90001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -59.14001 0 -59.76001 0 -92.51001 0 -105.94 0 -116.0125 0 -76.75501 0 -99.22501 0 -99.22501 0 -109.2975 0 -126.085 0 -136.1575 0 -109.2975 0 -126.085 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -136.1575 0 -136.1575 0 -132.8 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -112.655 0 -92.51001 0 -105.94 0 -58.52001 0 -95.86751 0 -92.51001 0 -76.75501 0 -58.52001 0 -105.94 0 -95.86751 0 -76.75501 0 -59.76001 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -95.86751 0 -102.5825 0 -99.22501 0 -95.86751 0 -92.51001 0 -95.86751 0 -92.51001 0 -95.86751 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -61.00001 0 -61.00001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -60.38001 0 -57.28001 0 -55.42001 0 -54.80001 0 -51.08001 0 -58.52001 0 -57.90001 0 -57.90001 0 -56.04001 0 -57.28001 0 -58.52001 0 -58.52001 0 -57.90001 0 -58.52001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -50.46001 0 -54.18001 0 -52.94001 0 -56.66001 0 -52.94001 0 -52.94001 0 -54.18001 0 -54.18001 0 -56.04001 0 -58.52001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.28001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.28001 0 -49.84001 0 -56.66001 0 -59.14001 0 -57.28001 0 -58.52001 0 -59.14001 0 -58.52001 0 -59.76001 0 -57.90001 0 -57.90001 0 -57.90001 0 -59.14001 0 -58.52001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -58.52001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -76.75501 0 -92.51001 0 -61.00001 0 -60.38001 0 -56.66001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -51.08001 0 -55.42001 0 -55.42001 0 -56.66001 0 -60.38001 0 -59.76001 0 -60.38001 0 -57.90001 0 -56.66001 0 -56.04001 0 -55.42001 0 -54.18001 0 -52.94001 0 -55.42001 0 -54.80001 0 -56.04001 0 -95.86751 0 -109.2975 0 -119.37 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -122.7275 0 -122.7275 0 -119.37 0 -109.2975 0 -59.14001 0 -76.75501 0 -99.22501 0 -119.37 0 -119.37 0 -76.75501 0 -99.22501 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -59.14001 0 -60.38001 0 -59.14001 0 -61.00001 0 -57.90001 0 -60.38001 0 -57.28001 0 -60.38001 0 -56.66001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -57.90001 0 -54.18001 0 -55.42001 0 -56.04001 0 -54.80001 0 -54.18001 0 -50.46001 0 -52.94001 0 -50.46001 0 -53.56001 0 -51.70001 0 -56.04001 0 -56.04001 0 -56.66001 0 -57.90001 0 -59.76001 0 -57.90001 0 -55.42001 0 -56.04001 0 -60.38001 0 -61.00001 0 -56.04001 0 -56.66001 0 -61.00001 0 -51.08001 0 -53.56001 0 -58.52001 0 -52.94001 0 -49.84001 0 -53.56001 0 -50.46001 0 -52.94001 0 -55.42001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -57.90001 0 -58.52001 0 -58.52001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.04001 0 -52.32001 0 -55.42001 0 -47.98001 0 -44.88001 0 -49.22001 0 -47.36001 0 -49.22001 0 -53.56001 0 -54.80001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -53.56001 0 -52.94001 0 -54.80001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.70001 0 -52.32001 0 -53.56001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -47.36001 0 -48.60001 0 -48.60001 0 -49.22001 0 -48.60001 0 -46.74001 0 -49.84001 0 -50.46001 0 -50.46001 0 -52.32001 0 -52.32001 0 -51.08001 0 -51.08001 0 -52.32001 0 -51.08001 0 -51.70001 0 -52.32001 0 -54.18001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -52.32001 0 -52.32001 0 -53.56001 0 -53.56001 0 -52.94001 0 -51.70001 0 -53.56001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.94001 0 -52.94001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -52.94001 0 -54.18001 0 -54.18001 0 -53.56001 0 -51.08001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -52.94001 0 -51.70001 0 -50.46001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -53.56001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -52.94001 0 -53.56001 0 -53.56001 0 -52.94001 0 -53.56001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.94001 0 -51.70001 0 -52.94001 0 -52.32001 0 -51.70001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -50.46001 0 -47.98001 0 -51.70001 0 -51.70001 0 -49.22001 0 -49.84001 0 -47.98001 0 -47.36001 0 -50.46001 0 -51.70001 0 -52.32001 0 -51.70001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -47.98001 0 -51.08001 0 -52.32001 0 -51.70001 0 -51.08001 0 -51.70001 0 -49.84001 0 -52.32001 0 -46.74001 0 -48.60001 0 -48.60001 0 -46.12001 0 -47.98001 0 -47.36001 0 -45.50001 0 -46.12001 0 -44.88001 0 -48.60001 0 -50.46001 0 -47.98001 0 -50.46001 0 -49.22001 0 -47.36001 0 -50.46001 0 -47.36001 0 -48.60001 0 -46.74001 0 -50.46001 0 -44.88001 0 -47.98001 0 -47.36001 0 -47.36001 0 -44.88001 0 -47.98001 0 -46.74001 0 -41.78001 0 -45.50001 0 -43.64001 0 -42.40001 0 -44.88001 0 -43.02001 0 -43.02001 0 -43.02001 0 -46.74001 0 -44.26001 0 -41.78001 0 -45.50001 0 -46.12001 0 -45.50001 0 -42.40001 0 -41.16 0 -46.74001 0 -43.02001 0 -44.88001 0 -45.50001 0 -49.22001 0 -50.46001 0 -51.08001 0 -51.08001 0 -49.22001 0 -46.74001 0 -49.84001 0 -49.84001 0 -50.46001 0 -49.84001 0 -49.84001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -51.08001 0 -51.08001 0 -51.08001 0 -50.46001 0 -50.46001 0 -50.46001 0 -51.08001 0 -50.46001 0 -51.08001 0 -50.46001 0 -51.08001 0 -50.46001 0 -49.84001 0 -51.08001 0 -49.84001 0 -48.60001 0 -47.98001 0 -49.22001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.98001 0 -49.22001 0 -50.46001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -50.46001 0 -49.84001 0 -49.22001 0 -50.46001 0 -50.46001 0 -49.84001 0 -49.84001 0 -49.22001 0 -48.60001 0 -49.22001 0 -46.74001 0 -48.60001 0 -47.98001 0 -47.36001 0 -48.60001 0 -47.98001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -46.12001 0 -46.74001 0 -44.26001 0 -46.74001 0 -43.02001 0 -46.12001 0 -47.36001 0 -47.98001 0 -49.22001 0 -48.60001 0 -47.98001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -49.22001 0 -46.12001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.36001 0 -46.74001 0 -47.98001 0 -44.88001 0 -41.16 0 -41.78001 0 -43.02001 0 -43.02001 0 -46.74001 0 -46.74001 0 -47.36001 0 -49.22001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.98001 0 -47.36001 0 -46.74001 0 -46.12001 0 -46.12001 0 -47.36001 0 -46.74001 0 -45.50001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -44.88001 0 -46.12001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -45.50001 0 -45.50001 0 -44.26001 0 -45.50001 0 -44.88001 0 -46.12001 0 -45.50001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -45.50001 0 -44.26001 0 -45.50001 0 -45.50001 0 -46.12001 0 -44.88001 0 -44.88001 0 -45.50001 0 -45.50001 0 -44.88001 0 -43.02001 0 -43.02001 0 -40.54 0 -40.54 0 -41.78001 0 -43.02001 0 -40.54 0 -41.78001 0 -40.54 0 -43.64001 0 -44.26001 0 -43.64001 0 -44.26001 0 -44.26001 0 -45.50001 0 -47.36001 0 -47.98001 0 -49.84001 0 -50.46001 0 -51.70001 0 -54.18001 0 -55.42001 0 -54.80001 0 -56.66001 0 -57.28001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.76001 0 -60.38001 0 -59.76001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.76001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -56.66001 0 -55.42001 0 -57.90001 0 -57.90001 0 -57.28001 0 -55.42001 0 -56.66001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.76001 0 -60.38001 0 -76.75501 0 -95.86751 0 -102.5825 0 -112.655 0 -116.0125 0 -119.37 0 -122.7275 0 -112.655 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -119.37 0 -122.7275 0 -116.0125 0 -109.2975 0 -116.0125 0 -116.0125 0 -122.7275 0 -126.085 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -126.085 0 -122.7275 0 -119.37 0 -122.7275 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -116.0125 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -109.2975 0 -109.2975 0 -105.94 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -95.86751 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -99.22501 0 -102.5825 0 -102.5825 0 -102.5825 0 -105.94 0 -102.5825 0 -102.5825 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -105.94 0 -105.94 0 -116.0125 0 -129.4425 0 -139.515 0 -149.5875 0 -156.3025 0 -163.0175 0 -163.0175 0 -163.0175 0 -166.375 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -156.3025 0 -156.3025 0 -152.945 0 -149.5875 0 -146.23 0 -142.8725 0 -142.8725 0 -139.515 0 -136.1575 0 -136.1575 0 -136.1575 0 -139.515 0 -136.1575 0 -136.1575 0 -122.7275 0 -116.0125 0 -76.75501 0 -60.38001 0 -60.38001 0 -60.38001 0 -55.42001 0 -55.42001 0 -58.52001 0 -58.52001 0 -57.90001 0 -60.38001 0 -58.52001 0 -56.66001 0 -59.14001 0 -56.66001 0 -54.18001 0 -58.52001 0 -56.04001 0 -57.28001 0 -61.00001 0 -60.38001 0 -54.80001 0 -54.80001 0 -51.70001 0 -51.70001 0 -51.08001 0 -47.98001 0 -50.46001 0 -52.94001 0 -51.08001 0 -51.08001 0 -51.08001 0 -52.94001 0 -51.70001 0 -51.70001 0 -54.18001 0 -53.56001 0 -56.04001 0 -56.04001 0 -54.80001 0 -54.18001 0 -55.42001 0 -56.04001 0 -52.32001 0 -53.56001 0 -50.46001 0 -52.94001 0 -54.18001 0 -52.32001 0 -51.70001 0 -50.46001 0 -51.08001 0 -51.08001 0 -49.22001 0 -50.46001 0 -48.60001 0 -47.98001 0 -49.22001 0 -53.56001 0 -50.46001 0 -53.56001 0 -47.98001 0 -44.88001 0 -50.46001 0 -46.74001 0 -49.84001 0 -49.84001 0 -54.80001 0 -52.32001 0 -52.94001 0 -49.84001 0 -52.94001 0 -47.98001 0 -49.84001 0 -49.22001 0 -47.36001 0 -49.22001 0 -50.46001 0 -52.94001 0 -61.00001 0 -59.76001 0 -52.94001 0 -51.70001 0 -49.22001 0 -55.42001 0 -56.04001 0 -57.28001 0 -57.90001 0 -52.32001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.90001 0 -55.42001 0 -53.56001 0 -54.80001 0 -49.22001 0 -53.56001 0 -56.66001 0 -56.04001 0 -52.32001 0 -56.04001 0 -55.42001 0 -53.56001 0 -56.04001 0 -56.04001 0 -55.42001 0 -54.80001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.18001 0 -50.46001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -52.32001 0 -51.08001 0 -51.08001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.08001 0 -50.46001 0 -46.74001 0 -50.46001 0 -49.84001 0 -49.22001 0 -49.84001 0 -49.84001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -49.84001 0 -50.46001 0 -49.22001 0 -49.22001 0 -49.84001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -47.98001 0 -44.88001 0 -48.60001 0 -47.36001 0 -46.74001 0 -44.88001 0 -41.78001 0 -44.26001 0 -46.74001 0 -46.74001 0 -47.36001 0 -47.36001 0 -47.98001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.84001 0 -48.60001 0 -49.22001 0 -47.98001 0 -48.60001 0 -47.98001 0 -49.22001 0 -47.98001 0 -47.36001 0 -48.60001 0 -47.98001 0 -48.60001 0 -41.78001 0 -38.68 0 -46.12001 0 -46.74001 0 -47.36001 0 -46.74001 0 -47.36001 0 -47.36001 0 -46.74001 0 -47.36001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -46.74001 0 -47.36001 0 -46.74001 0 -47.36001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.12001 0 -44.26001 0 -41.78001 0 -41.78001 0 -44.26001 0 -43.64001 0 -44.26001 0 -44.26001 0 -44.26001 0 -44.88001 0 -44.26001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -46.12001 0 -42.40001 0 -46.74001 0 -42.40001 0 -41.78001 0 -42.40001 0 -39.3 0 -41.16 0 -43.02001 0 -41.78001 0 -41.16 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -41.16 0 -43.02001 0 -43.02001 0 -43.64001 0 -42.40001 0 -43.02001 0 -43.02001 0 -42.40001 0 -42.40001 0 -43.02001 0 -41.78001 0 -41.78001 0 -42.40001 0 -41.78001 0 -41.16 0 -42.40001 0 -42.40001 0 -41.78001 0 -41.16 0 -41.16 0 -41.16 0 -41.78001 0 -41.16 0 -41.16 0 -40.54 0 -41.16 0 -39.92 0 -40.54 0 -41.16 0 -40.54 0 -40.54 0 -41.16 0 -41.16 0 -41.78001 0 -41.16 0 -41.16 0 -41.16 0 -40.54 0 -41.78001 0 -41.78001 0 -41.16 0 -40.54 0 -40.54 0 -39.92 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.92 0 -39.92 0 -40.54 0 -39.92 0 -40.54 0 -39.92 0 -39.92 0 -39.92 0 -39.92 0 -39.92 0 -39.92 0 -39.92 0 -39.3 0 -39.3 0 -39.92 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -38.68 0 -38.68 0 -38.68 0 -38.06 0 -39.3 0 -38.68 0 -38.68 0 -39.3 0 -38.68 0 -38.68 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -38.68 0 -39.3 0 -39.3 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.06 0 -38.68 0 -38.68 0 -39.3 0 -38.06 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.92 0 -39.92 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.92 0 -40.54 0 -40.54 0 -40.54 0 -39.92 0 -39.92 0 -39.92 0 -39.92 0 -39.3 0 -39.3 0 -39.3 0 -38.68 0 -38.68 0 -38.06 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.92 0 -39.92 0 -40.54 0 -40.54 0 -40.54 0 -40.54 0 -41.16 0 -41.16 0 -40.54 0 -41.16 0 -41.78001 0 -41.78001 0 -42.40001 0 -43.02001 0 -44.26001 0 -44.26001 0 -44.88001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -44.88001 0 -44.88001 0 -44.88001 0 -44.88001 0 -44.88001 0 -44.88001 0 -44.26001 0 -44.26001 0 -43.64001 0 -43.64001 0 -43.02001 0 -43.02001 0 -42.40001 0 -43.02001 0 - -43.02001 0 -42.40001 0 -43.02001 0 -41.16 0 -41.16 0 -41.78001 0 -41.78001 0 -42.40001 0 -41.78001 0 -40.54 0 -40.54 0 -40.54 0 -40.54 0 -39.92 0 -39.92 0 -39.92 0 -40.54 0 -39.92 0 -43.02001 0 -43.02001 0 -42.40001 0 -42.40001 0 -41.78001 0 -41.78001 0 -41.78001 0 -41.78001 0 -41.78001 0 -41.78001 0 -42.40001 0 -42.40001 0 -44.88001 0 -50.46001 0 -47.98001 0 -46.12001 0 -44.26001 0 -43.64001 0 -43.02001 0 -43.02001 0 -43.64001 0 -43.64001 0 -43.64001 0 -44.26001 0 -44.26001 0 -43.64001 0 -43.64001 0 -43.64001 0 -43.64001 0 -42.40001 0 -43.02001 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -43.02001 0 -43.02001 0 -44.26001 0 -44.88001 0 -46.12001 0 -47.98001 0 -49.84001 0 -51.70001 0 -52.94001 0 -54.18001 0 -54.80001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.18001 0 -54.18001 0 -52.94001 0 -52.32001 0 -51.70001 0 -51.08001 0 -51.08001 0 -50.46001 0 -50.46001 0 -49.84001 0 -47.36001 0 -46.12001 0 -49.84001 0 -49.22001 0 -47.98001 0 -46.74001 0 -47.98001 0 -46.12001 0 -49.22001 0 -54.80001 0 -56.04001 0 -57.90001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -57.90001 0 -55.42001 0 -57.28001 0 -57.90001 0 -56.66001 0 -53.56001 0 -56.66001 0 -50.46001 0 -49.84001 0 -51.08001 0 -52.32001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -56.04001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.28001 0 -56.04001 0 -50.46001 0 -50.46001 0 -48.60001 0 -49.84001 0 -50.46001 0 -52.32001 0 -47.36001 0 -50.46001 0 -47.36001 0 -50.46001 0 -52.94001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.80001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -54.80001 0 -56.04001 0 -56.04001 0 -56.04001 0 -567.8556 0 -677.1421 0 -859.9681 0 -955.7341 0 -1007.97 0 -1068.912 0 -1095.03 0 -1095.03 0 -1086.324 0 -1077.618 0 -1042.794 0 -981.8521 0 -920.9101 0 -877.3801 0 -833.8501 0 -790.3201 0 -746.7901 0 -703.2601 0 -677.1421 0 -659.7301 0 -651.0241 0 -703.2601 0 -764.2021 0 -842.5561 0 -938.3221 0 -1025.382 0 -1060.206 0 -1119.341 0 -1131.496 0 -1131.496 0 -1095.03 0 -1060.206 0 -1016.676 0 -955.7341 0 -903.4981 0 -868.6741 0 -833.8501 0 -799.0261 0 -772.9081 0 -746.7901 0 -729.3781 0 -703.2601 0 -677.1421 0 -659.7301 0 -642.3181 0 -616.2001 0 -604.114 0 -592.0278 0 -579.9417 0 -561.8125 0 -543.6833 0 -525.5541 0 -501.3819 0 -483.2527 0 -471.1666 0 -453.0374 0 -434.9082 0 -428.8652 0 -422.8221 0 -410.736 0 -398.6498 0 -392.6068 0 -380.5207 0 -368.4345 0 -362.3915 0 -356.3484 0 -350.3053 0 -338.2192 0 -332.1762 0 -320.09 0 -315.4693 0 -287.7447 0 -269.2616 0 -246.1577 0 -227.6746 0 -227.6746 0 -232.2954 0 -204.5708 0 -246.1577 0 -204.5708 0 -176.4475 0 -163.0175 0 -213.8123 0 -218.4331 0 -218.4331 0 -209.1916 0 -209.1916 0 -204.5708 0 -179.805 0 -189.8775 0 -183.1625 0 -193.235 0 -186.52 0 -183.1625 0 -183.1625 0 -173.09 0 -159.66 0 -146.23 0 -142.8725 0 -139.515 0 -132.8 0 -122.7275 0 -109.2975 0 -129.4425 0 -112.655 0 -116.0125 0 -109.2975 0 -166.375 0 -166.375 0 -163.0175 0 -166.375 0 -163.0175 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -159.66 0 -169.7325 0 -183.1625 0 -189.8775 0 -179.805 0 -179.805 0 -169.7325 0 -166.375 0 -142.8725 0 -159.66 0 -156.3025 0 -152.945 0 -152.945 0 -136.1575 0 -112.655 0 -410.736 0 -1007.97 0 -1362.445 0 -1581.239 0 -1751.413 0 -1860.81 0 -2166.984 0 -2354.894 0 -2542.803 0 -2730.713 0 -2777.69 0 -2824.667 0 -2683.735 0 -2683.735 0 -2730.713 0 -3153.509 0 -3435.373 0 -4093.056 0 -4609.807 0 -5032.603 0 -5361.444 0 -5784.24 0 -5972.15 0 -6207.036 0 -6394.946 0 -6535.878 0 -6488.901 0 -6441.923 0 -6441.923 0 -6160.059 0 -6113.082 0 -5878.195 0 -5596.331 0 -5267.489 0 -4938.648 0 -4515.852 0 -4093.056 0 -3576.305 0 -3012.577 0 -2260.939 0 -2073.03 0 -1872.965 0 -1824.344 0 -1714.947 0 -1714.947 0 -1654.171 0 -1605.55 0 -1544.774 0 -1459.687 0 -1386.756 0 -1301.669 0 -1240.893 0 -1180.117 0 -1131.496 0 -1077.618 0 -1051.5 0 -1007.97 0 -973.1461 0 -877.3801 0 -886.0861 0 -807.7321 0 -851.2621 0 -816.4381 0 -799.0261 0 -799.0261 0 -772.9081 0 -746.7901 0 -720.6721 0 -703.2601 0 -685.8481 0 -659.7301 0 -651.0241 0 -624.9061 0 -604.114 0 -598.0709 0 -585.9848 0 -579.9417 0 -567.8556 0 -555.7695 0 -549.7264 0 -537.6403 0 -525.5541 0 -513.468 0 -507.425 0 -495.3388 0 -489.2958 0 -477.2096 0 -471.1666 0 -459.0805 0 -446.9943 0 -440.9513 0 -434.9082 0 -422.8221 0 -416.779 0 -410.736 0 -404.6929 0 -398.6498 0 -392.6068 0 -386.5637 0 -380.5207 0 -374.4776 0 -368.4345 0 -362.3915 0 -356.3484 0 -350.3053 0 -344.2623 0 -264.6408 0 -332.1762 0 -320.09 0 -273.8823 0 -292.3654 0 -278.5031 0 -283.1239 0 -269.2616 0 -273.8823 0 -236.9162 0 -236.9162 0 -241.537 0 -241.537 0 -260.02 0 -273.8823 0 -269.2616 0 -269.2616 0 -264.6408 0 -264.6408 0 -260.02 0 -255.3993 0 -255.3993 0 -246.1577 0 -209.1916 0 -218.4331 0 -227.6746 0 -213.8123 0 -227.6746 0 -232.2954 0 -218.4331 0 -223.0539 0 -218.4331 0 -218.4331 0 -213.8123 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -193.235 0 -189.8775 0 -189.8775 0 -186.52 0 -183.1625 0 -179.805 0 -163.0175 0 -163.0175 0 -169.7325 0 -149.5875 0 -156.3025 0 -139.515 0 -166.375 0 -159.66 0 -166.375 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -152.945 0 -173.09 0 -166.375 0 -126.085 0 -152.945 0 -159.66 0 -152.945 0 -129.4425 0 -126.085 0 -129.4425 0 -119.37 0 -126.085 0 -122.7275 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -119.37 0 -116.0125 0 -119.37 0 -116.0125 0 -112.655 0 -116.0125 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -59.76001 0 -102.5825 0 -99.22501 0 -61.00001 0 -54.18001 0 -54.18001 0 -52.94001 0 -51.70001 0 -51.70001 0 -52.32001 0 -55.42001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -58.52001 0 -59.14001 0 -55.42001 0 -59.76001 0 -53.56001 0 -59.14001 0 -58.52001 0 -51.08001 0 -50.46001 0 -57.28001 0 -51.70001 0 -50.46001 0 -53.56001 0 -56.66001 0 -56.04001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -56.04001 0 -54.18001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -52.94001 0 -51.08001 0 -49.84001 0 -50.46001 0 -51.70001 0 -49.22001 0 -51.70001 0 -51.70001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.08001 0 -49.84001 0 -49.84001 0 -49.22001 0 -48.60001 0 -46.12001 0 -49.84001 0 -49.84001 0 -50.46001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -48.60001 0 -47.98001 0 -49.22001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.98001 0 -46.74001 0 -44.88001 0 -47.98001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -46.12001 0 -45.50001 0 -44.88001 0 -43.02001 0 -41.16 0 -42.40001 0 -42.40001 0 -41.16 0 -41.16 0 -42.40001 0 -43.02001 0 -43.02001 0 -41.78001 0 -44.88001 0 -44.26001 0 -44.26001 0 -44.88001 0 -44.26001 0 -43.64001 0 -44.26001 0 -44.26001 0 -43.64001 0 -43.02001 0 -44.26001 0 -42.40001 0 -42.40001 0 -43.02001 0 -39.92 0 -39.3 0 -38.06 0 -39.92 0 -39.92 0 -39.3 0 -33.1 0 -33.72 0 -36.2 0 -36.2 0 -35.58 0 -36.2 0 -36.2 0 -34.96 0 -34.96 0 -35.58 0 -35.58 0 -34.34 0 -35.58 0 -38.06 0 -35.58 0 -36.2 0 -38.06 0 -36.2 0 -38.68 0 -37.44 0 -38.06 0 -34.96 0 -34.96 0 -38.68 0 -39.3 0 -39.92 0 -41.16 0 -38.06 0 -40.54 0 -41.16 0 -41.16 0 -41.16 0 -41.16 0 -41.16 0 -41.16 0 -41.16 0 -39.92 0 -39.3 0 -40.54 0 -36.82 0 -39.3 0 -37.44 0 -36.82 0 -37.44 0 -36.82 0 -36.82 0 -32.48 0 -34.96 0 -33.72 0 -35.58 0 -36.2 0 -38.06 0 -38.68 0 -37.44 0 -35.58 0 -33.72 0 - -32.48 0 -32.48 0 -32.48 0 -34.34 0 -30 0 -28.8 0 -29.4 0 -30.62 0 -28.8 0 -30 0 -29.4 0 -35.58 0 -34.34 0 -34.34 0 -28.2 0 -29.4 0 -32.48 0 -30.62 0 -31.24 0 -31.86 0 -31.24 0 -30.62 0 -30 0 -30.62 0 - -31.86 0 -31.86 0 -30.62 0 -31.24 0 -28.8 0 -33.1 0 -33.1 0 -34.34 0 -37.44 0 -36.82 0 -34.96 0 -35.58 0 -33.72 0 -35.58 0 -36.82 0 -36.2 0 -37.44 0 -33.72 0 -30.62 0 -32.48 0 -36.2 0 -35.58 0 -33.72 0 -31.86 0 -33.72 0 -39.92 0 -39.92 0 -40.54 0 -40.54 0 -40.54 0 -39.92 0 -37.44 0 -34.34 0 -32.48 0 -32.48 0 -31.24 0 -33.1 0 -34.34 0 -36.2 0 -36.82 0 -36.82 0 -36.82 0 -37.44 0 -38.68 0 -39.3 0 -38.06 0 -38.06 0 -37.44 0 -36.82 0 -36.2 0 -34.96 0 -33.72 0 -32.48 0 -32.48 0 -31.24 0 -30.62 0 -31.86 0 -35.58 0 -36.82 0 -37.44 0 -37.44 0 -37.44 0 -37.44 0 -37.44 0 -36.82 0 -35.58 0 -35.58 0 -36.2 0 -35.58 0 -35.58 0 -35.58 0 -36.2 0 -36.2 0 -35.58 0 -37.44 0 -37.44 0 -37.44 0 -38.06 0 -37.44 0 -35.58 0 -36.2 0 -36.2 0 -36.82 0 -36.82 0 -36.82 0 -37.44 0 -37.44 0 -31.86 0 -39.3 0 -37.44 0 -38.68 0 -41.16 0 -43.64001 0 -41.78001 0 -38.06 0 -43.64001 0 -43.64001 0 -44.26001 0 -43.64001 0 -43.02001 0 -43.02001 0 -44.88001 0 -46.12001 0 -46.74001 0 -46.74001 0 -47.98001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -49.22001 0 -59.76001 0 -95.86751 0 -99.22501 0 -102.5825 0 -56.66001 0 -132.8 0 -189.8775 0 -241.537 0 -296.9862 0 -332.1762 0 -471.1666 0 -694.5541 0 -868.6741 0 -1095.03 0 -1763.568 0 -6347.969 0 -9307.542 0 -11656.41 0 -13552.34 0 -15442.94 0 -16843.39 0 -17613.64 0 -19014.09 0 -19434.22 0 -19644.29 0 -19364.2 0 -19434.22 0 -17893.73 0 -17543.62 0 -16283.21 0 -14462.63 0 -13482.32 0 -13062.18 0 -13062.18 0 -12572.02 0 -12992.16 0 -12572.02 0 -13622.36 0 -13972.47 0 -14392.61 0 -15162.85 0 -15022.81 0 -16213.19 0 -16563.3 0 -17123.48 0 -17263.53 0 -17473.59 0 -17263.53 0 -17193.5 0 -16563.3 0 -16773.37 0 -15793.06 0 -15863.08 0 -15863.08 0 -15372.92 0 -14952.79 0 -14532.65 0 -15302.9 0 -15092.83 0 -15232.88 0 -15092.83 0 -15512.97 0 -15512.97 0 -15582.99 0 -16003.12 0 -16283.21 0 -16213.19 0 -16073.14 0 -16073.14 0 -15933.1 0 -15582.99 0 -15302.9 0 -13762.41 0 -12126.18 0 -10810.82 0 -9448.474 0 -8743.813 0 -7945.198 0 -7475.425 0 -7005.651 0 -6770.765 0 -6441.923 0 -6394.946 0 -6113.082 0 -5737.263 0 -5643.308 0 -5408.422 0 -5126.557 0 -4938.648 0 -4750.739 0 -4515.852 0 -4421.897 0 -4187.01 0 -3952.124 0 -3764.214 0 -3670.26 0 -3576.305 0 -3482.35 0 -3482.35 0 -3388.395 0 -3247.463 0 -3294.441 0 -3200.486 0 -3153.509 0 -2965.599 0 -2824.667 0 -2589.78 0 -2307.916 0 -2307.916 0 -1979.075 0 -1848.655 0 -1848.655 0 -1872.965 0 -1860.81 0 -1824.344 0 -1787.878 0 -1751.413 0 -1739.257 0 -1690.637 0 -1654.171 0 -1629.86 0 -1617.705 0 -1581.239 0 -1544.774 0 -1532.618 0 -1374.6 0 -1350.29 0 -1362.445 0 -1362.445 0 -1301.669 0 -1265.203 0 -1228.738 0 -1167.962 0 -1204.427 0 -1155.806 0 -1119.341 0 -1155.806 0 -1265.203 0 -1240.893 0 -1228.738 0 -1228.738 0 -1216.582 0 -1107.185 0 -1180.117 0 -1180.117 0 -1180.117 0 -1155.806 0 -1143.651 0 -1131.496 0 -981.8521 0 -981.8521 0 -955.7341 0 -990.5581 0 -981.8521 0 -973.1461 0 -990.5581 0 -955.7341 0 -938.3221 0 -1060.206 0 -1077.618 0 -1077.618 0 -1095.03 0 -1131.496 0 -1131.496 0 -1107.185 0 -1107.185 0 -1068.912 0 -1060.206 0 -1051.5 0 -1051.5 0 -1042.794 0 -1034.088 0 -1025.382 0 -1016.676 0 -1007.97 0 -999.2641 0 -990.5581 0 -973.1461 0 -964.4401 0 -938.3221 0 -929.6161 0 -920.9101 0 -903.4981 0 -894.7921 0 -886.0861 0 -886.0861 0 -877.3801 0 -877.3801 0 -868.6741 0 -851.2621 0 -859.9681 0 -842.5561 0 -825.1441 0 -825.1441 0 -825.1441 0 -816.4381 0 -799.0261 0 -799.0261 0 -790.3201 0 -781.6141 0 -764.2021 0 -755.4961 0 -755.4961 0 -755.4961 0 -738.0841 0 -720.6721 0 -711.9661 0 -703.2601 0 -703.2601 0 -703.2601 0 -694.5541 0 -694.5541 0 -677.1421 0 -668.4361 0 -668.4361 0 -659.7301 0 -659.7301 0 -651.0241 0 -642.3181 0 -633.6121 0 -642.3181 0 -633.6121 0 -624.9061 0 -585.9848 0 -525.5541 0 -585.9848 0 -579.9417 0 -585.9848 0 -537.6403 0 -549.7264 0 -543.6833 0 -537.6403 0 -573.8986 0 -567.8556 0 -567.8556 0 -567.8556 0 -561.8125 0 -561.8125 0 -561.8125 0 -561.8125 0 -549.7264 0 -549.7264 0 -549.7264 0 -543.6833 0 -543.6833 0 -531.5972 0 -519.5111 0 -519.5111 0 -519.5111 0 -513.468 0 -513.468 0 -507.425 0 -501.3819 0 -465.1235 0 -489.2958 0 -489.2958 0 -489.2958 0 -483.2527 0 -483.2527 0 -477.2096 0 -477.2096 0 -471.1666 0 -471.1666 0 -465.1235 0 -465.1235 0 -471.1666 0 -465.1235 0 -465.1235 0 -459.0805 0 -459.0805 0 -453.0374 0 -453.0374 0 -440.9513 0 -440.9513 0 -440.9513 0 -434.9082 0 -434.9082 0 -428.8652 0 -422.8221 0 -422.8221 0 -416.779 0 -416.779 0 -416.779 0 -410.736 0 -416.779 0 -410.736 0 -410.736 0 -404.6929 0 -404.6929 0 -404.6929 0 -398.6498 0 -398.6498 0 -398.6498 0 -398.6498 0 - -392.6068 0 -386.5637 0 -386.5637 0 -380.5207 0 -380.5207 0 -368.4345 0 -368.4345 0 -374.4776 0 -362.3915 0 -440.9513 0 -446.9943 0 -428.8652 0 -416.779 0 -398.6498 0 -392.6068 0 -386.5637 0 -380.5207 0 -374.4776 0 -368.4345 0 -368.4345 0 -362.3915 0 -356.3484 0 -356.3484 0 -350.3053 0 -350.3053 0 -344.2623 0 -344.2623 0 -344.2623 0 -338.2192 0 -338.2192 0 -332.1762 0 -332.1762 0 -326.1331 0 -320.09 0 -315.4693 0 -315.4693 0 -315.4693 0 -315.4693 0 -315.4693 0 -320.09 0 -315.4693 0 -315.4693 0 -310.8485 0 -306.2277 0 -310.8485 0 -310.8485 0 -310.8485 0 -310.8485 0 -306.2277 0 -306.2277 0 -306.2277 0 -306.2277 0 -306.2277 0 -301.607 0 -296.9862 0 -296.9862 0 -296.9862 0 -301.607 0 -301.607 0 -296.9862 0 -301.607 0 -301.607 0 -301.607 0 -301.607 0 -301.607 0 -301.607 0 -306.2277 0 -306.2277 0 -306.2277 0 -310.8485 0 -332.1762 0 -356.3484 0 -392.6068 0 -428.8652 0 -471.1666 0 -495.3388 0 -501.3819 0 -507.425 0 -513.468 0 -495.3388 0 -489.2958 0 -477.2096 0 -471.1666 0 -459.0805 0 -453.0374 0 -440.9513 0 -428.8652 0 -422.8221 0 -416.779 0 -404.6929 0 -398.6498 0 -392.6068 0 -392.6068 0 -380.5207 0 -374.4776 0 -368.4345 0 -356.3484 0 -356.3484 0 -350.3053 0 -338.2192 0 -338.2192 0 -332.1762 0 -320.09 0 -315.4693 0 -310.8485 0 -306.2277 0 -301.607 0 -301.607 0 -296.9862 0 -296.9862 0 -292.3654 0 -287.7447 0 -283.1239 0 -283.1239 0 -283.1239 0 -283.1239 0 -278.5031 0 -278.5031 0 -273.8823 0 -273.8823 0 -269.2616 0 -269.2616 0 -264.6408 0 -260.02 0 -260.02 0 -255.3993 0 -250.7785 0 -250.7785 0 -250.7785 0 -250.7785 0 -246.1577 0 -246.1577 0 -241.537 0 -241.537 0 -241.537 0 -241.537 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -232.2954 0 -236.9162 0 -232.2954 0 -232.2954 0 -232.2954 0 -223.0539 0 -227.6746 0 -227.6746 0 -223.0539 0 -218.4331 0 -218.4331 0 -218.4331 0 -227.6746 0 -223.0539 0 -204.5708 0 -246.1577 0 -250.7785 0 -246.1577 0 -241.537 0 - -227.6746 0 -218.4331 0 -218.4331 0 -213.8123 0 -218.4331 0 -213.8123 0 -213.8123 0 -196.5925 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -196.5925 0 -186.52 0 - -176.4475 0 -193.235 0 -193.235 0 -173.09 0 -169.7325 0 -173.09 0 -193.235 0 -193.235 0 -166.375 0 -189.8775 0 -189.8775 0 -193.235 0 -196.5925 0 -193.235 0 -193.235 0 -189.8775 0 -193.235 0 -193.235 0 -193.235 0 -189.8775 0 -189.8775 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -183.1625 0 -183.1625 0 -186.52 0 -186.52 0 -186.52 0 -193.235 0 -196.5925 0 -199.95 0 -199.95 0 -204.5708 0 -204.5708 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -189.8775 0 -179.805 0 -169.7325 0 -173.09 0 -166.375 0 -183.1625 0 -179.805 0 -179.805 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -186.52 0 -196.5925 0 -204.5708 0 -209.1916 0 -209.1916 0 -213.8123 0 -218.4331 0 -218.4331 0 -223.0539 0 -213.8123 0 -213.8123 0 -209.1916 0 -199.95 0 -199.95 0 -196.5925 0 -189.8775 0 -189.8775 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -183.1625 0 -183.1625 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -173.09 0 -173.09 0 -173.09 0 -166.375 0 -169.7325 0 -169.7325 0 -169.7325 0 -156.3025 0 -166.375 0 -166.375 0 -169.7325 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -176.4475 0 -179.805 0 -183.1625 0 -186.52 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -183.1625 0 -183.1625 0 -186.52 0 -179.805 0 -183.1625 0 -186.52 0 -189.8775 0 -209.1916 0 -227.6746 0 -260.02 0 -283.1239 0 -310.8485 0 -320.09 0 -332.1762 0 -344.2623 0 -338.2192 0 -344.2623 0 -344.2623 0 -338.2192 0 -332.1762 0 -326.1331 0 -326.1331 0 -320.09 0 -310.8485 0 -306.2277 0 -306.2277 0 -301.607 0 -296.9862 0 -287.7447 0 -283.1239 0 -278.5031 0 -269.2616 0 -269.2616 0 -260.02 0 -260.02 0 -255.3993 0 -255.3993 0 -264.6408 0 -273.8823 0 -296.9862 0 -332.1762 0 -380.5207 0 -434.9082 0 -471.1666 0 -495.3388 0 -519.5111 0 -525.5541 0 -531.5972 0 -525.5541 0 -513.468 0 -513.468 0 -513.468 0 -525.5541 0 -549.7264 0 -573.8986 0 -592.0278 0 -598.0709 0 -598.0709 0 -598.0709 0 -585.9848 0 -579.9417 0 -561.8125 0 -543.6833 0 -531.5972 0 -525.5541 0 -519.5111 0 -501.3819 0 -495.3388 0 -483.2527 0 -477.2096 0 -471.1666 0 -453.0374 0 -446.9943 0 -440.9513 0 -428.8652 0 -416.779 0 -410.736 0 -404.6929 0 -392.6068 0 -386.5637 0 -374.4776 0 -362.3915 0 -356.3484 0 -356.3484 0 -350.3053 0 -344.2623 0 -338.2192 0 -332.1762 0 -326.1331 0 -320.09 0 -315.4693 0 -315.4693 0 -310.8485 0 -310.8485 0 -306.2277 0 -301.607 0 -296.9862 0 -296.9862 0 -287.7447 0 -283.1239 0 -283.1239 0 -283.1239 0 -278.5031 0 -273.8823 0 -273.8823 0 -273.8823 0 -264.6408 0 -264.6408 0 -264.6408 0 -260.02 0 -260.02 0 -260.02 0 -260.02 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -246.1577 0 -241.537 0 -241.537 0 -236.9162 0 -213.8123 0 -223.0539 0 -223.0539 0 -223.0539 0 -223.0539 0 -223.0539 0 -218.4331 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -199.95 0 -204.5708 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -189.8775 0 -189.8775 0 -186.52 0 -183.1625 0 -183.1625 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -176.4475 0 -176.4475 0 -179.805 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -173.09 0 -173.09 0 -169.7325 0 -169.7325 0 -166.375 0 -163.0175 0 -166.375 0 -163.0175 0 -136.1575 0 -159.66 0 -159.66 0 -159.66 0 -149.5875 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -156.3025 0 -159.66 0 -156.3025 0 -156.3025 0 -156.3025 0 -159.66 0 -156.3025 0 -159.66 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -149.5875 0 -146.23 0 -149.5875 0 -146.23 0 -149.5875 0 -149.5875 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -136.1575 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -126.085 0 -122.7275 0 -126.085 0 -126.085 0 -122.7275 0 -92.51001 0 -112.655 0 -126.085 0 -122.7275 0 -119.37 0 -129.4425 0 -136.1575 0 -139.515 0 -136.1575 0 -142.8725 0 -112.655 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -149.5875 0 -149.5875 0 -152.945 0 -152.945 0 -152.945 0 -166.375 0 -176.4475 0 -189.8775 0 -196.5925 0 -199.95 0 -204.5708 0 -209.1916 0 -218.4331 0 -236.9162 0 -250.7785 0 -273.8823 0 -296.9862 0 -315.4693 0 -338.2192 0 -362.3915 0 -398.6498 0 -446.9943 0 -465.1235 0 -471.1666 0 -471.1666 0 -471.1666 0 -465.1235 0 -453.0374 0 -440.9513 0 -428.8652 0 -422.8221 0 -416.779 0 -422.8221 0 -422.8221 0 -440.9513 0 -446.9943 0 -453.0374 0 -459.0805 0 -453.0374 0 -465.1235 0 -465.1235 0 - -471.1666 0 -477.2096 0 -465.1235 0 -465.1235 0 -453.0374 0 -440.9513 0 -434.9082 0 -410.736 0 -404.6929 0 -392.6068 0 -374.4776 0 -368.4345 0 -356.3484 0 -344.2623 0 -332.1762 0 -332.1762 0 -320.09 0 -315.4693 0 -310.8485 0 -301.607 0 -301.607 0 -292.3654 0 -287.7447 0 -283.1239 0 -278.5031 0 -273.8823 0 -273.8823 0 -269.2616 0 -264.6408 0 -269.2616 0 -264.6408 0 -264.6408 0 -264.6408 0 -264.6408 0 -260.02 0 -260.02 0 -260.02 0 -255.3993 0 -255.3993 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -246.1577 0 -241.537 0 -223.0539 0 -232.2954 0 -236.9162 0 -227.6746 0 -227.6746 0 -189.8775 0 -218.4331 0 -209.1916 0 -209.1916 0 -209.1916 0 -204.5708 0 -209.1916 0 -209.1916 0 -209.1916 0 -218.4331 0 -218.4331 0 -227.6746 0 -227.6746 0 -232.2954 0 -236.9162 0 -241.537 0 -246.1577 0 -236.9162 0 -199.95 0 -183.1625 0 -183.1625 0 -179.805 0 -189.8775 0 -173.09 0 -179.805 0 -169.7325 0 -176.4475 0 -159.66 0 -176.4475 0 -209.1916 0 -193.235 0 -169.7325 0 -183.1625 0 -169.7325 0 -163.0175 0 -179.805 0 -189.8775 0 -189.8775 0 -189.8775 0 -186.52 0 -166.375 0 -166.375 0 -166.375 0 -149.5875 0 -152.945 0 -166.375 0 -163.0175 0 -142.8725 0 -136.1575 0 -122.7275 0 -136.1575 0 -136.1575 0 -132.8 0 -139.515 0 -132.8 0 -159.66 0 -159.66 0 -159.66 0 -156.3025 0 -159.66 0 -159.66 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -119.37 0 -126.085 0 -119.37 0 -122.7275 0 -119.37 0 -119.37 0 -122.7275 0 -122.7275 0 -122.7275 0 -109.2975 0 -105.94 0 -132.8 0 -126.085 0 -116.0125 0 -119.37 0 -99.22501 0 -105.94 0 -109.2975 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -122.7275 0 -109.2975 0 -119.37 0 -119.37 0 -116.0125 0 -95.86751 0 -102.5825 0 -58.52001 0 -59.76001 0 -60.38001 0 -61.00001 0 -60.38001 0 -57.90001 0 -105.94 0 -105.94 0 -105.94 0 -102.5825 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -102.5825 0 -102.5825 0 -102.5825 0 -105.94 0 -102.5825 0 -99.22501 0 -99.22501 0 -61.00001 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -136.1575 0 -139.515 0 -173.09 0 -223.0539 0 -209.1916 0 -193.235 0 -189.8775 0 -193.235 0 -186.52 0 -166.375 0 -176.4475 0 -179.805 0 -176.4475 0 -179.805 0 -176.4475 0 -173.09 0 -173.09 0 -173.09 0 -169.7325 0 -169.7325 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -169.7325 0 -169.7325 0 -166.375 0 -166.375 0 -163.0175 0 -163.0175 0 -159.66 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -152.945 0 -152.945 0 -159.66 0 -163.0175 0 -176.4475 0 -209.1916 0 -260.02 0 -320.09 0 -380.5207 0 -416.779 0 -453.0374 0 -471.1666 0 -483.2527 0 -483.2527 0 -489.2958 0 -489.2958 0 -489.2958 0 -495.3388 0 -501.3819 0 -519.5111 0 -537.6403 0 -567.8556 0 -598.0709 0 -610.157 0 -616.2001 0 -616.2001 0 -610.157 0 -592.0278 0 -579.9417 0 -561.8125 0 -549.7264 0 -531.5972 0 -519.5111 0 -507.425 0 -501.3819 0 -489.2958 0 -477.2096 0 -471.1666 0 -471.1666 0 -459.0805 0 -453.0374 0 -446.9943 0 -440.9513 0 -440.9513 0 -428.8652 0 -422.8221 0 -416.779 0 -410.736 0 -404.6929 0 -404.6929 0 -398.6498 0 -392.6068 0 -386.5637 0 -386.5637 0 -380.5207 0 -380.5207 0 -368.4345 0 -368.4345 0 -362.3915 0 -356.3484 0 -350.3053 0 -344.2623 0 -338.2192 0 -338.2192 0 -326.1331 0 -310.8485 0 -301.607 0 -296.9862 0 -306.2277 0 -306.2277 0 -306.2277 0 -296.9862 0 -301.607 0 -301.607 0 -296.9862 0 -292.3654 0 -292.3654 0 -292.3654 0 -292.3654 0 -287.7447 0 -287.7447 0 -287.7447 0 -287.7447 0 -283.1239 0 -283.1239 0 -278.5031 0 -269.2616 0 -283.1239 0 -296.9862 0 -296.9862 0 -292.3654 0 -269.2616 0 -269.2616 0 -287.7447 0 -283.1239 0 -283.1239 0 -278.5031 0 -278.5031 0 -273.8823 0 -269.2616 0 -269.2616 0 -264.6408 0 -264.6408 0 -264.6408 0 -260.02 0 -260.02 0 -255.3993 0 -255.3993 0 -236.9162 0 -273.8823 0 -283.1239 0 -292.3654 0 -296.9862 0 -296.9862 0 -296.9862 0 -296.9862 0 -310.8485 0 -356.3484 0 -525.5541 0 -677.1421 0 -755.4961 0 -842.5561 0 -842.5561 0 -851.2621 0 -842.5561 0 -807.7321 0 -772.9081 0 -738.0841 0 -703.2601 0 -659.7301 0 -616.2001 0 -598.0709 0 -573.8986 0 -549.7264 0 -531.5972 0 -513.468 0 -495.3388 0 -477.2096 0 -465.1235 0 -453.0374 0 -434.9082 0 -422.8221 0 -410.736 0 -392.6068 0 -386.5637 0 -380.5207 0 -368.4345 0 -356.3484 0 -350.3053 0 -344.2623 0 -332.1762 0 -326.1331 0 -320.09 0 -315.4693 0 -306.2277 0 -306.2277 0 -301.607 0 -296.9862 0 -292.3654 0 -287.7447 0 -287.7447 0 -283.1239 0 -283.1239 0 -278.5031 0 -278.5031 0 -278.5031 0 -264.6408 0 -227.6746 0 -260.02 0 -260.02 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -246.1577 0 -246.1577 0 -246.1577 0 -241.537 0 -246.1577 0 -246.1577 0 -250.7785 0 -255.3993 0 -255.3993 0 -260.02 0 -264.6408 0 -264.6408 0 -250.7785 0 -264.6408 0 -264.6408 0 -255.3993 0 -260.02 0 -255.3993 0 -250.7785 0 -250.7785 0 -246.1577 0 -246.1577 0 -241.537 0 -241.537 0 -246.1577 0 -246.1577 0 -250.7785 0 -250.7785 0 -250.7785 0 -250.7785 0 -246.1577 0 -246.1577 0 -241.537 0 -236.9162 0 -232.2954 0 -227.6746 0 -223.0539 0 -223.0539 0 -218.4331 0 -218.4331 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -209.1916 0 -213.8123 0 -213.8123 0 -213.8123 0 -264.6408 0 -278.5031 0 -283.1239 0 -292.3654 0 -296.9862 0 -296.9862 0 -292.3654 0 -287.7447 0 -283.1239 0 -283.1239 0 -283.1239 0 -283.1239 0 -292.3654 0 -296.9862 0 -301.607 0 -306.2277 0 -315.4693 0 -320.09 0 -332.1762 0 -344.2623 0 -362.3915 0 -374.4776 0 -386.5637 0 -392.6068 0 -398.6498 0 -404.6929 0 -416.779 0 -422.8221 0 -434.9082 0 -440.9513 0 -453.0374 0 -465.1235 0 -477.2096 0 -495.3388 0 -501.3819 0 -525.5541 0 -537.6403 0 -537.6403 0 -537.6403 0 -537.6403 0 -537.6403 0 -537.6403 0 -531.5972 0 -531.5972 0 -525.5541 0 -525.5541 0 -525.5541 0 -519.5111 0 -525.5541 0 -525.5541 0 -531.5972 0 -537.6403 0 -543.6833 0 -549.7264 0 -555.7695 0 -561.8125 0 -561.8125 0 -561.8125 0 -561.8125 0 -561.8125 0 -561.8125 0 -561.8125 0 -549.7264 0 -543.6833 0 -543.6833 0 -537.6403 0 -525.5541 0 -513.468 0 -501.3819 0 -489.2958 0 -483.2527 0 -471.1666 0 -459.0805 0 -446.9943 0 -446.9943 0 -434.9082 0 -422.8221 0 -422.8221 0 -416.779 0 -410.736 0 -404.6929 0 -392.6068 0 -386.5637 0 -386.5637 0 -380.5207 0 -374.4776 0 -368.4345 0 -362.3915 0 -356.3484 0 -350.3053 0 -344.2623 0 -344.2623 0 -338.2192 0 -338.2192 0 -338.2192 0 -332.1762 0 -332.1762 0 -326.1331 0 -326.1331 0 -320.09 0 -326.1331 0 -315.4693 0 -315.4693 0 -292.3654 0 -306.2277 0 -287.7447 0 -296.9862 0 -269.2616 0 -287.7447 0 -269.2616 0 -292.3654 0 -326.1331 0 -315.4693 0 -278.5031 0 -264.6408 0 -283.1239 0 -296.9862 0 -332.1762 0 -332.1762 0 -332.1762 0 -332.1762 0 -301.607 0 -332.1762 0 -326.1331 0 -296.9862 0 -278.5031 0 -283.1239 0 -301.607 0 -380.5207 0 -350.3053 0 -404.6929 0 -410.736 0 -362.3915 0 -380.5207 0 -380.5207 0 -416.779 0 -416.779 0 -416.779 0 -416.779 0 -416.779 0 -416.779 0 -416.779 0 -422.8221 0 -422.8221 0 -428.8652 0 -422.8221 0 -422.8221 0 -422.8221 0 -416.779 0 -410.736 0 -404.6929 0 -398.6498 0 -374.4776 0 -326.1331 0 -310.8485 0 -320.09 0 -326.1331 0 -296.9862 0 -315.4693 0 -306.2277 0 -292.3654 0 -269.2616 0 -255.3993 0 -278.5031 0 -306.2277 0 -306.2277 0 -310.8485 0 -310.8485 0 -306.2277 0 -310.8485 0 -301.607 0 -250.7785 0 -278.5031 0 -241.537 0 -227.6746 0 -232.2954 0 -236.9162 0 -223.0539 0 -227.6746 0 -209.1916 0 -232.2954 0 -209.1916 0 -196.5925 0 -209.1916 0 -196.5925 0 -189.8775 0 -193.235 0 -183.1625 0 -193.235 0 -179.805 0 -179.805 0 -186.52 0 -186.52 0 -189.8775 0 -176.4475 0 -183.1625 0 -186.52 0 -169.7325 0 -179.805 0 -163.0175 0 -176.4475 0 -163.0175 0 -166.375 0 -156.3025 0 -176.4475 0 -159.66 0 -149.5875 0 -136.1575 0 -152.945 0 -156.3025 0 -166.375 0 -159.66 0 -146.23 0 -156.3025 0 -183.1625 0 -183.1625 0 -183.1625 0 -149.5875 0 -146.23 0 -152.945 0 -149.5875 0 -159.66 0 -152.945 0 -149.5875 0 -142.8725 0 -146.23 0 -152.945 0 -142.8725 0 -146.23 0 -142.8725 0 -146.23 0 -152.945 0 -159.66 0 -156.3025 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -156.3025 0 -159.66 0 -163.0175 0 -159.66 0 -156.3025 0 -159.66 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -122.7275 0 -126.085 0 -136.1575 0 -136.1575 0 -129.4425 0 -129.4425 0 -129.4425 0 -105.94 0 -105.94 0 -116.0125 0 -119.37 0 -122.7275 0 -112.655 0 -99.22501 0 -116.0125 0 -112.655 0 -116.0125 0 -119.37 0 -119.37 0 -116.0125 0 -119.37 0 -116.0125 0 -116.0125 0 -116.0125 0 -95.86751 0 -105.94 0 -99.22501 0 -95.86751 0 -95.86751 0 -92.51001 0 -76.75501 0 -60.38001 0 -61.00001 0 -58.52001 0 -99.22501 0 -92.51001 0 -76.75501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -59.14001 0 -58.52001 0 -59.76001 0 -60.38001 0 - -57.90001 0 -61.00001 0 -60.38001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -56.66001 0 -59.14001 0 -57.28001 0 -57.90001 0 -59.76001 0 -58.52001 0 -59.14001 0 -92.51001 0 -99.22501 0 -95.86751 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -59.76001 0 -59.14001 0 -58.52001 0 -59.14001 0 -58.52001 0 -58.52001 0 -59.14001 0 -58.52001 0 -58.52001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -59.76001 0 -56.04001 0 -59.14001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -105.94 0 -122.7275 0 -122.7275 0 -116.0125 0 -483.2527 0 -772.9081 0 -920.9101 0 -981.8521 0 -1034.088 0 -1016.676 0 -1034.088 0 -990.5581 0 -1007.97 0 -964.4401 0 -920.9101 0 -859.9681 0 -799.0261 0 -764.2021 0 -711.9661 0 -677.1421 0 -651.0241 0 -604.114 0 -585.9848 0 -567.8556 0 -549.7264 0 -531.5972 0 -507.425 0 -495.3388 0 -477.2096 0 -465.1235 0 -446.9943 0 -440.9513 0 -428.8652 0 -416.779 0 -398.6498 0 -386.5637 0 -380.5207 0 -380.5207 0 -380.5207 0 -374.4776 0 -374.4776 0 -392.6068 0 -434.9082 0 -483.2527 0 -555.7695 0 -624.9061 0 -703.2601 0 -764.2021 0 -799.0261 0 -833.8501 0 -842.5561 0 -825.1441 0 -825.1441 0 -799.0261 0 -755.4961 0 -711.9661 0 -677.1421 0 -642.3181 0 -604.114 0 -585.9848 0 -555.7695 0 -543.6833 0 -519.5111 0 -501.3819 0 -489.2958 0 -471.1666 0 -459.0805 0 -434.9082 0 -416.779 0 -404.6929 0 -392.6068 0 -386.5637 0 -380.5207 0 -362.3915 0 -368.4345 0 -374.4776 0 -398.6498 0 -410.736 0 -440.9513 0 -483.2527 0 -531.5972 0 -598.0709 0 -694.5541 0 -781.6141 0 -833.8501 0 -886.0861 0 -929.6161 0 -973.1461 0 -990.5581 0 -999.2641 0 -1007.97 0 -990.5581 0 -999.2641 0 -990.5581 0 -964.4401 0 -947.0281 0 -938.3221 0 -920.9101 0 -912.2041 0 -912.2041 0 -920.9101 0 -955.7341 0 -999.2641 0 -1077.618 0 -1155.806 0 -1253.048 0 -1325.98 0 -1386.756 0 -1447.532 0 -1483.998 0 -1569.084 0 -1617.705 0 -1666.326 0 -1739.257 0 -1812.189 0 -1860.81 0 -2026.052 0 -2307.916 0 -2495.826 0 -2589.78 0 -2683.735 0 -2683.735 0 -2636.758 0 -2354.894 0 -2307.916 0 -2026.052 0 -1848.655 0 -1775.723 0 -1690.637 0 -1593.395 0 -1508.308 0 -1471.842 0 -1386.756 0 -1350.29 0 -1301.669 0 -1277.359 0 -1240.893 0 -1204.427 0 -1180.117 0 -1143.651 0 -1107.185 0 -1086.324 0 -1068.912 0 -1060.206 0 -1034.088 0 -1016.676 0 -1007.97 0 -981.8521 0 -964.4401 0 -947.0281 0 -938.3221 0 -920.9101 0 -886.0861 0 -877.3801 0 -877.3801 0 -851.2621 0 -833.8501 0 -816.4381 0 -816.4381 0 -790.3201 0 -781.6141 0 -772.9081 0 -755.4961 0 -755.4961 0 -729.3781 0 -720.6721 0 -720.6721 0 -703.2601 0 -703.2601 0 -685.8481 0 -668.4361 0 -659.7301 0 -659.7301 0 -642.3181 0 -633.6121 0 -624.9061 0 -604.114 0 -598.0709 0 -598.0709 0 -573.8986 0 -579.9417 0 -579.9417 0 -573.8986 0 -573.8986 0 -561.8125 0 -555.7695 0 -543.6833 0 -537.6403 0 -537.6403 0 -531.5972 0 -525.5541 0 -519.5111 0 -519.5111 0 -513.468 0 -501.3819 0 -495.3388 0 -501.3819 0 -489.2958 0 -471.1666 0 -459.0805 0 -477.2096 0 -434.9082 0 -465.1235 0 -453.0374 0 -416.779 0 -422.8221 0 -446.9943 0 -440.9513 0 -434.9082 0 -434.9082 0 -434.9082 0 -428.8652 0 -428.8652 0 -422.8221 0 -422.8221 0 -416.779 0 -422.8221 0 -416.779 0 -404.6929 0 -404.6929 0 -410.736 0 -404.6929 0 -380.5207 0 -320.09 0 -326.1331 0 -315.4693 0 -315.4693 0 -315.4693 0 -306.2277 0 -306.2277 0 -315.4693 0 -362.3915 0 -362.3915 0 -350.3053 0 -350.3053 0 -350.3053 0 -350.3053 0 -350.3053 0 -344.2623 0 -344.2623 0 -344.2623 0 -338.2192 0 -332.1762 0 -332.1762 0 -332.1762 0 -326.1331 0 -269.2616 0 -269.2616 0 -278.5031 0 -278.5031 0 -292.3654 0 -255.3993 0 -264.6408 0 -287.7447 0 -306.2277 0 -301.607 0 -301.607 0 -296.9862 0 -292.3654 0 -292.3654 0 -287.7447 0 -287.7447 0 -287.7447 0 -287.7447 0 -283.1239 0 -283.1239 0 -283.1239 0 -283.1239 0 -278.5031 0 -278.5031 0 -278.5031 0 -278.5031 0 -278.5031 0 -273.8823 0 -273.8823 0 -269.2616 0 -269.2616 0 -269.2616 0 -264.6408 0 -264.6408 0 -260.02 0 -260.02 0 -260.02 0 -255.3993 0 -260.02 0 -255.3993 0 -255.3993 0 -255.3993 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -250.7785 0 -246.1577 0 -246.1577 0 -246.1577 0 -246.1577 0 -246.1577 0 -250.7785 0 -250.7785 0 -250.7785 0 -250.7785 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -246.1577 0 -241.537 0 -241.537 0 -241.537 0 -241.537 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -241.537 0 -241.537 0 -236.9162 0 -236.9162 0 -232.2954 0 -232.2954 0 -189.8775 0 -183.1625 0 -193.235 0 -209.1916 0 -183.1625 0 -204.5708 0 -213.8123 0 -213.8123 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -204.5708 0 -209.1916 0 -204.5708 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -199.95 0 -196.5925 0 -196.5925 0 -169.7325 0 -156.3025 0 -169.7325 0 -166.375 0 -163.0175 0 -142.8725 0 -183.1625 0 -186.52 0 -183.1625 0 - -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -183.1625 0 -179.805 0 -179.805 0 -176.4475 0 -152.945 0 -142.8725 0 -142.8725 0 -139.515 0 -136.1575 0 -126.085 0 -129.4425 0 -136.1575 0 -166.375 0 -163.0175 0 -166.375 0 -166.375 0 -166.375 0 -166.375 0 -163.0175 0 -166.375 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -152.945 0 -149.5875 0 -132.8 0 -119.37 0 -126.085 0 -119.37 0 -112.655 0 -116.0125 0 -116.0125 0 -112.655 0 -109.2975 0 -146.23 0 -136.1575 0 -146.23 0 -146.23 0 -142.8725 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -146.23 0 -146.23 0 -142.8725 0 - -149.5875 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -159.66 0 -159.66 0 -163.0175 0 -163.0175 0 -163.0175 0 -163.0175 0 -166.375 0 -166.375 0 -169.7325 0 -173.09 0 -173.09 0 -176.4475 0 -176.4475 0 -173.09 0 -169.7325 0 -166.375 0 -166.375 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -149.5875 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -146.23 0 -142.8725 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 -152.945 0 -156.3025 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -159.66 0 -142.8725 0 -146.23 0 -146.23 0 -129.4425 0 -166.375 0 -166.375 0 -169.7325 0 -173.09 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -173.09 0 -173.09 0 -176.4475 0 -173.09 0 -142.8725 0 -156.3025 0 -166.375 0 -169.7325 0 -166.375 0 -159.66 0 -156.3025 0 -146.23 0 -152.945 0 -142.8725 0 -142.8725 0 -149.5875 0 -149.5875 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -139.515 0 -136.1575 0 -136.1575 0 -136.1575 0 -132.8 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -126.085 0 -122.7275 0 -122.7275 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -122.7275 0 -126.085 0 -126.085 0 -122.7275 0 -126.085 0 -126.085 0 -122.7275 0 -105.94 0 -119.37 0 -112.655 0 -102.5825 0 -92.51001 0 -57.90001 0 -76.75501 0 -61.00001 0 -112.655 0 -112.655 0 -116.0125 0 -116.0125 0 -112.655 0 -116.0125 0 -116.0125 0 -112.655 0 -116.0125 0 -116.0125 0 -112.655 0 -116.0125 0 -116.0125 0 -116.0125 0 -95.86751 0 -99.22501 0 -61.00001 0 -105.94 0 -58.52001 0 -57.90001 0 -57.90001 0 -95.86751 0 -57.90001 0 -57.90001 0 -99.22501 0 -102.5825 0 -105.94 0 -105.94 0 -105.94 0 -102.5825 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -105.94 0 -102.5825 0 -102.5825 0 -60.38001 0 -59.14001 0 -60.38001 0 -60.38001 0 -59.14001 0 -57.90001 0 -58.52001 0 -57.90001 0 -57.90001 0 -59.76001 0 -59.14001 0 -60.38001 0 -59.14001 0 -102.5825 0 -61.00001 0 -57.28001 0 -59.14001 0 -56.66001 0 -55.42001 0 -56.66001 0 -57.28001 0 -56.04001 0 -55.42001 0 -57.28001 0 -59.14001 0 -99.22501 0 -59.76001 0 -102.5825 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -102.5825 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.76001 0 -59.14001 0 -56.66001 0 -56.66001 0 -58.52001 0 -57.28001 0 -59.76001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -60.38001 0 -59.14001 0 -59.76001 0 -56.66001 0 -55.42001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -57.90001 0 -56.04001 0 -58.52001 0 -56.66001 0 -57.90001 0 -60.38001 0 -60.38001 0 -54.18001 0 -61.00001 0 -57.90001 0 -56.04001 0 -59.76001 0 -61.00001 0 -56.66001 0 -52.32001 0 -57.28001 0 -54.18001 0 -51.70001 0 -55.59313 0 -56.34185 0 -53.39319 0 -48.52242 0 -51.96452 0 -49.87733 0 -54.11886 0 -59.41532 0 -54.85215 0 -52.6751 0 -54.85215 0 -57.86275 0 -56.34185 0 -60.20362 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -58.63505 0 -59.41532 0 -60.20362 0 -59.41532 0 -59.41532 0 -60.20362 0 -59.41532 0 -59.41532 0 -58.63505 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -57.86275 0 -54.11886 0 -48.52242 0 -50.56569 0 -51.96452 0 -51.2614 0 -47.85577 0 -49.87733 0 -50.56569 0 -51.96452 0 -51.96452 0 -51.96452 0 -49.87733 0 -51.2614 0 -49.19625 0 -51.2614 0 -49.19625 0 -48.52242 0 -57.09837 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.09837 0 -57.86275 0 -57.86275 0 -57.86275 0 -58.63505 0 -58.63505 0 -59.41532 0 -61.00001 0 -75.14358 0 -75.14358 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.20362 0 -60.20362 0 -60.20362 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -58.63505 0 -59.41532 0 -59.41532 0 -60.20362 0 -61.00001 0 -75.14358 0 -92.51001 0 -92.51001 0 -92.51001 0 -97.27695 0 -112.9069 0 -112.9069 0 -121.5236 0 -127.5863 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -190.9217 0 -244.9397 0 -249.4287 0 -244.9397 0 -253.988 0 -309.0518 0 -338.661 0 -405.2517 0 -495.1235 0 -593.2256 0 -623.059 0 -563.6945 0 -616.2001 0 -651.1075 0 -680.1559 0 -710.2306 0 -717.9128 0 -710.2306 0 -733.4764 0 -717.9128 0 -725.6613 0 -765.4122 0 -1011.231 0 -1554.277 0 -2450.349 0 -3898.783 0 -5656.63 0 -6916.182 0 -8923.971 0 -10434.87 0 -12325.13 0 -13456.6 0 -14509.61 0 -15615.81 0 -16495.12 0 -17290.89 0 -17992.88 0 -18713.5 0 -19766.72 0 -20468.7 0 -21719.76 0 -22881.16 0 -24371.7 0 -25699.35 0 -26457.2 0 -27700.32 0 -27621.51 0 -29719.14 0 -31316.95 0 -31231.47 0 -33326 0 -35418.63 0 -36829.2 0 - -36354.95 0 -34134.81 0 -32793.91 0 -31316.95 0 -30134.25 0 -29144.37 0 -27858.37 0 -26533.79 0 -25774.48 0 -24589.74 0 -24011.15 0 -22811.73 0 -21121.03 0 -19452.98 0 -17522.83 0 -15347.54 0 -13702.56 0 -12413.31 0 -10511.76 0 -9266.226 0 -8592.191 0 -7837.152 0 -7364.823 0 -6970.999 0 -6542.31 0 -6285.579 0 -5988.508 0 -5796.958 0 -5473.888 0 -5252.321 0 -4954.577 0 -4831.3 0 -4553.445 0 - -4215.662 0 -4107.765 0 -4002.151 0 -3831.099 0 -3764.387 0 -3601.777 0 -3475.894 0 -3383.877 0 -3293.875 0 -3148.255 0 -3091.511 0 -3007.976 0 -2926.308 0 -2872.884 0 -2820.265 0 -2742.827 0 -2667.147 0 -2593.195 0 -2544.838 0 -2520.939 0 -2427.183 0 -2381.394 0 -2336.317 0 -2336.317 0 -2205.282 0 -2162.973 0 -2121.335 0 -2060.116 0 -2040.036 0 -2040.036 0 -1980.76 0 -1942.036 0 -1922.909 0 -1903.937 0 -1870.329 0 -1841.018 0 -1812.065 0 -1812.065 0 -1783.467 0 -1755.221 0 -1741.229 0 -1741.229 0 -1686.124 0 -1686.124 0 -1592.958 0 -1659.084 0 -1554.277 0 -1554.277 0 -1541.547 0 -1554.277 0 -1503.841 0 -1554.277 0 -1541.547 0 -1442.594 0 -1442.594 0 -1406.788 0 -1442.594 0 -1442.594 0 -1418.645 0 -1418.645 0 -1418.645 0 -1395.007 0 -1371.675 0 -1360.123 0 -1348.647 0 -1314.67 0 -1248.713 0 -1281.362 0 -1281.362 0 -1270.406 0 -1270.406 0 -1270.406 0 -1270.406 0 -1259.523 0 -1237.975 0 -1216.713 0 -1206.19 0 -1216.713 0 -1206.19 0 -1195.737 0 -1185.355 0 -1164.8 0 -1164.8 0 -1144.523 0 -1144.523 0 -1134.489 0 -1134.489 0 -1124.522 0 -1114.624 0 -1114.624 0 -1104.793 0 -1104.793 0 -1073.579 0 -1062.979 0 -1052.464 0 - -1042.032 0 -1031.683 0 -1021.416 0 -1011.231 0 -1011.231 0 -991.1038 0 -1001.127 0 -981.1611 0 -971.2983 0 -971.2983 0 -942.1842 0 -942.1842 0 -932.636 0 -942.1842 0 -932.636 0 -913.7716 0 -904.4544 0 -895.2133 0 -895.2133 0 -886.0478 0 -876.9574 0 -876.9574 0 -859.0002 0 -867.9417 0 -859.0002 0 -859.0002 0 -850.1325 0 -850.1325 0 -841.3381 0 -841.3381 0 -832.6165 0 -823.9673 0 -815.39 0 -815.39 0 -798.4495 0 -790.0854 0 -790.0854 0 -781.7915 0 -773.5672 0 -773.5672 0 -765.4122 0 -765.4122 0 -765.4122 0 -757.3261 0 -757.3261 0 -749.3084 0 -717.9128 0 -733.4764 0 -741.3586 0 -741.3586 0 -733.4764 0 -733.4764 0 -733.4764 0 -733.4764 0 -733.4764 0 -725.6613 0 -725.6613 0 -725.6613 0 -725.6613 0 -717.9128 0 -725.6613 0 -717.9128 0 -710.2306 0 -702.6143 0 -695.0633 0 -702.6143 0 -702.6143 0 -702.6143 0 -695.0633 0 -687.5773 0 -687.5773 0 -687.5773 0 -672.7986 0 -665.5051 0 -665.5051 0 -665.5051 0 -665.5051 0 -658.2748 0 -658.2748 0 -651.1075 0 -644.0027 0 -644.0027 0 -636.9599 0 -629.9788 0 -629.9788 0 -629.9788 0 -623.059 0 -623.059 0 -623.059 0 -623.059 0 -616.2001 0 -616.2001 0 -616.2001 0 -608.4619 0 -608.4619 0 -600.804 0 -600.804 0 -593.2256 0 -593.2256 0 -593.2256 0 -593.2256 0 -593.2256 0 -600.804 0 -593.2256 0 -593.2256 0 -600.804 0 -593.2256 0 -593.2256 0 -593.2256 0 -585.7261 0 -578.3048 0 -578.3048 0 -585.7261 0 -578.3048 0 -570.9612 0 -563.6945 0 -521.6757 0 -501.6548 0 -556.5042 0 -556.5042 0 -549.3896 0 -542.35 0 -556.5042 0 -549.3896 0 -549.3896 0 -542.35 0 -535.385 0 -528.4937 0 -535.385 0 -528.4937 0 -528.4937 0 -521.6757 0 -514.9303 0 -508.2568 0 -508.2568 0 -501.6548 0 -501.6548 0 -469.6946 0 -422.0562 0 -469.6946 0 -451.3372 0 -416.3922 0 -439.4304 0 -469.6946 0 -433.5748 0 -469.6946 0 -475.9486 0 -469.6946 0 -469.6946 0 -469.6946 0 -463.5084 0 -457.3894 0 -457.3894 0 -457.3894 0 -457.3894 0 -451.3372 0 -445.351 0 -445.351 0 -439.4304 0 -439.4304 0 -439.4304 0 -439.4304 0 -433.5748 0 -433.5748 0 -427.7836 0 - -422.0562 0 -422.0562 0 -416.3922 0 -416.3922 0 -416.3922 0 -422.0562 0 -422.0562 0 -422.0562 0 -416.3922 0 -416.3922 0 -416.3922 0 -410.7909 0 -405.2517 0 -405.2517 0 -399.7743 0 -399.7743 0 -399.7743 0 -394.358 0 -394.358 0 -399.7743 0 -394.358 0 -394.358 0 -389.0022 0 -394.358 0 -394.358 0 -394.358 0 -389.0022 0 -389.0022 0 -389.0022 0 -389.0022 0 -394.358 0 -394.358 0 -394.358 0 -399.7743 0 -399.7743 0 -399.7743 0 -399.7743 0 -399.7743 0 -399.7743 0 -399.7743 0 -394.358 0 -389.0022 0 -394.358 0 -389.0022 0 -394.358 0 -394.358 0 -394.358 0 -394.358 0 -394.358 0 -394.358 0 -394.358 0 -394.358 0 -389.0022 0 -389.0022 0 -383.7065 0 -383.7065 0 -383.7065 0 -383.7065 0 -378.4703 0 -378.4703 0 -383.7065 0 -378.4703 0 -378.4703 0 -383.7065 0 -378.4703 0 -383.7065 0 -383.7065 0 -389.0022 0 -383.7065 0 -389.0022 0 -383.7065 0 -383.7065 0 -389.0022 0 -389.0022 0 -394.358 0 -394.358 0 -399.7743 0 -399.7743 0 -399.7743 0 -405.2517 0 -405.2517 0 -410.7909 0 -410.7909 0 -410.7909 0 -410.7909 0 -416.3922 0 -422.0562 0 -422.0562 0 -433.5748 0 -433.5748 0 -433.5748 0 -439.4304 0 -439.4304 0 -445.351 0 -439.4304 0 -439.4304 0 -439.4304 0 -439.4304 0 -439.4304 0 -439.4304 0 -439.4304 0 -433.5748 0 -433.5748 0 -427.7836 0 -422.0562 0 -422.0562 0 -416.3922 0 -416.3922 0 -410.7909 0 -405.2517 0 -405.2517 0 -405.2517 0 -405.2517 0 -399.7743 0 -399.7743 0 -394.358 0 -394.358 0 -394.358 0 -389.0022 0 -389.0022 0 -383.7065 0 -378.4703 0 -378.4703 0 -378.4703 0 -373.2931 0 -373.2931 0 -378.4703 0 -373.2931 0 -373.2931 0 -368.1744 0 -363.1136 0 -368.1744 0 -363.1136 0 -363.1136 0 -353.1638 0 -348.2738 0 -353.1638 0 -353.1638 0 -353.1638 0 -353.1638 0 -348.2738 0 -353.1638 0 -353.1638 0 -348.2738 0 -333.9371 0 -287.951 0 -303.6562 0 -338.661 0 -348.2738 0 -348.2738 0 -343.4397 0 -343.4397 0 -343.4397 0 -338.661 0 -343.4397 0 -338.661 0 -338.661 0 -338.661 0 -338.661 0 -343.4397 0 -333.9371 0 -338.661 0 -338.661 0 -338.661 0 -333.9371 0 -333.9371 0 -333.9371 0 -333.9371 0 -324.6522 0 -324.6522 0 -320.09 0 -320.09 0 -324.6522 0 -320.09 0 -324.6522 0 -324.6522 0 -324.6522 0 -320.09 0 -314.5294 0 -314.5294 0 -309.0518 0 -314.5294 0 -314.5294 0 -314.5294 0 -303.6562 0 -298.3415 0 -303.6562 0 -309.0518 0 -314.5294 0 -309.0518 0 -314.5294 0 -309.0518 0 -314.5294 0 -303.6562 0 -303.6562 0 -303.6562 0 -309.0518 0 -298.3415 0 -293.1068 0 -303.6562 0 -303.6562 0 -309.0518 0 -303.6562 0 -303.6562 0 -298.3415 0 -298.3415 0 -303.6562 0 -298.3415 0 -298.3415 0 -303.6562 0 -298.3415 0 -303.6562 0 -298.3415 0 -298.3415 0 -298.3415 0 -293.1068 0 -282.8731 0 -287.951 0 -293.1068 0 -282.8731 0 -287.951 0 -287.951 0 -287.951 0 -287.951 0 -282.8731 0 -282.8731 0 -282.8731 0 -282.8731 0 -277.8722 0 -282.8731 0 -282.8731 0 -277.8722 0 -277.8722 0 -277.8722 0 -277.8722 0 -277.8722 0 -282.8731 0 -277.8722 0 -277.8722 0 -277.8722 0 -277.8722 0 -277.8722 0 -268.0973 0 -268.0973 0 -268.0973 0 -272.9472 0 -268.0973 0 -268.0973 0 -272.9472 0 -268.0973 0 -268.0973 0 -263.3214 0 -268.0973 0 -268.0973 0 -268.0973 0 -263.3214 0 -263.3214 0 -263.3214 0 -263.3214 0 -268.0973 0 -268.0973 0 -263.3214 0 -263.3214 0 -263.3214 0 -263.3214 0 -263.3214 0 -258.6186 0 -263.3214 0 -263.3214 0 -263.3214 0 -263.3214 0 -263.3214 0 -258.6186 0 -263.3214 0 -258.6186 0 - -253.988 0 -253.988 0 -253.988 0 -253.988 0 -258.6186 0 -253.988 0 -249.4287 0 -258.6186 0 -258.6186 0 -253.988 0 -253.988 0 -249.4287 0 -249.4287 0 -244.9397 0 -253.988 0 -253.988 0 -249.4287 0 -253.988 0 -249.4287 0 -249.4287 0 -253.988 0 -244.9397 0 -244.9397 0 -249.4287 0 -207.5571 0 -219.4325 0 -203.7232 0 -249.4287 0 -253.988 0 -258.6186 0 -253.988 0 -249.4287 0 -249.4287 0 -258.6186 0 -253.988 0 -249.4287 0 -240.5201 0 -244.9397 0 -244.9397 0 -244.9397 0 -249.4287 0 -253.988 0 -249.4287 0 -244.9397 0 -244.9397 0 -249.4287 0 -240.5201 0 -244.9397 0 -244.9397 0 -240.5201 0 -236.169 0 -236.169 0 -244.9397 0 -236.169 0 -231.8856 0 -240.5201 0 -240.5201 0 -240.5201 0 -240.5201 0 -240.5201 0 -240.5201 0 -236.169 0 -240.5201 0 -236.169 0 -231.8856 0 -236.169 0 -231.8856 0 -236.169 0 -236.169 0 -236.169 0 -236.169 0 -231.8856 0 -231.8856 0 -236.169 0 -231.8856 0 -227.669 0 -231.8856 0 -231.8856 0 -227.669 0 -231.8856 0 -231.8856 0 -227.669 0 -227.669 0 -227.669 0 -227.669 0 -231.8856 0 -231.8856 0 -227.669 0 -227.669 0 -231.8856 0 -231.8856 0 -231.8856 0 -231.8856 0 -227.669 0 -231.8856 0 -219.4325 0 -227.669 0 -223.5183 0 -227.669 0 -227.669 0 -223.5183 0 -223.5183 0 -223.5183 0 -227.669 0 -227.669 0 -223.5183 0 -219.4325 0 -223.5183 0 -227.669 0 -223.5183 0 -231.8856 0 -219.4325 0 -227.669 0 -231.8856 0 -227.669 0 -223.5183 0 -227.669 0 -231.8856 0 -227.669 0 -223.5183 0 -227.669 0 -227.669 0 -219.4325 0 -227.669 0 -227.669 0 -223.5183 0 -227.669 0 -223.5183 0 -231.8856 0 -227.669 0 -227.669 0 -215.411 0 -215.411 0 -219.4325 0 -215.411 0 -219.4325 0 -223.5183 0 -223.5183 0 -227.669 0 -227.669 0 -227.669 0 -227.669 0 -223.5183 0 -227.669 0 -231.8856 0 -231.8856 0 -236.169 0 -236.169 0 -236.169 0 -236.169 0 -227.669 0 -231.8856 0 -223.5183 0 -207.5571 0 -215.411 0 -165.9599 0 -186.5442 0 -195.3898 0 -203.7232 0 -199.95 0 -215.411 0 -249.4287 0 -253.988 0 -244.9397 0 -253.988 0 -240.5201 0 -249.4287 0 -249.4287 0 -244.9397 0 -253.988 0 -253.988 0 -249.4287 0 -253.988 0 -244.9397 0 -244.9397 0 -249.4287 0 -249.4287 0 -244.9397 0 -244.9397 0 -244.9397 0 -240.5201 0 -244.9397 0 -244.9397 0 -240.5201 0 -240.5201 0 -240.5201 0 -231.8856 0 -236.169 0 -236.169 0 -227.669 0 -223.5183 0 -223.5183 0 -227.669 0 -236.169 0 -231.8856 0 -215.411 0 -186.5442 0 -223.5183 0 -231.8856 0 -219.4325 0 -203.7232 0 -219.4325 0 -223.5183 0 -231.8856 0 -215.411 0 -223.5183 0 -231.8856 0 -227.669 0 -223.5183 0 -227.669 0 -227.669 0 -227.669 0 -227.669 0 -223.5183 0 -227.669 0 -231.8856 0 -236.169 0 -236.169 0 -231.8856 0 -227.669 0 -231.8856 0 -231.8856 0 -231.8856 0 -223.5183 0 -223.5183 0 -223.5183 0 -219.4325 0 -219.4325 0 -219.4325 0 -223.5183 0 -223.5183 0 -219.4325 0 -227.669 0 -223.5183 0 -219.4325 0 -219.4325 0 -219.4325 0 -215.411 0 -219.4325 0 -215.411 0 -219.4325 0 -223.5183 0 -219.4325 0 -219.4325 0 -223.5183 0 -227.669 0 -223.5183 0 -223.5183 0 -227.669 0 -223.5183 0 -227.669 0 -231.8856 0 -227.669 0 -231.8856 0 -231.8856 0 -231.8856 0 -236.169 0 -231.8856 0 -236.169 0 -231.8856 0 -231.8856 0 -231.8856 0 -227.669 0 -227.669 0 -223.5183 0 -223.5183 0 -223.5183 0 -227.669 0 -223.5183 0 -223.5183 0 -219.4325 0 -219.4325 0 -219.4325 0 -215.411 0 -215.411 0 -215.411 0 -215.411 0 -211.4528 0 -211.4528 0 -207.5571 0 -211.4528 0 -207.5571 0 -207.5571 0 -203.7232 0 -203.7232 0 -207.5571 0 -207.5571 0 -207.5571 0 -207.5571 0 -207.5571 0 -211.4528 0 -211.4528 0 -207.5571 0 -207.5571 0 -211.4528 0 -207.5571 0 -211.4528 0 -207.5571 0 -207.5571 0 -203.7232 0 -207.5571 0 -199.95 0 -207.5571 0 -203.7232 0 -207.5571 0 -211.4528 0 -211.4528 0 -211.4528 0 -207.5571 0 -207.5571 0 -207.5571 0 -207.5571 0 -207.5571 0 -207.5571 0 -203.7232 0 -207.5571 0 -211.4528 0 -207.5571 0 -207.5571 0 -207.5571 0 -203.7232 0 -195.3898 0 -199.95 0 -203.7232 0 -207.5571 0 -199.95 0 -203.7232 0 -203.7232 0 -203.7232 0 -203.7232 0 -207.5571 0 -199.95 0 -203.7232 0 -199.95 0 -203.7232 0 -199.95 0 -195.3898 0 -195.3898 0 -190.9217 0 -190.9217 0 -190.9217 0 -195.3898 0 -195.3898 0 -195.3898 0 -190.9217 0 -190.9217 0 -195.3898 0 -199.95 0 -199.95 0 -199.95 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -190.9217 0 -190.9217 0 -190.9217 0 -190.9217 0 -195.3898 0 -195.3898 0 -195.3898 0 -190.9217 0 -186.5442 0 -186.5442 0 -186.5442 0 -190.9217 0 -186.5442 0 -186.5442 0 -186.5442 0 -186.5442 0 -186.5442 0 -186.5442 0 -186.5442 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -178.0545 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -178.0545 0 -178.0545 0 -173.9391 0 -173.9391 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -173.9391 0 -173.9391 0 -173.9391 0 -178.0545 0 -178.0545 0 -173.9391 0 -173.9391 0 -173.9391 0 -173.9391 0 -173.9391 0 -150.9657 0 -173.9391 0 -162.093 0 -158.3059 0 -133.9147 0 -140.5191 0 -169.9081 0 -178.0545 0 -178.0545 0 -173.9391 0 -173.9391 0 -173.9391 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -165.9599 0 -169.9081 0 -169.9081 0 -173.9391 0 -169.9081 0 -169.9081 0 -169.9081 0 -165.9599 0 -143.9279 0 -140.5191 0 -127.5863 0 -124.5223 0 -121.5236 0 -140.5191 0 -154.5973 0 -165.9599 0 -169.9081 0 -165.9599 0 -165.9599 0 -154.5973 0 -115.7171 0 -143.9279 0 -137.1818 0 -124.5223 0 -115.7171 0 -127.5863 0 -127.5863 0 -165.9599 0 -169.9081 0 -173.9391 0 -162.093 0 -169.9081 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -162.093 0 -162.093 0 -169.9081 0 -165.9599 0 -165.9599 0 -162.093 0 -162.093 0 -162.093 0 -162.093 0 -165.9599 0 -158.3059 0 -158.3059 0 -158.3059 0 -162.093 0 -162.093 0 -162.093 0 -162.093 0 -154.5973 0 -140.5191 0 -124.5223 0 -140.5191 0 -165.9599 0 -158.3059 0 -162.093 0 -162.093 0 -162.093 0 -158.3059 0 -154.5973 0 -154.5973 0 -158.3059 0 -162.093 0 -162.093 0 -165.9599 0 -158.3059 0 -158.3059 0 -158.3059 0 -154.5973 0 -158.3059 0 -150.9657 0 -154.5973 0 -130.7166 0 -130.7166 0 -150.9657 0 -147.4097 0 -150.9657 0 -154.5973 0 -150.9657 0 -158.3059 0 -154.5973 0 -154.5973 0 -150.9657 0 -150.9657 0 -150.9657 0 -150.9657 0 -150.9657 0 -150.9657 0 -150.9657 0 -150.9657 0 -154.5973 0 -154.5973 0 -150.9657 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -147.4097 0 -143.9279 0 -147.4097 0 -150.9657 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -140.5191 0 -143.9279 0 -140.5191 0 -140.5191 0 -140.5191 0 -140.5191 0 -140.5191 0 -140.5191 0 -140.5191 0 -137.1818 0 -140.5191 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -133.9147 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -133.9147 0 -137.1818 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -139.6166 0 -136.3003 0 -139.6166 0 -139.6166 0 -136.3003 0 -139.6166 0 -139.6166 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -139.6166 0 -136.3003 0 -136.3003 0 -139.6166 0 -139.6166 0 -139.6166 0 -136.3003 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -142.8725 0 -139.515 0 -139.515 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -146.23 0 -149.5875 0 -142.9846 0 -142.9846 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -142.9846 0 -139.6166 0 -139.6166 0 -142.9846 0 -139.6166 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -133.0353 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -123.5446 0 -123.5446 0 -123.5446 0 -120.4813 0 -61.00001 0 -95.09482 0 -59.75121 0 -75.19812 0 -75.19812 0 -114.5027 0 -114.5027 0 -103.1279 0 -117.4674 0 -117.4674 0 -117.4674 0 -114.5027 0 -117.4674 0 -114.5027 0 -114.5027 0 -114.5027 0 -114.5027 0 -117.4674 0 -120.4813 0 -120.4813 0 -117.4674 0 -117.4674 0 -103.1279 0 -114.5027 0 -114.5027 0 -103.1279 0 -111.5868 0 -111.5868 0 -114.5027 0 -114.5027 0 -114.5027 0 -114.5027 0 -111.5868 0 -114.5027 0 -114.5027 0 -114.5027 0 -114.5027 0 -114.5027 0 -114.5027 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -114.5027 0 -111.5868 0 -114.5027 0 -111.5868 0 -108.7192 0 -108.7192 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -108.7192 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -108.7192 0 -105.8997 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -105.8997 0 -108.7192 0 -114.5027 0 -114.5027 0 -111.5868 0 -111.5868 0 -111.5868 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -103.1279 0 -103.1279 0 -103.1279 0 -105.8997 0 -103.1279 0 -105.8997 0 -105.8997 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -108.7192 0 -105.8997 0 -103.1279 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -103.1279 0 -103.1279 0 -103.1279 0 -105.8997 0 -105.8997 0 -105.8997 0 -103.1279 0 -57.87917 0 -55.3853 0 -54.76224 0 -57.87917 0 -56.63192 0 -57.87917 0 -59.75121 0 -92.51001 0 -97.72583 0 -105.8997 0 -105.8997 0 -105.8997 0 -103.1279 0 -103.1279 0 -103.1279 0 -100.4034 0 -100.4034 0 -103.1279 0 -103.1279 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -103.1279 0 -105.8997 0 -103.1279 0 -103.1279 0 -103.1279 0 -105.8997 0 -105.8997 0 -103.1279 0 -105.8997 0 -105.8997 0 -105.8997 0 -103.1279 0 -103.1279 0 -103.1279 0 -100.4034 0 -103.1279 0 -103.1279 0 -105.8997 0 -97.72583 0 -60.37554 0 -57.87917 0 -57.25546 0 -59.75121 0 -59.12704 0 -58.50303 0 -56.63192 0 -55.3853 0 -55.3853 0 -55.3853 0 -100.4034 0 -95.09482 0 -57.25546 0 -75.19812 0 -103.1279 0 -59.75121 0 -92.51001 0 -61.00001 0 -59.12704 0 -57.87917 0 -58.50303 0 -95.09482 0 -97.72583 0 -97.72583 0 -100.4034 0 -100.4034 0 -60.37554 0 -97.72583 0 -59.12704 0 -54.13935 0 -57.25546 0 -59.12704 0 -97.72583 0 -97.72583 0 -100.4034 0 -97.72583 0 -100.4034 0 -103.1279 0 -100.4034 0 -100.4034 0 -103.1279 0 -100.4034 0 -100.4034 0 -100.4034 0 -100.4034 0 -100.4034 0 -100.4034 0 -103.1279 0 -103.1279 0 -100.4034 0 -100.4034 0 -100.4034 0 -97.72583 0 -100.4034 0 -97.72583 0 -97.72583 0 -97.72583 0 -100.4034 0 -100.4034 0 -100.4034 0 -100.4034 0 -100.4034 0 -100.4034 0 -97.72583 0 -100.4034 0 -97.72583 0 -97.72583 0 -97.72583 0 -95.09482 0 -97.72583 0 -97.72583 0 -97.72583 0 -95.09482 0 -97.72583 0 -97.72583 0 -97.72583 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -97.72583 0 -97.72583 0 -95.09482 0 -97.72583 0 -95.09482 0 -95.09482 0 -95.09482 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.09482 0 -92.51001 0 -92.51001 0 -95.09482 0 -95.09482 0 -95.09482 0 -92.51001 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -92.51001 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -92.51001 0 -92.51001 0 -95.09482 0 -92.51001 0 -92.51001 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -92.51001 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -97.72583 0 -95.09482 0 -97.72583 0 -97.72583 0 -97.72583 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.09482 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -75.19812 0 -92.51001 0 -92.51001 0 -75.19812 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -75.19812 0 -92.51001 0 -92.51001 0 -92.51001 0 -61.00001 0 -75.19812 0 -92.51001 0 -75.19812 0 -61.00001 0 -61.00001 0 -92.51001 0 -59.75121 0 -57.87917 0 -75.19812 0 -59.12704 0 -57.87917 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -75.19812 0 -92.51001 0 -92.51001 0 -60.37554 0 -61.00001 0 -75.19812 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -75.19812 0 -61.00001 0 -92.51001 0 -75.19812 0 -59.12704 0 -56.00853 0 -56.63192 0 -75.19812 0 -92.51001 0 -95.09482 0 -92.51001 0 -92.51001 0 -92.51001 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -61.00001 0 -75.19812 0 -75.19812 0 -75.19812 0 -61.00001 0 -61.00001 0 -75.19812 0 -75.19812 0 -75.19812 0 -92.51001 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -61.00001 0 -75.19812 0 -61.00001 0 -75.19812 0 -61.00001 0 -60.37554 0 -60.37554 0 -61.00001 0 -60.37554 0 -61.00001 0 -61.00001 0 -60.37554 0 -60.37554 0 -60.37554 0 -60.37554 0 -60.37554 0 -60.37554 0 -59.75121 0 -60.37554 0 -61.00001 0 -61.00001 0 -60.37554 0 -60.37554 0 -60.37554 0 -60.37554 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.37554 0 -61.00001 0 -61.00001 0 -59.75121 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.37554 0 -59.75121 0 -60.37554 0 -52.89406 0 -52.27167 0 -53.51662 0 -49.16234 0 -53.51662 0 -75.19812 0 -75.19812 0 - -75.19812 0 -75.19812 0 -61.00001 0 -61.00001 0 -61.00001 0 -75.19812 0 -61.00001 0 -61.00001 0 -75.19812 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.37554 0 -60.37554 0 -61.00001 0 -60.37554 0 -61.00001 0 -60.37554 0 -61.00001 0 -75.19812 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -92.51001 0 -92.51001 0 -75.19812 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.09482 0 -100.4034 0 -108.7192 0 -111.5868 0 -120.4813 0 -126.6578 0 -136.3003 0 -133.0353 0 -142.9846 0 -153.4022 0 -160.6123 0 -168.0378 0 -133.0353 0 -175.6814 0 -191.6347 0 -199.95 0 -203.9338 0 -220.362 0 -242.0249 0 -264.9679 0 -309.5829 0 -360.7611 0 -481.5319 0 -608.9971 0 -730.8145 0 -830.9733 0 -967.0572 0 -976.5672 0 -1054.647 0 -1146.926 0 -1266.168 0 -1693.291 0 -2309.715 0 -3145.153 0 -3822.773 0 -4482.72 0 -4841.879 0 -5308.593 0 -5622.024 0 -5853.951 0 -6044.416 0 -6288.755 0 -6338.467 0 -6288.755 0 -6642.731 0 -6489.309 0 -6591.302 0 -6591.302 0 -6438.743 0 -6190.178 0 -5948.632 0 -5486.102 0 -5008.005 0 -4482.72 0 -4106.711 0 -3586.226 0 -3205.618 0 -2940.014 0 -2611.123 0 -2407.222 0 -2215.098 0 -1990.853 0 -1871.011 0 -1787.675 0 -1680.056 0 -1640.719 0 -1551.081 0 -1476.621 0 -1416.228 0 -1368.99 0 -1299.912 0 -1255.038 0 -1211.098 0 -1146.926 0 -1105.295 0 -1074.726 0 -1034.792 0 -995.7533 0 -957.6023 0 -929.568 0 -902.0267 0 -874.9759 0 -848.4126 0 -822.3341 0 -805.2164 0 -779.9395 0 -763.3536 0 -738.8705 0 -722.811 0 -714.8597 0 -706.9606 0 -683.5751 0 -668.2436 0 -645.6324 0 -630.8143 0 -608.9971 0 -594.7412 0 -594.7412 0 -539.7039 0 -553.1671 0 -475.3097 0 -469.1354 0 -450.8984 0 -456.9299 0 -475.3097 0 -506.9015 0 -506.9015 0 -506.9015 0 -494.1203 0 -487.802 0 -481.5319 0 -481.5319 0 -469.1354 0 -475.3097 0 -463.0088 0 -463.0088 0 -450.8984 0 -438.9776 0 - -433.088 0 -427.2455 0 -433.088 0 -433.088 0 -427.2455 0 -421.4498 0 -421.4498 0 -415.701 0 -398.7342 0 -382.1845 0 -387.6549 0 - -299.2934 0 -299.2934 0 -299.2934 0 -304.4111 0 -299.2934 0 -294.2297 0 -289.2198 0 -289.2198 0 -289.2198 0 -284.2633 0 -284.2633 0 -279.3601 0 -279.3601 0 -279.3601 0 -274.5099 0 -274.5099 0 -269.7126 0 -264.9679 0 -269.7126 0 -264.9679 0 -264.9679 0 -264.9679 0 -260.2755 0 -264.9679 0 -255.6352 0 -255.6352 0 -255.6352 0 -255.6352 0 -251.0469 0 -251.0469 0 -246.5102 0 -251.0469 0 -260.2755 0 -260.2755 0 -264.9679 0 -260.2755 0 -260.2755 0 -264.9679 0 -264.9679 0 -269.7126 0 -264.9679 0 -269.7126 0 -264.9679 0 -264.9679 0 -269.7126 0 -269.7126 0 -264.9679 0 -269.7126 0 -269.7126 0 -269.7126 0 -269.7126 0 -264.9679 0 -264.9679 0 -264.9679 0 -260.2755 0 -264.9679 0 -264.9679 0 -264.9679 0 -264.9679 0 -269.7126 0 -269.7126 0 -274.5099 0 -279.3601 0 -279.3601 0 -279.3601 0 -284.2633 0 -289.2198 0 -294.2297 0 -299.2934 0 -299.2934 0 -294.2297 0 -294.2297 0 -294.2297 0 -304.4111 0 -304.4111 0 -299.2934 0 -299.2934 0 -299.2934 0 -294.2297 0 -294.2297 0 -294.2297 0 -294.2297 0 -294.2297 0 -294.2297 0 -289.2198 0 -294.2297 0 -294.2297 0 -294.2297 0 -289.2198 0 -294.2297 0 -294.2297 0 -294.2297 0 -294.2297 0 -299.2934 0 -299.2934 0 - -279.3601 0 -289.2198 0 -294.2297 0 -294.2297 0 -255.6352 0 -269.7126 0 -246.5102 0 -274.5099 0 -233.2078 0 -269.7126 0 -279.3601 0 - -224.5936 0 -212.0488 0 -220.362 0 -233.2078 0 -228.8754 0 -279.3601 0 -279.3601 0 -284.2633 0 -279.3601 0 -279.3601 0 -279.3601 0 -284.2633 0 - -284.2633 0 -279.3601 0 -279.3601 0 -279.3601 0 -279.3601 0 -274.5099 0 -269.7126 0 -274.5099 0 -274.5099 0 -274.5099 0 -269.7126 0 -269.7126 0 -269.7126 0 -269.7126 0 -269.7126 0 -264.9679 0 -260.2755 0 -260.2755 0 -255.6352 0 -260.2755 0 -255.6352 0 -255.6352 0 -251.0469 0 -251.0469 0 -255.6352 0 -251.0469 0 -251.0469 0 -255.6352 0 -255.6352 0 -251.0469 0 -251.0469 0 -251.0469 0 -251.0469 0 -246.5102 0 -246.5102 0 -251.0469 0 -246.5102 0 -246.5102 0 -251.0469 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -242.0249 0 -242.0249 0 -242.0249 0 -237.5909 0 -237.5909 0 -237.5909 0 -237.5909 0 -237.5909 0 -233.2078 0 -233.2078 0 -233.2078 0 -233.2078 0 -233.2078 0 -233.2078 0 -228.8754 0 -228.8754 0 -224.5936 0 -224.5936 0 -224.5936 0 -228.8754 0 -224.5936 0 -224.5936 0 -224.5936 0 -224.5936 0 -220.362 0 -224.5936 0 -220.362 0 -220.362 0 -199.95 0 -160.6123 0 -171.8321 0 -183.5461 0 -175.6814 0 -168.0378 0 -171.8321 0 -175.6814 0 -195.7638 0 -207.9666 0 -216.1805 0 -212.0488 0 -216.1805 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -216.1805 0 -216.1805 0 -212.0488 0 -212.0488 0 -216.1805 0 -216.1805 0 -216.1805 0 -220.362 0 -224.5936 0 -220.362 0 -220.362 0 -220.362 0 -220.362 0 -224.5936 0 -228.8754 0 -228.8754 0 -233.2078 0 -233.2078 0 -233.2078 0 -237.5909 0 -233.2078 0 -237.5909 0 -237.5909 0 -237.5909 0 -233.2078 0 -237.5909 0 -237.5909 0 -237.5909 0 -237.5909 0 -242.0249 0 -242.0249 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -251.0469 0 -251.0469 0 -251.0469 0 -255.6352 0 -251.0469 0 -251.0469 0 -255.6352 0 -260.2755 0 -260.2755 0 -260.2755 0 -260.2755 0 -264.9679 0 -264.9679 0 -269.7126 0 -279.3601 0 -279.3601 0 -284.2633 0 -294.2297 0 -299.2934 0 -309.5829 0 -320.09 0 -325.0169 0 -335.0045 0 -345.1717 0 -355.5193 0 -366.0484 0 -371.3813 0 -376.76 0 -382.1845 0 -382.1845 0 -382.1845 0 -382.1845 0 -376.76 0 -382.1845 0 -376.76 0 -371.3813 0 -376.76 0 -376.76 0 -371.3813 0 -360.7611 0 -360.7611 0 -371.3813 0 -360.7611 0 -366.0484 0 -360.7611 0 -350.3229 0 -350.3229 0 -345.1717 0 -350.3229 0 -350.3229 0 -340.0656 0 -335.0045 0 -335.0045 0 -335.0045 0 -325.0169 0 -320.09 0 -320.09 0 -320.09 0 -314.8092 0 -320.09 0 -309.5829 0 -304.4111 0 -309.5829 0 -299.2934 0 -299.2934 0 -299.2934 0 -289.2198 0 -251.0469 0 -274.5099 0 -299.2934 0 -294.2297 0 -294.2297 0 -294.2297 0 -294.2297 0 -284.2633 0 -284.2633 0 -284.2633 0 -284.2633 0 -284.2633 0 -279.3601 0 -284.2633 0 -284.2633 0 -274.5099 0 -279.3601 0 -279.3601 0 -274.5099 0 -279.3601 0 -269.7126 0 -279.3601 0 -264.9679 0 -269.7126 0 -274.5099 0 -274.5099 0 -279.3601 0 -279.3601 0 -274.5099 0 -274.5099 0 -274.5099 0 -274.5099 0 -264.9679 0 -269.7126 0 -274.5099 0 -264.9679 0 -264.9679 0 -269.7126 0 -264.9679 0 -264.9679 0 -269.7126 0 -264.9679 0 -269.7126 0 -264.9679 0 -264.9679 0 -264.9679 0 - -199.95 0 -203.9338 0 -199.95 0 -203.9338 0 -260.2755 0 -260.2755 0 -264.9679 0 -246.5102 0 -246.5102 0 -199.95 0 -224.5936 0 -212.0488 0 -228.8754 0 -228.8754 0 -212.0488 0 -237.5909 0 -216.1805 0 -216.1805 0 -195.7638 0 -233.2078 0 -233.2078 0 -228.8754 0 -203.9338 0 -233.2078 0 -203.9338 0 -228.8754 0 -228.8754 0 -233.2078 0 -233.2078 0 -242.0249 0 -237.5909 0 -237.5909 0 -237.5909 0 -237.5909 0 -242.0249 0 -242.0249 0 -242.0249 0 -237.5909 0 -233.2078 0 -237.5909 0 -237.5909 0 -233.2078 0 -228.8754 0 -228.8754 0 -233.2078 0 -224.5936 0 -216.1805 0 -187.5622 0 -207.9666 0 -179.5859 0 -175.6814 0 -149.877 0 -168.0378 0 -224.5936 0 -228.8754 0 -228.8754 0 -220.362 0 -220.362 0 -224.5936 0 -224.5936 0 -224.5936 0 -220.362 0 -220.362 0 -220.362 0 -224.5936 0 -216.1805 0 -220.362 0 -179.5859 0 -191.6347 0 -220.362 0 -164.2979 0 -171.8321 0 -156.9805 0 -171.8321 0 -149.877 0 -160.6123 0 -164.2979 0 -164.2979 0 -175.6814 0 -179.5859 0 -149.877 0 -156.9805 0 -171.8321 0 -164.2979 0 -171.8321 0 -199.95 0 -160.6123 0 -171.8321 0 -164.2979 0 -175.6814 0 -212.0488 0 -187.5622 0 -224.5936 0 -224.5936 0 -220.362 0 -220.362 0 -216.1805 0 -216.1805 0 -212.0488 0 -212.0488 0 -203.9338 0 -203.9338 0 -199.95 0 -207.9666 0 -203.9338 0 -203.9338 0 -203.9338 0 -199.95 0 -199.95 0 -203.9338 0 -195.7638 0 -203.9338 0 -203.9338 0 -207.9666 0 -199.95 0 -207.9666 0 -203.9338 0 -203.9338 0 -199.95 0 -199.95 0 -203.9338 0 -199.95 0 -203.9338 0 -199.95 0 -199.95 0 -203.9338 0 -203.9338 0 -203.9338 0 -203.9338 0 -207.9666 0 -203.9338 0 -207.9666 0 -207.9666 0 -203.9338 0 -207.9666 0 -203.9338 0 -195.7638 0 -203.9338 0 -203.9338 0 -199.95 0 -207.9666 0 -203.9338 0 -203.9338 0 -199.95 0 -195.7638 0 -191.6347 0 -199.95 0 -199.95 0 -203.9338 0 -203.9338 0 -195.7638 0 -203.9338 0 -199.95 0 -195.7638 0 -195.7638 0 -199.95 0 -195.7638 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -191.6347 0 -195.7638 0 -191.6347 0 -183.5461 0 -191.6347 0 -187.5622 0 -183.5461 0 -183.5461 0 -187.5622 0 -183.5461 0 -187.5622 0 -179.5859 0 -179.5859 0 -183.5461 0 -183.5461 0 -179.5859 0 -179.5859 0 -183.5461 0 -179.5859 0 -187.5622 0 -187.5622 0 -179.5859 0 -187.5622 0 -195.7638 0 -199.95 0 -203.9338 0 -199.95 0 -199.95 0 -207.9666 0 -203.9338 0 -203.9338 0 -195.7638 0 -199.95 0 -195.7638 0 -195.7638 0 -199.95 0 -195.7638 0 -187.5622 0 -187.5622 0 -191.6347 0 -191.6347 0 -187.5622 0 -191.6347 0 -191.6347 0 -187.5622 0 -183.5461 0 -187.5622 0 -187.5622 0 -191.6347 0 -187.5622 0 -183.5461 0 -183.5461 0 -187.5622 0 -191.6347 0 -191.6347 0 -187.5622 0 -183.5461 0 -187.5622 0 -183.5461 0 -183.5461 0 -179.5859 0 -179.5859 0 -187.5622 0 -183.5461 0 -183.5461 0 -179.5859 0 -179.5859 0 -183.5461 0 -187.5622 0 -183.5461 0 -183.5461 0 -179.5859 0 -175.6814 0 -183.5461 0 -183.5461 0 -179.5859 0 -171.8321 0 -164.2979 0 -171.8321 0 -179.5859 0 -160.6123 0 -179.5859 0 -171.8321 0 -171.8321 0 -179.5859 0 -171.8321 0 -179.5859 0 -175.6814 0 -179.5859 0 -171.8321 0 -175.6814 0 -175.6814 0 -179.5859 0 -179.5859 0 -179.5859 0 -179.5859 0 -175.6814 0 -179.5859 0 -179.5859 0 -168.0378 0 -175.6814 0 -175.6814 0 -171.8321 0 -171.8321 0 -171.8321 0 -168.0378 0 -171.8321 0 -164.2979 0 -168.0378 0 -171.8321 0 -171.8321 0 -175.6814 0 -171.8321 0 -168.0378 0 -168.0378 0 -168.0378 0 -156.9805 0 -168.0378 0 -164.2979 0 -171.8321 0 -175.6814 0 -175.6814 0 -168.0378 0 -164.2979 0 -168.0378 0 -168.0378 0 -164.2979 0 -153.4022 0 -160.6123 0 -160.6123 0 -160.6123 0 -156.9805 0 -156.9805 0 -156.9805 0 -156.9805 0 -160.6123 0 -153.4022 0 -164.2979 0 -160.6123 0 -160.6123 0 -160.6123 0 -164.2979 0 -164.2979 0 -168.0378 0 -164.2979 0 -168.0378 0 -164.2979 0 -156.9805 0 -153.4022 0 -156.9805 0 -153.4022 0 -156.9805 0 -153.4022 0 -156.9805 0 -153.4022 0 -156.9805 0 -156.9805 0 -153.4022 0 -153.4022 0 -160.6123 0 -156.9805 0 -153.4022 0 -153.4022 0 -156.9805 0 -156.9805 0 -156.9805 0 -156.9805 0 -153.4022 0 -156.9805 0 -156.9805 0 -156.9805 0 -153.4022 0 -153.4022 0 -153.4022 0 - -153.4022 0 -153.4022 0 -149.877 0 -149.877 0 -149.877 0 -156.9805 0 -153.4022 0 -153.4022 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -146.4046 0 -149.877 0 -146.4046 0 -142.9846 0 -139.6166 0 -146.4046 0 -133.0353 0 -129.8213 0 -123.5446 0 -120.4813 0 -123.5446 0 -103.1279 0 -120.4813 0 -123.5446 0 -114.5027 0 -126.6578 0 -111.5868 0 -139.6166 0 -126.6578 0 -111.5868 0 -108.7192 0 -105.8997 0 -97.72583 0 -114.5027 0 -117.4674 0 -120.4813 0 -142.9846 0 -114.5027 0 -136.3003 0 -142.9846 0 -149.877 0 -120.4813 0 -120.4813 0 -117.4674 0 -111.5868 0 -117.4674 0 -114.5027 0 -120.4813 0 -123.5446 0 -126.6578 0 -136.3003 0 -142.9846 0 -123.5446 0 -139.6166 0 -129.8213 0 -142.9846 0 -149.877 0 -153.4022 0 -149.877 0 -153.4022 0 -153.4022 0 -156.9805 0 -156.9805 0 -153.4022 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -149.877 0 -146.4046 0 -153.4022 0 -153.4022 0 -153.4022 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -142.9846 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -142.9846 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -136.3003 0 -139.6166 0 -139.6166 0 -139.6166 0 -136.3003 0 -136.3003 0 -123.5446 0 -139.6166 0 -136.3003 0 -133.0353 0 -139.6166 0 -139.6166 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -136.3003 0 -136.3003 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 - -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -142.9846 0 -139.6166 0 -139.6166 0 -139.6166 0 -133.0353 0 -129.8213 0 -120.4813 0 -123.5446 0 -136.3003 0 -126.6578 0 -129.8213 0 -129.8213 0 -126.6578 0 -133.0353 0 -133.0353 0 -133.0353 0 -136.3003 0 -136.3003 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -129.8213 0 -126.6578 0 -126.6578 0 -123.5446 0 -126.6578 0 -126.6578 0 -129.8213 0 -129.8213 0 -108.7192 0 -108.7192 0 -105.8997 0 -100.4034 0 -97.72583 0 -126.6578 0 -120.4813 0 -123.5446 0 -123.5446 0 -114.5027 0 -111.5868 0 -95.09482 0 -97.72583 0 -100.4034 0 -97.72583 0 -100.4034 0 -61.00001 0 -103.1279 0 -105.8997 0 -97.72583 0 -103.1279 0 -95.09482 0 -117.4674 0 -117.4674 0 -114.5027 0 -95.09482 0 -111.5868 0 -117.4674 0 -114.5027 0 -114.5027 0 -114.5027 0 -111.5868 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -111.5868 0 -111.5868 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -111.5868 0 -108.7192 0 -103.1279 0 -105.8997 0 -103.1279 0 -114.5027 0 -114.5027 0 -111.5868 0 -114.5027 0 -120.4813 0 -117.4674 0 -120.4813 0 -120.4813 0 -123.5446 0 -129.8213 0 -129.8213 0 -136.3003 0 -136.3003 0 -142.9846 0 -139.6166 0 -142.9846 0 -133.0353 0 -136.3003 0 -133.0353 0 -136.3003 0 -129.8213 0 -133.0353 0 -136.3003 0 -133.0353 0 -136.3003 0 -133.0353 0 -136.3003 0 -136.3003 0 -133.0353 0 -139.6166 0 -139.6166 0 -136.3003 0 -139.6166 0 -142.9846 0 -149.877 0 -149.877 0 -146.4046 0 -156.9805 0 -156.9805 0 -156.9805 0 -160.6123 0 -156.9805 0 -164.2979 0 -160.6123 0 -164.2979 0 -149.877 0 -142.9846 0 -142.9846 0 -142.9846 0 -168.0378 0 -156.9805 0 -142.9846 0 -139.6166 0 -120.4813 0 -164.2979 0 -160.6123 0 -164.2979 0 -168.0378 0 -160.6123 0 -120.4813 0 -164.2979 0 -160.6123 0 -142.9846 0 -146.4046 0 -156.9805 0 -160.6123 0 -164.2979 0 -160.6123 0 -153.4022 0 -160.6123 0 -156.9805 0 -160.6123 0 -153.4022 0 -160.6123 0 -160.6123 0 -160.6123 0 -153.4022 0 -156.9805 0 -156.9805 0 -156.9805 0 -156.9805 0 -153.4022 0 -146.4046 0 -146.4046 0 -149.877 0 -136.3003 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -146.4046 0 -149.877 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -153.4022 0 -149.877 0 -153.4022 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -142.9846 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -142.9846 0 -142.9846 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -153.4022 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -133.0353 0 -136.3003 0 -139.6166 0 -142.9846 0 -142.9846 0 -146.4046 0 -142.9846 0 -146.4046 0 -142.9846 0 -146.4046 0 -142.9846 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -149.877 0 -146.4046 0 -142.9846 0 -142.9846 0 -146.4046 0 -146.4046 0 -139.6166 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -146.4046 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -139.6166 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -142.9846 0 -146.4046 0 -146.4046 0 -139.6166 0 -142.9846 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -142.9846 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -153.4022 0 -156.9805 0 -160.6123 0 -153.4022 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -142.9846 0 -146.4046 0 -149.877 0 -142.9846 0 -142.9846 0 -142.9846 0 -108.7192 0 -105.8997 0 -100.4034 0 -108.7192 0 -129.8213 0 -117.4674 0 -149.877 0 -146.4046 0 -149.877 0 -146.4046 0 -146.4046 0 -142.9846 0 -149.877 0 -146.4046 0 -153.4022 0 -149.877 0 -153.4022 0 -153.4022 0 -160.6123 0 -153.4022 0 -160.6123 0 -164.2979 0 -168.0378 0 -168.0378 0 -164.2979 0 -164.2979 0 -164.2979 0 -168.0378 0 -168.0378 0 -171.8321 0 -175.6814 0 -175.6814 0 -171.8321 0 -175.6814 0 -175.6814 0 -179.5859 0 -171.8321 0 -175.6814 0 -179.5859 0 -179.5859 0 -175.6814 0 -175.6814 0 -179.5859 0 -187.5622 0 -183.5461 0 -171.8321 0 -142.9846 0 -187.5622 0 -183.5461 0 -187.5622 0 -187.5622 0 -191.6347 0 -187.5622 0 -191.6347 0 -187.5622 0 -187.5622 0 -187.5622 0 -187.5622 0 -191.6347 0 -195.7638 0 -191.6347 0 -191.6347 0 -195.7638 0 -195.7638 0 -191.6347 0 -195.7638 0 -195.7638 0 -195.7638 0 -195.7638 0 -187.5622 0 -187.5622 0 -191.6347 0 -195.7638 0 -191.6347 0 -187.5622 0 -187.5622 0 -187.5622 0 -175.6814 0 -187.5622 0 -187.5622 0 -183.5461 0 -187.5622 0 -191.6347 0 -187.5622 0 -187.5622 0 -191.6347 0 -191.6347 0 -187.5622 0 -195.7638 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -195.7638 0 -164.2979 0 -136.3003 0 -142.9846 0 -136.3003 0 -153.4022 0 -156.9805 0 -153.4022 0 -156.9805 0 -168.0378 0 -207.9666 0 -207.9666 0 -207.9666 0 -212.0488 0 -207.9666 0 -212.0488 0 -220.362 0 -220.362 0 -224.5936 0 -224.5936 0 -224.5936 0 -220.362 0 -220.362 0 -220.362 0 -216.1805 0 -212.0488 0 -212.0488 0 -212.0488 0 -207.9666 0 -203.9338 0 -207.9666 0 -199.95 0 -199.95 0 -199.95 0 -203.9338 0 -195.7638 0 -199.95 0 -199.95 0 -191.6347 0 -191.6347 0 -191.6347 0 -187.5622 0 -187.5622 0 -187.5622 0 -191.6347 0 -187.5622 0 -187.5622 0 -187.5622 0 -187.5622 0 -191.6347 0 -187.5622 0 -183.5461 0 -179.5859 0 -175.6814 0 -179.5859 0 -171.8321 0 -175.6814 0 -175.6814 0 -175.6814 0 -171.8321 0 -179.5859 0 -179.5859 0 -179.5859 0 -183.5461 0 -183.5461 0 -183.5461 0 -183.5461 0 -179.5859 0 -179.5859 0 -171.8321 0 -175.6814 0 -175.6814 0 -168.0378 0 -168.0378 0 -164.2979 0 -160.6123 0 -164.2979 0 -164.2979 0 -168.0378 0 -160.6123 0 -168.0378 0 -168.0378 0 -156.9805 0 -164.2979 0 -168.0378 0 -164.2979 0 -168.0378 0 -164.2979 0 -164.2979 0 -164.2979 0 -160.6123 0 -160.6123 0 -164.2979 0 -160.6123 0 -160.6123 0 -160.6123 0 -156.9805 0 -156.9805 0 -156.9805 0 -160.6123 0 -156.9805 0 -156.9805 0 -156.9805 0 -153.4022 0 -153.4022 0 -160.6123 0 -153.4022 0 -156.9805 0 -153.4022 0 -153.4022 0 -153.4022 0 -153.4022 0 -156.9805 0 -156.9805 0 -153.4022 0 -153.4022 0 -153.4022 0 -156.9805 0 -153.4022 0 -156.9805 0 -156.9805 0 -156.9805 0 -156.9805 0 -156.9805 0 -146.4046 0 -153.4022 0 -153.4022 0 -153.4022 0 -149.877 0 -153.4022 0 -149.877 0 -146.4046 0 -146.4046 0 -153.4022 0 -153.4022 0 -153.4022 0 -149.877 0 -153.4022 0 -153.4022 0 -156.9805 0 -149.877 0 -164.2979 0 -160.6123 0 -156.9805 0 -168.0378 0 -168.0378 0 -156.9805 0 -164.2979 0 -160.6123 0 -136.3003 0 -164.2979 0 -156.9805 0 -160.6123 0 -168.0378 0 -168.0378 0 -168.0378 0 -171.8321 0 -164.2979 0 -168.0378 0 -164.2979 0 -164.2979 0 -160.6123 0 -160.6123 0 -153.4022 0 -153.4022 0 -153.4022 0 -153.4022 0 -153.4022 0 -146.4046 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -153.4022 0 -153.4022 0 -160.6123 0 -160.6123 0 -160.6123 0 -164.2979 0 -164.2979 0 -164.2979 0 -160.6123 0 -156.9805 0 -156.9805 0 -156.9805 0 -156.9805 0 -160.6123 0 -156.9805 0 -149.877 0 -142.9846 0 -139.6166 0 -139.6166 0 -139.6166 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -146.4046 0 -142.9846 0 -142.9846 0 -146.4046 0 -142.9846 0 -146.4046 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -105.8997 0 -108.7192 0 -105.8997 0 -97.72583 0 -92.51001 0 -92.51001 0 -95.09482 0 -100.4034 0 -105.8997 0 -129.8213 0 -126.6578 0 -129.8213 0 -114.5027 0 -103.1279 0 -117.4674 0 -126.6578 0 -111.5868 0 -114.5027 0 -126.6578 0 -126.6578 0 -136.3003 0 -139.6166 0 -139.6166 0 -139.6166 0 -111.5868 0 -142.9846 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -133.0353 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -139.6166 0 -139.6166 0 -142.9846 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -153.4022 0 -153.4022 0 -153.4022 0 -153.4022 0 -156.9805 0 -149.877 0 -153.4022 0 -153.4022 0 -149.877 0 -149.877 0 -146.4046 0 -100.4034 0 -108.7192 0 -120.4813 0 -153.4022 0 -153.4022 0 -146.4046 0 -146.4046 0 -149.877 0 -153.4022 0 -149.877 0 -149.877 0 -142.9846 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -142.9846 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -146.4046 0 -142.9846 0 -139.6166 0 -139.6166 0 -136.3003 0 -139.6166 0 -142.9846 0 -139.6166 0 -139.6166 0 -136.3003 0 -142.9846 0 -136.3003 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -139.6166 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -146.4046 0 -142.9846 0 -142.9846 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -142.9846 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -139.6166 0 -146.4046 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -139.6166 0 -136.3003 0 -146.4046 0 -153.4022 0 -164.2979 0 -160.6123 0 -160.6123 0 -168.0378 0 -171.8321 0 -164.2979 0 -160.6123 0 -160.6123 0 -142.9846 0 -160.6123 0 -146.4046 0 -183.5461 0 -164.2979 0 -212.0488 0 -203.9338 0 -216.1805 0 -183.5461 0 -191.6347 0 -199.95 0 -237.5909 0 -220.362 0 -246.5102 0 -269.7126 0 -340.0656 0 -409.9989 0 -481.5319 0 -594.7412 0 -706.9606 0 -857.213 0 -957.6023 0 -1095.03 0 -1334.185 0 -1601.936 0 -1926.913 0 -2262.049 0 -2717.626 0 -2997.606 0 -3236.164 0 -3455.915 0 -3553.32 0 -3720.056 0 -3822.773 0 -3822.773 0 -3754.071 0 -3822.773 0 -3686.266 0 -3520.634 0 -3455.915 0 -3205.618 0 -3056.01 0 -2911.52 0 -2663.989 0 -2611.123 0 -2507.673 0 -2333.818 0 -2262.049 0 -2168.857 0 -2123.319 0 -2056.314 0 -1926.913 0 -1885.12 0 -1842.981 0 -1774.005 0 -1693.291 0 -1640.719 0 -1538.519 0 -1488.879 0 -1428.186 0 -1345.727 0 -1266.168 0 -1211.098 0 -1168.086 0 -1125.996 0 -1074.726 0 -1024.949 0 -986.1326 0 -938.8578 0 -929.568 0 -902.0267 0 -874.9759 0 -848.4126 0 -813.7485 0 -805.2164 0 -788.312 0 -763.3536 0 -746.9789 0 -730.8145 0 -722.811 0 -699.1135 0 -683.5751 0 -675.8836 0 -660.6552 0 -653.1182 0 -638.1978 0 -623.4818 0 -616.2001 0 -594.7412 0 -594.7412 0 -580.6848 0 -573.7312 0 -566.8271 0 -559.9724 0 -553.1671 0 -539.7039 0 -539.7039 0 -533.0459 0 -533.0459 0 -526.4368 0 -519.8764 0 -513.3647 0 -513.3647 0 -506.9015 0 -506.9015 0 -500.4867 0 -494.1203 0 -487.802 0 -487.802 0 -487.802 0 -481.5319 0 -469.1354 0 -450.8984 0 -463.0088 0 -456.9299 0 -444.9144 0 -438.9776 0 -438.9776 0 -433.088 0 -427.2455 0 -427.2455 0 -421.4498 0 -415.701 0 -415.701 0 -404.3433 0 -398.7342 0 -393.1715 0 -393.1715 0 -387.6549 0 -387.6549 0 -387.6549 0 -387.6549 0 -382.1845 0 -382.1845 0 -376.76 0 -376.76 0 -371.3813 0 -371.3813 0 -366.0484 0 -366.0484 0 -360.7611 0 -360.7611 0 -355.5193 0 -350.3229 0 -345.1717 0 -345.1717 0 -340.0656 0 -335.0045 0 -335.0045 0 -329.9883 0 -325.0169 0 -329.9883 0 -329.9883 0 -289.2198 0 -274.5099 0 -294.2297 0 -242.0249 0 -274.5099 0 -284.2633 0 -304.4111 0 -314.8092 0 -314.8092 0 -309.5829 0 -309.5829 0 -304.4111 0 -309.5829 0 -309.5829 0 -304.4111 0 -299.2934 0 -294.2297 0 -289.2198 0 -294.2297 0 -284.2633 0 -284.2633 0 -289.2198 0 -284.2633 0 -284.2633 0 -284.2633 0 -279.3601 0 -274.5099 0 -274.5099 0 -269.7126 0 -269.7126 0 -269.7126 0 -269.7126 0 -274.5099 0 -269.7126 0 -269.7126 0 -269.7126 0 -269.7126 0 -264.9679 0 -264.9679 0 -260.2755 0 -260.2755 0 -255.6352 0 -260.2755 0 -260.2755 0 -255.6352 0 -251.0469 0 -251.0469 0 -251.0469 0 -251.0469 0 -246.5102 0 -242.0249 0 -246.5102 0 -246.5102 0 -242.0249 0 -242.0249 0 -242.0249 0 -242.0249 0 -246.5102 0 -246.5102 0 -246.5102 0 -242.0249 0 -242.0249 0 -242.0249 0 -242.0249 0 -242.0249 0 -237.5909 0 -233.2078 0 -233.2078 0 -233.2078 0 -237.5909 0 -233.2078 0 -233.2078 0 -233.2078 0 -228.8754 0 -228.8754 0 -216.1805 0 -220.362 0 -212.0488 0 -207.9666 0 -207.9666 0 -224.5936 0 -220.362 0 -220.362 0 -224.5936 0 -199.95 0 -212.0488 0 -224.5936 0 -224.5936 0 -233.2078 0 -237.5909 0 -233.2078 0 -237.5909 0 -228.8754 0 -237.5909 0 -242.0249 0 -242.0249 0 -242.0249 0 -233.2078 0 -191.6347 0 -199.95 0 -207.9666 0 -237.5909 0 -246.5102 0 -246.5102 0 -251.0469 0 -251.0469 0 -255.6352 0 -255.6352 0 -251.0469 0 -251.0469 0 -255.6352 0 -260.2755 0 -255.6352 0 -264.9679 0 -264.9679 0 -264.9679 0 -269.7126 0 -274.5099 0 -279.3601 0 -289.2198 0 -294.2297 0 -304.4111 0 -314.8092 0 -329.9883 0 -335.0045 0 -345.1717 0 -355.5193 0 -366.0484 0 -371.3813 0 -382.1845 0 -398.7342 0 -409.9989 0 -421.4498 0 -433.088 0 -450.8984 0 -475.3097 0 -487.802 0 -513.3647 0 -526.4368 0 -546.411 0 -566.8271 0 -580.6848 0 -594.7412 0 -608.9971 0 -601.8441 0 -601.8441 0 -594.7412 0 -587.6881 0 -573.7312 0 -546.411 0 -553.1671 0 -539.7039 0 -533.0459 0 -519.8764 0 -506.9015 0 -494.1203 0 -487.802 0 -475.3097 0 -469.1354 0 -463.0088 0 -450.8984 0 -444.9144 0 -433.088 0 -427.2455 0 -415.701 0 -409.9989 0 -398.7342 0 -393.1715 0 -398.7342 0 -387.6549 0 -382.1845 0 -376.76 0 -376.76 0 -371.3813 0 -371.3813 0 -366.0484 0 -360.7611 0 -360.7611 0 -355.5193 0 -355.5193 0 -350.3229 0 -345.1717 0 -345.1717 0 -345.1717 0 -340.0656 0 -340.0656 0 -335.0045 0 -329.9883 0 -329.9883 0 -325.0169 0 -329.9883 0 -325.0169 0 -255.6352 0 -264.9679 0 -251.0469 0 -255.6352 0 -255.6352 0 -284.2633 0 -233.2078 0 -264.9679 0 -269.7126 0 -335.0045 0 -335.0045 0 -314.8092 0 -299.2934 0 -309.5829 0 -320.09 0 -309.5829 0 -309.5829 0 -294.2297 0 -314.8092 0 -314.8092 0 -320.09 0 -314.8092 0 -309.5829 0 -246.5102 0 -255.6352 0 -260.2755 0 -284.2633 0 -260.2755 0 -228.8754 0 -251.0469 0 -246.5102 0 -255.6352 0 -242.0249 0 -294.2297 0 -294.2297 0 -304.4111 0 -314.8092 0 -304.4111 0 -294.2297 0 -304.4111 0 -299.2934 0 -309.5829 0 -304.4111 0 -299.2934 0 -309.5829 0 -309.5829 0 -304.4111 0 -274.5099 0 -251.0469 0 -260.2755 0 -299.2934 0 -325.0169 0 -329.9883 0 -340.0656 0 -335.0045 0 -340.0656 0 -345.1717 0 -340.0656 0 -340.0656 0 -335.0045 0 -335.0045 0 -340.0656 0 -329.9883 0 -335.0045 0 -335.0045 0 -309.5829 0 -314.8092 0 -314.8092 0 -314.8092 0 -309.5829 0 -299.2934 0 -284.2633 0 -284.2633 0 -251.0469 0 -284.2633 0 -269.7126 0 -274.5099 0 -255.6352 0 -269.7126 0 -289.2198 0 -284.2633 0 -294.2297 0 -294.2297 0 -289.2198 0 -289.2198 0 -284.2633 0 -284.2633 0 -279.3601 0 -274.5099 0 -274.5099 0 -279.3601 0 -269.7126 0 -264.9679 0 -269.7126 0 -269.7126 0 -264.9679 0 -260.2755 0 -264.9679 0 -260.2755 0 -260.2755 0 -260.2755 0 -260.2755 0 -260.2755 0 -260.2755 0 -264.9679 0 -260.2755 0 -260.2755 0 -255.6352 0 -264.9679 0 -260.2755 0 -255.6352 0 -251.0469 0 -255.6352 0 -251.0469 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -242.0249 0 -246.5102 0 -242.0249 0 -242.0249 0 -233.2078 0 -233.2078 0 -237.5909 0 -216.1805 0 -237.5909 0 -237.5909 0 -233.2078 0 -237.5909 0 -233.2078 0 -233.2078 0 -233.2078 0 -233.2078 0 -228.8754 0 -224.5936 0 -224.5936 0 -228.8754 0 -224.5936 0 -228.8754 0 -228.8754 0 -220.362 0 -224.5936 0 -228.8754 0 -220.362 0 -220.362 0 -220.362 0 -220.362 0 -220.362 0 -207.9666 0 -216.1805 0 -224.5936 0 -224.5936 0 -220.362 0 -203.9338 0 -203.9338 0 -216.1805 0 -216.1805 0 -216.1805 0 -216.1805 0 -207.9666 0 -220.362 0 -207.9666 0 -212.0488 0 -179.5859 0 -179.5859 0 -149.877 0 -153.4022 0 -168.0378 0 - -203.9338 0 -207.9666 0 -203.9338 0 -195.7638 0 -199.95 0 -195.7638 0 -191.6347 0 -156.9805 0 -179.5859 0 -146.4046 0 -175.6814 0 -191.6347 0 -183.5461 0 -203.9338 0 -203.9338 0 -207.9666 0 -207.9666 0 -203.9338 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -203.9338 0 -203.9338 0 -203.9338 0 -203.9338 0 -203.9338 0 -199.95 0 -160.6123 0 -183.5461 0 -191.6347 0 -199.95 0 -203.9338 0 -199.95 0 -203.9338 0 -207.9666 0 -220.362 0 -220.362 0 -216.1805 0 -216.1805 0 -216.1805 0 -216.1805 0 -216.1805 0 -216.1805 0 -212.0488 0 -212.0488 0 -207.9666 0 -207.9666 0 -203.9338 0 -207.9666 0 -207.9666 0 -203.9338 0 -207.9666 0 -203.9338 0 -203.9338 0 - -149.877 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -136.3003 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -129.8213 0 -129.8213 0 -129.8213 0 -126.6578 0 -123.5446 0 -123.5446 0 -123.5446 0 -117.4674 0 -120.4813 0 -117.4674 0 -117.4674 0 -120.4813 0 -105.8997 0 -117.4674 0 -114.5027 0 -117.4674 0 -117.4674 0 -117.4674 0 -114.5027 0 -111.5868 0 -108.7192 0 -114.5027 0 -114.5027 0 -114.5027 0 -114.5027 0 -120.4813 0 -117.4674 0 -114.5027 0 -111.5868 0 -114.5027 0 -108.7192 0 -108.7192 0 -114.5027 0 -117.4674 0 -117.4674 0 -111.5868 0 -117.4674 0 -117.4674 0 -120.4813 0 -114.5027 0 -120.4813 0 -123.5446 0 -120.4813 0 -117.4674 0 -117.4674 0 -120.4813 0 -117.4674 0 -123.5446 0 -126.6578 0 -120.4813 0 -114.5027 0 -108.7192 0 -95.09482 0 -92.51001 0 -75.19812 0 -117.4674 0 -60.37554 0 -95.09482 0 -75.19812 0 -95.09482 0 -120.4813 0 -114.5027 0 -97.72583 0 -111.5868 0 -117.4674 0 -123.5446 0 -120.4813 0 -120.4813 0 -117.4674 0 -117.4674 0 -114.5027 0 -97.72583 0 -126.6578 0 -95.09482 0 -123.5446 0 -117.4674 0 -92.51001 0 -61.00001 0 -59.75121 0 -95.09482 0 -95.09482 0 -117.4674 0 -108.7192 0 -100.4034 0 -97.72583 0 -120.4813 0 -123.5446 0 -120.4813 0 -111.5868 0 -117.4674 0 -126.6578 0 -123.5446 0 -100.4034 0 -95.09482 0 -123.5446 0 -129.8213 0 -126.6578 0 -123.5446 0 -117.4674 0 -126.6578 0 -126.6578 0 -117.4674 0 -126.6578 0 -108.7192 0 -120.4813 0 -120.4813 0 -126.6578 0 -120.4813 0 -123.5446 0 -136.3003 0 -133.0353 0 -129.8213 0 -129.8213 0 -129.8213 0 -123.5446 0 -123.5446 0 -126.6578 0 -133.0353 0 -129.8213 0 -126.6578 0 -126.6578 0 -129.8213 0 -133.0353 0 -133.0353 0 -133.0353 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -139.6166 0 -139.6166 0 -142.9846 0 -142.9846 0 -146.4046 0 -149.877 0 -153.4022 0 -160.6123 0 -175.6814 0 -183.5461 0 -203.9338 0 -228.8754 0 -246.5102 0 -264.9679 0 -279.3601 0 -289.2198 0 -294.2297 0 -289.2198 0 -284.2633 0 -279.3601 0 -289.2198 0 -309.5829 0 -376.76 0 -526.4368 0 -746.9789 0 -938.8578 0 -1095.03 0 -1168.086 0 -1277.358 0 -1334.185 0 -1322.702 0 -1357.329 0 -1357.329 0 -1345.727 0 -1299.912 0 -1288.605 0 -1255.038 0 -1221.995 0 -1211.098 0 -1178.752 0 -1136.433 0 -1084.85 0 -1095.03 0 -1084.85 0 -995.7533 0 -1024.949 0 -967.0572 0 -995.7533 0 -957.6023 0 -948.2026 0 -1024.949 0 -1005.43 0 -967.0572 0 -948.2026 0 -874.9759 0 -839.6661 0 -805.2164 0 -771.6201 0 -738.8705 0 -668.2436 0 -683.5751 0 -668.2436 0 -638.1978 0 -519.8764 0 -526.4368 0 -500.4867 0 -481.5319 0 -463.0088 0 -506.9015 0 -404.3433 0 -444.9144 0 -415.701 0 -409.9989 0 -398.7342 0 -433.088 0 -450.8984 0 -444.9144 0 -450.8984 0 -433.088 0 -421.4498 0 -421.4498 0 -415.701 0 -409.9989 0 -409.9989 0 -398.7342 0 -393.1715 0 -382.1845 0 -376.76 0 -371.3813 0 -360.7611 0 -360.7611 0 -355.5193 0 -345.1717 0 -345.1717 0 -345.1717 0 -340.0656 0 -335.0045 0 -329.9883 0 -325.0169 0 -320.09 0 -320.09 0 -314.8092 0 -309.5829 0 -304.4111 0 -304.4111 0 -304.4111 0 -304.4111 0 -309.5829 0 -314.8092 0 -320.09 0 -329.9883 0 -329.9883 0 -329.9883 0 -325.0169 0 -325.0169 0 -325.0169 0 -320.09 0 -325.0169 0 -320.09 0 -320.09 0 -320.09 0 -314.8092 0 -320.09 0 -320.09 0 -320.09 0 -320.09 0 -320.09 0 -314.8092 0 -309.5829 0 -304.4111 0 -299.2934 0 -294.2297 0 -289.2198 0 -284.2633 0 -284.2633 0 -284.2633 0 -289.2198 0 -279.3601 0 -284.2633 0 -284.2633 0 -284.2633 0 -289.2198 0 -294.2297 0 -289.2198 0 -294.2297 0 -289.2198 0 -299.2934 0 -304.4111 0 -304.4111 0 -294.2297 0 -294.2297 0 -289.2198 0 -289.2198 0 -294.2297 0 -289.2198 0 -284.2633 0 -284.2633 0 -279.3601 0 -274.5099 0 -274.5099 0 -269.7126 0 -260.2755 0 -260.2755 0 -260.2755 0 -255.6352 0 -255.6352 0 -255.6352 0 -251.0469 0 -251.0469 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -251.0469 0 -246.5102 0 -246.5102 0 -242.0249 0 -242.0249 0 -237.5909 0 -242.0249 0 -237.5909 0 -237.5909 0 -233.2078 0 -228.8754 0 -224.5936 0 -224.5936 0 -224.5936 0 -224.5936 0 -224.5936 0 -195.7638 0 -212.0488 0 -164.2979 0 -195.7638 0 -207.9666 0 -212.0488 0 -212.0488 0 -216.1805 0 -207.9666 0 -207.9666 0 -203.9338 0 -199.95 0 -199.95 0 -195.7638 0 -195.7638 0 -195.7638 0 -195.7638 0 -199.95 0 -187.5622 0 -191.6347 0 -187.5622 0 -187.5622 0 -179.5859 0 -179.5859 0 -175.6814 0 -175.6814 0 -175.6814 0 -175.6814 0 -175.6814 0 -171.8321 0 -171.8321 0 -171.8321 0 -175.6814 0 -171.8321 0 -156.9805 0 -164.2979 0 -164.2979 0 -168.0378 0 -156.9805 0 -156.9805 0 -160.6123 0 -160.6123 0 -156.9805 0 -156.9805 0 -153.4022 0 -156.9805 0 -149.877 0 -120.4813 0 -111.5868 0 -133.0353 0 -139.6166 0 -126.6578 0 -139.6166 0 -136.3003 0 -136.3003 0 -114.5027 0 -136.3003 0 -129.8213 0 -129.8213 0 -123.5446 0 -142.9846 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -146.4046 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -146.4046 0 -146.4046 0 -142.9846 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -149.877 0 -146.4046 0 -153.4022 0 -156.9805 0 -220.362 0 -284.2633 0 -274.5099 0 -246.5102 0 -242.0249 0 -260.2755 0 -279.3601 0 -309.5829 0 -309.5829 0 -304.4111 0 -299.2934 0 -289.2198 0 -294.2297 0 -309.5829 0 -320.09 0 -320.09 0 -329.9883 0 -325.0169 0 -329.9883 0 -340.0656 0 -350.3229 0 -360.7611 0 -376.76 0 -409.9989 0 -463.0088 0 -559.9724 0 -722.811 0 -883.9385 0 -1095.03 0 -1404.329 0 -1829.061 0 -2482.281 0 -3026.706 0 -3619.351 0 -4070.41 0 -4444.041 0 -4600.218 0 -4719.93 0 -4719.93 0 -4924.435 0 -4560.807 0 -4444.041 0 -4143.245 0 -3998.507 0 -3652.698 0 -3455.915 0 -3175.282 0 -2940.014 0 -2690.711 0 -2457.076 0 -2215.098 0 -2012.503 0 -1969.371 0 -1856.965 0 -1774.005 0 -1680.056 0 -1601.936 0 -1538.519 0 -1513.578 0 -1464.422 0 -1440.205 0 -1368.99 0 -1357.329 0 -1311.277 0 -1288.605 0 -1255.038 0 -1221.995 0 -1168.086 0 -1125.996 0 -1095.03 0 -1084.85 0 -1034.792 0 -1005.43 0 -957.6023 0 -929.568 0 -902.0267 0 -874.9759 0 -848.4126 0 -822.3341 0 -813.7485 0 -830.9733 0 -839.6661 0 -830.9733 0 -830.9733 0 -830.9733 0 -830.9733 0 -857.213 0 -866.0674 0 -874.9759 0 -892.9554 0 -929.568 0 -967.0572 0 -1054.647 0 -1105.295 0 -1255.038 0 -1380.71 0 -1551.081 0 -1774.005 0 -1990.853 0 -2432.056 0 -2883.227 0 -3175.282 0 -3423.88 0 -3488.166 0 -3652.698 0 -3652.698 0 -3619.351 0 -3488.166 0 -3488.166 0 -3266.919 0 -3115.233 0 -3026.706 0 -2883.227 0 -2744.736 0 -2637.46 0 -2432.056 0 -2309.715 0 -2191.89 0 -2012.503 0 -1948.058 0 -1885.12 0 -1815.203 0 -1733.369 0 -1706.588 0 -1653.77 0 -1601.936 0 -1576.386 0 -1551.081 0 -1476.621 0 -1452.283 0 -1440.205 0 -1428.186 0 -1392.49 0 -1345.727 0 -1299.912 0 -1255.038 0 -1232.951 0 -1200.258 0 -1157.477 0 -1105.295 0 -1084.85 0 -1095.03 0 -1034.792 0 -1005.43 0 -986.1326 0 -967.0572 0 -957.6023 0 -938.8578 0 -920.3329 0 -920.3329 0 -957.6023 0 -1084.85 0 - - \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/time_slice_job_cray.bsub b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/time_slice_job_cray.bsub deleted file mode 100644 index ec1659d..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/old/time_slice_job_cray.bsub +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -############################################################################### -# File name: timeslice_job_cray.bash # -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: Submit the USGS time slice job to the WCOSS Cray machines # -# # -############################################################################### - -#BSUB -J time_slice_for_da # Job name -#BSUB -o time_slice_for_da.out # output filename -#BSUB -e time_slice_for_da.err # error filename -#BSUB -L /bin/sh # shell script -#BSUB -q "dev_shared" # queue -#BSUB -W 00:30 # wallclock time - timing require to complete run -#BSUB -P "OHD-T2O" # Project name -#BSUB -R 'span[ptile=10]' -#BSUB -M 2048 where ## is memory in MB - -source $HOME/.bashrc - -find /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices -mtime +5 -exec rm {} \; - -/gpfs/hps/nwc/save/Zhengtao.Cui/chps-wrf-hydro/usgs_download/analysis/make_time_slice_from_usgs_waterml.py -i /gpfs/hps/nwc/noscrub/Zhengtao.Cui/usgs_flow -o /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices > /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices.log diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/runTimeSlice.sh b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/runTimeSlice.sh new file mode 100755 index 0000000..2ad4053 --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/runTimeSlice.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +wkDir=$(pwd) +cd $wkDir +if [ ! -d output ]; then mkdir -p outputs; fi +rm -f ace.log +time python make_time_slice_from_ace.py \ + -i rawdatafiles \ + -o outputs \ + -s $wkDir/site-file.csv >> ace.log 2>&1 diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/site-file.csv b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/site-file.csv deleted file mode 100644 index aa204d7..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/site-file.csv +++ /dev/null @@ -1,71 +0,0 @@ -usace_gage_id,office,gage,gagedFlowl,WaterbodyID,lakeLink,RFC,NWS_LID -UT10131,SPK,Rockport.Flow-Res Out.Ave.~1Day.1Day.Raw-USBRSLC;MANUAL,10093168,10091800,10093168,CBRFC,WBWU1 -CA10186,SPK,SAC SHA-Shasta Dam-Sacramento R.Flow-Res Out.Ave.~1Day.1Day.Calc-usbr,2782699,2781987,7966205,CNRFC, -TX00020,MVK,Jferson_BigC_Bay.Flow.Inst.15Minutes.0.DCP-rev,1011780,1010832,1011780,LMRFC,JFET2 -MO30202,SWL,Table_Rock_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,7625336,120053569,8586112,LMRFC,FORM7 -AR00174,SWL,Beaver_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,8589764,167299813,8589608,LMRFC,BVGA4 -KY03001,LRN,BARK2-BARKLEY.Flow.Ave.1Hour.1Hour.man-rev,11878940,166899385,11878948,LMRFC,BAHK2 -KY05017,LRN,KYDK2-KENTUCKY.Flow.Ave.1Hour.1Hour.tva-raw,10575371,120052349,10575371,LMRFC,KYDK2 -NY01055,NAB,Whitney Point.Flow-Reg.Inst.1Hour.0.computed outflow OLD,9423843,9422503,9424107,MARFC,WITN6 -CO01281,NWDM,CHFI.Flow-Out.Inst.1Hour.0.Best-NWO,188657,188031,188743,MBRFC,CFDC2 -KS00024,NWDM,NORN.Flow-Out.Ave.1Day.1Day.Best-NWK,8367756,167266511,8367756,MBRFC,NTDK1 -KS00019,NWDM,CEBL.Flow-Out.Ave.1Day.1Day.Best-NWK,18951675,18950909,18951675,MBRFC,ELSK1 -KS00025,NWDM,WEBR.Flow-Out.Ave.1Day.1Day.Best-NWK,5954109,5943595,5945295,MBRFC,STCK1 -KS00022,NWDM,KIRN.Flow-Out.Ave.1Day.1Day.Best-NWK,7347909,7344817,7347909,MBRFC,KRWK1 -KS00021,NWDM,GLEL.Flow-Out.Ave.1Day.1Day.Best-NWK,3537261,120052972,3537261,MBRFC,GLNK1 -NE01057,NWDM,SC14.Flow-Out.Ave.~1Day.1Day.Best-NWO,17405923,17404975,17405923,MBRFC,ERLN1 -KS00023,NWDM,LOVL.Flow-Out.Ave.1Day.1Day.Best-NWK,19017185,19016317,19017757,MBRFC,LOVK1 -NE01048,NWDM,LAMC.Flow-Out.Ave.~1Day.1Day.Raw-CNPPID,17462840,167794979,17462840,MBRFC,KNGN1 -NE01063,NWDM,SC18.Flow-Out.Ave.~1Day.1Day.Best-NWO,17405437,17404931,17405909,MBRFC,RAYN1 -WY01295,NWDM,PATR.Flow-Out.Ave.1Day.1Day.Raw-USBR,15976270,15975492,15976270,MBRFC,PTDW4 -WY01297,NWDM,SEMR.Flow-Out.Ave.1Day.1Day.Raw-USBR,15976386,167245825,15976386,MBRFC,KORW4 -WY01290,NWDM,ALCR.Flow-Out.Ave.1Day.1Day.Raw-USBR,22106341,22103649,22107769,MBRFC, -WY01378,NWDM,BULA.Flow-Out.Ave.1Day.1Day.Raw-USBR,12901134,12898716,12901134,MBRFC,BLRW4 -WY01299,NWDM,BOYN.Flow-Out.Ave.1Day.1Day.Raw-USBR,12870023,12869679,12871081,MBRFC,SBDW4 -SD01092,NWDM,BEND.Flow-Out.Ave.~1Day.1Day.Best-MRBWM,11546856,11546100,11546856,MBRFC,BBDS2 -SD01093,NWDM,FTRA.Flow-Out.Ave.~1Day.1Day.Best-MRBWM,11550820,120053557,11550820,MBRFC,FRDS2 -WY01300,NWDM,BUBI.Flow-Out.Ave.1Day.1Day.Raw-USBR,4425887,12793741,12794325,MBRFC,CDYW4 -MT00569,NWDM,CLCA.Flow-Out.Ave.1Day.1Day.Raw-USBR,4165978,4167440,4170578,MBRFC,CLKM8 -MT00576,NWDM,YETL.Flow-Out.Ave.1Day.1Day.Raw-USBR,12801362,167204997,12801364,MBRFC,BHRM8 -SD01141,NWDM,SHHI.Flow-Out.Ave.~1Day.1Day.Best-NWO,16188778,21861936,16188778,MBRFC,SHAS2 -ND00151,NWDM,JATO.Flow-Out.Ave.~1Day.1Day.Best-NWO,12577680,120053643,12577680,MBRFC,JMDN8 -MT00568,NWDM,CAFE.Flow-Out.Ave.1Day.1Day.Raw-USBR,3024978,167204871,3024978,MBRFC,CYNM8 -MT00559,NWDM,HOLM.Flow.Inst.1Hour.0.Best-NWDM,3021998,120051950,3022000,MBRFC,HTRM8 -MT00560,NWDM,HSMT.Flow.Inst.1Hour.0.Best-NWDM,3024846,3022162,3024850,MBRFC,HASM8 -MT00025,NWDM,FTPK.Flow-Out.Ave.~1Day.1Day.Best-MRBWM,12461756,167204901,940040008,MBRFC,FPKM8 -IL00117,MVS,Rend Lk-Big Muddy.Flow-Out.Ave.~1Day.1Day.lakerep-rev,13779254,167156996,13779550,NCRFC,RNDI2 -IL00113,MVS,Carlyle Lk-Kaskaskia.Flow-Out.Ave.~1Day.1Day.lakerep-rev,13871378,167122265,13876230,NCRFC,CAYI2 -MO82201,MVS,Mark Twain Lk-Salt.Flow-Out.Ave.~1Day.1Day.lakerep-rev,4867723,937110111,4867727,NCRFC,CDAM7 -IL00118,MVS,Lk Shelbyville-Kaskaskia.Flow-Out.Ave.~1Day.1Day.lakerep-rev,13772418,167122256,13772400,NCRFC,SBYI2 -MN00594,MVP,LockDam_02.Flow.Inst.15Minutes.0.comp,1101436,120051919,1101436,NCRFC,HSTM5 -MN00581,MVP,Highway75_Dam-ServiceSpillway.Flow-Out.Inst.~1Day.0.CEMVP-Legacy,4086200,4083202,4085966,NCRFC,ODEM5 -MN00582,MVP,MissHW_PineRiver.Flow-Out.Inst.~1Day.0.CEMVP-Legacy,4622350,4620258,4622350,NCRFC,CRLM5 -MN00574,MVP,Orwell_Dam.Flow-Out.Inst.15Minutes.0.rev,909020763,6657709,909020763,NCRFC,ORWM5 -MN00586,MVP,MissHW_Winni.Flow-Out.Inst.~1Day.0.CEMVP-Legacy,22328037,167122141,22328037,NCRFC,WNBM5 -MN00585,MVP,MissHW_Leech.Flow-Out.Inst.~1Day.0.CEMVP-Legacy,4819627,4817675,4819627,NCRFC,FEDM5 -PortHuron,LRE,PortHuron.Flow.Inst.0.0.shef-raw,13196034,4800004,13196034,NCRFC, -CT00506,NAE,CRD.Flow.Ave.15Minutes.6Hours.DCP-rev,6107093,6106841,6107211,NERFC, -NH00003,NAE,FFD.Flow.Inst.15Minutes.0.DCP-rev,166174264,166174267,166174264,NERFC, -OR00015,NWDP,CGR.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23773011,23777431,23773011,NWRFC,CGRO3 -ID00287,NWDP,DWR.Flow-Out.Ave.~6Hours.6Hours.CBT-COMPUTED-REV,23630892,23634782,23630892,NWRFC,DWRI1 -TN04102,LRN,CETT1-CENTER_HILL.Flow.Ave.1Hour.1Hour.man-rev,18434275,167122309,18434275,OHRFC, -TN03722,LRN,OHIT1-OLD_HICKORY.Flow.Ave.1Hour.1Hour.man-rev,18415989,18415569,18416017,OHRFC,OHGT1 -TN03701,LRN,JPPT1-J_PERCY_PRIEST.Flow.Ave.1Hour.1Hour.man-rev,18401827,120052688,18401827,OHRFC,JPPT1 -KY03029,LRH,Dewey-Outflow.Flow.Inst.1Hour.0.OBS,886789,885333,886789,OHRFC,DWYK2 -KY03028,LRH,Fishtrap-Outflow.Flow.Inst.1Hour.0.OBS,1089105,1086587,1089105,OHRFC,FTLK2 -WV08902,LRH,Bluestone-Outflow.Flow.Inst.1Hour.0.OBS,6906513,6906421,6906513,OHRFC,BLLW2 -WV06702,LRH,Summersville-Outflow.Flow.Inst.1Hour.0.OBS,4548090,4547794,4548090,OHRFC,SUMW2 -WV09901,LRH,EastLynn-Outflow.Flow.Inst.1Hour.0.OBS,3964916,3964366,3964916,OHRFC,ELSW2 -KY03030,LRH,Grayson-Outflow.Flow.Inst.1Hour.0.OBS,1936384,120052749,1936720,OHRFC,GRAK2 -OH00017,LRH,PaintCr-Outflow.Flow.Inst.1Hour.0.OBS,5232686,5231436,5233352,OHRFC,BBRO1 -WV00707,LRH,Burnsville-Outflow.Flow.Inst.1Hour.0.OBS,19417491,76669453,19417491,OHRFC,BRNW2 -OH00010,LRH,Tappan-Lake.Flow.Inst.1Hour.0.OBS,19392734,19390686,19392734,OHRFC,TAPO1 -OH00002,LRH,WillsCr-Outflow.Flow.Inst.1Hour.0.OBS,15371872,15370770,15371872,OHRFC,WCLO1 -OH00016,LRH,Mohawk-Outflow.Flow.Inst.1Hour.0.OBS,167484595,167484603,167484595,OHRFC,MHWO1 -OH00019,LRH,Mohicanville-Outflow.Flow.Inst.1Hour.0.OBS,167484497,167484552,167484498,OHRFC,MCHO1 -OH00020,LRH,CharlesMill-Outflow.Flow.Inst.1Hour.0.OBS,15410097,15408897,15411519,OHRFC,CHAO1 -LA00181,MVK,Caddo Lake.Flow.Inst.1Hour.0.DCP-rev,1016769,167300381,1016769,LMRFC,LCOL1 -PA01939,LRP,LakeLynn-Outflow.Flow.Inst.1Hour.0.OBS,3773975,3773141,3773977,OHRFC,PMAW2 -ND00146,NWDM,PIST.Flow-Out.Ave.~1Day.1Day.Best-NWO,11505172,120053541,11505172,MBRFC,JAMN8 -WA00170,NWDP,DIA.Flow-Out.Ave.~1Day.1Day.CBT-REV,24255201,24260717,24255205,NWRFC,DIAW1 -WY01380,NWDM,KEYO.Flow-Out.Ave.1Day.1Day.Raw-USBR,10906553,10904095,10906421,MBRFC,KEYW4 diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/test_CWMS_Sites.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/test_CWMS_Sites.py index 83f3561..99cf494 100644 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/test_CWMS_Sites.py +++ b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/test_CWMS_Sites.py @@ -1,5 +1,6 @@ +#!/usr/bin/env python ############################################################################### -# File name: make_time_slice_from_usgs_waterml.py +# File name: make_time_slice_from_ace.py # # # Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # # # @@ -7,7 +8,7 @@ # # # Last modification date: 7/12/2017 # # # -# Description: The driver to create NetCDF time slice files from USGS # +# Description: The driver to create NetCDF time slice files from USACE # # real-time observations # # # ############################################################################### @@ -18,7 +19,6 @@ from datetime import datetime, timedelta from CWMS_Sites import CWMS_Sites import csv -#import Tracer """ The driver to parse downloaded waterML 2.0 observations and diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_historic_download.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_historic_download.py index e7d906a..e1bb6ed 100644 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_historic_download.py +++ b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/CWMS_historic_download.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python from datetime import datetime import csv @@ -124,7 +125,7 @@ def get_flows_and_times(downloader, office, name, start): else: print(part1) except: - print("Error no data from office="+office+" name="+name) + print("FATAL ERROR: No data from office="+office+" name="+name) # print(times) # print(flows) diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/README b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/README new file mode 100644 index 0000000..5bf4fb8 --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/README @@ -0,0 +1,7 @@ +- Dec 2024: Changed XML to Json file format +- USACE url: +https://cwms.sec.usace.army.mil/cwms-data/timeseries?name=KEYO.Flow-Out.Ave.1Day.1Day.Raw-USBR&office=NWDM&begin=PT-48h + +wget -O out.json "http://water.usace.army.mil/cwms-data/timeseries?office=NWDM&name=KEYO.Flow-Out.Ave.1Day.1Day.Raw-USBR&begin=PT-48h&format=json" | python -m json.tool out.json > out.json + +curl -X 'GET' 'https://cwms.sec.usace.army.mil/cwms-data/timeseries?name=KEYO.Flow-Out.Ave.1Day.1Day.Raw-USBR&office=NWDM&begin=PT-48h' -H 'accept: application/json;version=2' | python -m json.tool > out.json diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/CWMSDownloader.py b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/CWMSDownloader.py index b81dfd2..30a3029 100644 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/CWMSDownloader.py +++ b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/gov/noaa/nwc/cwmstools/CWMSDownloader.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python import ssl import urllib.request @@ -10,7 +11,8 @@ class CWMSDownloader: #def __init__(self, url="http://cwms-data.usace.army.mil/cwms-data/timeseries?"): #def __init__(self, url="https://water.usace.army.mil/cwms-data/timeseries?"): - def __init__(self, url="http://water.usace.army.mil/cwms-data/timeseries?"): + #def __init__(self, url="http://water.usace.army.mil/cwms-data/timeseries?"): + def __init__(self, url="http://cwms.sec.usace.army.mil/cwms-data/timeseries?"): """Constructor for CWMS Downloader class""" self.service_url = url diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace_DevTest.sh b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace_DevTest.sh new file mode 100755 index 0000000..c910b7b --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/run_usace_DevTest.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +############################################################################### +# File name: run_usace.sh # +# # +# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # +# # +# Initial version date: # +# # +# Last modification date: 2/11/2020 # +# # +# # +# Description: Run the US SACE Stream Flow scripts # +# Supported by the NWS Water Predication Center # +# # +# OWP 12/12/2024 Change download xml to json data format. # +# # +############################################################################### + +module unload python +module load python +module list + +#log=$DBNROOT/user/usace_streamflow/parallel_download_master.log +log=/lfs/h1/owp/ptmp/$LOGNAME/usace_streamflow/usace_download.log + +SITE_FILE=./site-file.csv + +#OUTDIR=$DCOMROOT/${envir}/usace_streamflow +OUTDIR=/lfs/h1/owp/ptmp/$LOGNAME/usace_streamflow + +if [ ! -e ${OUTDIR} ]; then mkdir -p ${OUTDIR}; fi + +USACE_DOWNLOAD_MASTER=./CWMS_download_current.py + +DATE=`/bin/date +%H:%M` + +RESETLOGAT="05:28" + +if [ "$DATE" = "$RESETLOGAT" ] +then + echo "Message: reset ${USACE_DOWNLOAD_MASTER} log file" + rm $log +fi + +# Check if process is already running with this package +if pgrep -f ${USACE_DOWNLOAD_MASTER} > /dev/null 2>&1 +then + echo "Message: ${USACE_DOWNLOAD_MASTER} package is running" + +else + echo "Message: ${USACE_DOWNLOAD_MASTER} package NOT running" + nohup python $USACE_DOWNLOAD_MASTER -f json ${SITE_FILE} ${OUTDIR} >> $log 2>&1 & + echo "Message: ${USACE_DOWNLOAD_MASTER} package started" +fi +exit diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/site-file.csv b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/site-file.csv index aa204d7..55959a1 100644 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/site-file.csv +++ b/data_assimilation_engine/Streamflow_Scripts/ace_download/stream_flow_download/site-file.csv @@ -69,3 +69,4 @@ PA01939,LRP,LakeLynn-Outflow.Flow.Inst.1Hour.0.OBS,3773975,3773141,3773977,OHRFC ND00146,NWDM,PIST.Flow-Out.Ave.~1Day.1Day.Best-NWO,11505172,120053541,11505172,MBRFC,JAMN8 WA00170,NWDP,DIA.Flow-Out.Ave.~1Day.1Day.CBT-REV,24255201,24260717,24255205,NWRFC,DIAW1 WY01380,NWDM,KEYO.Flow-Out.Ave.1Day.1Day.Raw-USBR,10906553,10904095,10906421,MBRFC,KEYW4 +OR00001,NWDP,BON.Flow-Out.Ave.1Hour.1Hour.CBT-REV,???,???,???,NWRFC,BONO3 diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py index dbc5ea2..82f182b 100644 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py +++ b/data_assimilation_engine/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python class EmptyDirOrFileException( Exception ): """Exception raised for empty input files or directories. Attributes: diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py index be6dd6a..477482d 100644 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py +++ b/data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python + import os, sys, time, math from string import * from datetime import datetime, timedelta diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py index 8727038..ac96446 100644 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py +++ b/data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py @@ -2,11 +2,13 @@ from contextlib import closing import os, sys, time, getopt, re -import datetime, time +from datetime import datetime, timedelta +import time import pytz from string import * from six.moves import urllib import ssl +import fetch_hydrometric_csv #import HTMLParser @@ -46,32 +48,36 @@ def fetch_ca_sites( sites, province, odir ): # Loop through each station # for site_id in sites: - print( datetime.datetime.now(), end = " --- " ) + print( datetime.now(), end = " --- " ) print( 'downloading ', site_id ) # # Construct the query URL # - dirstring = 'https://dd.weather.gc.ca/hydrometric/csv/' + province + '/hourly/' - filename = province + '_' + site_id + '_hourly_hydrometric.csv' - URL = ( dirstring + filename ) - localFile = odir + os.path.sep + filename - print( datetime.datetime.now(), end = " --- " ) - print( "URL: " + URL) - print( datetime.datetime.now(), end = " --- " ) - print( "local file: " + localFile) - - # - # Connect to the server - # - try: - lFile = urllib.request.urlretrieve(URL, localFile) - good_sites = good_sites + (site_id,) - except IOError as e: - #print ('WARN: site : ', site_id, ' skipped - ' #, e.reason) - # - # If failed, remember the station id and continue - # - fail_sites = fail_sites + ( site_id, ) + + base_url = "https://dd.weather.gc.ca/{date}/WXO-DD/hydrometric/csv/{province}/hourly/" + for delta in [0, 1]: # try today, then yesterday + date_str = (datetime.utcnow() - timedelta(days=delta)).strftime("%Y%m%d") + filename = province + '_' + site_id + '_hourly_hydrometric.csv' + URL = base_url.format(date=date_str, province=province) + filename + localFile = odir + os.path.sep + filename + print( datetime.now(), end = " --- " ) + print( "URL: " + URL) + print( datetime.now(), end = " --- " ) + print( "local file: " + localFile) + try: + # + # Connect to the server + # + lFile = urllib.request.urlretrieve(URL, localFile) + good_sites = good_sites + (site_id,) + print(f"Success: {URL}") + break + except Exception as e: + # + # If failed, remember the station id and continue + # + fail_sites = fail_sites + ( site_id, ) + print(f"Failed ({date_str}): {e}") return good_sites, fail_sites @@ -85,7 +91,7 @@ def build_download_list( province, odir ): # Get the UTC offset, in seconds, then convert that to a # timedelta object. # - tz_offset = datetime.timedelta(seconds=time.timezone) + tz_offset = timedelta(seconds=time.timezone) # # Define the regular expression search patterns that will be repeatedly used @@ -99,8 +105,8 @@ def build_download_list( province, odir ): # # Define some useful date constants # - missing_time = datetime.datetime(1000, 1, 1, 1, 1, 1, 1) - future_offset = datetime.timedelta(days=99999) + missing_time = datetime(1000, 1, 1, 1, 1, 1, 1) + future_offset = timedelta(days=99999) # # Get the directory listing from the web page. @@ -112,13 +118,14 @@ def build_download_list( province, odir ): sitelist=list() urllib.request.urlcleanup() - urlstring = 'https://dd.weather.gc.ca/hydrometric/csv/' + province + '/hourly/' - print( datetime.datetime.now(), end = " --- " ) - print( urlstring ) - with closing(urllib.request.urlopen(urlstring)) as dirlisting: - for line in dirlisting: - s = line.decode('ascii') - match_site = site_pattern.search(s) + #urlstring = 'https://dd.weather.gc.ca/hydrometric/csv/' + province + '/hourly/' + #urlstring = 'https://dd.weather.gc.ca/today/hydrometric/csv/' + province + '/hourly/' + dirlisting = fetch_hydrometric_csv.fetch_hydrometric_csv( province ) + data_str = dirlisting.decode('utf-8') + print( datetime.now(), end = " --- " ) + lines = data_str.splitlines(keepends=True) + for line in lines: + match_site = site_pattern.search(line) if (match_site): total_sites += 1 fname = match_site.group(0) # e.g. "ON_02AB006_hourly_hydrometric.csv" @@ -136,7 +143,7 @@ def build_download_list( province, odir ): if os.path.isfile(local_file): try: lfm = os.path.getmtime(local_file) # local file mod time (float value) - l_mod_time = datetime.datetime.fromtimestamp(lfm) + l_mod_time = datetime.fromtimestamp(lfm) l_mod_time = l_mod_time + tz_offset except: l_mod_time = missing_time @@ -152,13 +159,13 @@ def build_download_list( province, odir ): # "new", and needing to be updated. The resulting sitelist will contain # a list of the site IDs for those files that need to be updated. # - match_ts = ts_pattern.search(s) + match_ts = ts_pattern.search(line) if match_ts: ds = match_ts.group(0) try: - r_mod_time = datetime.datetime.strptime(ds, '%Y-%m-%d %H:%M') + r_mod_time = datetime.strptime(ds, '%Y-%m-%d %H:%M') except: - r_mod_time = datetime.datetime.now() + r_mod_time = datetime.now() else: r_mod_time = l_mod_time + future_offset # default future value @@ -170,7 +177,7 @@ def build_download_list( province, odir ): except Exception: pass - print( datetime.datetime.now(), end = " --- " ) + print( datetime.now(), end = " --- " ) print(len(sitelist), ' of ', total_sites, ' need to be updated') return sitelist @@ -255,7 +262,7 @@ def canadian_flow_retrieval( odir ): j = len(fail_sites) except: j = 0 - print( datetime.datetime.now(), end = " --- " ) + print( datetime.now(), end = " --- " ) print('There were ', i, ' good downloads and ', j, ' failed downloads') diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/fetch_hydrometric_csv.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/fetch_hydrometric_csv.py new file mode 100644 index 0000000..3f7e0bf --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/canada_download/fetch_hydrometric_csv.py @@ -0,0 +1,24 @@ +import urllib.request +from datetime import datetime, timedelta +from contextlib import closing + + +def fetch_hydrometric_csv(province): + base_url = "https://dd.weather.gc.ca/{date}/WXO-DD/hydrometric/csv/{province}/hourly/" + + for delta in [0, 1]: # try today, then yesterday + date_str = (datetime.utcnow() - timedelta(days=delta)).strftime("%Y%m%d") + url = base_url.format(date=date_str, province=province) + try: + with closing( urllib.request.urlopen(url, timeout=30)) as response: + data = response.read() + print(f"Success: {url}") + return data + except Exception as e: + print(f"Failed ({date_str}): {e}") + + raise RuntimeError(f"Could not retrieve data for province '{province}' for today or yesterday.") + + +if __name__ == "__main__": + data = fetch_hydrometric_csv("ON") diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py index 295b568..77f02dc 100644 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py +++ b/data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python import os, sys, time, urllib, getopt import logging from string import * @@ -33,12 +34,12 @@ def main(argv): elif opt in ('-i', "--idir"): inputdir = arg if not os.path.exists( inputdir ): - raise RuntimeError( 'FATAL Error: inputdir ' + \ + raise RuntimeError( 'FATAL ERROR: inputdir ' + \ inputdir + ' does not exist!' ) elif opt in ('-o', "--odir" ): outputdir = arg if not os.path.exists( outputdir ): - raise RuntimeError( 'FATAL Error: outputdir ' + \ + raise RuntimeError( 'FATAL ERROR: outputdir ' + \ outputdir + ' does not exist!' ) return (inputdir, outputdir) diff --git a/data_assimilation_engine/Streamflow_Scripts/nco_canada/streamflow_download/README.TXT b/data_assimilation_engine/Streamflow_Scripts/nco_canada/streamflow_download/README.TXT new file mode 100755 index 0000000..4aa2087 --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/nco_canada/streamflow_download/README.TXT @@ -0,0 +1,51 @@ +# Overview +This directory contains shell scripts to download Environment Canada streamflow observations in realtime from https://wateroffice.ec.gc.ca/mainmenu/real_time_data_index_e.html. There are two scripts. They are run in twp steps. First, run the `get_station_list.sh` to get a list of station IDs. Than run the `get_canadian_streamgauge.sh` script to download observed values for each of the stations in the list. + +Three types of variables are downloaded, 5(??), 46(water level), and 47(discharge). We use only discharge here. + +# Prerequisite + +A DBNROOT directory for storing log files, temporary files and the station list file. + +A DCOMROOT directory for storing the raw data files. + +# Script description +`get_station_list.sh`: This script downloads all station IDs that have observed data for variables 5, 46 and 47. The `stations_all.txt` file in the current directory that contains a list of station IDs is created from this script. +`get_canadian_streamgauge.sh`: This script read the `stations_all.txt` and download observed values fro variables 5, 46, and 47. Save the files in `${YYYYMMDD}/can_streamgauge` under the given `$DBNROOT`. + +# Script Usage + +## Setup environmental variables +Set the DBNROOT and DCOMROOT environmental variables +For example, + +``` +export DCOMROOT=/path/to/dcomroot +export DBNROOT=/path/to/dbnroot +``` +## Create directories +``` +mkdir -p $DCOMROOT/ +mkdir -p $DBNROOT/user/can_streamgauge +mkdir -p $DBNROOT/log +mkdir -p $DBNROOT/tmp +``` + +## Fetch station IDs + +``` +cd $DBNROOT/user/can_streamgauge +source /path/to/get_station_list.sh +``` +Output file, stations_all.txt, is saved in the current directory, $DBNROOT/user/can_streamgauge + +The log file is saved to the directory at `$DBNROOT/log`. + +## Download the realtime data + +``` +cd $DBNROOT/user/can_streamgauge +source /path/to/get_canadian_streamgauge.sh +``` +The output files files are saved in `$DCOMROOT/${YYYYMMDD}/can_streamgauge` where `${YYYYMMDD}` is current date. + diff --git a/data_assimilation_engine/Streamflow_Scripts/nco_canada/streamflow_download/get_canadian_streamgauge.sh b/data_assimilation_engine/Streamflow_Scripts/nco_canada/streamflow_download/get_canadian_streamgauge.sh new file mode 100644 index 0000000..046a727 --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/nco_canada/streamflow_download/get_canadian_streamgauge.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +# +# Script to pull Canadian streamgauge data using list of stations stored locally +# +##---check if process is already running -------------------- +#cb_proc="get_canadian_streamgauge" +#if ps -ef | grep "get_canadian_streamgauge.sh" | grep -v grep > /dev/null +#then +# echo "[$(date)] : $cb_proc process already running" +# exit 1 +#fi +##------------------------------------------------------------ + +YYYYMMDD=`date -u +%Y%m%d` +#DATADIR="/lfs/h1/ops/prod/dcom/${YYYYMMDD}/can_streamgauge" +DATADIR="$DCOMROOT/${YYYYMMDD}/can_streamgauge" + +#LDIR="/dfprod/dbnet/user/can_streamgauge" +LDIR="$DBNROOT/user/can_streamgauge" +LOG=$DBNROOT/log/can_streamgauge.log.${YYYYMMDD} + +DD1=$(date -u +%Y-%m-%d) +DD2=$(date --date '2 days ago' +%Y-%m-%d) + +url_start="https://wateroffice.ec.gc.ca/services/real_time_data/csv/inline?stations[]=" +url_end="¶meters[]=5¶meters[]=46¶meters[]=47&start_date="${DD2}"%2000:00:00&end_date="${DD1}"%2023:59:59" + +# DECODER="/lfs/h1/ops/prod/decoders/decod_dcwcan/scripts/copy_and_run_dcwcan.sh" + +if [ ! -d ${DATADIR} ]; then + mkdir -p -m 775 ${DATADIR} +fi + +## Data pull +######################################## + +stations_file="stations_all.txt" +nstations=$(cat ${LDIR}/${stations_file} | wc -l) + +for i in `seq $nstations` + do + station=$(cat ${LDIR}/${stations_file} | head -${i} | tail -1) + curl_str=$(echo ${url_start}${station}${url_end}) + local_filename=${station}"_hydrometric.csv" + + output=`curl -w "%{size_download}\n" -s -o ${DATADIR}/${local_filename} ${curl_str}` + # options: w=output file size, s=silent/no output to terminal, o=specify local file name + # removed option: R=use upstream file timestamp. The same as local since URL-generated file + + if [ "${output}" -gt 0 ]; then + echo 'Successful pull, station ' ${station} 'at ' $(date -u +%Y%m%d-%H:%M:%S) >> ${LOG} + touch $DBNROOT/tmp/can_streamgauge + decoder=1 + else + echo 'Not pulled, station ' ${station} 'at ' $(date -u +%Y%m%d-%H:%M:%S) >> ${LOG} + fi + +done + +### Run decoder +######################################### +# +## Run the decoder if a new file was pulled +#if [ "${decoder}" == 1 ]; then +# ${DECODER} "${DATADIR}" +#fi + +echo 'Pull complete' diff --git a/data_assimilation_engine/Streamflow_Scripts/nco_canada/streamflow_download/get_station_list.sh b/data_assimilation_engine/Streamflow_Scripts/nco_canada/streamflow_download/get_station_list.sh new file mode 100644 index 0000000..e64c5d7 --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/nco_canada/streamflow_download/get_station_list.sh @@ -0,0 +1,20 @@ +#!/usr/bin/sh + +YYYYMMDD=`date -u +%Y%m%d` +#LDIR="/dfprod/dbnet/user/can_streamgauge" +LDIR="$DBNROOT/user/can_streamgauge" + +for varnum in 5 46 47; do + local_tmpname="station_list_tmp_var${varnum}.txt" + local_filename="stations_all_var${varnum}.txt" + curl -s -o ${LDIR}/${local_tmpname} "https://wateroffice.ec.gc.ca/services/recent_real_time_data/csv/inline?parameters[]=${varnum}" + cat ${LDIR}/${local_tmpname} | grep ${varnum} | awk -F "," '{print $1}' > ${LDIR}/${local_filename} +done +echo 'Pull complete' + +cat ${LDIR}/stations_all_var*.txt | sort -u > stations_all.txt + +echo 'Station extraction complete' + +rm -v ${LDIR}/station_list_tmp_var*.txt +rm -v ${LDIR}/stations_all_var*.txt diff --git a/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/EmptyDirOrFileException.py b/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/EmptyDirOrFileException.py new file mode 100644 index 0000000..82f182b --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/EmptyDirOrFileException.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python +class EmptyDirOrFileException( Exception ): + """Exception raised for empty input files or directories. + Attributes: + expression -- input expression in which the error occurred + message -- explanation of the error + """ + pass + +# def __init__(self, message): +# self.expression = expression +# self.message = message diff --git a/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/NWM_canadian_gage_inputs.txt b/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/NWM_canadian_gage_inputs.txt new file mode 100644 index 0000000..f466ffa --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/NWM_canadian_gage_inputs.txt @@ -0,0 +1,349 @@ +OBJECTID,ID,Name___Nom,Latitude,Longitude,Prov_Terr,Timezone___Fuseau_horaire,HydroID2,NEAR_FID,NEAR_DIST +1,02AB006,KAMINISTIQUIA RIVER AT KAMINISTIQUIA,48.532780000000002,-89.594170000000005,ON,UTC-05:00,41041618,41624,0.000000000464077 +2,02AB008,NEEBING RIVER NEAR THUNDER BAY,48.382219999999997,-89.307779999999994,ON,UTC-05:00,41042491,42497,0.000000000244068 +3,02AB014,NORTH CURRENT RIVER NEAR THUNDER BAY,48.501109999999997,-89.179730000000006,ON,UTC-05:00,41041874,41880,0.000000003319852 +4,02AB017,WHITEFISH RIVER AT NOLALU,48.291670000000003,-89.809169999999995,ON,UTC-05:00,41042987,42993,0.000000000116570 +5,02AB019,MCVICAR CREEK AT THUNDER BAY,48.449440000000003,-89.219170000000005,ON,UTC-05:00,41042193,42199,0.000000000066013 +6,02AB020,MCINTYRE RIVER ABOVE THUNDER BAY,48.482500000000002,-89.325280000000006,ON,UTC-05:00,41041994,42000,0.000000000435397 +7,02AB021,CURRENT RIVER AT STEPSTONE,48.562500000000000,-89.240840000000006,ON,UTC-05:00,41041500,41506,0.000000000161894 +8,02AB022,CORBETT CREEK NEAR MURILLO,48.429160000000003,-89.545000000000002,ON,UTC-05:00,41042212,42218,0.000000000175360 +9,02AB023,SLATE RIVER NEAR THUNDER BAY,48.324750000000002,-89.404859999999999,ON,UTC-05:00,41042800,42806,0.000000000365750 +10,02AB024,NEEBING RIVER NEAR INTOLA,48.443559999999998,-89.358559999999997,ON,UTC-05:00,41042197,42203,0.000000002545407 +11,02AB025,KAMINISTIQUIA RIVER AT WEST FORT WILLIAM,48.347861999999999,-89.353279000000001,ON,UTC-05:00,41042748,42754,0.000000000698628 +12,02AB026,KAMINISTIQUIA RIVER ABOVE WEST FORT WILLIAM,48.345531000000001,-89.386780000000002,ON,UTC-05:00,41042715,42721,0.000000000237559 +13,02AC001,WOLF RIVER AT HIGHWAY NO. 17,48.821950000000001,-88.535280000000000,ON,UTC-05:00,41040015,40021,0.000000000529449 +14,02AC002,BLACK STURGEON RIVER AT HIGHWAY NO. 17,48.903610000000000,-88.377219999999994,ON,UTC-05:00,41039385,39391,0.000000000144285 +15,02AD010,BLACKWATER RIVER AT BEARDMORE,49.602780000000003,-87.963890000000006,ON,UTC-05:00,41034617,34623,0.000000000190115 +16,02AD012,NIPIGON RIVER BELOW ALEXANDER GENERATING STATION,49.123750000000001,-88.358277999999999,ON,UTC-05:00,41037694,37700,0.000000000116139 +17,02AE001,GRAVEL RIVER NEAR CAVERS,48.926000000000002,-87.690190000000001,ON,UTC-05:00,41039416,39422,0.000000002921137 +18,02BA003,LITTLE PIC RIVER NEAR COLDWELL,48.849170000000001,-86.607219999999998,ON,UTC-05:00,41040077,40083,0.000000000221626 +19,02BA005,WHITESAND RIVER ABOVE SCHREIBER AT MINOVA MINE,48.978110000000001,-87.376779999999997,ON,UTC-05:00,41039144,39150,0.000000002339008 +20,02BA006,STEEL RIVER BELOW SANTOY LAKE,48.814450000000001,-86.859440000000006,ON,UTC-05:00,41040589,40595,0.000000000187670 +21,02BB003,PIC RIVER NEAR MARATHON,48.773890000000002,-86.296940000000006,ON,UTC-05:00,41040675,40681,0.000000004859485 +22,02BB004,CEDAR CREEK NEAR HEMLO,48.707500000000003,-85.910839999999993,ON,UTC-05:00,41041144,41150,0.000000000391943 +23,02BC004,WHITE RIVER BELOW WHITE LAKE,48.655279999999998,-85.742230000000006,ON,UTC-05:00,41041470,41476,0.000000004898968 +24,02BC006,PUKASKWA RIVER BELOW FOX RIVER,48.160280000000000,-85.730528000000007,ON,UTC-05:00,41044019,44025,0.000000000463279 +27,02BD006,WAWA CREEK AT WAWA,47.989440000000002,-84.767830000000004,ON,UTC-05:00,41044694,44700,0.000000000301728 +28,02BD007,MAGPIE RIVER NEAR WAWA,48.021999999999998,-84.813170000000000,ON,UTC-05:00,41044540,44546,0.000000000427911 +29,02BF001,BATCHAWANA RIVER NEAR BATCHAWANA,47.003610000000002,-84.515559999999994,ON,UTC-05:00,41047018,47024,0.000000001993411 +30,02BF002,GOULAIS RIVER NEAR SEARCHMONT,46.860830000000000,-83.971940000000004,ON,UTC-05:00,41047141,47147,0.000000000274985 +31,02BF004,BIG CARP RIVER NEAR SAULT STE. MARIE,46.515830000000001,-84.465000000000003,ON,UTC-05:00,41047344,47350,0.000000000134143 +32,02BF014,GOULAIS RIVER NEAR KIRBY'S CORNER,46.717469999999999,-84.284610000000001,ON,UTC-05:00,41047281,47287,0.000000000627557 +33,02CA002,ROOT RIVER AT SAULT STE. MARIE,46.562779999999997,-84.281940000000006,ON,UTC-05:00,41011500,11505,0.000000000257833 +35,02CA007,THESSALON RIVER NEAR POPLAR DALE,46.530389999999997,-83.709580000000003,ON,UTC-05:00,41011995,12000,0.000000000059924 +36,02CB003,AUBINADONG RIVER ABOVE SESABIC CREEK,46.968330000000002,-83.416939999999997,ON,UTC-05:00,41008367,8372,0.000000000079675 +37,02CC005,LITTLE WHITE RIVER NEAR BELLINGHAM,46.391669999999998,-83.281670000000005,ON,UTC-05:00,41012842,12847,0.000000002817825 +38,02CC010,LITTLE WHITE RIVER BELOW BOLAND RIVER,46.581110000000002,-82.967780000000005,ON,UTC-05:00,41011377,11382,0.000000012049102 +39,02CD001,SERPENT RIVER AT HIGHWAY NO. 17,46.210780000000000,-82.512420000000006,ON,UTC-05:00,41014103,14108,0.000000000158543 +40,02CD006,SERPENT RIVER ABOVE QUIRKE LAKE,46.511110000000002,-82.600830000000002,ON,UTC-05:00,41011866,11871,0.000000002032239 +41,02CE002,AUX SABLES RIVER AT MASSEY,46.215000000000003,-82.070830000000001,ON,UTC-05:00,41013989,13994,0.000000000144179 +42,02CE007,MINISTIC CREEK ABOVE AGNEW LAKE,46.440420000000003,-81.683220000000006,ON,UTC-05:00,41012304,12309,0.000000000455458 +43,02CF005,JUNCTION CREEK AT SUDBURY,46.478720000000003,-81.010400000000004,ON,UTC-05:00,41011751,11756,0.000000000543519 +44,02CF007,WHITSON RIVER AT CHELMSFORD,46.583060000000003,-81.199169999999995,ON,UTC-05:00,41010809,10814,0.000000000200703 +45,02CF008,WHITSON RIVER AT VAL CARON,46.610280000000003,-81.033060000000006,ON,UTC-05:00,41010626,10631,0.000000000384343 +46,02CF010,ONAPING RIVER NEAR LEVACK,46.599449999999997,-81.381940000000000,ON,UTC-05:00,41010845,10850,0.000000000229032 +47,02CF011,VERMILLION RIVER NEAR VAL CARON,46.685440000000000,-81.009249999999994,ON,UTC-05:00,41009936,9941,0.000000002344198 +48,02CF012,JUNCTION CREEK BELOW KELLEY LAKE,46.427500000000002,-81.098339999999993,ON,UTC-05:00,41012273,12278,0.000000000245030 +49,02CF013,MOOSE CREEK AT LEVACK,46.635829999999999,-81.391390000000001,ON,UTC-05:00,41010391,10396,0.000000002334351 +50,02CF014,VERMILLION RIVER NEAR MILNET,46.819440000000000,-80.957139999999995,ON,UTC-05:00,41008966,8971,0.000000000612597 +51,02CG003,BLUE JAY CREEK NEAR TEHKUMMAH,45.651670000000003,-81.986599999999996,ON,UTC-05:00,41000446,449,0.000000000373549 +55,02DB005,WANAPITEI RIVER NEAR WANUP,46.345550000000003,-80.839449999999999,ON,UTC-05:00,41012718,12723,0.000000001685540 +56,02DB007,CONISTON CREEK ABOVE WANAPITEI RIVER,46.475279999999998,-80.821659999999994,ON,UTC-05:00,41011616,11621,0.000000000146239 +57,02DC004,STURGEON RIVER NEAR GLEN AFTON,46.637219999999999,-80.263339999999999,ON,UTC-05:00,41010118,10123,0.000000003634348 +58,02DC012,STURGEON RIVER AT UPPER GOOSE FALLS,46.971390000000000,-80.463329999999999,ON,UTC-05:00,41007693,7698,0.000000001677848 +59,02DC013,LITTLE STURGEON RIVER BELOW BOOTH LAKE,46.427610000000001,-79.662030000000001,ON,UTC-05:00,41011688,11693,0.000000000319030 +61,02DD010,FRENCH RIVER AT DRY PINE BAY,46.068610000000000,-80.611660000000001,ON,UTC-05:00,41014635,14640,0.000000000440461 +62,02DD012,VEUVE RIVER at VERNER,46.408250000000002,-80.123300000000000,ON,UTC-05:00,41011936,11941,0.000000000201140 +63,02DD013,LA VASE RIVER AT NORTH BAY,46.263330000000003,-79.394999999999996,ON,UTC-05:00,41012827,12832,0.000000000238242 +64,02DD014,CHIPPEWA CREEK AT NORTH BAY,46.311669999999999,-79.448329999999999,ON,UTC-05:00,41012564,12569,0.000000000473163 +65,02DD015,COMMANDA CREEK NEAR COMMANDA,45.949170000000002,-79.606669999999994,ON,UTC-05:00,41014966,14971,0.000000000798938 +66,02DD016,FRENCH RIVER AT PORTAGE DAM,46.122779999999999,-80.013610000000000,ON,UTC-05:00,41014186,14191,0.000000000068227 +67,02DD017,FRENCH RIVER AT CHAUDIERE DAM,46.125830000000001,-80.019440000000003,ON,UTC-05:00,41014052,14057,0.000000001182732 +68,02DD020,LITTLE FRENCH RIVER AT OKIKENDAWT ISLAND,46.123060000000002,-80.078890000000001,ON,UTC-05:00,41014136,14141,0.000000000662517 +72,02DD024,WASI RIVER NEAR ASTORVILLE,46.178359999999998,-79.309970000000007,ON,UTC-05:00,41013530,13535,0.000000000045821 +74,02DD026,FRENCH RIVER AT WOSELEY BAY,46.105390000000000,-80.265000000000001,ON,UTC-05:00,41014355,14360,0.000000000035305 +75,02EA005,NORTH MAGNETAWAN RIVER NEAR BURK'S FALLS,45.669449999999998,-79.379170000000002,ON,UTC-05:00,41015733,15738,0.000000000276833 +76,02EA010,NORTH MAGNETAWAN RIVER ABOVE PICKEREL LAKE,45.703890000000001,-79.309169999999995,ON,UTC-05:00,41015590,15595,0.000000000294416 +77,02EA011,MAGNETAWAN RIVER NEAR BRITT,45.773060000000001,-80.482219999999998,ON,UTC-05:00,41015533,15538,0.000000002726230 +80,02EA018,MAGNETAWAN RIVER NEAR EMSDALE,45.554720000000003,-79.287779999999998,ON,UTC-05:00,41016100,16105,0.000000001996498 +83,02EA021,SHAWANAGA RIVER BELOW SHAWANAGA LAKE,45.558639999999997,-80.038060000000002,ON,UTC-05:00,41016210,16215,0.000000000883371 +84,02EB004,NORTH BRANCH MUSKOKA RIVER AT PORT SYDNEY,45.212780000000002,-79.275279999999995,ON,UTC-05:00,41017106,17111,0.000000001501072 +85,02EB008,SOUTH BRANCH MUSKOKA RIVER AT BAYSVILLE,45.147970000000001,-79.113500000000002,ON,UTC-05:00,41017301,17306,0.000000000120619 +86,02EB011,MOON RIVER AT HIGHWAY NO. 400,45.064999999999998,-79.790279999999996,ON,UTC-05:00,41017521,17526,0.000000000008053 +87,02EB012,MUSQUASH RIVER AT HIGHWAY NO. 400,45.022500000000001,-79.776949999999999,ON,UTC-05:00,41017656,17661,0.000000002533334 +88,02EB013,EAST RIVER NEAR HUNTSVILLE,45.392780000000002,-79.159999999999997,ON,UTC-05:00,41016647,16652,0.000000001613079 +89,02EB014,OXTONGUE RIVER NEAR DWIGHT,45.311940000000000,-78.989440000000002,ON,UTC-05:00,41016825,16830,0.000000002184490 +94,02EB019,LAKE OF BAYS AT BAYSVILLE,45.148809999999997,-79.113280000000003,ON,UTC-05:00,41017301,17306,0.000000000021059 +99,02EC002,BLACK RIVER NEAR WASHAGO,44.713610000000003,-79.281670000000005,ON,UTC-05:00,41018267,18272,0.000000000993320 +100,02EC008,BLACK RIVER AT BALDWIN,44.260829999999999,-79.343890000000002,ON,UTC-05:00,41019808,19813,0.000000000331910 +101,02EC009,HOLLAND RIVER AT HOLLAND LANDING,44.094999999999999,-79.489440000000002,ON,UTC-05:00,41020566,20571,0.000000000315272 +102,02EC010,SCHOMBERG RIVER NEAR SCHOMBERG,44.012219999999999,-79.685550000000006,ON,UTC-05:00,41020959,20964,0.000000003109046 +103,02EC011,BEAVER RIVER NEAR BEAVERTON,44.397080000000003,-79.070830000000001,ON,UTC-05:00,41019190,19195,0.000000000260863 +104,02EC014,SEVERN RIVER ABOVE WASDELL FALLS,44.775280000000002,-79.297229999999999,ON,UTC-05:00,41018140,18145,0.000000000187255 +105,02EC018,PEFFERLAW BROOK NEAR UDORA,44.267499999999998,-79.194730000000007,ON,UTC-05:00,41019746,19751,0.000000000437222 +106,02EC019,BLACK RIVER NEAR VANKOUGHNET,44.992500000000000,-79.049549999999996,ON,UTC-05:00,41017672,17677,0.000000000644717 +107,02EC020,HAWKESTONE CREEK AT HAWKESTONE,44.496969999999997,-79.467969999999994,ON,UTC-05:00,41018944,18949,0.000000000148490 +108,02EC021,UXBRIDGE BROOK NEAR UXBRIDGE,44.137860000000003,-79.112690000000001,ON,UTC-05:00,41020298,20303,0.000000001601682 +109,02EC022,HEAD RIVER NEAR SEBRIGHT,44.725610000000003,-79.070440000000005,ON,UTC-05:00,41018223,18228,0.000000003215664 +110,02ED003,NOTTAWASAGA RIVER NEAR BAXTER,44.249720000000003,-79.821389999999994,ON,UTC-05:00,41019963,19968,0.000000000110689 +111,02ED007,COLDWATER RIVER AT COLDWATER,44.707220000000000,-79.643889999999999,ON,UTC-05:00,41018377,18382,0.000000001207254 +112,02ED013,WYE RIVER NEAR WYEVALE,44.649720000000002,-79.903890000000004,ON,UTC-05:00,41018522,18527,0.000000002030463 +113,02ED014,PINE RIVER NEAR EVERETT,44.200000000000003,-79.959999999999994,ON,UTC-05:00,41020254,20259,0.000000000993424 +114,02ED015,MAD RIVER BELOW AVENING,44.307499999999997,-80.071950000000001,ON,UTC-05:00,41019785,19790,0.000000000744992 +115,02ED017,HOGG CREEK NEAR VICTORIA HARBOUR,44.726109999999998,-79.778890000000004,ON,UTC-05:00,41018382,18387,0.000000000187431 +116,02ED024,NORTH RIVER AT THE FALLS,44.767780000000002,-79.578329999999994,ON,UTC-05:00,41018164,18169,0.000000000049554 +117,02ED026,NOTTAWASAGA RIVER AT HOCKLEY,44.024720000000002,-79.969999999999999,ON,UTC-05:00,41020964,20969,0.000000000418767 +118,02ED027,NOTTAWASAGA RIVER NEAR EDENVALE,44.484999999999999,-79.966110000000000,ON,UTC-05:00,41019022,19027,0.000000000835079 +119,02ED029,INNISFIL CREEK NEAR ALLISTON,44.131110000000000,-79.781109999999998,ON,UTC-05:00,41020502,20507,0.000000000501380 +120,02ED030,SILVER CREEK AT ORILLIA,44.647170000000003,-79.452330000000003,ON,UTC-05:00,41018524,18529,0.000000000238726 +121,02ED031,PRETTY RIVER AT COLLINGWOOD,44.498750000000001,-80.199920000000006,ON,UTC-05:00,41019048,19053,0.000000000393775 +122,02ED032,WILLOW CREEK NEAR MINESING,44.442500000000003,-79.799499999999995,ON,UTC-05:00,41019265,19270,0.000000000081755 +123,02ED100,BEETON CREEK NEAR TOTTENHAM,44.049169999999997,-79.803340000000006,ON,UTC-05:00,41020860,20865,0.000000000222821 +124,02ED101,NOTTAWASAGA RIVER NEAR ALLISTON,44.110550000000003,-79.890270000000001,ON,UTC-05:00,41020581,20586,0.000000000951324 +125,02ED102,BOYNE RIVER AT EARL ROWE PARK,44.152500000000003,-79.896670000000000,ON,UTC-05:00,41020417,20422,0.000000000010827 +126,02FA001,SAUBLE RIVER AT SAUBLE FALLS,44.677500000000002,-81.256110000000007,ON,UTC-05:00,41018632,18637,0.000000000351479 +127,02FA002,STOKES RIVER NEAR FERNDALE,45.036949999999997,-81.336389999999994,ON,UTC-05:00,41017758,17763,0.000000000177692 +128,02FA004,SAUBLE RIVER AT ALLENFORD,44.535559999999997,-81.177779999999998,ON,UTC-05:00,41019038,19043,0.000000003234945 +129,02FB007,SYDENHAM RIVER NEAR OWEN SOUND,44.522219999999997,-80.930269999999993,ON,UTC-05:00,41019129,19134,0.000000001080139 +130,02FB009,BEAVER RIVER NEAR CLARKSBURG,44.520000000000003,-80.467780000000005,ON,UTC-05:00,41019003,19008,0.000000000926358 +131,02FB010,BIGHEAD RIVER NEAR MEAFORD,44.570279999999997,-80.648610000000005,ON,UTC-05:00,41018824,18829,0.000000000455800 +132,02FB012,MILL CREEK NEAR RED WING,44.464359999999999,-80.485579999999999,ON,UTC-05:00,41019241,19246,0.000000000293727 +133,02FB013,BEAVER RIVER NEAR VANDELEUR,44.346139999999998,-80.539969999999997,ON,UTC-05:00,41019700,19705,0.000000000254117 +134,02FB014,BIGHEAD RIVER NEAR STRATHAVON,44.471780000000003,-80.776529999999994,ON,UTC-05:00,41019206,19211,0.000000000163264 +135,02FC001,SAUGEEN RIVER NEAR PORT ELGIN,44.456389999999999,-81.326390000000004,ON,UTC-05:00,41019417,19422,0.000000000822184 +136,02FC002,SAUGEEN RIVER NEAR WALKERTON,44.120559999999998,-81.115279999999998,ON,UTC-05:00,41020789,20794,0.000000000003378 +137,02FC011,CARRICK CREEK NEAR CARLSRUHE,44.113329999999998,-81.019170000000003,ON,UTC-05:00,41020796,20801,0.000000000525659 +138,02FC012,SOUTH SAUGEEN RIVER NEAR HANOVER,44.098610000000001,-80.984440000000006,ON,UTC-05:00,41020868,20873,0.000000000036577 +139,02FC015,TEESWATER RIVER NEAR PAISLEY,44.268329999999999,-81.269170000000003,ON,UTC-05:00,41020162,20167,0.000000003755682 +140,02FC016,SAUGEEN RIVER ABOVE DURHAM,44.185549999999999,-80.787499999999994,ON,UTC-05:00,41020449,20454,0.000000000819420 +141,02FC017,BEATTY SAUGEEN RIVER NEAR HOLSTEIN,44.090470000000003,-80.741940000000000,ON,UTC-05:00,41020951,20956,0.000000000176416 +142,02FC020,TEESWATER RIVER AT TEESWATER,44.000610000000002,-81.283810000000003,ON,UTC-05:00,41021215,21220,0.000000000409401 +143,02FC021,CAMP CREEK AT ALLAN PARK,44.161140000000003,-80.929310000000001,ON,UTC-05:00,41020573,20578,0.000000001064393 +144,02FD001,PINE RIVER AT LURGAN,44.094720000000002,-81.725830000000002,ON,UTC-05:00,41020978,20983,0.000000000263430 +145,02FD002,LUCKNOW RIVER AT LUCKNOW,43.962220000000002,-81.515280000000004,ON,UTC-05:00,41021310,21315,0.000000000559264 +146,02FD003,NORTH PENETANGORE RIVER AT KINCARDINE,44.172780000000003,-81.630549999999999,ON,UTC-05:00,41020624,20629,0.000000000449207 +147,02FE002,MAITLAND RIVER BELOW WINGHAM,43.886670000000002,-81.326390000000004,ON,UTC-05:00,41021430,21435,0.000000000035748 +148,02FE003,MIDDLE MAITLAND RIVER NEAR LISTOWEL,43.727220000000003,-80.972780000000000,ON,UTC-05:00,41021676,21681,0.000000000170365 +149,02FE005,MAITLAND RIVER ABOVE WINGHAM,43.914999999999999,-81.264439999999993,ON,UTC-05:00,41021419,21424,0.000000000042760 +150,02FE007,LITTLE MAITLAND RIVER AT BLUEVALE,43.854439999999997,-81.250559999999993,ON,UTC-05:00,41021503,21508,0.000000000619450 +151,02FE008,MIDDLE MAITLAND RIVER NEAR BELGRAVE,43.812779999999997,-81.306950000000001,ON,UTC-05:00,41021564,21569,0.000000000291568 +152,02FE009,SOUTH MAITLAND RIVER AT SUMMERHILL,43.684440000000002,-81.541110000000003,ON,UTC-05:00,41021778,21783,0.000000006007463 +153,02FE010,BOYLE DRAIN NEAR ATWOOD,43.676389999999998,-81.075000000000003,ON,UTC-05:00,41021756,21761,0.000000000158712 +154,02FE011,MAITLAND RIVER NEAR HARRISTON,43.903889999999997,-80.892499999999998,ON,UTC-05:00,41021382,21387,0.000000000626905 +155,02FE013,MIDDLE MAITLAND RIVER ABOVE ETHEL,43.718330000000002,-81.124730000000000,ON,UTC-05:00,41021719,21724,0.000000003394665 +156,02FE014,BLYTH BROOK BELOW BLYTH,43.760280000000002,-81.463329999999999,ON,UTC-05:00,41021665,21670,0.000000000224897 +157,02FE015,MAITLAND RIVER AT BENMILLER,43.717500000000001,-81.626109999999997,ON,UTC-05:00,41021744,21749,0.000000000171079 +158,02FE016,SOUTH MAITLAND RIVER AT ROXBORO,43.579250000000002,-81.401309999999995,ON,UTC-05:00,41021931,21936,0.000000004318024 +159,02FE017,LAKELET CREEK NEAR GORRIE,43.892919999999997,-81.063280000000006,ON,UTC-05:00,41021399,21404,0.000000001743068 +160,02FE018,BLIND CREEK NEAR FORDWICH,43.896000000000001,-81.037999999999997,ON,UTC-05:00,41021401,21406,0.000000002034856 +161,02FF002,AUSABLE RIVER NEAR SPRINGBANK,43.071950000000001,-81.659719999999993,ON,UTC-05:00,41022440,22445,0.000000000157897 +162,02FF004,SOUTH PARKHILL CREEK NEAR PARKHILL,43.160829999999997,-81.731939999999994,ON,UTC-05:00,41022335,22340,0.000000000079106 +163,02FF007,BAYFIELD RIVER NEAR VARNA,43.551389999999998,-81.589449999999999,ON,UTC-05:00,41021971,21976,0.000000000757140 +164,02FF008,PARKHILL CREEK ABOVE PARKHILL RESERVOIR,43.164169999999999,-81.631670000000000,ON,UTC-05:00,41022317,22322,0.000000001010805 +165,02FF009,AUSABLE RIVER NEAR EXETER,43.361950000000000,-81.509450000000001,ON,UTC-05:00,41022129,22134,0.000000000353928 +166,02FF010,AUSABLE RIVER NEAR PARKHILL,43.193330000000003,-81.814449999999994,ON,UTC-05:00,41022292,22297,0.000000000217899 +167,02FF011,SILVER CREEK AT SEAFORTH,43.545279999999998,-81.396389999999997,ON,UTC-05:00,41021974,21979,0.000000000444781 +168,02FF012,PERCH CREEK AT SARNIA,42.984169999999999,-82.318889999999996,ON,UTC-05:00,41022544,22549,0.000000002588265 +169,02FF013,LITTLE AUSABLE RIVER NEAR LUCAN CROSSING,43.180560000000000,-81.447670000000002,ON,UTC-05:00,41022290,22295,0.000000003390763 +170,02FF014,BLACK CREEK NEAR HENSALL,43.418920000000000,-81.495469999999997,ON,UTC-05:00,41022089,22094,0.000000000847718 +171,02FF015,TRICKS CREEK NEAR CLINTON,43.590310000000002,-81.584109999999995,ON,UTC-05:00,41021929,21934,0.000000000239244 +172,02FF016,LITTLE AUSABLE RIVER NEAR CENTRALIA,43.286250000000003,-81.415639999999996,ON,UTC-05:00,41022201,22206,0.000000000578311 +173,02GA003,GRAND RIVER AT GALT,43.352780000000003,-80.316950000000006,ON,UTC-05:00,41001759,1764,0.000000000201971 +174,02GA005,IRVINE RIVER NEAR SALEM,43.714170000000003,-80.443889999999996,ON,UTC-05:00,41001111,1116,0.000000000170138 +175,02GA006,CONESTOGO RIVER AT ST. JACOBS,43.541110000000003,-80.553340000000006,ON,UTC-05:00,41001414,1419,0.000000000547965 +176,02GA010,NITH RIVER NEAR CANNING,43.189720000000001,-80.455029999999994,ON,UTC-05:00,41002164,2169,0.000000000039226 +177,02GA014,GRAND RIVER NEAR MARSVILLE,43.861719999999998,-80.272220000000004,ON,UTC-05:00,41000941,946,0.000000000448731 +178,02GA015,SPEED RIVER BELOW GUELPH,43.533610000000003,-80.252219999999994,ON,UTC-05:00,41001386,1391,0.000000000446077 +179,02GA016,GRAND RIVER BELOW SHAND DAM,43.730829999999997,-80.340840000000000,ON,UTC-05:00,41001099,1104,0.000000000153203 +180,02GA018,NITH RIVER AT NEW HAMBURG,43.377499999999998,-80.711389999999994,ON,UTC-05:00,41001747,1752,0.000000000105220 +181,02GA023,CANAGAGIGUE CREEK NEAR ELMIRA,43.579920000000001,-80.509190000000004,ON,UTC-05:00,41001295,1300,0.000000000653659 +182,02GA024,LAUREL CREEK AT WATERLOO,43.468890000000002,-80.518889999999999,ON,UTC-05:00,41001538,1543,0.000000000039836 +183,02GA028,CONESTOGO RIVER AT GLEN ALLAN,43.654829999999997,-80.702169999999995,ON,UTC-05:00,41001237,1242,0.000000000383181 +184,02GA029,ERAMOSA RIVER ABOVE GUELPH,43.547780000000003,-80.182000000000002,ON,UTC-05:00,41001345,1350,0.000000001820438 +185,02GA030,ALDER CREEK NEAR NEW DUNDEE,43.371940000000002,-80.551670000000001,ON,UTC-05:00,41001717,1722,0.000000000372488 +186,02GA031,BLUE SPRINGS CREEK NEAR EDEN MILLS,43.576140000000002,-80.108999999999995,ON,UTC-05:00,41001287,1292,0.000000000268859 +187,02GA034,GRAND RIVER AT WEST MONTROSE,43.585000000000001,-80.481390000000005,ON,UTC-05:00,41001297,1302,0.000000000061285 +188,02GA038,NITH RIVER ABOVE NITHBURG,43.483890000000002,-80.834999999999994,ON,UTC-05:00,41001562,1567,0.000000000215467 +189,02GA039,CONESTOGO RIVER ABOVE DRAYTON,43.783529999999999,-80.637780000000006,ON,UTC-05:00,41001028,1033,0.000000000155700 +190,02GA040,SPEED RIVER NEAR ARMSTRONG MILLS,43.638610000000000,-80.269999999999996,ON,UTC-05:00,41001222,1227,0.000000000314620 +191,02GA041,GRAND RIVER NEAR DUNDALK,44.140079999999998,-80.363110000000006,ON,UTC-05:00,41000757,762,0.000000000477638 +192,02GA042,MOOREFIELD CREEK NEAR ROTHSAY,43.823000000000000,-80.717860000000002,ON,UTC-05:00,41001003,1008,0.000000000488560 +193,02GA043,HUNSBURGER CREEK NEAR WILMOT CENTRE,43.364440000000002,-80.632499999999993,ON,UTC-05:00,41001809,1814,0.000000000101925 +194,02GA047,SPEED RIVER AT CAMBRIDGE,43.421390000000002,-80.332220000000007,ON,UTC-05:00,41001616,1621,0.000000000007843 +195,02GA048,GRAND RIVER NEAR DOON,43.412810000000000,-80.417029999999997,ON,UTC-05:00,41001663,1668,0.000000003024404 +196,02GA049,SMITH CREEK NEAR NEWTON,43.596370000000000,-80.894279999999995,ON,UTC-05:00,41001332,1337,0.000000000045473 +197,02GB001,GRAND RIVER AT BRANTFORD,43.132779999999997,-80.267219999999995,ON,UTC-05:00,41002322,2327,0.000000000423326 +198,02GB006,HORNER CREEK NEAR PRINCETON,43.173890000000000,-80.552779999999998,ON,UTC-05:00,41002214,2219,0.000000000241904 +199,02GB007,FAIRCHILD CREEK NEAR BRANTFORD,43.147399999999998,-80.154600000000002,ON,UTC-05:00,41002253,2258,0.000000000732477 +200,02GB008,WHITEMANS CREEK NEAR MOUNT VERNON,43.126390000000001,-80.383610000000004,ON,UTC-05:00,41002321,2326,0.000000000353761 +201,02GB010,MCKENZIE CREEK NEAR CALEDONIA,43.033890000000000,-79.949719999999999,ON,UTC-05:00,41002504,2509,0.000000000903127 +202,02GC002,KETTLE CREEK AT ST. THOMAS,42.777780000000000,-81.214160000000007,ON,UTC-05:00,41003721,3726,0.000000000417129 +203,02GC007,BIG CREEK NEAR WALSINGHAM,42.685549999999999,-80.538610000000006,ON,UTC-05:00,41003952,3957,0.000000000224762 +204,02GC008,LYNN RIVER AT SIMCOE,42.823329999999999,-80.289439999999999,ON,UTC-05:00,41003393,3398,0.000000000766327 +205,02GC010,BIG OTTER CREEK AT TILLSONBURG,42.857300000000002,-80.723579999999998,ON,UTC-05:00,41003311,3316,0.000000000467201 +206,02GC011,BIG CREEK NEAR KELVIN,42.986809999999998,-80.444890000000001,ON,UTC-05:00,41002721,2726,0.000000000543668 +207,02GC014,YOUNG CREEK NEAR VITTORIA,42.765749999999997,-80.294579999999996,ON,UTC-05:00,41003630,3635,0.000000000155808 +208,02GC017,BIG OTTER CREEK ABOVE OTTERVILLE,42.965829999999997,-80.542779999999993,ON,UTC-05:00,41002809,2814,0.000000000479287 +209,02GC018,CATFISH CREEK NEAR SPARTA,42.746110000000002,-81.056950000000001,ON,UTC-05:00,41003785,3790,0.000000000152478 +210,02GC021,VENISON CREEK NEAR WALSINGHAM,42.653359999999999,-80.548439999999999,ON,UTC-05:00,41004067,4072,0.000000000352475 +211,02GC022,NANTICOKE CREEK AT NANTICOKE,42.810000000000002,-80.076110000000000,ON,UTC-05:00,41003427,3432,0.000000000023610 +212,02GC026,BIG OTTER CREEK NEAR CALTON,42.710560000000001,-80.840840000000000,ON,UTC-05:00,41003940,3945,0.000000001317316 +213,02GC029,KETTLE CREEK ABOVE ST. THOMAS,42.835000000000001,-81.134720000000002,ON,UTC-05:00,41003511,3516,0.000000000047122 +214,02GC030,CATFISH CREEK AT AYLMER,42.773890000000002,-80.982780000000005,ON,UTC-05:00,41003703,3708,0.000000006696006 +215,02GC031,DODD CREEK BELOW PAYNES MILLS,42.787500000000001,-81.267499999999998,ON,UTC-05:00,41003682,3687,0.000000000111287 +216,02GC036,SILVER CREEK NEAR GROVESEND,42.675829999999998,-80.953329999999994,ON,UTC-05:00,41004099,4104,0.000000000336510 +217,02GC037,NANTICOKE CREEK NEAR DUNDURN,42.967059999999996,-80.343400000000003,ON,UTC-05:00,41002791,2796,0.000000000366892 +218,02GC038,VENISON CREEK NEAR LANGTON,42.727649999999997,-80.626530000000002,ON,UTC-05:00,41003923,3928,0.000000000438322 +219,02GD001,THAMES RIVER NEAR EALING,42.972499999999997,-81.209720000000004,ON,UTC-05:00,41002909,2914,0.000000000046657 +220,02GD003,NORTH THAMES RIVER BELOW FANSHAWE DAM,43.040280000000003,-81.182220000000001,ON,UTC-05:00,41002682,2687,0.000000000128171 +221,02GD004,MIDDLE THAMES RIVER AT THAMESFORD,43.059170000000002,-80.994720000000001,ON,UTC-05:00,41002565,2570,0.000000000115606 +222,02GD005,NORTH THAMES RIVER AT ST. MARYS,43.255830000000003,-81.145550000000000,ON,UTC-05:00,41002068,2073,0.000000000276899 +223,02GD008,MEDWAY RIVER AT LONDON,43.013890000000004,-81.280559999999994,ON,UTC-05:00,41002752,2757,0.000000000338348 +224,02GD009,TROUT CREEK NEAR ST. MARYS,43.273249999999997,-81.103250000000003,ON,UTC-05:00,41002031,2036,0.000000000277893 +225,02GD010,FISH CREEK NEAR PROSPECT HILL,43.220469999999999,-81.236890000000002,ON,UTC-05:00,41002145,2150,0.000000000485051 +226,02GD011,CEDAR CREEK AT WOODSTOCK,43.121940000000002,-80.751109999999997,ON,UTC-05:00,41002411,2416,0.000000000244874 +227,02GD014,NORTH THAMES RIVER NEAR MITCHELL,43.450279999999999,-81.206670000000003,ON,UTC-05:00,41001680,1685,0.000000000352690 +228,02GD015,NORTH THAMES RIVER NEAR THORNDALE,43.149439999999998,-81.192220000000006,ON,UTC-05:00,41002480,2485,0.000000000481942 +229,02GD016,THAMES RIVER AT INGERSOLL,43.041390000000000,-80.886390000000006,ON,UTC-05:00,41002609,2614,0.000000000021944 +230,02GD018,AVON RIVER BELOW STRATFORD,43.344720000000002,-81.116420000000005,ON,UTC-05:00,41001841,1846,0.000000000033065 +231,02GD019,TROUT CREEK NEAR FAIRVIEW,43.295830000000002,-80.973050000000001,ON,UTC-05:00,41001998,2003,0.000000000330521 +232,02GD021,THAMES RIVER AT INNERKIP,43.215280000000000,-80.691950000000006,ON,UTC-05:00,41002124,2129,0.000000000052454 +233,02GD022,NISSOURI CREEK NEAR EMBRO,43.130000000000003,-80.963329999999999,ON,UTC-05:00,41002402,2407,0.000000000360342 +234,02GD026,AVON RIVER ABOVE STRATFORD,43.376640000000002,-80.937939999999998,ON,UTC-05:00,41001745,1750,0.000000000916391 +235,02GD027,REYNOLDS CREEK NEAR PUTNAM,42.981670000000001,-80.954719999999995,ON,UTC-05:00,41002814,2819,0.000000000302781 +236,02GD028,STONEY CREEK AT LONDON,43.021949999999997,-81.253889999999998,ON,UTC-05:00,41002712,2717,0.000000000430417 +237,02GE002,THAMES RIVER AT BYRON,42.962499999999999,-81.332220000000007,ON,UTC-05:00,41002984,2989,0.000000000025979 +238,02GE003,THAMES RIVER AT THAMESVILLE,42.544719999999998,-81.967219999999998,ON,UTC-05:00,41004437,4442,0.000000000064887 +239,02GE004,THAMES RIVER AT CHATHAM,42.414439999999999,-82.179440000000000,ON,UTC-05:00,41004631,4636,0.000000000684164 +240,02GE005,DINGMAN CREEK BELOW LAMBETH,42.933889999999998,-81.351389999999995,ON,UTC-05:00,41003178,3183,0.000000000111760 +241,02GE006,THAMES RIVER NEAR DUTTON,42.730559999999997,-81.577500000000001,ON,UTC-05:00,41003925,3930,0.000000000187872 +242,02GE007,MCGREGOR CREEK NEAR CHATHAM,42.383519999999997,-82.094170000000005,ON,UTC-05:00,41004658,4663,0.000000000753869 +243,02GE008,OXBOW CREEK NEAR KILWORTH,42.966389999999997,-81.418049999999994,ON,UTC-05:00,41002994,2999,0.000000000766256 +244,02GE009,BIG CREEK NEAR COMBER,42.205010000000001,-82.520259999999993,ON,UTC-05:00,41004964,4969,0.000000000654360 +245,02GG002,SYDENHAM RIVER NEAR ALVINSTON,42.830829999999999,-81.851939999999999,ON,UTC-05:00,41003726,3731,0.000000000154362 +246,02GG003,SYDENHAM RIVER AT FLORENCE,42.650550000000003,-82.008330000000001,ON,UTC-05:00,41004257,4262,0.000000000189345 +247,02GG005,SYDENHAM RIVER AT STRATHROY,42.958610000000000,-81.627219999999994,ON,UTC-05:00,41003017,3022,0.000000001850530 +248,02GG006,BEAR CREEK NEAR PETROLIA,42.905830000000002,-82.119159999999994,ON,UTC-05:00,41003475,3480,0.000000001938673 +249,02GG008,SYDENHAM RIVER AT WALLACEBURG,42.592779999999998,-82.383330000000001,ON,UTC-05:00,41004405,4410,0.000000000228002 +250,02GG009,BEAR CREEK BELOW BRIGDEN,42.811940000000000,-82.298330000000007,ON,UTC-05:00,41003773,3778,0.000000000328356 +251,02GG013,BLACK CREEK NEAR BRADSHAW,42.762439999999998,-82.259219999999999,ON,UTC-05:00,41003878,3883,0.000000000786137 +252,02GH002,RUSCOM RIVER NEAR RUSCOM STATION,42.211390000000002,-82.629170000000002,ON,UTC-05:00,41004954,4959,0.000000000336512 +253,02GH003,CANARD RIVER NEAR LUKERVILLE,42.158890000000000,-83.018889999999999,ON,UTC-05:00,41005062,5067,0.000000001094471 +254,02GH004,TURKEY CREEK AT WINDSOR,42.260559999999998,-83.039720000000003,ON,UTC-05:00,41004894,4899,0.000000000150271 +255,02GH011,LITTLE RIVER AT WINDSOR,42.309719999999999,-82.928340000000006,ON,UTC-05:00,41004809,4814,0.000000000782326 +256,02HA006,TWENTY MILE CREEK AT BALLS FALLS,43.133609999999997,-79.383330000000001,ON,UTC-05:00,41028412,28418,0.000000000149749 +257,02HA007,WELLAND RIVER BELOW CAISTOR CORNERS,43.021670000000000,-79.617769999999993,ON,UTC-05:00,41028587,28593,0.000000000417828 +259,02HA014,REDHILL CREEK AT HAMILTON,43.232219999999998,-79.784719999999993,ON,UTC-05:00,41028309,28315,0.000000001274090 +260,02HA020,TWENTY MILE CREEK ABOVE SMITHVILLE,43.115549999999999,-79.566109999999995,ON,UTC-05:00,41028492,28498,0.000000000094277 +261,02HA024,OSWEGO CREEK AT CANBORO,42.991390000000003,-79.678340000000006,ON,UTC-05:00,41028670,28676,0.000000000049123 +262,02HA030,FOUR MILE CREEK NEAR VIRGIL,43.195610000000002,-79.113330000000005,ON,UTC-05:00,41028327,28333,0.000000000408063 +263,02HA031,TWELVE MILE CREEK NEAR POWER GLEN,43.114780000000003,-79.274559999999994,ON,UTC-05:00,41028447,28453,0.000000007913102 +264,02HA032,NORTH CREEK NEAR SMITHVILLE,43.074530000000003,-79.525000000000006,ON,UTC-05:00,41028504,28510,0.000000000353529 +265,02HB001,CREDIT RIVER NEAR CATARACT,43.835830000000001,-80.022779999999997,ON,UTC-05:00,41027717,27723,0.000000000027031 +266,02HB004,EAST SIXTEEN MILE CREEK NEAR OMAGH,43.498890000000003,-79.776949999999999,ON,UTC-05:00,41028118,28124,0.000000000072100 +267,02HB005,SIXTEEN MILE CREEK AT MILTON,43.513890000000004,-79.879720000000006,ON,UTC-05:00,41028112,28118,0.000000000261293 +268,02HB007,SPENCER CREEK AT DUNDAS,43.265560000000001,-79.964160000000007,ON,UTC-05:00,41028272,28278,0.000000001160448 +269,02HB008,CREDIT RIVER WEST BRANCH AT NORVAL,43.646670000000000,-79.866389999999996,ON,UTC-05:00,41027997,28003,0.000000000518554 +270,02HB011,BRONTE CREEK NEAR ZIMMERMAN,43.436940000000000,-79.864440000000002,ON,UTC-05:00,41028152,28158,0.000000004027846 +271,02HB012,GRINDSTONE CREEK NEAR ALDERSHOT,43.300559999999997,-79.868889999999993,ON,UTC-05:00,41028239,28245,0.000000000009990 +272,02HB013,CREDIT RIVER NEAR ORANGEVILLE,43.891109999999998,-80.062230000000000,ON,UTC-05:00,41027653,27659,0.000000000221532 +273,02HB015,SPENCER CREEK NEAR WESTOVER,43.353079999999999,-80.077889999999996,ON,UTC-05:00,41028210,28216,0.000000000310481 +274,02HB018,CREDIT RIVER AT BOSTON MILLS,43.773609999999998,-79.926940000000002,ON,UTC-05:00,41027882,27888,0.000000001150922 +275,02HB020,CREDIT RIVER ERIN BRANCH ABOVE ERIN,43.771949999999997,-80.093329999999995,ON,UTC-05:00,41027841,27847,0.000000003786977 +276,02HB021,ANCASTER CREEK AT ANCASTER,43.231169999999999,-79.973860000000002,ON,UTC-05:00,41028340,28346,0.000000000775193 +277,02HB022,BRONTE CREEK AT CARLISLE,43.388890000000004,-79.988050000000001,ON,UTC-05:00,41028191,28197,0.000000000062357 +278,02HB023,SPENCER CREEK AT HIGHWAY NO. 5,43.283050000000003,-80.052779999999998,ON,UTC-05:00,41028257,28263,0.000000000014625 +279,02HB024,BLACK CREEK BELOW ACTON,43.629309999999997,-80.010419999999996,ON,UTC-05:00,41028014,28020,0.000000003462511 +280,02HB025,CREDIT RIVER AT NORVAL,43.647500000000001,-79.856110000000001,ON,UTC-05:00,41027984,27990,0.000000001860671 +281,02HB027,FOURTEEN MILE CREEK AT OAKVILLE,43.421109999999999,-79.703059999999994,ON,UTC-05:00,41028162,28168,0.000000000514525 +282,02HB028,GRINDSTONE CREEK NEAR MILLGROVE,43.334859999999999,-79.949060000000003,ON,UTC-05:00,41028218,28224,0.000000000333435 +283,02HB029,CREDIT RIVER AT STREETSVILLE,43.582360000000001,-79.708110000000005,ON,UTC-05:00,41028032,28038,0.000000002075399 +284,02HB030,COOKSVILLE CREEK NEAR COOKSVILLE,43.592329999999997,-79.623890000000003,ON,UTC-05:00,41028035,28041,0.000000000503783 +285,02HB031,CREDIT RIVER ERIN BRANCH AT HILLSBURGH,43.790250000000000,-80.143439999999998,ON,UTC-05:00,41027818,27824,0.000000000588380 +286,02HB032,MOUNTSBERG CREEK BELOW MOUNTSBERG RESERVOIR,43.454830000000001,-80.045829999999995,ON,UTC-05:00,41028159,28165,0.000000001544630 +287,02HB033,MOUNTSBERG CREEK NEAR CARLISLE,43.401530000000001,-79.993030000000005,ON,UTC-05:00,41028190,28196,0.000000000202384 +288,02HC003,HUMBER RIVER AT WESTON,43.698889999999999,-79.520280000000000,ON,UTC-05:00,41027910,27916,0.000000000364318 +289,02HC005,DON RIVER AT YORK MILLS,43.740279999999998,-79.403049999999993,ON,UTC-05:00,41027856,27862,0.000000000162378 +290,02HC009,EAST HUMBER RIVER NEAR PINE GROVE,43.789999999999999,-79.584440000000001,ON,UTC-05:00,41027767,27773,0.000000005008705 +291,02HC013,HIGHLAND CREEK NEAR WEST HILL,43.778329999999997,-79.191389999999998,ON,UTC-05:00,41027746,27752,0.000000000275946 +292,02HC017,ETOBICOKE CREEK AT BRAMPTON,43.691389999999998,-79.759720000000002,ON,UTC-05:00,41027944,27950,0.000000000292045 +293,02HC018,LYNDE CREEK NEAR WHITBY,43.875560000000000,-78.960279999999997,ON,UTC-05:00,41027563,27569,0.000000000096574 +294,02HC019,DUFFINS CREEK ABOVE PICKERING,43.891390000000001,-79.059169999999995,ON,UTC-05:00,41027565,27571,0.000000000278182 +295,02HC022,ROUGE RIVER NEAR MARKHAM,43.858330000000002,-79.233609999999999,ON,UTC-05:00,41027672,27678,0.000000000156329 +296,02HC023,COLD CREEK NEAR BOLTON (02HC023),43.890278000000002,-79.719999999999999,ON,UTC-05:00,41027585,27591,0.000000000449520 +297,02HC024,DON RIVER AT TODMORDEN,43.685830000000003,-79.361390000000000,ON,UTC-05:00,41027916,27922,0.000000000995214 +298,02HC025,HUMBER RIVER AT ELDER MILLS,43.811390000000003,-79.627780000000001,ON,UTC-05:00,41027742,27748,0.000000000065954 +299,02HC027,BLACK CREEK NEAR WESTON,43.674169999999997,-79.504450000000006,ON,UTC-05:00,41027933,27939,0.000000000348976 +300,02HC028,LITTLE ROUGE CREEK NEAR LOCUST HILL,43.907769999999999,-79.216110000000000,ON,UTC-05:00,41027582,27588,0.000000002412505 +301,02HC030,ETOBICOKE CREEK BELOW QUEEN ELIZABETH HIGHWAY,43.601669999999999,-79.556389999999993,ON,UTC-05:00,41028026,28032,0.000000000166322 +302,02HC031,WEST HUMBER RIVER AT HIGHWAY NO. 7,43.758339999999997,-79.678889999999996,ON,UTC-05:00,41027830,27836,0.000000000127784 +303,02HC032,EAST HUMBER RIVER AT KING CREEK,43.902780000000000,-79.612780000000001,ON,UTC-05:00,41027540,27546,0.000000000950341 +304,02HC033,MIMICO CREEK AT ISLINGTON,43.647500000000001,-79.519720000000007,ON,UTC-05:00,41027985,27991,0.000000001811326 +305,02HC038,WEST DUFFINS CREEK ABOVE GREEN RIVER,43.914999999999999,-79.179720000000003,ON,UTC-05:00,41027436,27442,0.000000000432670 +306,02HC047,HUMBER RIVER NEAR PALGRAVE,43.930830000000000,-79.822220000000002,ON,UTC-05:00,41027496,27502,0.000000000024180 +307,02HC049,DUFFINS CREEK AT AJAX,43.848889999999997,-79.056110000000004,ON,UTC-05:00,41027595,27601,0.000000001231707 +308,02HC051,CENTREVILLE CREEK NEAR ALBION,43.924450000000000,-79.834440000000001,ON,UTC-05:00,41027552,27558,0.000000000608771 +309,02HC053,LITTLE ROUGE RIVER NEAR DICKSONS HILL,43.925690000000003,-79.282190000000000,ON,UTC-05:00,41027418,27424,0.000000000452852 +310,02HC054,LYNDE CREEK AT BROOKLIN,43.959170000000000,-78.959999999999994,ON,UTC-05:00,41027353,27359,0.000000000229516 +311,02HC055,LYNDE CREEK TRIBUTARY NEAR KINSALE,43.931950000000001,-78.988609999999994,ON,UTC-05:00,41027512,27518,0.000000000205023 +312,02HC056,DON RIVER EAST BRANCH NEAR THORNHILL,43.826610000000002,-79.438079999999999,ON,UTC-05:00,41027674,27680,0.000000000176035 +313,02HC057,HUMBER RIVER NEAR BALLYCROY,43.970309999999998,-79.887720000000002,ON,UTC-05:00,41027387,27393,0.000000000644851 +314,02HC058,WEST HIGHLAND CREEK NEAR SCARBOROUGH VILLAGE,43.753219999999999,-79.233670000000004,ON,UTC-05:00,41027799,27805,0.000000000466268 +315,02HC059,Humber River at Highway No. 9,43.968769999999999,-79.873739999999998,ON,UTC-05:00,41027387,27393,0.000000004033661 +316,02HD003,GANARASKA RIVER NEAR OSACA,44.015279999999997,-78.437500000000000,ON,UTC-05:00,41027151,27157,0.000000000163541 +317,02HD004,NORTH WEST GANARASKA RIVER NEAR OSACA,44.017220000000002,-78.438890000000001,ON,UTC-05:00,41027138,27144,0.000000000899741 +318,02HD006,BOWMANVILLE CREEK AT BOWMANVILLE,43.921469999999999,-78.701999999999998,ON,UTC-05:00,41027367,27373,0.000000000163046 +319,02HD008,OSHAWA CREEK AT OSHAWA,43.930280000000003,-78.891670000000005,ON,UTC-05:00,41027461,27467,0.000000000747120 +320,02HD009,WILMOT CREEK NEAR NEWCASTLE,43.930280000000003,-78.618889999999993,ON,UTC-05:00,41027385,27391,0.000000000536587 +321,02HD010,SHELTER VALLEY BROOK NEAR GRAFTON,43.991940000000000,-78.001390000000001,ON,UTC-05:00,41027169,27175,0.000000000264562 +322,02HD012,GANARASKA RIVER ABOVE DALE,43.990830000000003,-78.328329999999994,ON,UTC-05:00,41027182,27188,0.000000001566404 +323,02HD013,HARMONY CREEK AT OSHAWA,43.888890000000004,-78.825000000000003,ON,UTC-05:00,41027459,27465,0.000000000175445 +324,02HD018,PROCTORS CREEK NEAR BRIGHTON,44.059719999999999,-77.744450000000001,ON,UTC-05:00,41026960,26966,0.000000000056146 +325,02HD019,COBOURG BROOK AT COBOURG,43.965000000000003,-78.185000000000002,ON,UTC-05:00,41027232,27238,0.000000000358408 +326,02HD020,BALTIMORE CREEK AT BALTIMORE,44.028829999999999,-78.147059999999996,ON,UTC-05:00,41027081,27087,0.000000000474868 +327,02HD021,WILMOT CREEK NEAR LESKARD,44.005719999999997,-78.642330000000001,ON,UTC-05:00,41027220,27226,0.000000000042349 +328,02HD022,COBOURG BROOK NEAR PRECIOUS CORNERS,43.988470000000000,-78.210750000000004,ON,UTC-05:00,41027187,27193,0.000000000128310 +329,02HD023,MACKIE CREEK NEAR HAMPTON,43.979080000000003,-78.680310000000006,ON,UTC-05:00,41027256,27262,0.000000001077702 +330,02HD024,GAGE CREEK NEAR DALE,43.997030000000002,-78.254329999999996,ON,UTC-05:00,41027186,27192,0.000000000281437 +331,02HE002,CONSECON CREEK AT ALISONVILLE,44.027780000000000,-77.366669999999999,ON,UTC-05:00,41026915,26921,0.000000000131297 +332,02HE004,BLACK CREEK AT MILFORD,43.936830000000000,-77.094970000000004,ON,UTC-05:00,41027092,27098,0.000000008144635 +333,02HF002,GULL RIVER AT NORLAND,44.731949999999998,-78.818049999999999,ON,UTC-05:00,41024440,24446,0.000000000708039 +334,02HF003,BURNT RIVER NEAR BURNT RIVER,44.710000000000001,-78.677499999999995,ON,UTC-05:00,41024610,24616,0.000000000240748 +335,02HG001,MARIPOSA BROOK NEAR LITTLE BRITAIN,44.289720000000003,-78.841669999999993,ON,UTC-05:00,41026334,26340,0.000000000359532 +336,02HG002,NONQUON RIVER NEAR PORT PERRY,44.086689999999997,-79.006079999999997,ON,UTC-05:00,41027034,27040,0.000000001293536 +337,02HG003,BLACKSTOCK CREEK NEAR BLACKSTOCK,44.131920000000001,-78.828969999999998,ON,UTC-05:00,41026874,26880,0.000000005944352 +338,02HH003,PIGEON RIVER NEAR LOTUS,44.124169999999999,-78.694999999999993,ON,UTC-05:00,41026906,26912,0.000000000273023 +339,02HH005,PIGEON RIVER AT OMEMEE,44.296720000000001,-78.549999999999997,ON,UTC-05:00,41026208,26214,0.000000001271685 +340,02HJ001,JACKSON CREEK AT PETERBOROUGH,44.302500000000002,-78.321110000000004,ON,UTC-05:00,41026161,26167,0.000000000153602 +341,02HJ003,OUSE RIVER NEAR WESTWOOD,44.298609999999996,-78.045559999999995,ON,UTC-05:00,41026212,26218,0.000000000180677 +342,02HJ005,SQUIRREL CREEK NEAR BAILIEBORO,44.123330000000003,-78.388610000000000,ON,UTC-05:00,41026816,26822,0.000000000346297 +343,02HJ006,JACKSON CREEK NEAR JACKSON HEIGHTS,44.309829999999998,-78.370720000000006,ON,UTC-05:00,41026133,26139,0.000000005220758 +344,02HJ007,BAXTER CREEK AT MILLBROOK,44.150530000000003,-78.447109999999995,ON,UTC-05:00,41026774,26780,0.000000000345383 +346,02HK003,CROWE RIVER AT MARMORA,44.481670000000001,-77.684719999999999,ON,UTC-05:00,41025354,25360,0.000000000321237 +347,02HK005,CROWE RIVER NEAR GLEN ALDA,44.844439999999999,-77.931110000000004,ON,UTC-05:00,41023838,23844,0.000000000694423 +348,02HK006,BEAVER CREEK NEAR MARMORA,44.535280000000000,-77.696659999999994,ON,UTC-05:00,41025076,25082,0.000000000251893 +349,02HK007,COLD CREEK AT ORLAND,44.134720000000002,-77.786940000000001,ON,UTC-05:00,41026670,26676,0.000000000362775 +350,02HK008,RAWDON CREEK NEAR WEST HUNTINGDON,44.338050000000003,-77.477220000000003,ON,UTC-05:00,41025804,25810,0.000000000450549 +351,02HK009,BURNLEY CREEK ABOVE WARKWORTH,44.195839999999997,-77.911670000000001,ON,UTC-05:00,41026458,26464,0.000000002444356 +352,02HK010,TRENT RIVER AT TRENTON (AFFRA),44.108330000000002,-77.579170000000005,ON,UTC-05:00,41026710,26716,0.000000000140056 +353,02HK011,MAYHEW CREEK NEAR TRENTON,44.109169999999999,-77.612530000000007,ON,UTC-05:00,41026694,26700,0.000000000715322 +354,02HK015,SALT CREEK NEAR CODRINGTON,44.204560000000001,-77.819080000000000,ON,UTC-05:00,41026475,26481,0.000000001294932 +355,02HK016,TROUT CREEK NEAR CAMPBELLFORD,44.307000000000002,-77.830939999999998,ON,UTC-05:00,41026076,26082,0.000000000431487 +356,02HK017,HOARDS CREEK NEAR WELLMAN,44.336939999999998,-77.628670000000000,ON,UTC-05:00,41025839,25845,0.000000000247535 +357,02HL001,MOIRA RIVER NEAR FOXBORO,44.253610000000002,-77.419169999999994,ON,UTC-05:00,41026131,26137,0.000000001126335 +358,02HL003,BLACK RIVER NEAR ACTINOLITE,44.539439999999999,-77.370829999999998,ON,UTC-05:00,41024891,24897,0.000000000952768 +359,02HL004,SKOOTAMATTA RIVER NEAR ACTINOLITE,44.549720000000001,-77.328059999999994,ON,UTC-05:00,41024890,24896,0.000000000216154 +360,02HL005,MOIRA RIVER NEAR DELORO,44.499720000000003,-77.618330000000000,ON,UTC-05:00,41025161,25167,0.000000000066994 +361,02HL007,MOIRA RIVER NEAR TWEED,44.488610000000001,-77.319440000000000,ON,UTC-05:00,41025131,25137,0.000000000392577 +362,02HL008,CLARE RIVER NEAR BOGART,44.483330000000002,-77.227789999999999,ON,UTC-05:00,41025078,25084,0.000000000051152 +363,02HM002,DEPOT CREEK AT BELLROCK,44.471390000000000,-76.762780000000006,ON,UTC-05:00,41024978,24984,0.000000000177700 +364,02HM003,SALMON RIVER NEAR SHANNONVILLE,44.207220000000000,-77.209170000000000,ON,UTC-05:00,41026357,26363,0.000000000541323 +365,02HM004,WILTON CREEK NEAR NAPANEE,44.239440000000002,-76.849440000000001,ON,UTC-05:00,41026069,26075,0.000000000487143 +366,02HM005,COLLINS CREEK NEAR KINGSTON,44.256390000000003,-76.612499999999997,ON,UTC-05:00,41025904,25910,0.000000000408978 +367,02HM006,MILLHAVEN CREEK NEAR MILLHAVEN,44.226390000000002,-76.759159999999994,ON,UTC-05:00,41025997,26003,0.000000000005347 +368,02HM007,NAPANEE RIVER AT CAMDEN EAST,44.334719999999997,-76.838890000000006,ON,UTC-05:00,41025603,25609,0.000000000545432 +369,02HM009,WEST BRANCH LITTLE CATARAQUI CREEK NEAR KINGSTON,44.240000000000002,-76.578890000000001,ON,UTC-05:00,41025921,25927,0.000000000032228 +370,02HM010,SALMON RIVER AT TAMWORTH,44.486109999999996,-76.993060000000000,ON,UTC-05:00,41025081,25087,0.000000000868495 +371,02HM011,MILLHAVEN CREEK NEAR SYDENHAM,44.418889999999998,-76.594999999999999,ON,UTC-05:00,41025186,25192,0.000000000046394 +421,02MB006,LYN CREEK NEAR LYN,44.524999999999999,-75.805279999999996,ON,UTC-05:00,41022861,22867,0.000000000473432 +422,02MB010,BUELLS CREEK AT BROCKVILLE,44.585830000000001,-75.691670000000002,ON,UTC-05:00,41022723,22729,0.000000005487209 \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/README.TXT b/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/README.TXT new file mode 100644 index 0000000..f0fc035 --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/README.TXT @@ -0,0 +1,21 @@ +1) To start the download processes, at the prompt, + +./run_canflow.sh + +or put this script in a cron job. It will clear the log file every day at 5:28. + +Output is saved in the directory pointed to by the $OUTDIR variable. You can change the output directory by redefining the $OUTDIR variable in run_usgs.sh + +The log file is saved to the file defined by the $log variable. You can change the log file by modifying the $log variable in the run_usgs.sh. + +The log file is reset daily at 5:28. To change the time, redefine the $RESETLOGAT variable. + +2) New to NWM v3.1: + +Since v3.1, a site file is needed to run this download script because the server has been changed to https://wateroffice.ec.gc.ca/mainmenu/real_time_data_index_e.html. + +https://wateroffice.ec.gc.ca/services/real_time_data/csv/inline?stations[]=02AB014¶meters[]=47&start_date=2024-04-22%2000:00:00&end_date=2024-04-24%2023:59:59 + +An example site file can be found in the root directory named NWM_canadian_gage_inputs.txt. When stations are added or removed, this file needs to be uipdated. + +NWM uses only stationId start with 02* based on NWM_canadian_gage_inputs.txt file and only use parameter=47 for discharge. diff --git a/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/TimeSliceC.py b/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/TimeSliceC.py new file mode 100644 index 0000000..477482d --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/TimeSliceC.py @@ -0,0 +1,242 @@ +#!/usr/bin/env python + +import os, sys, time, math +from string import * +from datetime import datetime, timedelta +import calendar +import netCDF4 +import numpy as np +import pytz + +def isclose(a, b, rel_tol=1e-09, abs_tol=0.0): + '''Python 2 implementation of Python 3.5 math.isclose() + https://hg.python.org/cpython/file/tip/Modules/mathmodule.c#l1993''' + # sanity check on the inputs + if rel_tol < 0 or abs_tol < 0: + raise ValueError("tolerances must be non-negative") + + # short circuit exact equality -- needed to catch two infinities of + # the same sign. And perhaps speeds things up a bit sometimes. + if a == b: + return True + + # This catches the case of two infinities of opposite sign, or + # one infinity and one finite number. Two infinities of opposite + # sign would otherwise have an infinite relative tolerance. + # Two infinities of the same sign are caught by the equality check + # above. + if math.isinf(a) or math.isinf(b): + return False + + # now do the regular computation + # this is essentially the "weak" test from the Boost library + diff = math.fabs(b - a) + result = (((diff <= math.fabs(rel_tol * b)) or + (diff <= math.fabs(rel_tol * a))) or + (diff <= abs_tol)) + return result + +def dict_compare(d1, d2): + d1_keys = set(d1.keys()) + d2_keys = set(d2.keys()) + intersect_keys = d1_keys.intersection(d2_keys) + added = d1_keys - d2_keys + removed = d2_keys - d1_keys + modified = dict() + for o in intersect_keys: + f0 = d1[o][0] == d2[o][0] + f1 = isclose( d1[o][1], d2[o][1],abs_tol=0.01 ) + f2 = isclose( d1[o][2], d2[o][2]) + if not f0 or not f1 or not f2: + modified[o] = (d1[o], d2[o]) + same = set(o for o in intersect_keys if d1[o] == d2[o]) + return added, removed, modified, same + +class TimeSliceC: + """ Description: Store one time slice data (from Canadian data) + Author: Tim Hunter (tim.hunter@noaa.gov) drawing HEAVILY on + original code by Zhengtao Cui (Zhengtao.Cui@noaa.gov) + Date: Feb 15, 2018 + """ + stationIdStrLen = 15 + stationIdLong_name = "WSC station id padded to length 15" + timeStrLen = 19 + timeUnit = "UTC" + timeLong_name = "YYYY-MM-DD_HH:mm:ss UTC" + dischargeUnit = "m^3/s" + dischargeLong_name = "Discharge.cubic_meters_per_second" + dischargeQualityUnit = "-" + dischargeQualityLong_name = \ + "Discharge quality 0 to 100 to be scaled by 100." + + def __init__(self, time_stamp, resolution, station_time_value ): + # insure that time stamp is tz-aware. Time is already UTC. + self.centralTimeStamp = time_stamp.replace(tzinfo=pytz.UTC) + self.sliceTimeResolution = resolution + self.obvStationTimeValue = station_time_value + + def isEmpty( self ): + return not self.obvStationTimeValue + + def print_station_time_value( self ): + for e in self.obvStationTimeValue: + print( "Slice: central time: ", \ + self.centralTimeStamp.isoformat(), \ + e[0], e[1].isoformat(), e[2] ) + + def getStationIDs( self ): + stationL = [] + for e in self.obvStationTimeValue: + stationL.append( list( e[ 0 ][4:] ) ) + for s in stationL: + if len(s) < self.stationIdStrLen: + for i in range( len(s), self.stationIdStrLen ): + s.insert(0, ' ' ) + elif len(s) > self.stationIdStrLen: + s = s[0:self.stationIdStrLen - 1] + return stationL + + def getDischargeValues( self ): + values = [] + for e in self.obvStationTimeValue: + values.append( e[ 2 ] ) + return values + + def getDischargeTimes( self ): + obvtimes = [] + for e in self.obvStationTimeValue: + obvtimes.append(list(e[1].strftime("%Y-%m-%d_%H:%M:00"))) + return obvtimes + + def getQueryTimes( self ): + qtimes = [] + for e in self.obvStationTimeValue: + qtimes.append( calendar.timegm( e[ 1 ].utctimetuple() ) ) + return qtimes + + def getSliceNCFileName( self ): + tval = (self.sliceTimeResolution.days * 24 * 60) + (self.sliceTimeResolution.seconds // 60) + filename = (self.centralTimeStamp.strftime("%Y-%m-%d_%H_%M_00.") + + str(int(tval)).zfill(2) + "min.wscTimeSlice.ncdf") + return filename + + def getDischargeQuality( self ): + dq = [] + for e in self.obvStationTimeValue: + dq.append( e[ 3 ] ) + return dq + + def toNetCDF( self, outputdir = './' ): + fname = outputdir + '/' + self.getSliceNCFileName() + nc_fid = netCDF4.Dataset(fname, 'w', format='NETCDF4' ) + nc_fid.createDimension( 'stationIdStrLen', self.stationIdStrLen ) + nc_fid.createDimension( 'stationIdInd', None ) + nc_fid.createDimension( 'timeStrLen', self.timeStrLen ) + stationId = nc_fid.createVariable( 'stationId', 'S1',\ + ('stationIdInd', 'stationIdStrLen') ) + stationId.setncatts( {'long_name' : self.stationIdLong_name, \ + 'units' : '-'} ) + + time = nc_fid.createVariable( 'time', 'S1',\ + ('stationIdInd', 'timeStrLen' ) ) + time.setncatts( {'long_name' : self.timeLong_name, \ + 'units' : self.timeUnit} ) + + discharge = nc_fid.createVariable( 'discharge', 'f4',\ + ('stationIdInd', ) ) + discharge.setncatts( {'long_name' : self.dischargeLong_name, \ + 'units' : self.dischargeUnit} ) + discharge_quality = \ + nc_fid.createVariable( 'discharge_quality', 'i2',\ + ('stationIdInd', ) ) + discharge_quality.setncatts( {'long_name' : \ + self.dischargeQualityLong_name, \ + 'units' : self.dischargeQualityUnit, \ + 'multfactor' : '0.01' } ) + queryTime = nc_fid.createVariable( 'queryTime', 'i4',\ + ('stationIdInd', ) ) + + queryTime.setncatts( { 'units' : \ + 'seconds since 1970-01-01 00:00:00 local TZ' } ) + + tres = self.sliceTimeResolution.days * 24 * 60 + \ + self.sliceTimeResolution.seconds // 60 + nc_fid.setncatts( { 'fileUpdateTimeUTC': \ + datetime.utcnow().strftime( "%Y-%m-%d_%H:%M:00" ), \ + 'sliceCenterTimeUTC' : \ + self.centralTimeStamp.strftime( "%Y-%m-%d_%H:%M:00" ),\ + 'sliceTimeResolutionMinutes' : \ + str(int(tres)).zfill(2) } ) + + discharge[ : ] = self.getDischargeValues() + queryTime[ : ] = self.getQueryTimes() + + stations = self.getStationIDs() + stationId[ : ] = stations + + time[ : ] = self.getDischargeTimes() + discharge_quality[:] = self.getDischargeQuality() + + nc_fid.close() + + @classmethod + def fromNetCDF( self, ncfilename ): + nc_fid = netCDF4.Dataset( ncfilename, 'r' ) + timestamp = datetime.strptime( \ + nc_fid.getncattr( 'sliceCenterTimeUTC' ), \ + "%Y-%m-%d_%H:%M:00" ) + + time_resol = timedelta( minutes = \ + int( nc_fid.getncattr( 'sliceTimeResolutionMinutes' ) ) ) + + stations = netCDF4.chartostring( \ + nc_fid.variables[ 'stationId'][ : ] ) + + discharge = nc_fid.variables[ 'discharge'][ : ] + + queryTime = nc_fid.variables[ 'queryTime'][ : ] + + quality = nc_fid.variables[ 'discharge_quality'][ : ] + + stationTimeValue = [] + for s, d, q, qual in zip( stations, discharge, queryTime, quality ): + stationTimeValue.append( \ + ( 'CAN.' + s.strip(), \ + datetime.utcfromtimestamp( q ).replace(tzinfo=pytz.UTC), \ + d, qual ) ) + + nc_fid.close() + return self( timestamp, time_resol, stationTimeValue ) + + def mergeOld( self, oldTimeSlice ): + if self.centralTimeStamp != oldTimeSlice.centralTimeStamp or \ + self.sliceTimeResolution != oldTimeSlice.sliceTimeResolution: + print( 'new_cts=', self.centralTimeStamp ) + print( 'old_cts=', oldTimeSlice.centralTimeStamp ) + print( 'new_res=', self.sliceTimeResolution ) + print( 'old_res=', oldTimeSlice.sliceTimeResolution ) + raise RuntimeError( "FATAL ERROR: the two time slices " + + " differ, not merging ..." ) + else: + site_time_value = dict() + for e in self.obvStationTimeValue: + site_time_value[ e[ 0 ] ] = ( e[1], e[2], e[3] ) + old_site_time_value = dict() + + for e in oldTimeSlice.obvStationTimeValue: + old_site_time_value[ e[ 0 ] ] = ( e[1], e[2], e[3] ) + + added, removed, modified, same = ( + dict_compare(site_time_value, old_site_time_value )) + + if not added and not modified : + return False + + old_site_time_value.update( site_time_value ) + self.obvStationTimeValue = [] + for site in old_site_time_value: + self.obvStationTimeValue.append( ( site, \ + old_site_time_value[ site ][ 0 ], \ + old_site_time_value[ site ][ 1 ], \ + old_site_time_value[ site ][ 2 ] ) ) + return True diff --git a/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/WSC_Observation.py b/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/WSC_Observation.py new file mode 100644 index 0000000..9e7f930 --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/WSC_Observation.py @@ -0,0 +1,481 @@ +#!/usr/bin/env python +import os, sys, time, csv +from string import * +from datetime import datetime, timedelta +import xml.etree.ElementTree as etree +from TimeSliceC import TimeSliceC +import pytz +import unicodedata +from EmptyDirOrFileException import EmptyDirOrFileException + +""" + The class to mange dicharge data from one real-time discharge file + Author: Tim Hunter (tim.hunter@noaa.gov) + + Last modified by Zhengtao Cui (Zhengtao.Cui@noaa.gov) + Description: Updated the code to use real-time data from the + new server at + https://wateroffice.ec.gc.ca/mainmenu/real_time_data_index_e.html + +""" + +class WSC_Observation: + "Store one WSC data set " + + def __init__(self, csvfilename): + self.timevalue = {} + + # + # Define the column names I want to use + # If WSC changes file formats, this may need to be updated. + # + #csvfields = ('id', 'date', 'level', 'lgrade', 'lsymbol', 'lqaqc', + # 'discharge', 'dgrade', 'dsymbol', 'dqaqc') + # + #The header has changed since Feb 22, 2023. + #csvfields = ('ID', 'Date', 'Water Level / Niveau d\'eau (m)', + # 'Grade', 'Symbol / Symbole', 'QA/QC', + # 'Discharge / DÃit (cms)', 'Grade', 'Symbol / Symbole', 'QA/QC') + # + # + # Changed to new server https://wateroffice.ec.gc.ca/mainmenu/real_time_data_index_e.html + # header changed, + # + #csvfields = ('ID', 'Date', 'Parameter/ParamÃre', + # 'Value/Valeur', 'Qualifier/Qualificatif', 'Symbol/Symbole', + # 'Approval/Approbation') + csvfields = ('ID','Date','Parameter/ParamÃe','Value/Valeur', + 'Qualifier/Qualificatif','Symbol/Symbole', + 'Approval/Approbation','Grade/Classification', + 'Qualifiers/Qualificatifs') + + with open(csvfilename, 'r', encoding='utf-8-sig') as csvfile: + reader = csv.DictReader(csvfile) + # Strip spaces + reader.fieldnames = [f.strip() for f in reader.fieldnames] + + # Correct the special charaters (i.e.: French) + reader.fieldnames = [unicodedata.normalize('NFKD', f).encode('ascii', 'ignore').decode('ascii') for f in reader.fieldnames] + rows = list(reader) + if not rows: + raise ValueError(f"{csvfilename} has only a header; Skipping ...\n") + + for row in rows: + id_value = row.get('ID') + param_value = row.get('Parameter/Parametre') + + if not (param_value and param_value.isdigit()): + continue + + if int(param_value) == 47: # parameter 47 is for discharge + try: + dischstr = row.get('Value/Valeur') + discharge = float(dischstr) * 1.0 + #print(f"try: {id_value} ==>DISCHARGE={discharge}") + + qstr = row.get('Qualifier/Qualificatif') + #print(f"try: {id_value} ==>Qualifier={qstr}") + + if qstr.strip() != '' and int(qstr) == 10: + print('==>Skip ICE conditions ' + qstr + ' ...') + continue + + #print(f"try: {id_value} ==>qstr={qstr}") + except Exception as e: + print(f"Exception encountered for {id_value}: {e}") + discharge = -999999.0 + + dkey = None + try: + # + # Split the date string into two parts... Y-M-D and H:M:S + # Then parse them into a timezone-naive object + # Per the documentation from WSC, this timestamp is described as: + # "data timestamp in ISO 8601 format, Local Standard Time (LST)" + # So if the timestamp is + # 2018-08-16T13:30:00-0500 + # I am interpreting that as 1:30 pm local time, and that local time + # is 5 hours behind UTC. If this interpretation is incorrect, the + # following code should be modified appropriately. + # + # Once I have a datetime object representing the local time, I can + # use the timezone info to translate that into UTC, which is what + # will be used as the data key value. + # + # NOTE!!!!! When storing the data, we are rounding/stripping the + # seconds field to 0. So I need to do the same thing here. + # That is accomplished very simply, by replacing whatever was + # specified for seconds with '00'. If this is not done we end up + # with mismatch issues when we are merging timeslices. + # + #s = row['Date'].split("T") + #ymd = s[0] + #hms = s[1][:6] + '00' + #dsnz = ymd + ' ' + hms # format is YYYY-MM-DD HH:MM:SS + #dtnz = datetime.strptime(dsnz, '%Y-%m-%d %H:%M:%S') # timezone-naive object + + date_str = row.get('Date') + ymd, hms = date_str.split("T") + dsnz = f"{ymd} {hms[:6]}00" + dt = datetime.strptime(dsnz, '%Y-%m-%d %H:%M:%S') + dkey = dt.replace(tzinfo=pytz.UTC) + +# Server https://wateroffice.ec.gc.ca/mainmenu/real_time_data_index_e.html +# is already in UTC time. Timezone conversion is not needed +# +# Zhengtao Cui, 12/1/2023 +# +# tz = s[1][8:] +# tzh = int(tz[1:3]) # time zone hours, *absolute value*; typically 4 or 5 for GL region +# tzm = int(tz[4:]) # time zone minutes, typically 0 for GL region +# tzoff = timedelta(hours=tzh, minutes=tzm) +# +# # +# # Adjust the time appropriately so that it represents +# # the UTC time. +# # +# if (tz[0] == '-'): +# dtu = dtnz + tzoff # this is GL case +# else: +# dtu = dtnz - tzoff + + # + # time zone conversion is not needed + # + #dtu = dtnz + # + # Make it timezone-aware, assigning it to UTC timezone and + # then using that datetime value as the dictionary key + # + #dkey = dtu.replace(tzinfo=pytz.UTC) + except Exception as e: + raise Exception( \ + 'Can not parse date... {}'.format(e) ) from e + + if dkey and discharge >= 0: + valueQC = int(qstr) if qstr else 0 + dataquality = self.calculateDataQuality(discharge, \ + valueQC ) + self.timevalue[dkey] = (discharge, dataquality) + #print(f"\n+++Discharge={discharge}") + else: + self.timevalue[dkey] = (-999999.0, 0) + #print(f" {id_value} - Discharge=-999999.0\n") + + self.stationID = f"CAN.{id_value}" + + #print(f"{self.stationID} {dkey} {discharge} {dataquality}") + + if not self.timevalue: + raise ValueError(f"No parameter 47 (No valid observation); Skipping {csvfilename}\n") + + timekeys = sorted( self.timevalue.keys() ) + + self.obvPeriod = timekeys[0], timekeys[-1] + self.stationName = self.stationID + self.generationTime = timekeys[0] + self.unit = 'm3/s' + + + def calculateDataQuality(self, value, qacode): + """ Calculate a quality code for the discharge measurement based on + the value and associated QA/QC code. The defined QA/QC codes are: + 1 = preliminary, 2 = reviewed, 3 = checked, 4 = approved + """ +######################################################################## +#Date: Fri, 10 Jul 2020 12:49:57 -0600 +#From: James McCreight +#To: Zhengtao Cui +#Cc: Tim Hunter - NOAA Federal , +#Brian Cosgrove - NOAA Federal , +#Arezoo RafieeiNasab , David Gochis , +#Aubrey Dugger , Ryan Cabell , +#Laura Read +#Subject: Re: High priority....Canada streamflow issue +#Parts/Attachments: +#1 OK ~342 lines Text (charset: UTF-8) +#2 Shown ~728 lines Text (charset: UTF-8) +#---------------------------------------- +#So, I would say it depends on our expectations of what the codes really +#mean, but the weight penalties should be thought of as "relative to model +#error" with .5 giving something like equal weight. Generally, the +#observation is going to be much better (there are exceptions) even when it's +#not revised (at least for USGS).... unless this is just not true for these +#gages. +#I might suggest the weighting scheme below in code, based on my best guess. +#Here is my basic thought process: +#Within 28 hours (the extended look back period), we dont get to QC levels 3 +#and 4 because that process likely takes longer. +#So, once we reach 2, we are probably doing as well as can be expected. +#It would be informative to see how much the OPERATIONAL data stream has +#quality 1 and 2 and what the ?tis between obs time and time that that flag +#arrives. +#It might be informative to also see if/how much the discharge values change +#when their quality codes change. +#It is possible that the necessary data/flow is beyond what is currently +#setup, but doing an aggressive saving of the canada gage obs files could +#shed some light. +# +#def calculateDataQuality(self, value, qacode): +# """ Calculate a quality code for the discharge measurement based on +# the value and associated QA/QC code. The defined QA/QC codes are: +# 1 = preliminary, 2 = reviewed, 3 = checked, 4 = approved +# """ +# quality = 0 +# if value <= 0 or value > 9000: +# quality = 0 +# else: +# if qacode == 1: +# quality = 75 +# elif qacode == 2: +# quality = 100 +# elif qacode == 3: +# quality = 100 +# elif qacode == 4: +# quality = 100 +# else: +# quality = 0 +# return quality +#------------------------------------------------------- +#James L. McCreight +#NCAR Research Applications Lab +#office: FL2 2065 +#office phone: 303-497-8404 +#cell: 831-261-5149 +######################################################################## +#Date: Thu, 16 Jul 2020 14:15:12 -0400 +#From: Brian Cosgrove - NOAA Federal +#To: Arezoo RafieeiNasab +#Cc: Zhengtao Cui , +# James McCreight , +# Tim Hunter - NOAA Federal , +# David Gochis , Aubrey Dugger , +# Ryan Cabell , Laura Read +# Subject: Re: High priority....Canada streamflow issue +# Parts/Attachments: +# 1.1 OK 509 lines Text (charset: UTF-8) +# 1.2 Shown ~39 KB Text (charset: UTF-8) +# 2 OK 977 KB Image +#---------------------------------------- +#Okay, barring any further input/concerns from folks, let's do this.... +#Zhengtao, can you alter it so that it gives 100% weight (quality) to the +#incoming obs even if the QC code is only '1'? I don't' think we're seeing +#the desired impact of the obs currently....let's see how it looks after that +#change in real-time. +# +#So this would change to quality = 100 +# +# > if qacode == 1: +# > quality = 75 +# +# Thanks, +# Brian +# + +# 12/01/2023 Zhengtao +# On the new server, https://wateroffice.ec.gc.ca/mainmenu/real_time_data_index_e.html +# the qualifier values are only -1 and 0, so set the quality to 100 +# + quality = 100 +# quality = 0 +# if value <= 0 or value > 9000: +# quality = 0 +# else: +# if qacode == 1: +# quality = 100 +# elif qacode == 2: +# quality = 100 +# elif qacode == 3: +# quality = 100 +# elif qacode == 4: +# quality = 100 +# else: +# quality = 0 + return quality + + def getTimeValueAt(self, at_time, resolution = timedelta() ): + closestTimes = [] + distances = [] + for k in sorted(self.timevalue): + td = abs(k - at_time) + if td <= resolution/2: + closestTimes.append(k) + distances.append(td) + if closestTimes: + closest = [x for y,x in sorted(zip(distances,closestTimes))] [0] + return (closest, self.timevalue[closest]) + else: + return None + + +class All_WSC_Observations: + """Store all WSC data in a given directory""" + def __init__(self, wscdatadir ): + self.source = wscdatadir + self.wscobvs = [] + if not os.path.isdir(wscdatadir): + raise RuntimeError("FATAL ERROR: " + wscdatadir + + " is not a directory or does not exist. ") + + twodaysago = datetime.now() - timedelta( days = 2 ) + for file in os.listdir(wscdatadir): + if file.endswith(".csv"): + fname = wscdatadir + '/' + file + st = os.stat( fname ) + # + # Don't process data older than 2 days. + # + if datetime.fromtimestamp( st.st_mtime) > twodaysago: + # Skip empty files + if st.st_size == 0: + print(f"Skipping empty file: {fname}") + continue + + try: + print(f"\nReading {fname} ...") + self.wscobvs.append(WSC_Observation(fname)) + except Exception as e: + print( "WARNING: Can not parsing CSV file: " + \ + file + ", Because " ) + print( e ) + continue + + if not self.wscobvs: + raise EmptyDirOrFileException( "Input directory " + wscdatadir \ + + " has no Water Survey of Canada CSV files or the " + "Water Survey CSV files contain no flow data!" ) + + self.index = -1 + + self.timePeriod = self.wscobvs[0].obvPeriod + for obv in self.wscobvs: + if self.timePeriod[0] > obv.obvPeriod[0]: + self.timePeriod = ( obv.obvPeriod[0], self.timePeriod[1]) + if self.timePeriod[1] < obv.obvPeriod[1]: + self.timePeriod = ( self.timePeriod[0], obv.obvPeriod[1]) + + + def __iter__(self): + return self + + def next(self): + if self.index == len( self.wscobvs ) - 1: + self.index = -1 + raise StopIteration + self.index = self.index + 1 + return self.wscobvs[self.index] + + def timePeriodForAll(self): + return self.timePeriod + + # + # Step through the observations, finding the entry that + # is closest (time-wise) to the desired timestamp. + # Append that observation to the station_time_value_list. + # Then create a TimeSliceC object from all of the observations in that list. + # + def makeTimeSlice(self, timestamp, timeresolution): + station_time_value_list = [] + for obv in self.wscobvs: + closestObv = obv.getTimeValueAt( timestamp, timeresolution ) + if closestObv: + c0 = closestObv[0] + c10 = closestObv[1][0] + c11 = closestObv[1][1] + station_time_value_list.append((obv.stationID, c0, c10, c11)) + timeSlice = TimeSliceC(timestamp, timeresolution, station_time_value_list) + return timeSlice + + def makeAllTimeSlices(self, timeresolution, outdir): + # + # the time resolutions must divide 60 minutes with no remainder + # + if 3600 % timeresolution.seconds != 0: + raise RuntimeError( "FATAL ERROR: Time slice resolution must " + "divide 60 minutes with no remainder." ) + + # + # Always start two days ago because sometimes the downloaded realtime + # files contain old data older than six months, See the email from NCO + # Simon Hsiao on Dec 16, 2022, with subject + # "20221216 12z nwm_canada_timeslices job hung". + # + # +# NWM team, +# +# The 20221216 12z nwm_canada_timeslices job hung failed seeing hung reached walltime 10 min. here are the job logfiles and working dir for your investigations, rerun still hung - +# /lfs/h1/ops/prod/output/20221216/nwm_canada_timeslices_12_1725.o33696851 -- 1st run +# /lfs/h1/ops/prod/output/20221216/nwm_canada_timeslices_12_1739.o33703661 -- 2nd run +# /lfs/f1/ops/prod/tmp/nwm_canada_timeslices_12_1725.33696851.dbqs01 - 1st run working dir +# /lfs/f1/ops/prod/tmp/nwm_canada_timeslices_12_1739.33703661.dbqs01/ -- 2nd run working dir +# In the working dir,there are some 2022-06-01 15 min WscTimeSlice.ncdf data files as below , why back to 202206 ? +# 2022-06-01_05_00_00.15min.wscTimeSlice.ncdf +# ... +# 2022-06-03_23_00_00.15min.wscTimeSlice.ncdf +# +# Thanks, +# +# /Simon +# SPA Office + + # + # need to use UTC time here + startTime = datetime.now().replace(tzinfo=pytz.UTC) - timedelta( days = 2 ) + + #Round the start time to the nearist 0, 15, 30 and 45 minutes + #Otherwise the filename will be wrong. + + #startTime = self.timePeriod[0] + + if startTime.minute >= 8 and startTime.minute <= 22: + startTime = datetime( startTime.year, startTime.month, + startTime.day, startTime.hour, + 15, tzinfo=startTime.tzinfo ) + elif startTime.minute >= 23 and startTime.minute <= 37: + startTime = datetime( startTime.year, startTime.month, + startTime.day, startTime.hour, + 30, tzinfo=startTime.tzinfo ) + elif startTime.minute >= 38 and startTime.minute <= 52: + startTime = datetime( startTime.year, startTime.month, + startTime.day, startTime.hour, + 45, tzinfo=startTime.tzinfo ) + elif startTime.minute < 8: + startTime = datetime( startTime.year, startTime.month, + startTime.day, startTime.hour, + 0, tzinfo=startTime.tzinfo ) + else: # > 52 + startTime = datetime( startTime.year, startTime.month, + startTime.day, startTime.hour, + 0, tzinfo=startTime.tzinfo ) + \ + timedelta( hours = 24 ) + + #print ("startTime < self.timePeriod[0]",startTime,self.timePeriod[0]); + while startTime < self.timePeriod[0]: + startTime += timeresolution + + #print ("startTime < self.timePeriod[0]",startTime,self.timePeriod[0]); + #print ("startTime > self.timePeriod[0]",startTime,self.timePeriod[1]); + + if startTime > self.timePeriod[1]: + raise RuntimeError("FATAL ERROR: observation time period wrong!") + + count = 0 + print ("Timeslice start time: ", startTime ) + while startTime <= self.timePeriod[1]: + print ("making time slice for ", startTime.isoformat()) + oneSlice = self.makeTimeSlice(startTime, timeresolution) + if ( not oneSlice.isEmpty() ): + updatedOrNew = True + slicefilename = outdir + '/' +oneSlice.getSliceNCFileName() + if os.path.isfile( slicefilename ): + oldslice = TimeSliceC.fromNetCDF( slicefilename ) + updatedOrNew = oneSlice.mergeOld( oldslice ) + if updatedOrNew: + oneSlice.toNetCDF(outdir) + print (oneSlice.getSliceNCFileName() + " updated!") + else: + print (oneSlice.getSliceNCFileName() + " not updated!") + count = count + 1 + + startTime += timeresolution + return count diff --git a/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/make_time_slice_from_canada.py b/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/make_time_slice_from_canada.py new file mode 100644 index 0000000..77f02dc --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/nco_canada/timeslices_scripts/make_time_slice_from_canada.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python +import os, sys, time, urllib, getopt +import logging +from string import * +import xml.etree.ElementTree as etree +from datetime import datetime, timedelta +from WSC_Observation import WSC_Observation, All_WSC_Observations +from TimeSliceC import TimeSliceC +from EmptyDirOrFileException import EmptyDirOrFileException + +""" + The driver to parse downloaded hydrologic data files from + Environment and Climate Change Canada (Water Survey of Canada), + and then to create time slices and write to NetCDF files. + Author: Tim Hunter (tim.hunter@noaa.gov) drawing heavily on + the prior work done by Zhengtao Cui for the USGS data. + Date: February 2018 +""" +def main(argv): + """ + function to get input arguments + """ + inputdir = '' + try: + opts, args = getopt.getopt(argv,"hi:o:",["idir=", "odir="]) + except getopt.GetoptError: + print( 'make_time_slice_from_canada.py -i -o ' ) + sys.exit(2) + for opt, arg in opts: + if opt == '-h': + print( \ + 'make_time_slice_from_canada.py -i -o ' ) + sys.exit() + elif opt in ('-i', "--idir"): + inputdir = arg + if not os.path.exists( inputdir ): + raise RuntimeError( 'FATAL ERROR: inputdir ' + \ + inputdir + ' does not exist!' ) + elif opt in ('-o', "--odir" ): + outputdir = arg + if not os.path.exists( outputdir ): + raise RuntimeError( 'FATAL ERROR: outputdir ' + \ + outputdir + ' does not exist!' ) + + return (inputdir, outputdir) + +logging.basicConfig(format=\ + '%(asctime)s - %(name)s - %(levelname)s - %(message)s',\ + level=logging.INFO) +logger = logging.getLogger(__name__) +formatter = logging.Formatter(\ + '%(asctime)s - %(name)s - %(levelname)s - %(message)s') +#logger.setFormatter(formatter) +logger.info( "System Path: " + str( sys.path ) ) + +if __name__ == "__main__": + odir = main(sys.argv[1:]) + +indir = odir[0] +outdir = odir[1] + +# +# Load discharge data as downloaded from ECCC datamart. Current URL +# for a parent directory is http://dd.weather.gc.ca/hydrometric/csv/ +# Files are found further down that tree. +# +try: + allobvs = All_WSC_Observations( indir ) +except EmptyDirOrFileException as e: + logger.warning( str(e), exc_info=True) + sys.exit(0) +except Exception as e: + logger.error("Failed to load Canadian CSV files: " + str(e), exc_info=True) + sys.exit(3) + +print( 'earliest time: ', allobvs.timePeriodForAll()[0] ) +print( 'latest time: ', allobvs.timePeriodForAll()[1] ) + +# +# Create time slices from loaded observations +# +# Set time resolution to 15 minutes +# and +# Write time slices to NetCDF files +# +try: + timeslices = allobvs.makeAllTimeSlices( timedelta( minutes = 15 ), outdir ) +except Exception as e: + logger.error("Failed to make time slices: " + str(e) , exc_info=True) + logger.error("Input dir = " + indir, exc_info=True) + sys.exit(3) + +print( "total number of timeslices: ", timeslices ) diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/ACE_Observation.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/ACE_Observation.py deleted file mode 100755 index e7fa3cd..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/ACE_Observation.py +++ /dev/null @@ -1,146 +0,0 @@ -############################################################################### -# Module name: ACE_Observation -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 05/28/2019 # -# # -# Description: manage data in a ACE CWMS xml file # -# # -############################################################################### - -import os, sys, time, csv, re -import logging -from string import * -from collections import OrderedDict -from datetime import datetime, timedelta -import dateutil.parser -import pytz -#import iso8601 -import xml.etree.ElementTree as etree -from TimeSlice import TimeSlice -#import Tracer -from Observation import Observation -from CWMS_Sites import CWMS_Sites - -def parseDuration( period ): - regex = re.compile('(?P-?)P(?:(?P\d+)Y)?(?:(?P\d+)M)?(?:(?P\d+)D)?(?:T(?:(?P\d+)H)?(?:(?P\d+)M)?(?:(?P\d+)S)?)?') - - # Fetch the match groups with default value of 0 (not None) - duration = regex.match(period).groupdict(0) - - # Create the timedelta object from extracted groups - delta = timedelta(days=int(duration['days']) + \ - (int(duration['months']) * 30) + \ - (int(duration['years']) * 365), \ - hours=int(duration['hours']), \ - minutes=int(duration['minutes']), \ - seconds=int(duration['seconds'])) - - if duration['sign'] == "-": - delta *= -1 - - return delta - -class ACE_Observation(Observation): - """ - Store one USGS WaterML2.0 data - """ - def __init__(self, cwmsxmlfilename, cwmssites ): - """ - Initialize the ACE_Observation object with a given - filename - """ - self.source = cwmsxmlfilename - self.timeValueQuality = OrderedDict() - self._sites = cwmssites - if cwmsxmlfilename.endswith( '.xml' ): - self.loadCWMSxml( cwmsxmlfilename ) - else: - raise RuntimeError( "FATAL ERROR: Unknow file type: " + \ - cwmsxmfilename ) - - def loadCWMSxml(self, xmlfilename ): - """ - Read real-time stream flow data from a given CWMS XML file - - Input: xmlfilename - the CWMS xml filename - """ - try: - obvwml = etree.parse( xmlfilename ) - root= obvwml.getroot() - name_1 = root.find('query-info').find('requested-item')\ - .find('name').text - timeseries = root.find('time-series') - office = timeseries.find('office').text - self.stationName = office + "." + name_1 - self.stationID = self._sites.getIndex(office, name_1 ) - - regularIntervalValues = timeseries.find('regular-interval-values') - if regularIntervalValues is not None: - self.parseRegularIntervalValues( regularIntervalValues ) - else: - irregularIntervalValues = timeseries.find('irregular-interval-values') - self.parseIrregularIntervalValues( irregularIntervalValues) - - except Exception as e: - raise RuntimeError( "WARNING: parsing XML error: " + str( e )\ - + ": " + xmlfilename + " skipping ..." ) - - self.stationName = office + '.' + name_1 - self.obvPeriod = list( self.timeValueQuality.keys() )[0], \ - list( self.timeValueQuality.keys() )[-1] - - unitConvertToM3perSec = self.getUnitConvertToM3perSec() - - self.timeValueQuality = dict(map( \ - lambda kv: (kv[0], (kv[1][0] * unitConvertToM3perSec, \ - kv[1][1])),\ - iter( self.timeValueQuality.items()) )) - self.unit = 'm3/s' - -# for k, v in self.timeValueQuality.items(): -# print(k, v) - - def parseRegularIntervalValues(self, regularInterval): - self.unit = regularInterval.get('unit') - - interval = parseDuration( regularInterval.get('interval') ) - - for seg in regularInterval.findall('segment'): - beginTime = \ - dateutil.parser.parse( seg.get('first-time')) \ - .astimezone(pytz.utc).replace(tzinfo=None) - for s in seg.text.strip().split('\n'): - self.timeValueQuality[ beginTime ] = \ - ( float(s.split(' ')[0]), \ - self.calculateDataQuality( float(s.split(' ')[1] ) ) ) - - beginTime += interval - - - def parseIrregularIntervalValues(self, irregularInterval): - self.unit = irregularInterval.get('unit') - for s in irregularInterval.text.strip().split('\n'): - words = s.split(' ') - t = dateutil.parser.parse( words[0] ) \ - .astimezone(pytz.utc).replace(tzinfo=None) - self.timeValueQuality[ t ] = \ - ( float(words[1]), \ - self.calculateDataQuality(float(words[2] ) ) ) - # print( t, self.timeValueQuality[ t ] ) - - - def getUnitConvertToM3perSec(self): - if self.unit == 'cfs': - unitConvertToM3perSec = 0.028317 - elif self.unit == 'CMS': - unitConvertToM3perSec = 1.0 - else: - raise RuntimeError( "FATAL ERROR: Unit " + self.unit + \ - " is not known. ") - return unitConvertToM3perSec - def calculateDataQuality(self, value ): - return 100.0 diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_Sites.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_Sites.py deleted file mode 100755 index b9030db..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_Sites.py +++ /dev/null @@ -1,73 +0,0 @@ -############################################################################### -# Module name: CWMS_Sites # -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 09/05/2019 # -# # -# Description: manage the ACE CWMS sites in CSV format # -# # -# Updated by: Donald W Johnson (donald.w.johnson@noaa.gov) # -# # -# Update Description: Change column names to match new site file # -# # -############################################################################### - -import csv - -class CWMS_Sites: - """ - Store CWMS site information - """ - def __init__(self, csvSitefile ): - """ - Initialize the CWMS_Sites object with a given - filename - """ - self.source = csvSitefile - - self._office_name1_to_index = dict() - with open( csvSitefile, mode='r') as csvsite_file: - csvsite_reader = csv.DictReader( csvsite_file ) - line_count = 0 - for row in csvsite_reader: - if line_count == 0: - print('Column names are ' + ", ".join(row)) - line_count += 1 -# print('\t' + row["office"] + " " + row["name_1"] ) - if row["Office"] in self._office_name1_to_index: - self._office_name1_to_index[ \ - row["Office"] ][row["gage"] ] = \ - row[ "NIDID" ] - else: - self._office_name1_to_index[ row["Office"] ] = \ - dict( { row["gage"] : \ - row[ "NIDID" ] } ) - - line_count += 1 - - print('Processed ' + str( line_count ) + ' lines.') - self.office_name1_to_index = self._office_name1_to_index - - - @property - def source(self): - return self._source - - @source.setter - def source(self, s): - self._source = s - - - @property - def office_name1_to_index(self): - return self._office_name1_to_index - - @office_name1_to_index.setter - def office_name1_to_index(self, o): - self._office_name1_to_index=o - - def getIndex(self, office, name1 ): - return self.office_name1_to_index[ office][name1 ] diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_outflow_sites_263_index.csv b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_outflow_sites_263_index.csv deleted file mode 100755 index 174e07a..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/CWMS_outflow_sites_263_index.csv +++ /dev/null @@ -1,255 +0,0 @@ -USACE_site_index,office,CWMS_ID,Data_type,latitude,longitude,data_Freq,name3,public_nam,long_name,descriptio,horizontal,estimate,vertical_d,timezone,county,state,nation,nearest_ci,bounding_o,location_k,location_t,name_1,Alternate,Mins,Obs_type,Elev_ft -0,SAJ,S351-Structure,Flow,26.69722,-80.71389,Inst, , , , ,WGS84,Unknown County or County N/A,FL,UNITED STATES, ,SAJ,SITE, , , , ,S351-Structure.Flow.Inst.0.0.SFWMD-db-raw, ,0,SFWMD-db-raw,0 -1,SAJ,S4-Pump,Flow,26.78944,-80.96194,Inst, , , , ,WGS84,Unknown County or County N/A,FL,UNITED STATES, ,SAJ,SITE, , , , ,S4-Pump.Flow.Inst.0.0.SFWMD-db-raw, ,0,SFWMD-db-raw,0 -2,SAJ,S135-Pump,Flow,27.08611,-80.66139,Inst, , , , ,WGS84,Unknown County or County N/A,FL,UNITED STATES, ,SAJ,SITE, , , , ,S135-Pump.Flow.Inst.1Hour.0.SFWMD-WM, ,0,SFWMD-WM,0 -3,SAJ,S133,Flow,27.20583,-80.80083,Inst, ,S-133, , ,WGS84,Unknown County or County N/A,FL,UNITED STATES, ,SAJ,SITE, , , , ,S133.Flow.Inst.1Hour.0.SFWMD-WM, ,0,SFWMD-WM,0 -4,SWF,TX00004-Gated_Total,Flow-Out,29.86861,-98.19861,Ave,CANYON LAKE-Gated_Total, , , ,WGS124,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Fischer, TX",SWF,SITE, ,TX00004-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,CANYON LAKE-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -5,SWF,TX00013-Gated_Total,Flow-Out,30.32222,-96.52556,Ave,SOMERVILLE LAKE-Gated_Total, , , ,WGS126,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Somerville, TX",SWF,SITE, ,TX00013-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,SOMERVILLE LAKE-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -6,SWF,GGLT2-Gated_Total,Flow-Out,30.6675,-97.72722,Ave,NORTH SAN GABRIEL DAM-Gated_Total, , , ,WGS100,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Georgetown, TX",SWF,SITE, ,GGLT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.Reporting,GGLT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Reporting,0 -7,SWF,TX08005-Gated_Total,Flow-Out,30.69278,-97.32611,Ave,GNGT2-Gated_Total, , , ,WGS102,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Davilla, TX",SWF,SITE, ,TX08005-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,GNGT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.Reporting,0,Rev-SWF-REGI,0 -8,SWF,TX00015-Gated_Total,Flow-Out,30.79528,-94.18,Ave,TBLT2-Gated_Total, , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Spurger, TX",SWG,SITE, ,TX00015-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,TBLT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.Reporting,0,Rev-SWF-REGI,0 -9,SWF,TX00014-Gated_Total,Flow-Out,31.02222,-97.5325,Ave,STILLHOUSE-HOLLOW DAM-Gated_Total, , , ,WGS128,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Belton, TX",SWF,SITE, ,TX00014-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,STILLHOUSE-HOLLOW DAM-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -10,SWF,TX00011-Gated_Total,Flow-Out,31.06056,-94.10583,Ave,JSPT2-Gated_Total, , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Brookeland, TX",SWF,SITE, ,TX00011-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,JSPT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.Reporting,0,Rev-SWF-REGI,0 -11,SWF,TX00002-Gated_Total,Flow-Out,31.10611,-97.47444,Ave,BELTON LAKE-Gated_Total, , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Belton, TX",SWF,SITE, ,TX00002-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,BELTON LAKE-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -12,SAM,AL01433-Spillway,Flow,31.25916,-85.11116,Inst,Andrews-Spillway,Andrews Gated Spillway, , ,NAD83, , ,US/Eastern,Early,GA,UNITED STATES,"Coumbia, AL",SAM,OUTLET, ,AL01433-Spillway.Flow.Inst.1Hour.0.Raw-SCADA_SAM,Andrews-Spillway.Flow.Inst.1Hour.0.Raw-SCADA_SAM,0,Raw-SCADA_SAM,0 -13,SWF,TX00012-Gated_Total,Flow-Out,31.48444,-100.4814,Ave,O C FISHER DAM AND LAKE-Gated_Total, , , ,WGS120,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"San Angelo, TX",SWF,SITE, ,TX00012-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,O C FISHER DAM AND LAKE-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -14,SWF,TX00016-Gated_Total,Flow-Out,31.584,-97.202,Ave,ACTT2-Gated_Total, , , ,WGS84,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Waco, TX",SWF,SITE, ,TX00016-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,ACTT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.Reporting,0,Rev-SWF-REGI,0 -15,SWF,TX00006-Gated_Total,Flow-Out,31.83278,-99.56056,Ave,HORDS CREEK LAKE-Gated_Total, , , ,WGS106,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Valera, TX",SWF,SITE, ,TX00006-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,HORDS CREEK LAKE-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -16,SWF,TX00017-Gated_Total,Flow-Out,31.86528,-97.37167,Ave,WHITNEY LAKE-Gated_Total, , , ,WGS132,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Laguna Park, TX",SWF,SITE, ,TX00017-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,WHITNEY LAKE-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -17,SWF,TX00009-Gated_Total,Flow-Out,31.95,-96.7,Ave,DAWT2-Gated_Total, , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Dawson, TX",SWF,SITE, ,TX00009-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,DAWT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.Reporting,0,Rev-SWF-REGI,0 -18,SWF,TX00010-Gated_Total,Flow-Out,31.9717,-98.4767,Ave,PCTT2-Gated_Total, , , ,WGS116,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Hasse, TX",SWF,SITE, ,TX00010-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,PCTT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.Reporting,0,Rev-SWF-REGI,0 -19,SWF,TX00001-Gated_Total,Flow-Out,32.25,-96.64,Ave,BARDWELL LAKE-Gated_Total, , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Bardwell, TX",SWF,SITE, ,TX00001-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,BARDWELL LAKE-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -20,SWF,GBYT2-Pump,Flow-Out,32.37417,-97.68889,Ave, , , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Granbury, TX",SWF,SITE, ,GBYT2-Pump.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI, ,0,Rev-SWF-REGI,0 -21,SAM,MS01491-Spillway,Flow-Discharge,32.4749,-88.79725,Inst,Okatibbee-Spillway,Okatibbee Spillway, , , , , ,US/Central,Lauderdale,MS,UNITED STATES,Meridian,SAM,OUTLET, ,MS01491-Spillway.Flow-Discharge.Inst.15Minutes.0.Raw-CCP,Okatibbee-Spillway.Flow-Discharge.Inst.15Minutes.0.Raw-CCP,0,Raw-CCP,0 -22,SAM,AL01422-Spillway,Flow,32.53531,-85.88785,Inst,Thurlow-Spillway,Thurlow Spillway, , , , , ,US/Central,Unknown County or County N/A,AL,UNITED STATES,Tuskegee,SAM,OUTLET, ,AL01422-Spillway.Flow.Inst.1Hour.0.Raw-APCO,Thurlow-Spillway.Flow.Inst.1Hour.0.Raw-APCO,0,Raw-APCO,0 -23,SAM,Bouldin,Flow-Out,32.58333,-86.28258,Inst, ,Bouldin (APC),Bouldin (APC), ,NAD83, , ,US/Central,Elmore,AL,UNITED STATES, ,SAM,PROJECT, ,Bouldin.Flow-Out.Inst.1Hour.0.Raw-APCO, ,0,Raw-APCO,0 -24,SWF,TX08007-Gated_Total,Flow-Out,32.645,-96.9933,Ave,JOE POOL LAKE-Gated_Total, , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Florence Hill, TX",SWF,SITE, ,TX08007-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,JOE POOL LAKE-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -25,SWF,TX00003-Gated_Total,Flow-Out,32.65056,-97.44833,Ave,BENBROOK LAKE-Gated_Total, , , , ,FALSE,NATIVE,US/Central,Tarrant,TX,UNITED STATES,"Benbrook, TX",SWF,SITE, ,TX00003-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,BENBROOK LAKE-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -26,SAM,BartlettsFerry-Powerhouse,Flow,32.66302,-85.09085,Inst, ,BartlettsFerry Powerhouse, , , , , ,US/Eastern,Harris,GA,UNITED STATES,Columbus,SAM,TURBINE, ,BartlettsFerry-Powerhouse.Flow.Inst.1Hour.0.Raw-GPC, ,0,Raw-GPC,0 -27,SWF,CLDL1-Spillway,Flow-Out,32.70333,-93.92,Ave, ,Spillway,Spillway, , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,LA,UNITED STATES,"Mooringsport, LA",MVK,OUTLET, ,CLDL1-Spillway.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI, ,0,Rev-SWF-REGI,0 -28,MVK,D109C1B8,Flow,32.74944,-94.49861,Inst,Jferson_BigC_Bay,Big Cypress at Jefferson,"Big Cypress Bayou @ Jefferson, TX","Big Cypress Bayou @ Jefferson, TX",NAD27,FALSE,NATIVE,America/Chicago,Marion,TX,UNITED STATES, , ,SITE,Stream Gauge,D109C1B8.Flow.Inst.15Minutes.0.DCP-rev,Jferson_BigC_Bay.Flow.Inst.15Minutes.0.DCP-rev,0,DCP-rev,180 -29,SWF,FLWT2-Pump,Flow-Out,32.78917,-97.41611,Ave, , , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Sansom Park, TX",SWF,SITE, ,FLWT2-Pump.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI, ,0,Rev-SWF-REGI,0 -30,SWF,FRHT2-Pump,Flow-Out,32.8,-96.5,Ave, , , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Sunnyvale, TX",SWF,SITE, ,FRHT2-Pump.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI, ,0,Rev-SWF-REGI,0 -31,MVK,Renfroe,Flow,32.86222,-89.44333,Inst, ,"Lobutcha Creek @ Renfroe, MS","Lobutcha Creek @ Renfroe, MS","Lobutcha Creek @ Renfroe, MS",NAD27,FALSE,NATIVE,US/Central,Leake,MS, , , ,SITE, ,Renfroe.Flow.Inst.15Minutes.0.DCP-rev, ,0,DCP-rev,354 -32,SWF,TX00005-Gated_Total,Flow-Out,32.9725,-97.05611,Ave,GPVT2-Gated_Total, , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Coppell, TX",SWF,SITE, ,TX00005-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,GPVT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.Reporting,0,Rev-SWF-REGI,0 -33,SWF,TX00007-Gated_Total,Flow-Out,33.03179,-96.48249,Ave,LAVON LAKE-Gated_Total, , , , ,FALSE,NATIVE,Etc/GMT+6,Unknown County or County N/A,TX,UNITED STATES,"Wylie, TX",SWF,SITE, ,TX00007-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,LAVON LAKE-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -34,SWF,TX00008-Gated_Total,Flow-Out,33.06917,-96.96417,Ave,LEWISVILLE LAKE-Gated_Total, , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Lewisville, TX",SWF,SITE, ,TX00008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,LEWISVILLE LAKE-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -35,MVK,Spring Bank,Flow,33.08944,-93.85944,Inst, ,"Red River @ Spring Bank, AR","Red River @ Spring Bank, AR","Red River @ Spring Bank, AR",NAD27,FALSE,NATIVE,CST6CDT,Miller,AR, , , ,SITE,Stream Gauge,Spring Bank.Flow.Inst.30Minutes.0.DCP-rev, ,0,DCP-rev,160 -36,SAM,AL01426-Spillway,Flow,33.25306,-87.44917,Inst,Holt-Spillway,Holt Spillway, , , , , ,US/Central,Tuscaloosa,AL,UNITED STATES,Northport,SAM,OUTLET, ,AL01426-Spillway.Flow.Inst.1Hour.0.Raw-APCO,Holt-Spillway.Flow.Inst.1Hour.0.Raw-APCO,0,Raw-APCO,0 -37,SWF,TX08012-Gated_Total,Flow-Out,33.3356,-95.6361,Ave,JIM CHAPMAN LAKE-Gated_Total, , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Cooper, TX",SWF,SITE, ,TX08012-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,JIM CHAPMAN LAKE-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -38,SWF,TX08008-Gated_Total,Flow-Out,33.3567,-97.0367,Ave,RAY ROBERTS DAM-Gated_Total, , , , ,FALSE,NATIVE,US/Central,Unknown County or County N/A,TX,UNITED STATES,"Aubrey, TX",SWF,SITE, ,TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,RAY ROBERTS DAM-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI,0,Rev-SWF-REGI,0 -39,SAM,AL01427-Spillway,Flow,33.45833,-87.35417,Inst,Bankhead-Spillway,Bankhead Spillway, , ,NAD27,FALSE,NATIVE,Etc/GMT+6,Tuscaloosa,AL,UNITED STATES, ,SAM,OUTLET, ,AL01427-Spillway.Flow.Inst.1Hour.0.Raw-APCO,Bankhead-Spillway.Flow.Inst.1Hour.0.Raw-APCO,0,Raw-APCO,0 -40,SAM,MS03056-Spillway,Flow,33.51816,-88.48799,Inst,Stennis-Spillway,Stennis Spillway, , , , , ,US/Central,Lowndes,MS,UNITED STATES,Columbus,SAM,OUTLET, ,MS03056-Spillway.Flow.Inst.15Minutes.0.Raw-LRIT_TTWW,Stennis-Spillway.Flow.Inst.15Minutes.0.Raw-LRIT_TTWW,0,Raw-LRIT_TTWW,0 -41,SWL,AR00536-Tailwater,Flow,33.68717,-93.96391,Inst,Millwood_Dam-Tailwater,Millwood Dam Tailwater,"Little at Millwood Dam (TW), AR","Little at Millwood Dam (TW), AR - Site collects tailwater elevation and precip data (HT,PC)",NAD83,FALSE,NATIVE,America/Chicago,Unknown County or County N/A,0,UNITED STATES,McNab,SWL,SITE, ,AR00536-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,Millwood_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,0 -42,SAM,HNHenry-Spillway,Flow,33.78394,-86.05315,Inst, ,HN Henry Spillway, , , , , ,US/Central,Calhoun,AL,UNITED STATES,Gadsden,SAM,OUTLET, ,HNHenry-Spillway.Flow.Inst.1Hour.0.Raw-APCO, ,0,Raw-APCO,0 -43,SPL,Coyote Ck-at Lower SGR,Flow,33.81,-118.0769,Inst, ,Coyote Creek, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Hawaiian Gardens, ,SITE, ,Coyote Ck-at Lower SGR.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,7 -44,SPL,Spring St-SGR in Long Beach,Flow,33.81167,-118.0911,Inst, ,Spring Street, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Hawaiian Gardens, ,SITE, ,Spring St-SGR in Long Beach.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,12 -45,SPL,Villa Park DS-Santiago Ck,Flow,33.81472,-117.765,Inst, ,Villa Park Downstream, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Orange, ,SITE, ,Villa Park DS-Santiago Ck.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,490 -46,SPL,Wardlow-LAR at Long Beach,Flow,33.8175,-118.2064,Inst, ,Wardlow, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Carson, ,SITE, ,Wardlow-LAR at Long Beach.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,12 -47,SPL,Richman Ave-Fullerton Ck blw Fullerton,Flow,33.86306,-117.9328,Inst, ,Richman Ave, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Fullerton, ,SITE, ,Richman Ave-Fullerton Ck blw Fullerton.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,125 -48,SPL,Compton Ck-at Lower LAR,Flow,33.88139,-118.2244,Inst, ,Compton Creek, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Willowbrook, ,SITE, ,Compton Ck-at Lower LAR.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,50 -49,SPL,Carbon Canyon DS-Carbon Ck,Flow,33.91333,-117.8425,Inst, ,Carbon Canyon DS, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Brea, ,SITE, ,Carbon Canyon DS-Carbon Ck.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,403 -50,SPL,Florence Ave-SGR in Downey,Flow,33.93056,-118.1067,Inst, ,Florence Avenue, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Downey, ,SITE, ,Florence Ave-SGR in Downey.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,103 -51,SPL,Stewart and Gray-Rio Hondo blw WN,Flow,33.94583,-118.1631,Inst, ,Stewart and Gray, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Bell Gardens, ,SITE, ,Stewart and Gray-Rio Hondo blw WN.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,90 -52,SPL,Firestone Blvd-LAR abv Rio Hondo,Flow,33.94889,-118.1739,Inst, ,Firestone Blvd, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Cudahy, ,SITE, ,Firestone Blvd-LAR abv Rio Hondo.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,96 -53,SPL,Ballona Ck-Marina Del Rey,Flow,33.99833,-118.4022,Inst, ,Ballona Creek, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Culver City, ,SITE, ,Ballona Ck-Marina Del Rey.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,12 -54,SPL,Parkway-SGR blw WN,Flow,34.01278,-118.0639,Inst, ,Parkway, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Pico Rivera, ,SITE, ,Parkway-SGR blw WN.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,180 -55,SPL,Alhambra W-abv WN Rio Hondo,Flow,34.05611,-118.0875,Inst, ,Alhambra Wash, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Rosemead, ,SITE, ,Alhambra W-abv WN Rio Hondo.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,240 -56,SPL,Walnut Ck-abv WN San Gabriel,Flow,34.06556,-117.9633,Inst, ,Walnut Creek, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Baldwin Park, ,SITE, ,Walnut Ck-abv WN San Gabriel.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,325 -57,SPL,Big Dalton W-abv WN San Gabriel,Flow,34.07472,-117.9636,Inst, ,Big Dalton Wash, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Baldwin Park, ,SITE, ,Big Dalton W-abv WN San Gabriel.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,335 -58,SWL,AR01201-Tailwater,Flow,34.09341,-94.38103,Inst,DeQueen_Dam-Tailwater,DeQueen Dam Tailwater,"Rolling Fork below DeQueen Dam, AR","Rolling Fork below DeQueen Dam, AR - platform collects tailwater elevation and water temp data (HT,TW)",WGS84,FALSE,NATIVE,America/Chicago,Sevier,AR,UNITED STATES,DeQueen, ,SITE, ,AR01201-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,DeQueen_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,0 -59,SPL,Tujunga Ave-LAR blw Tujunga W,Flow,34.14111,-118.3797,Inst, ,Tujunga Avenue, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,West Hollywood, ,SITE, ,Tujunga Ave-LAR blw Tujunga W.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,550 -60,SWL,AR01202-Tailwater,Flow,34.14306,-94.095,Inst,Dierks_Dam-Tailwater,Dierks Dam Tailwater,"Saline River at Dierks Dam (TW), AR","Saline River at Dierks Dam (TW), AR - platform collects tailwater elevation and water temp data (HT,TW)",WGS84,FALSE,NATIVE,America/Chicago,Unknown County or County N/A,0,UNITED STATES,Dierks,SWL,SITE, ,AR01202-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,Dierks_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,0 -61,SWL,OK10307,Flow-Res Out,34.14306,-94.68333,Ave,BKDO2,Broken Bow Dam,"Mountain Fork at Broken Bow Dam, OK - platform collects pool","Mountain Fork at Broken Bow Dam, OK - platform collects pool elevation, tailwater elevation, and precip (HP,HT,PC)",NAD83, , ,America/Chicago,Unknown County or County N/A,OK,UNITED STATES,Broken Bow,SWT,PROJECT,Corps Reservoir,OK10307.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,07338900.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,0,Rev-Regi-Flowgroup,0 -62,SPL,Verdugo W-at LAR abv Arroyo Seco,Flow,34.15611,-118.2739,Inst, ,Verdugo Wash, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Burbank, ,SITE, ,Verdugo W-at LAR abv Arroyo Seco.Flow.Inst.~15Minutes.0.GOES-rev, ,0,GOES-rev,470 -63,SWL,AR01200-Tailwater,Flow,34.20149,-94.22798,Inst,Gillham_Dam-Tailwater,Gillham Dam Tailwater,"Cossatot River at Gillham Dam (TW), AR","Cossatot River at Gillham Dam, AR - platform collects tailwater elevation and water temp data (HT,TW)", ,FALSE,NATIVE,America/Chicago,Howard,AR,UNITED STATES,Gillham,SWL,SITE, ,AR01200-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,Gillham_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,0 -64,SPL,CA10004-abv Hansen,Flow,34.26056,-118.2775,Inst,Haines Cnyn-abv Hansen,Haines Canyon Debris Basin, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,La Crescenta-Montrose, ,PROJECT, ,CA10004-abv Hansen.Flow.Inst.~15Minutes.0.GOES-rev,Haines Cnyn-abv Hansen.Flow.Inst.~15Minutes.0.GOES-rev,0,GOES-rev,2183 -65,SPL,CA10019,Flow,34.26056,-118.3861,Inst,Hansen,Hansen Dam, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,San Fernando, ,PROJECT, ,CA10019.Flow.Inst.~15Minutes.0.GOES-rev,Hansen.Flow.Inst.~15Minutes.0.GOES-rev,0,GOES-rev,990 -66,SPL,Hansen,Flow,34.26056,-118.3861,Inst,CA10019,Hansen Dam, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,San Fernando, ,PROJECT, ,Hansen.Flow.Inst.~15Minutes.0.GOES-rev,CA10019.Flow.Inst.~15Minutes.0.GOES-rev,0,GOES-rev,990 -67,MVK,Langley,Flow,34.31184,-93.89976,Inst, ,Langley,"Little Missouri River @ Langley, AR","Little Missouri River @ Langley, AR",NAD83,FALSE,NATIVE,Etc/GMT+6,Pike,AR,UNITED STATES, , ,SITE,Stream Gauge,Langley.Flow.Inst.15Minutes.0.DCP-rev, ,0,DCP-rev,727 -68,SAM,MS03604-Spillway,Flow,34.4634,-88.36497,Inst,Montgomery-Spillway,Montgomery Spillway, , ,NAD83,FALSE,NATIVE,US/Central,Itawamba,MS,UNITED STATES,Corinth,SAM,OUTLET, ,MS03604-Spillway.Flow.Inst.1Hour.0.Raw-LRIT_TTWW,Montgomery-Spillway.Flow.Inst.1Hour.0.Raw-LRIT_TTWW,0,Raw-LRIT_TTWW,340 -69,SAM,GA00821-Spillway,Flow,34.61397,-84.67105,Inst,Carters-Spillway,Carters Emergency Spillway, , ,NAD27,FALSE,NATIVE,US/Central,Murray,GA,UNITED STATES,"Carters, GA",SAM,OUTLET, ,GA00821-Spillway.Flow.Inst.1Hour.0.Raw-SCADA_SAM,Carters-Spillway.Flow.Inst.1Hour.0.Raw-SCADA_SAM,0,Raw-SCADA_SAM,0 -70,MVK,MS01496-Spillway,Flow,34.75722,-90.12444,Inst,Arkabutla Lake-Spillway,Spillway,Spillway,"300 foot concrete emergency Spillway, crest elevation 238.3 ft",NAD83,FALSE,NATIVE,CST6CDT,Tate,MS,UNITED STATES, , ,OUTLET, ,MS01496-Spillway.Flow.Inst.1Hour.0.Spillway Flow,Arkabutla Lake-Spillway.Flow.Inst.1Hour.0.Spillway Flow,0,Spillway Flow,0 -71,SWL,AR00158-Tailwater,Flow,34.95183,-93.15253,Inst,Nimrod_Dam-Tailwater,Nimrod Dam Tailwater,"Fourche LaFave River at Nimrod Dam (TW), AR","Fourche LaFave River at Nimrod Dam, AR - platform collects tailwater elevation data (HT)",NAD83,FALSE,NATIVE,America/Chicago,Perry,AR,UNITED STATES,Hollis,SWL,SITE, ,AR00158-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,Nimrod_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,0 -72,SPL,CA10197,Flow,34.98417,-120.3228,Inst,Twitchell,Twitchell Dam, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,CA,UNITED STATES,Arroyo Grande, ,PROJECT, ,CA10197.Flow.Inst.1Hour.0.GOES-rev,Twitchell.Flow.Inst.1Hour.0.GOES-rev,0,GOES-rev,692 -73,LRN,PICT1-PICKWICK,Flow,35.07083,-88.25111,Ave, ,Pickwick Lock & Dam,Pickwick, ,NAD83, , ,US/Central,Hardin,TN,UNITED STATES,Counce, ,SITE,Reservoir,PICT1-PICKWICK.Flow.Ave.1Hour.1Hour.tva-raw, ,0,tva-raw,0 -74,SWL,AR00157-Tailwater,Flow,35.1047,-93.6314,Inst,Blue_Mtn_Dam-Tailwater,Blue Mountain Dam Tailwater,"Petit Jean River at Blue Mountain Dam Tailwater, AR","Petit Jean River at Blue Mountain Dam Tailwater Sensor, AR - Represents sensor that Collects Tailwater Elevation data (HT)",NAD83,FALSE,NATIVE,US/Central,Yell,AR,UNITED STATES,Waveland,SWL,SITE, ,AR00157-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,Blue_Mtn_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,0 -75,SWT,CORD,Flow,35.29111,-98.83639,Inst,AE0050C0,"Washita River, nr Cordell 9E","Washita River, nr Cordell 9E","Washita River, nr Cordell 9E",NAD83, , ,US/Central,Unknown County or County N/A,OK,UNITED STATES,"Cordell, OK",SWT,SITE, ,CORD.Flow.Inst.15Minutes.0.Ccp-Rev,AE0050C0.Flow.Inst.15Minutes.0.Ccp-Rev,0,Ccp-Rev,0 -76,SWL,OZGA4-Tailwater,Flow,35.46977,-93.81382,Inst,AR00164-Tailwater,Lock & Dam 12 - Tailwater,"Arkansas River at Lock & Dam 12 (Ozark) Tailwater, AR","Arkansas River at Lock & Dam 12 (Ozark) Tailwater Sensor, AR - Represents sensor that Collects Tailwater Elevation data (HT)",NAD83,FALSE,NATIVE,America/Chicago,Franklin,AR,UNITED STATES,"Ozark, AR",SWL,SITE, ,OZGA4-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,AR00164-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,0 -77,SWL,LD12_Ozark,Flow-RelTotal,35.47333,-93.81,Inst,AR00164,Ozark Lock & Dam 12,"Arkansas River at Lock & Dam 12 (Ozark), AR","Arkansas River at Lock & Dam 12 (Ozark), AR - platform collects upstream and downstream elevation, nonpower release, power release, generation, and gate opening data.",NAD83,FALSE,NATIVE,America/Chicago,Unknown County or County N/A,AR,UNITED STATES,"Ozark, AR",SWL,PROJECT,RoR Project,LD12_Ozark.Flow-RelTotal.Inst.1Hour.0.CCP-Comp,AR00164.Flow-RelTotal.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,0 -78,LRN,DBLT1-BigRockCr-nrDoubleBridgesTN,Flow,35.50444,-86.76861,Ave, ,Big Rock Cr @ Double Bridges TN,Big Rock Creek at Double Bridges TN, ,NAD83, , ,US/Central,Marshall,TN,UNITED STATES,Double Springs, ,SITE,Stream Gauge,DBLT1-BigRockCr-nrDoubleBridgesTN.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,0 -79,SWL,GRRA4-Tailwater,Flow,35.51941,-91.99532,Inst,AR00173-Tailwater,Greers Ferry Dam - Tailwater,"Little Red River at Greers Ferry Dam Tailwater, AR","Little Red River at Greers Ferry Dam Tailwater Sensor, AR - Represents sensor that Collects Tailwater Elevation data (HT)",WGS84,FALSE,NATIVE,America/Chicago,Cleburne,AR,UNITED STATES,Heber Springs,SWL,SITE, ,GRRA4-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,AR00173-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,0 -80,LRN,MLTT1-DuckR-abvMilltownTN,Flow,35.57639,-86.77889,Ave, ,Duck River abv Milltown TN,Duck River above Milltown TN near Lewisburg TN, ,NAD83, , ,US/Central,Marshall,TN,UNITED STATES,Milltown, ,SITE,Stream Gauge,MLTT1-DuckR-abvMilltownTN.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,0 -81,SPK,ISB ISBQ-Lake Isabella Outflow-Kern,Flow,35.63972,-118.4994,Ave, ,Lk Isabella-Kern R, ,ISB - Lk Isabella Main Dam Outflow to the Kern River, ,FALSE,NATIVE,US/Pacific,Kern,CA,UNITED STATES,"Lake Isabella, CA",SPK,SITE, ,ISB ISBQ-Lake Isabella Outflow-Kern.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,2446 -82,SPK,CA10106-Lake Isabella Pool-Kern,Flow-Spill,35.64667,-118.4781,Inst,ISB ISBP-Lake Isabella Pool-Kern,Lk Isabella-Pool,Isabella Pool,ISB - Lake Isabella Pool Elevation Station @ Main Dam,WGS84,FALSE,NATIVE,US/Pacific,Kern,CA,UNITED STATES, ,SPK,SITE,Corps Reservoir,CA10106-Lake Isabella Pool-Kern.Flow-Spill.Inst.1Hour.0.Calc-val,ISB ISBP-Lake Isabella Pool-Kern.Flow-Spill.Inst.1Hour.0.Calc-val,0,Calc-val,2835 -83,LRN,GRTT1-GREAT_FALLS,Flow,35.80806,-85.63361,Ave, ,Rock Island TN,Great Falls Dam Near Rock Island, ,NAD83, , ,US/Central,Warren,TN,UNITED STATES,Rock Island, ,SITE,Reservoir,GRTT1-GREAT_FALLS.Flow.Ave.1Hour.1Hour.tva-raw, ,0,tva-raw,0 -84,LRN,VERT1-PineyR-VernonTN,Flow,35.87111,-87.50139,Ave, ,Piney River @ Vernon TN,Piney River At Vernon, ,NAD83, , ,US/Central,Hickman,TN,UNITED STATES,Vernon, ,SITE,Stream Gauge,VERT1-PineyR-VernonTN.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,0 -85,LRN,MUGT1-WFkStonesR-MurfreesboroTN,Flow,35.9025,-86.42861,Ave, ,WF Stones R nr Murfreesboro TN,West Fork Stones River Near Murfreesboro TN, ,NAD83,FALSE,NATIVE,US/Central,Rutherford,TN,UNITED STATES,Murfreesboro, ,SITE,Stream Gauge,MUGT1-WFkStonesR-MurfreesboroTN.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,515 -86,LRN,HBFT1-HarpethR-blwFranklinTN,Flow,35.94806,-86.88167,Ave, ,Harpeth River blw Franklin TN,Harpeth River Below Franklin TN, ,NAD83, , ,US/Central,Williamson,TN,UNITED STATES,Franklin, ,SITE,Stream Gauge,HBFT1-HarpethR-blwFranklinTN.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,0 -87,SPK,SCC SCCQ-Success Lake Outflow-Tule,Flow,36.05639,-118.9228,Ave, ,Success Lk-Tule R, ,SCC - Success Lk Outflow to the Tule River, ,FALSE,NATIVE,US/Pacific,Tulare,CA,UNITED STATES,"Worth, CA",SPK,SITE, ,SCC SCCQ-Success Lake Outflow-Tule.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,536 -88,SPK,CA10113,Flow-Spill,36.06111,-118.9217,Inst,SCC SCCP-Success Lake Pool-Tule,Success Lk-Pool,Success Lake / Dam,SCC - Success Lk Pool Elevation Station, ,FALSE,NATIVE,US/Pacific,Tulare,CA,UNITED STATES,"Worth, CA",SPK,SITE, ,CA10113.Flow-Spill.Inst.1Hour.0.Calc-val,SCC SCCP-Success Lake Pool-Tule.Flow-Spill.Inst.1Hour.0.Calc-val,0,Calc-val,692 -89,LRN,ANTT1-MillCr-AntiochTN,Flow,36.08167,-86.68083,Ave,3431000-MillCr-AntiochTN,Mill Creek @ Antioch TN,Mill Creek At Antioch TN, ,NAD83,FALSE,NATIVE,US/Central,Davidson,TN,UNITED STATES,Antioch, ,SITE,Stream Gauge,ANTT1-MillCr-AntiochTN.Flow.Ave.~1Day.1Day.dcp-rev,3431000-MillCr-AntiochTN.Flow.Ave.~1Day.1Day.dcp-rev,0,dcp-rev,473 -90,LRN,CETT1-CENTER_HILL,Flow-Orifice,36.0976,-85.82612,Ave, ,Center Hill Dam Tailwater,Center Hill Dam Tailwater, ,NAD83, , ,US/Central,De Kalb,TN,UNITED STATES,Cookeville, ,SITE,Tailwater,CETT1-CENTER_HILL.Flow-Orifice.Ave.1Hour.1Hour.man-raw, ,0,man-raw,0 -91,LRN,CEN,Flow,36.09763,-85.82672,Inst,CEHT1,Center Hill Dam,Center Hill Dam, ,NAD83, , ,US/Central,De Kalb,TN,UNITED STATES,Gordonsville, ,PROJECT,Corps Reservoir,CEN.Flow.Inst.15Minutes.0.DCP-rev,01114500.Flow.Inst.15Minutes.0.DCP-rev,0,DCP-rev,0 -92,SWF,KEYS,Flow-Res Out,36.15139,-96.25139,Ave, ,KEYS,KEYS,ARKANSAS RIVER AT KEYSTONE DAM, , , ,US/Central,Unknown County or County N/A,OK,UNITED STATES,"Sand Springs, OK",SWT,SITE,stream,KEYS.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,07164200.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,0,Rev-Regi-Flowgroup,0 -93,SWT,BISO,Flow,36.18861,-97.96194,Inst,BTCO2,"Turkey Creek nr Bison, OK","Turkey Creek nr Bison, OK","Turkey Creek nr Bison, OK",NAD83, , ,US/Central,Unknown County or County N/A,OK,UNITED STATES,"Bison, OK",SWT,SITE, ,BISO.Flow.Inst.15Minutes.0.Ccp-Rev,BTCO2.Flow.Inst.15Minutes.0.Ccp-Rev,0,Ccp-Rev,0 -94,SWT,AMES,Flow,36.21861,-98.25445,Inst,AE011130,Cimarron River nr Ames 4SW,Cimarron River nr Ames 4SW,Cimarron River nr Ames 4SW,NAD83, , ,US/Central,Unknown County or County N/A,OK,UNITED STATES,"Ames, OK",SWT,SITE, ,AMES.Flow.Inst.1Hour.0.Ccp-Rev,AE011130.Flow.Inst.1Hour.0.Ccp-Rev,0,Ccp-Rev,0 -95,LRN,LBST1-SpringCr-LebanonTN,Flow,36.22167,-86.23694,Ave, ,Spring Creek nr Lebanon TN,Spring Creek nr Lebanon TN, ,NAD83,FALSE,NATIVE,US/Central,Wilson,TN,UNITED STATES,Lebanon, ,SITE,Stream Gauge,LBST1-SpringCr-LebanonTN.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,500 -96,SWL,NFDA4-Tailwater,Flow,36.2468,-92.24106,Inst,AR00159-Tailwater,Norfork Dam - Tailwater,"North Fork River at Norfork Dam Tailwater, AR","North Fork River at Norfork Dam Tailwater Sensor, AR - Represents sensor that Collects Tailwater Elevation data (HP)",WGS84,FALSE,NATIVE,America/Chicago,Baxter,AR,UNITED STATES,Norfork,SWL,SITE, ,NFDA4-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,AR00159-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,0 -97,LRN,CTHT1-CumberlandR-CarthageTN,Flow,36.2475,-85.95639,Ave, ,Cumberland R @ Carthage TN,Cumberland River At Carthage TN, ,NAD83,FALSE,NATIVE,US/Central,Smith,TN,UNITED STATES,Carthage, ,SITE,Stream Gauge,CTHT1-CumberlandR-CarthageTN.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,438 -98,LRN,CORDELL_HULL-Spillway,Flow,36.29034,-85.94354,Total, ,Cordell Hull Spillway Gates,Cordell Hull Lock and Dam Spillway Gates, ,NAD83,FALSE,NATIVE,US/Central,Smith,TN,UNITED STATES,Carthage, ,OUTLET,Spillway,CORDELL_HULL-Spillway.Flow.Total.15Minutes.15Minutes.dcp-rev, ,0,dcp-rev,424 -99,LRN,OHIT1-OLD_HICKORY,Flow-Spillway,36.29722,-86.65889,Ave, ,Old Hickory Dam Tailwater,Old Hickory Dam Tailwater, ,NAD83,FALSE,NATIVE,US/Central,Davidson,TN,UNITED STATES,Hendersonville, ,SITE,Tailwater,OHIT1-OLD_HICKORY.Flow-Spillway.Ave.1Hour.1Hour.man-raw, ,0,man-raw,0 -100,SPK,TRM CRS-Cross Cr at Houston-Kaweah,Flow,36.29861,-119.5483,Ave, ,Lk Kaweah-Cross Cr, ,TRM - Cross Cr @ Houston, ,FALSE,NATIVE,US/Pacific,Kings,CA,UNITED STATES,"Hanford, CA",SPK,SITE, ,TRM CRS-Cross Cr at Houston-Kaweah.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,250 -101,LRN,ASHT1-CHEATHAM,Flow-Spillway,36.32042,-87.22542,Ave,3435000-CHEATHAM,Cheatham Dam Tailwater,Cheatham Dam Tailwater, ,NAD83,FALSE,NATIVE,US/Central,Cheatham,TN,UNITED STATES,Ashland City, ,SITE,Reservoir,ASHT1-CHEATHAM.Flow-Spillway.Ave.1Hour.1Hour.man-raw,3435000-CHEATHAM.Flow-Spillway.Ave.1Hour.1Hour.man-raw,0,man-raw,350 -102,SPK,TRM YKL-Yokohl Cr at Garcia Br-Kaweah,Flow,36.32694,-119.0808,Ave, ,Lk Kaweah--Yokohl Cr, ,TRM - Yokohl Cr nr Lemoncove, ,FALSE,NATIVE,US/Pacific,Tulare,CA,UNITED STATES,"Lindcove, CA",SPK,SITE, ,TRM YKL-Yokohl Cr at Garcia Br-Kaweah.Flow.Ave.~1Day.1Day.Calc-val, ,0,Calc-val,430 -103,SWL,AR00160-Tailwater,Flow,36.36482,-92.57854,Inst,BSGA4-Tailwater,Bull Shoals Dam - Tailwater,"White R at Bull Shoals Dam Tailwater, AR","White R at Bull Shoals Dam Tailwater Sensor, AR - Represents sensor that Collects Tailwater Elevation data (HT)",WGS84,FALSE,NATIVE,America/Chicago,Marion,AR,UNITED STATES,Flippin,SWL,SITE, ,AR00160-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,BSGA4-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,0 -104,SPK,PNF AMW-Army Weir-Kings,Flow,36.38639,-119.7869,Ave, ,Pineflat Lk-Army Weir, ,PNF - Army Weir on the Kings nr Lemoore, ,FALSE,NATIVE,US/Pacific,Kings,CA,UNITED STATES,"Camden, CA",SPK,SITE, ,PNF AMW-Army Weir-Kings.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,230 -105,SPK,TRM TRMQ-Lake Kaweah Outflow-Kaweah,Flow,36.41389,-119.0125,Ave, ,Lk Kaweah-Kaweah R, ,TRM - Terminus Dam Outflow to the Kaweah River, ,FALSE,NATIVE,US/Pacific,Tulare,CA,UNITED STATES,"Lemoncove, CA",SPK,SITE, ,TRM TRMQ-Lake Kaweah Outflow-Kaweah.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,496 -106,SPK,CA10114,Flow-Spill,36.41472,-119.0019,Inst,TRM TRMP-Lake Kaweah Pool-Kaweah,Lk Kaweah-Pool,TERMINUS LAKE / DAM,TRM - Lake Kaweah Pool Elevation Station,WGS84,FALSE,NATIVE,US/Pacific,Tulare,CA,UNITED STATES,"Lemoncove, CA",SPK,SITE, ,CA10114.Flow-Spill.Inst.1Hour.0.Calc-val,TRM TRMP-Lake Kaweah Pool-Kaweah.Flow-Spill.Inst.1Hour.0.Calc-val,0,Calc-val,752 -107,LRN,BLCT1-BledsoeCr-GallatinTN,Flow,36.42278,-86.34944,Ave, ,Bledsoe Creek @ Rogana TN,Bledsoe Creek At Rogana TN, ,NAD83,FALSE,NATIVE,US/Central,Sumner,TN,UNITED STATES,Gallatin, ,SITE,Stream Gauge,BLCT1-BledsoeCr-GallatinTN.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,458 -108,LRN,JNCT1-JenningsCr-WhitleyvilleTN,Flow,36.44028,-85.67472,Ave, ,Jennings Cr nr Whitleyville TN,Jennings Creek Near Whitleyville TN, ,NAD83,FALSE,NATIVE,US/Central,Jackson,TN,UNITED STATES,Whitleyville, ,SITE,Stream Gauge,JNCT1-JenningsCr-WhitleyvilleTN.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,500 -109,LRN,PORT1-RedR-PortRoyalTN,Flow,36.55389,-87.14222,Ave, ,Red River @ Port Royal TN,Red River At Port Royal TN, ,NAD83, , ,US/Central,Montgomery,TN,UNITED STATES,Port Royal, ,SITE,Stream Gauge,PORT1-RedR-PortRoyalTN.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,0 -110,LRN,CLAT1-CumberlandR-CelinaTN,Flow,36.55444,-85.51556,Ave,3417500-CumberlandR-CelinaTN,Cumberland R @ Celina TN,Cumberland River At Celina TN, ,NAD83,FALSE,NATIVE,US/Central,Clay,TN,UNITED STATES,Celina, ,SITE,Stream Gauge,CLAT1-CumberlandR-CelinaTN.Flow.Ave.~1Day.1Day.dcp-rev,3417500-CumberlandR-CelinaTN.Flow.Ave.~1Day.1Day.dcp-rev,0,dcp-rev,489 -111,LRN,WLBK2-CumberlandR-WilliamsburgKY,Flow,36.74361,-84.15639,Ave, ,Cumberland R @ Williamsburg KY,Cumberland River At Williamsburg KY, ,NAD83,FALSE,NATIVE,US/Eastern,Whitley,KY,UNITED STATES,Williamsburg, ,SITE,Stream Gauge,WLBK2-CumberlandR-WilliamsburgKY.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,892 -112,LRN,PVLK2-CumberlandR-PinevilleKY,Flow,36.76444,-83.6925,Ave, ,Cumberland R nr Pineville KY,Cumberland River Near Pineville KY, ,NAD83,FALSE,NATIVE,US/Eastern,Bell,KY,UNITED STATES,Pineville, ,SITE,Stream Gauge,PVLK2-CumberlandR-PinevilleKY.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,970 -113,SWT,CHIB,Flow,36.77139,-95.50389,Inst,CBCO2,"Big Creek near Childers, OK","Big Creek near Childers, OK","Big Creek near Childers, OK",NAD83, , ,US/Central,Unknown County or County N/A,OK,UNITED STATES,"Delaware, OK",SWT,SITE, ,CHIB.Flow.Inst.15Minutes.0.Ccp-Rev,CBCO2.Flow.Inst.15Minutes.0.Ccp-Rev,0,Ccp-Rev,0 -114,LRN,CDZK2-LittleR-CadizKY,Flow,36.77778,-87.72167,Ave,3438000-LittleR-CadizKY,Little River nr Cadiz KY,Little River Near Cadiz KY, ,NAD83,FALSE,NATIVE,US/Central,Trigg,KY,UNITED STATES,Cadiz, ,SITE,Stream Gauge,CDZK2-LittleR-CadizKY.Flow.Ave.~1Day.1Day.dcp-rev,3438000-LittleR-CadizKY.Flow.Ave.~1Day.1Day.dcp-rev,0,dcp-rev,391 -115,MVS,Fisk-St Francis,Flow,36.78058,-90.2021,Inst,SFFI,Fisk,Fisk-St Francis,St. Francis River at Fisk,WGS84,FALSE,NATIVE,US/Central,Unknown County or County N/A,MO,UNITED STATES, ,MVS,STREAM_LOCATION, ,Fisk-St Francis.Flow.Inst.1Hour.0.RatingCOE,SFFI.Flow.Inst.1Hour.0.RatingCOE,0,RatingCOE,307 -116,LRN,BRKK2-CumberlandR-BurkesvilleKY,Flow,36.7875,-85.36528,Ave, ,Cumberland R @ Burkesville KY,Cumberland River At Burkesville KY, ,NAD83, , ,US/Central,Cumberland,KY,UNITED STATES,Burkesville, ,SITE,Stream Gauge,BRKK2-CumberlandR-BurkesvilleKY.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,0 -117,LRN,MTCK2-BeaverCr-MonticelloKY,Flow,36.7975,-84.89611,Ave, ,Beaver Creek nr Monticello KY,Beaver Creek Near Monticello KY, ,NAD83, , ,US/Central,Wayne,KY,UNITED STATES,Monticello, ,SITE,Stream Gauge,MTCK2-BeaverCr-MonticelloKY.Flow.Ave.~1Day.1Day.dcp-rev, ,0,dcp-rev,0 -118,SPK,PNF PNFQ-Pine Flat Lake Outflow-Kings,Flow,36.83056,-119.3353,Ave, ,Pineflat Lk-Kings R, ,PNF - Pineflat Lk Outflow to the Kings River,WGS84,FALSE,NATIVE,US/Pacific,Fresno,CA,UNITED STATES,"Trimmer, CA",SPK,SITE,Stream Gauge,PNF PNFQ-Pine Flat Lake Outflow-Kings.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,560 -119,LRN,CFAK2-CumberlandR-CumberlandFallsKY,Flow,36.83583,-84.34139,Ave,3404500-CumberlandR-CumberlandFallsKY,Cumb R Cumberland Falls KY,Cumberland River at Cumberland Falls KY, ,NAD83,FALSE,NATIVE,US/Eastern,Whitley,KY,UNITED STATES,Greenwood, ,SITE,Stream Gauge,CFAK2-CumberlandR-CumberlandFallsKY.Flow.Ave.~1Day.1Day.dcp-rev,3404500-CumberlandR-CumberlandFallsKY.Flow.Ave.~1Day.1Day.dcp-rev,0,dcp-rev,825 -120,LRN,BARKLEY-Spillway,Flow,37.02085,-88.22351,Total, ,Barkley Lock and Dam Spillway,Barkley Lock and Dam Spillway Gates, ,NAD83,FALSE,NATIVE,US/Central,Lyon,KY,UNITED STATES,Grand Rivers, ,OUTLET,Spillway,BARKLEY-Spillway.Flow.Total.15Minutes.15Minutes.dcp-rev, ,0,dcp-rev,230 -121,LRN,BAR,Flow,37.02168,-88.22105,Inst,BAHK2,Barkley Lock & Dam,Barkley Lock & Dam to Cheatham Lock & Dam Drainage Area,"This basin represents the uncontrolled drainage area between Barkley Lock & Dam, Cheatham Lock & Dam, and includes the Red River drainage area.",NAD83, , ,US/Central,Lyon,KY,UNITED STATES,Grand Rivers, ,PROJECT,Corps Reservoir,BAR.Flow.Inst.15Minutes.0.DCP-rev, ,0,DCP-rev,0 -122,SWT,CAME,Flow,37.07778,-96.85194,Inst,CAMK1,Grouse Creek nr Cameron KS,Grouse Creek nr Cameron KS,Grouse Creek nr Cameron KS,NAD83, , ,US/Central,Unknown County or County N/A,KS,UNITED STATES,"Silverdale, KS",SWT,SITE, ,CAME.Flow.Inst.1Hour.0.Ccp-Rev,CAMK1.Flow.Inst.1Hour.0.Ccp-Rev,0,Ccp-Rev,0 -123,SPK,HID HIDQ-Hensley Lake Outflow-Fresno,Flow,37.10389,-119.8875,Ave, ,Hensly Lk-Fresno R, ,HID - Hensley Lk Outflow to the Fresno River, ,FALSE,NATIVE,US/Pacific,Madera,CA,UNITED STATES,"Raymond, CA",SPK,SITE, ,HID HIDQ-Hensley Lake Outflow-Fresno.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,561 -124,SPK,HID HIDP-Hensley Lake Pool-Fresno,Flow-Spill,37.10944,-119.8847,Inst, ,Hensley Lk-Pool,Hensley Lake,HID - Hensley Lk Pool Elevation Station,WGS84,FALSE,NATIVE,US/Pacific,Madera,CA,UNITED STATES,"Raymond, CA",SPK,SITE, ,HID HIDP-Hensley Lake Pool-Fresno.Flow-Spill.Inst.1Hour.0.Calc-val, ,0,Calc-val,581 -125,SWL,MO30203-Tailwater,Flow,37.12965,-90.7611,Inst,Clearwater_Dam-Tailwater,Clearwater Dam Tailwater,"Black R at Clearwater Dam Tailwater, AR","Black R at Clearwater Dam Tailwater Sensor, AR - Represents sensor that Collects Tailwater Elevation data (HT)",NAD83,FALSE,NATIVE,US/Central,Wayne,MO,UNITED STATES,Piedmont,SWL,SITE, ,MO30203-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,Clearwater_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,0 -126,SPK,HID FHL-Fresno R abv Hensley Lake-Fresno,Flow,37.15056,-119.8561,Ave, ,Hensly Lk-Fresno R, ,HID - Fresno River abv Hensly Lk, ,FALSE,NATIVE,US/Pacific,Madera,CA,UNITED STATES,"Raymond, CA",SPK,SITE, ,HID FHL-Fresno R abv Hensley Lake-Fresno.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,540 -127,SPK,BUCQ,Flow,37.21556,-119.9914,Ave,BUC BUCQ-Eastman Lake Outflow-Chowchilla,Eastman Lk-Chowchilla R, ,BUC - Eastman Lk Outflow to the Chowchilla River, ,FALSE,NATIVE,US/Pacific,Madera,CA, , ,SPK,SITE, ,BUCQ.Flow.Ave.1Hour.1Hour.Calc-val,BUC BUCQ-Eastman Lake Outflow-Chowchilla.Flow.Ave.1Hour.1Hour.Calc-val,0,Calc-val,450 -128,SWT,PURS,Flow,37.25889,-94.435,Inst,NSFM7,"N Fork Spring River nr Purcell,","North Fork Spring River near Purcell, MO","North Fork Spring River near Purcell, MO",NAD83,FALSE,NATIVE,US/Central,Unknown County or County N/A,MO,UNITED STATES,"Alba, MO",SWL,SITE, ,PURS.Flow.Inst.1Hour.0.Ccp-Rev,NSFM7.Flow.Inst.1Hour.0.Ccp-Rev,0,Ccp-Rev,850 -129,SPK,BUC BUCP-Eastman Lake Pool-Chowchilla,Flow-Spill,37.26667,-119.9844,Ave,BUCP,Eastman Lk-Pool,HENSLEY LAKE / HIDDEN DAM,BUC - Eastman Lk (Buchanan Dam) Pool Elevation Station,WGS84,FALSE,NATIVE,US/Pacific,Madera,CA,UNITED STATES, ,SPK,SITE, ,BUC BUCP-Eastman Lake Pool-Chowchilla.Flow-Spill.Ave.1Hour.1Hour.Calc-val,BUCP.Flow-Spill.Ave.1Hour.1Hour.Calc-val,0,Calc-val,613 -130,SPK,MER MARQ-Mariposa Res Outflow-Mariposa Cr,Flow,37.28,-120.1628,Ave, ,Mariposa Res-Mariposa Cr, ,MER - Mariposa Dam Outflow to Mariposa Cr - Merced Group, ,FALSE,NATIVE,US/Pacific,Merced,CA,UNITED STATES,"Le Grand, CA",SPK,SITE, ,MER MARQ-Mariposa Res Outflow-Mariposa Cr.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,350 -131,SPK,CA10107-Mariposa Res Pool-Mariposa Cr,Flow-Spill,37.29333,-120.1467,Inst,MER MARP-Mariposa Res Pool-Mariposa Cr,Mariposa Res-Pool,Mariposa Pool,MER - Mariposa Reservoir Pool Elevation Station - Merced Group,WGS84,FALSE,NATIVE,US/Pacific,Merced,CA,UNITED STATES,"Le Grand, CA",SPK,SITE, ,CA10107-Mariposa Res Pool-Mariposa Cr.Flow-Spill.Inst.1Hour.0.Calc-val,MER MARP-Mariposa Res Pool-Mariposa Cr.Flow-Spill.Inst.1Hour.0.Calc-val,0,Calc-val,459 -132,SPK,MER MCK-Bear Cr at Mckee Road-Bear Cr,Flow,37.30917,-120.4456,Ave, ,Bear Res-Bear Cr@ McKee Rd, ,MER - Bear Cr @ McKee Rd - Merced Group, ,FALSE,NATIVE,US/Pacific,Merced,CA,UNITED STATES,"Merced, CA",SPK,SITE, ,MER MCK-Bear Cr at Mckee Road-Bear Cr.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,167 -133,SPK,MER OWNQ-Owens Reservoir Outflow-Owens Cr,Flow,37.31194,-120.1897,Ave, ,Owens Res-Owens Cr, ,MER - Owens Reservoir Outflow to Owens Cr - Merced Group, ,FALSE,NATIVE,US/Pacific,Merced,CA,UNITED STATES,"Le Grand, CA",SPK,SITE, ,MER OWNQ-Owens Reservoir Outflow-Owens Cr.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,357 -134,SPK,MER BURQ-Burns Reservoir Outflow-Burns Cr,Flow,37.37333,-120.2803,Ave, ,Burns Res-Burns Cr, ,MER - Burns Reservoir Outflow to Burns Cr - Merced Group, ,FALSE,NATIVE,US/Pacific,Merced,CA,UNITED STATES,"Planada, CA",SPK,SITE, ,MER BURQ-Burns Reservoir Outflow-Burns Cr.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,261 -135,SPK,CA10103-Burns Reservoir Pool-Burns Cr,Flow-Spill,37.37667,-120.275,Inst,Burns Dam -Burns Reservoir Pool-Burns Cr,Burns Res-Pool,Burns Pool,MER - Burns Reservoir Pool Elevation Station - Merced Group,WGS84,FALSE,NATIVE,US/Pacific,Merced,CA,UNITED STATES,"Planada, CA",SPK,SITE, ,CA10103-Burns Reservoir Pool-Burns Cr.Flow-Spill.Inst.1Hour.0.Calc-val,Burns Dam -Burns Reservoir Pool-Burns Cr.Flow-Spill.Inst.1Hour.0.Calc-val,0,Calc-val,319 -136,SPL,Pine Cnyn DS-Pine Cnyn W,Flow,37.47833,-114.3075,Inst, ,Pine Cnyn Downstream, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,NV,UNITED STATES,Cedar City, ,SITE, ,Pine Cnyn DS-Pine Cnyn W.Flow.Inst.15Minutes.0.GOES-rev, ,0,GOES-rev,5609 -137,SPL,Mathews Cnyn DS-Mathews Cnyn W,Flow,37.49972,-114.2242,Inst, ,Mathews Canyon Downstream, , ,WGS84,FALSE,NATIVE,US/Pacific,Unknown County or County N/A,NV,UNITED STATES,Cedar City, ,SITE, ,Mathews Cnyn DS-Mathews Cnyn W.Flow.Inst.15Minutes.0.GOES-rev, ,0,GOES-rev,5439 -138,LRH,WV08902-Outflow,Flow,37.649,-80.886,Inst,BLN-Outflow,Bluestone Outflow (Calc), , ,WGS84,FALSE,NATIVE,US/Eastern,Summers,WV,UNITED STATES,Hinton,LRH,STREAM_LOCATION,Calculated,WV08902-Outflow.Flow.Inst.1Hour.0.OBS,BLN-Outflow.Flow.Inst.1Hour.0.OBS,0,OBS,1400 -139,SPK,FRM SET-Stockton East Tun-Littlejohn Cr,Flow,37.84833,-120.6831,Inst, ,Farmington Lk-Goodwin Tunnel, ,FRM - Goodwin Tunnel (Stockton East Tunnel) abv Farmington Lk, ,FALSE,NATIVE,US/Pacific,San Joaquin,CA,UNITED STATES,"Oakdale, CA",SPK,SITE, ,FRM SET-Stockton East Tun-Littlejohn Cr.Flow.Inst.15Minutes.0.Combined-val, ,0,Combined-val,600 -140,SPK,FRM SHG-Shirley Gulch Div-Littlejohn Cr,Flow,37.9025,-120.7597,Ave, ,Farmington Lk-Shirley Gulch, ,FRM - Shirley Gulch abv Farmington Lk, ,FALSE,NATIVE,US/Pacific,San Joaquin,CA,UNITED STATES,"Oakdale, CA",SPK,SITE, ,FRM SHG-Shirley Gulch Div-Littlejohn Cr.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,225 -141,SPK,FRM FRMQ-Stockton East Outflow Works,Flow,37.91444,-120.9386,Inst, ,Farminton Lk-SEWD Works, ,"FRM - Farmington Dam Outflow Works, Stockton East Water District.", ,FALSE,NATIVE,US/Pacific,San Joaquin,CA,UNITED STATES,"Farmington, CA",SPK,SITE, ,FRM FRMQ-Stockton East Outflow Works.Flow.Inst.1Hour.0.Calc-val, ,0,Calc-val,19 -142,SPK,FRM FRMP-Farmington Pool-Littlejohn Cr,Flow-Spill,37.915,-120.935,Ave, ,Farmington Lk-Pool,Farmington Pool Farmington Pool,FRM - Farmington Dam Pool Elevation Station,WGS84,FALSE,NATIVE,US/Pacific,San Joaquin,CA,UNITED STATES, ,SPK,SITE, ,FRM FRMP-Farmington Pool-Littlejohn Cr.Flow-Spill.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,180 -143,SPK,FRM RCF-Rock Cr nr FRM-Littlejohn Cr,Flow,37.91833,-120.9597,Ave, ,Farmington Lk-Rock Cr, ,FRM - Rock Cr abv Confluence with Littlejohn Cr, ,FALSE,NATIVE,US/Pacific,San Joaquin,CA,UNITED STATES,"Farmington, CA",SPK,SITE, ,FRM RCF-Rock Cr nr FRM-Littlejohn Cr.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,105 -144,SPK,FRM FRG-Littlejohn at FRM-Littlejohn Cr,Flow,37.92611,-121.0014,Ave, ,Farmington Lk-Littlejohn Cr, ,FRM - Littlejohn Cr nr Farminton CA, ,FALSE,NATIVE,US/Pacific,San Joaquin,CA,UNITED STATES,"Farmington, CA",SPK,SITE, ,FRM FRG-Littlejohn at FRM-Littlejohn Cr.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,115 -145,SPK,FRM DUC-Duck Cr Diversion-Littlejohn Cr,Flow,37.93833,-120.9903,Ave, ,Farmington Lk-Duck Cr Div, ,FRM - Duck Cr Diversion nr Farmington, ,FALSE,NATIVE,US/Pacific,San Joaquin,CA,UNITED STATES,"Farmington, CA",SPK,SITE, ,FRM DUC-Duck Cr Diversion-Littlejohn Cr.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,110 -146,SPK,FRM DCK-Duck Cr nr FRM-Littlejohn Cr,Flow,37.94472,-120.9308,Ave, ,Farmington Lk-Duck Cr, ,FRM - Duck Cr nr Farmington, ,FALSE,NATIVE,US/Pacific,San Joaquin,CA,UNITED STATES,"Farmington, CA",SPK,SITE, ,FRM DCK-Duck Cr nr FRM-Littlejohn Cr.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,150 -147,SPK,NHG CGV-Cosgrove Creek-Calaveras,Flow,38.13611,-120.8472,Ave, ,New Hogan Lk-Cosgrove Cr, ,NHG - Cosgrove Cr blw Dam, ,FALSE,NATIVE,US/Pacific,Calaveras,CA,UNITED STATES,"Valley Springs, CA",SPK,SITE, ,NHG CGV-Cosgrove Creek-Calaveras.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,547 -148,SPK,NHG NHGQ-New Hogan Lake Outflow-Calaveras,Flow,38.14806,-120.8239,Ave, ,New Hogan Lk-Calaveras R, ,NHG - New Hogan Lk Outflow to the Calaveras River, ,FALSE,NATIVE,US/Pacific,Calaveras,CA,UNITED STATES,"Valley Springs, CA",SPK,SITE, ,NHG NHGQ-New Hogan Lake Outflow-Calaveras.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,520 -149,SPK,NHG MRS-Mormon Slough-Calaveras,Flow,38.14889,-121.0125,Ave, ,New Hogan Lk-Mormon Slough, ,NHG - Mormon Slough nr Bellota, ,FALSE,NATIVE,US/Pacific,San Joaquin,CA,UNITED STATES,"Lockeford, CA",SPK,SITE, ,NHG MRS-Mormon Slough-Calaveras.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,130 -150,LRH,LON,Flow,38.1928,-81.3692,Inst,LondonLD,London Locks and Dam,Kanawha Riv at London L&D,Kanawha Riv at London L&D,WGS84, , ,US/Eastern,Kanawha,WV,UNITED STATES,London,LRH,PROJECT,Lock,LON.Flow.Inst.15Minutes.0.DCP-rev, ,0,DCP-rev,0 -151,LRH,WV09903-Lake,Flow,38.3039,-82.4164,Inst,BBF-Lake,Beech Fork Lake,Beech Fk Dam near Huntington 7SSE,Beech Fk Dam near Huntington 7SSE,WGS84,FALSE,NATIVE,US/Eastern,Wayne,WV,UNITED STATES,Lavalette,LRH,SITE,Lake,WV09903-Lake.Flow.Inst.1Hour.0.OBS,BBF-Lake.Flow.Inst.1Hour.0.OBS,0,OBS,500 -152,MVS,CFMV,Flow,38.31001,-88.98833,Inst,Mt Vernon-Casey Fork,Mount Vermon Casey,Mt Vernon-Casey Fork,Casey Fork at Mt. Vernon,WGS84,FALSE,NATIVE,US/Central,Unknown County or County N/A,IL,UNITED STATES, ,MVS,STREAM_LOCATION, ,CFMV.Flow.Inst.15Minutes.0.RatingUSGS,Mt Vernon-Casey Fork.Flow.Inst.15Minutes.0.RatingUSGS,0,RatingUSGS,420 -153,MVS,Fayetteville,Flow,38.3775,-89.79093,Inst, ,Kaskaskia River at Fayetteville,Kaskaskia River at Fayetteville, ,WGS84,FALSE,NATIVE,US/Central,Unknown County or County N/A,IL,UNITED STATES, ,MVS,STREAM_LOCATION,Gage,Fayetteville.Flow.Inst.1Hour.0.CCP-Comp,07048600.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,300 -154,LRH,WIN,Flow,38.5269,-81.9136,Inst,WV07903,Winfield Locks and Dam,Winfield L-D,Winfield L-D,WGS84, , ,US/Eastern,Putnam,WV,UNITED STATES,Winfield,LRH,PROJECT,Lock,WIN.Flow.Inst.15Minutes.0.DCP-rev,01162500.Flow.Inst.15Minutes.0.DCP-rev,0,DCP-rev,0 -155,MVS,St Louis-River Des Peres,Flow,38.55941,-90.2832,Inst,DPSL,St Louis RDP,St Louis-River Des Peres,River Des Peres at St. Louis,WGS84,FALSE,NATIVE,US/Central,St. Louis City,MO,UNITED STATES, ,MVS,STREAM_LOCATION, ,St Louis-River Des Peres.Flow.Inst.5Minutes.0.RatingUSGS,DPSL.Flow.Inst.5Minutes.0.RatingUSGS,0,RatingUSGS,391 -156,SPK,WRS WRSQ-Lake Sonoma Outflow-Russian,Flow,38.71972,-122.9994,Ave, ,Lk Sonoma-Dry Cr, ,WRS - Warm Springs Dam Outflow to Dry Cr, ,FALSE,NATIVE,US/Pacific,Sonoma,CA,UNITED STATES,"Geyserville, CA",SPN,SITE, ,WRS WRSQ-Lake Sonoma Outflow-Russian.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,188 -157,SPK,CA82212,Flow-Spill,38.7225,-123.01,Ave,WRS WRSP-Lake Sonoma Pool-Russian,Lk Sonoma-Pool,LAKE SONOMA / WARM SPRINGS DAM,WRS - Lake Sonoma Pool Elevation Station,WGS84,FALSE,NATIVE,US/Pacific,Sonoma,CA,UNITED STATES,"Cloverdale, CA",SPN,SITE, ,CA82212.Flow-Spill.Ave.1Hour.1Hour.Calc-val,WRS WRSP-Lake Sonoma Pool-Russian.Flow-Spill.Ave.1Hour.1Hour.Calc-val,0,Calc-val,495 -158,LRH,WV00707-Lake,Flow,38.8428,-80.6203,Inst,BRNW2,Burnsville Lake,Burnsville Dam near Burnsville,Burnsville Dam near Burnsville,WGS84,FALSE,NATIVE,US/Eastern,Braxton,WV,UNITED STATES,Burnsville,LRH,SITE,Lake,WV00707-Lake.Flow.Inst.1Hour.0.OBS,BRNW2.Flow.Inst.1Hour.0.OBS,0,OBS,700 -159,MVS,IL00116-Mississippi,Flow,38.86917,-90.15361,Inst,Mel Price-Mississippi,Mel Price L&D, , , , , , ,Unknown County or County N/A,0,UNITED STATES, , ,STREAM_LOCATION, ,IL00116-Mississippi.Flow.Inst.6Hours.0.NCRFCShef-PZ,Mel Price-Mississippi.Flow.Inst.6Hours.0.NCRFCShef-PZ,0,NCRFCShef-PZ,0 -160,MVS,MO10301-Mississippi,Flow,39.00366,-90.69239,Inst,LD 25-Mississippi,LD 25 WQ, , , , , , ,Unknown County or County N/A,0,UNITED STATES, , ,STREAM_LOCATION, ,MO10301-Mississippi.Flow.Inst.6Hours.0.NCRFCShef-PZ,LD 25-Mississippi.Flow.Inst.6Hours.0.NCRFCShef-PZ,0,NCRFCShef-PZ,0 -161,SPK,COY HOP-Hopland-EFRussian,Flow,39.02667,-123.1294,Ave, ,Lk Mendocino-Russian@Hopland, ,COY - Russian River nr Hopland, ,FALSE,NATIVE,US/Pacific,Mendocino,CA,UNITED STATES,"Hopland, CA",SPN,SITE, ,COY HOP-Hopland-EFRussian.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,498 -162,SPK,COY COYF-Coyote Fish Hatchery-EFRussian,Flow,39.19806,-123.1858,Inst, ,Lk Mendocino-Fish Hatchery, ,COY - Coyote Dam Fish Hatchery, ,FALSE,NATIVE,US/Pacific,Mendocino,CA,UNITED STATES,"Calpella, CA",SPN,SITE, ,COY COYF-Coyote Fish Hatchery-EFRussian.Flow.Inst.15Minutes.0.LOS-raw, ,0,LOS-raw,614 -163,SPK,COY COYQ-Lake Mendocino Outflow-EFRussian,Flow,39.19806,-123.1864,Ave, ,Lk Mendocino-EF Russian R, ,COY - Coyote Dam Outflow to the EF Russian River, ,FALSE,NATIVE,US/Pacific,Mendocino,CA,UNITED STATES,"Calpella, CA",SPN,SITE, ,COY COYQ-Lake Mendocino Outflow-EFRussian.Flow.Ave.~1Day.1Day.Calc-val, ,0,Calc-val,614 -164,SPK,CA10105,Flow-Spill,39.23944,-121.2667,Ave,ENG ENGP-Englebright Lake Pool-Yuba,ENGLEBRIGHT LAKE / DAM,ENGLEBRIGHT LAKE / DAM,ENG - Englebright Lake Pool Elevation,WGS84, , ,US/Pacific,Yuba,CA,UNITED STATES,"Smartsville, CA",SPK,SITE, ,CA10105.Flow-Spill.Ave.1Hour.1Hour.Calc-val,ENG ENGP-Englebright Lake Pool-Yuba.Flow-Spill.Ave.1Hour.1Hour.Calc-val,0,Calc-val,0 -165,SPK,MRT MRT-Martis Creek-Truckee,Flow-Res Out,39.32667,-120.1133,Ave, ,Martis Creek Reservoir, , ,WGS84,FALSE,NATIVE,US/Pacific,Nevada,CA,UNITED STATES, , ,SITE, ,MRT MRT-Martis Creek-Truckee.Flow-Res Out.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,5858 -166,SPK,MRT MRTQ-Martis Res Outflow-Truckee,Flow,39.3275,-120.1147,Ave, ,Martis Lk-Martis Cr, ,MRT - Martis Cr Dam Outflow to Martis Cr, ,FALSE,NATIVE,US/Pacific,Nevada,CA,UNITED STATES,"Truckee, CA",SPK,SITE, ,MRT MRTQ-Martis Res Outflow-Truckee.Flow.Ave.1Hour.1Hour.Calc-val, ,0,Calc-val,5858 -167,MVS,MO10300-Mississippi,Flow,39.375,-90.907,Inst,LD 24-Mississippi,LD 24 WQ, , ,WGS84,FALSE,NATIVE,US/Central,Pike,MO,UNITED STATES,Clarksville,MVS,STREAM_LOCATION, ,MO10300-Mississippi.Flow.Inst.6Hours.0.NCRFCShef-PZ,LD 24-Mississippi.Flow.Inst.6Hours.0.NCRFCShef-PZ,0,NCRFCShef-PZ,422 -168,MVS,Ashburn-Salt,Flow,39.52264,-91.20163,Inst,SAAS,Ashburn,Ashburn-Salt,Salt River at Ashburn,WGS84,FALSE,NATIVE,US/Central,Unknown County or County N/A,MO,UNITED STATES,Ashburn,MVS,STREAM_LOCATION, ,Ashburn-Salt.Flow.Inst.15Minutes.0.RatingCOE,SAAS.Flow.Inst.15Minutes.0.RatingCOE,0,RatingCOE,447 -169,SPK,CA00035-Thermolito-Feather R,Flow,39.53889,-121.4856,Inst,SAC ORO-Thermolito-Feather R,Thermolito, , , , , ,US/Pacific,Unknown County or County N/A,0,UNITED STATES, , ,STREAM_LOCATION, ,CA00035-Thermolito-Feather R.Flow.Inst.1Hour.0.Calc-manual,SAC ORO-Thermolito-Feather R.Flow.Inst.1Hour.0.Calc-manual,0,Calc-manual,0 -170,LRH,OH00018-Outflow,Flow,39.54077,-82.0584,Inst,TJE-Outflow,Tom Jenkins Outflow (Calc),Tom Jenkins Lake Outflow,Tom Jenkins Lake Outflow,WGS84,FALSE,NATIVE,US/Eastern,Athens,OH,UNITED STATES,Burr Oak,LRH,STREAM_LOCATION,Calculated,OH00018-Outflow.Flow.Inst.1Hour.0.OBS,TJE-Outflow.Flow.Inst.1Hour.0.OBS,0,OBS,700 -171,MVS,LD 22-Mississippi,Flow,39.63534,-91.24879,Inst, ,LD 22 WQ, , , , , , ,Unknown County or County N/A,0,UNITED STATES, , ,STREAM_LOCATION, ,LD 22-Mississippi.Flow.Inst.~2Hours.0.lpmsShef-raw, ,0,lpmsShef-raw,0 -172,SPK,BLBQ,Flow,39.81846,-122.325,Ave,BLB BLBQ-Black Butte Outflow-Stony Cr,Black Butte Lk-Stony Cr, ,BLB - Black Butte Lk Outflow to Stony Cr,WGS84,FALSE,NATIVE,US/Pacific,Tehama,CA, , ,SPK,STREAM,Stream Gauge,BLBQ.Flow.Ave.1Hour.1Hour.Calc-val,BLB BLBQ-Black Butte Outflow-Stony Cr.Flow.Ave.1Hour.1Hour.Calc-val,0,Calc-val,426 -173,LRH,Alexandria,Flow,40.0869,-82.6106,Inst,ALXE3,Alexandria,Alexandria near Caldwell,Alexandria near Caldwell,WGS84, , ,US/Eastern,Licking,OH,UNITED STATES,Caldwell,LRH,SITE,Gage,Alexandria.Flow.Inst.1Hour.0.DCP-rev,CE40D9B4.Flow.Inst.1Hour.0.DCP-rev,0,DCP-rev,0 -174,LRH,OH00012-Outflow,Flow,40.2694,-81.2792,Inst,CLB-Outflow,Clendening Outflow, ,Outflow calculated by gate settings.,WGS84,FALSE,NATIVE,US/Eastern,Harrison,OH,UNITED STATES,Tippecanoe,LRH,SITE,Calculated,OH00012-Outflow.Flow.Inst.1Hour.0.OBS,CLB-Outflow.Flow.Inst.1Hour.0.OBS,0,OBS,862 -175,LRP,Steubenville,Flow,40.35833,-80.61111,Inst,SBVO1,"Steubenville, OH","Ohio River at Steubenville, OH","Ohio River at Steubenville, OH",WGS84,FALSE,NATIVE,US/Eastern,Jefferson,OH,UNITED STATES,Weirton, ,SITE, ,Steubenville.Flow.Inst.1Hour.0.OHRFC,SBVO1.Flow.Inst.1Hour.0.OHRFC,0,OHRFC,624 -176,LRH,OH00009-Outflow,Flow,40.5039,-82.5775,Inst,NBK-Outflow,NoBrKokosing Outflow,USGS 03136300 North Branch Kokosing R Lake nr Fredericktown OH,Outflow stream gage downstream from North Branch Kokosing River Dam,WGS84,FALSE,NATIVE,US/Eastern,Knox,OH,UNITED STATES,Fredericktown,LRH,SITE,Gage,OH00009-Outflow.Flow.Inst.1Hour.0.OBS,NBK-Outflow.Flow.Inst.1Hour.0.OBS,0,OBS,1100 -177,NAP,Bethlehem,Flow,40.61538,-75.37879,Inst, ,"Lehigh River at Bethlehem, PA","Lehigh River at Bethlehem, PA","Lehigh River at Bethlehem, PA", , , , , , ,UNITED STATES, , ,SITE, ,Bethlehem.Flow.Inst.1Hour.0.Rev-DCP, ,0,Rev-DCP,0 -178,LRH,OH00005-Lake,Flow,40.6356,-81.5581,Inst,BCS-Lake,Beach City Lake,Beach City Lake Beach City 2S,Beach City Lake Beach City 2S,WGS84,FALSE,NATIVE,US/Eastern,Tuscarawas,OH,UNITED STATES,Beach City,LRH,SITE,Lake,OH00005-Lake.Flow.Inst.1Hour.0.OBS,BCS-Lake.Flow.Inst.1Hour.0.OBS,0,OBS,931 -179,LRH,OH00004-Lake,Flow,40.6486,-81.4328,Inst,BIVO1,Bolivar Lake,Bolivar Lk near Bolivar 1E,Bolivar Lk near Bolivar 1E,WGS84,FALSE,NATIVE,US/Eastern,Tuscarawas,OH,UNITED STATES,Bolivar,LRH,SITE,Lake,OH00004-Lake.Flow.Inst.1Hour.0.OBS,BIVO1.Flow.Inst.1Hour.0.OBS,0,OBS,895 -180,LRH,OH00004-Outflow,Flow,40.64861,-81.4328,Inst,BOS-Outflow,Bolivar Outflow,Bolivar Outflow (calculated value),Bolivar Outflow (calculated value),WGS84,FALSE,NATIVE,US/Eastern,Tuscarawas,OH,UNITED STATES,Bolivar,LRH,STREAM_LOCATION,Calculated,OH00004-Outflow.Flow.Inst.1Hour.0.OBS,BOS-Outflow.Flow.Inst.1Hour.0.OBS,0,OBS,895 -181,LRP,Clinton,Flow,40.71603,-79.57887,Inst,PA00116,"L/D-6, Clinton","Allegheny River at L/D-6, Clinton","Allegheny River at L/D-6, Clinton",WGS84,FALSE,NATIVE,US/Eastern,Armstrong,PA,UNITED STATES,Harrison Township, ,PROJECT, ,Clinton.Flow.Inst.1Hour.0.CCP-Comp,07075300.Flow.Inst.1Hour.0.CCP-Comp,0,CCP-Comp,760 -182,NAP,Walnutport,Flow,40.75704,-75.60296,Inst, ,"Lehigh River at Walnutport, PA","Lehigh River at Walnutport, PA","Lehigh River at Walnutport, PA", , , , , , ,UNITED STATES, , ,SITE, ,Walnutport.Flow.Inst.1Hour.0.Rev-DCP, ,0,Rev-DCP,0 -183,LRE,Youngstown,Flow,41.27,-80.67,Inst, ,Youngstown Weather Station, , , , , ,US/Eastern,Trumbull,OH,UNITED STATES,"Cortland, OH",LRP,SITE, ,Youngstown.Flow.Inst.1Hour.0.OBS,03098600.Flow.Inst.1Hour.0.OBS,0,OBS,0 -184,LRE,Meadville,Flow,41.64,-80.21,Inst, ,Meadville Weather Station, , , , , ,US/Eastern,Crawford,PA,UNITED STATES,"Meadville, PA",LRP,SITE, ,Meadville.Flow.Inst.1Hour.0.OBS,03023100.Flow.Inst.1Hour.0.OBS,0,OBS,0 -185,LRE,Bradford,Flow,41.8,-78.62,Inst, ,Bradford Weather Station, , , , , ,US/Eastern,McKean,PA,UNITED STATES,"Cyclone, PA",LRP,SITE, ,Bradford.Flow.Inst.1Hour.0.OBS,03010955.Flow.Inst.1Hour.0.OBS,0,OBS,0 -186,LRP,CambridgeSprings,Flow,41.8072,-80.0633,Inst,CBSP1,"Cambridge Springs, PA","French Creek at Cambridge Springs, PA","French Creek at Cambridge Springs, PA",WGS84,FALSE,NATIVE,US/Eastern,Crawford,PA,UNITED STATES,Erie, ,SITE, ,CambridgeSprings.Flow.Inst.1Hour.0.OBS,CBSP1.Flow.Inst.1Hour.0.OBS,0,OBS,1124 -187,NAE,EBN,Flow,42.22083,-70.97861,Inst, ,Monatiquot River at Braintree,Monatiquot River at East Braintree,Monatiquot River at East Braintree, ,FALSE,NATIVE,America/New_York,Unknown County or County N/A,0, , , ,SITE,Streamgage,EBN.Flow.Inst.15Minutes.0.DCP-rev, ,0,DCP-rev,20 -188,LRE,Jackson,Flow,42.27,-84.47,Inst, ,Jackson Weather Station, , , , , ,US/Eastern,Jackson,MI,UNITED STATES,"Jackson, MI",LRE,SITE, ,Jackson.Flow.Inst.15Minutes.0.DCP-rev,DD3051BC.Flow.Inst.15Minutes.0.DCP-rev,0,DCP-rev,0 -189,NAE,OTR,Flow,42.58833,-72.04139,Inst, ,Otter River @ Otter River,Otter River at Otter River,Otter River at Otter River, ,FALSE,NATIVE,America/New_York,Unknown County or County N/A,0, , , ,SITE,Streamgage,OTR.Flow.Inst.15Minutes.0.DCP-rev, ,0,DCP-rev,-236 -190,NAE,ATH,Flow,42.59284,-72.23912,Inst, ,"Millers River @ Athol, MA",Millers River at Athol,Millers River at Athol,WGS84,FALSE,NATIVE,America/New_York,Worcester,MA, ,Athol, ,STREAM_LOCATION,Streamgage,ATH.Flow.Inst.15Minutes.0.DCP-rev, ,0,DCP-rev,-237 -191,LRB,NY00468,Flow,42.73329,-77.90708,Inst,Mount Morris,Mount Morris Dam,Mount Morris Dam,NERFC stage gauge for MMD.,NAD27,FALSE,NATIVE,US/Eastern,Livingston,NY,UNITED STATES, ,LRB,PROJECT,Dam,NY00468.Flow.Inst.30Minutes.0.CCP-Computed-Rev,Mount Morris.Flow.Inst.30Minutes.0.CCP-Computed-Rev,0,CCP-Computed-Rev,0 -192,MVP,IA04014,Flow,42.785,-91.095,Inst,LockDam_10,Mississippi R Lock and Dam 10, , ,NAD83, , ,US/Central,Unknown County or County N/A,IA,UNITED STATES, ,MVP,PROJECT,Dam,IA04014.Flow.Inst.1Hour.0.rev,LockDam_10.Flow.Inst.1Hour.0.rev,0,rev,0 -193,MVP,WI00733,Flow,43.2116,-91.095,Inst,LockDam_09,Mississippi R Lock and Dam 09, , ,NAD83, , ,US/Central,Unknown County or County N/A,WI,UNITED STATES, ,MVP,PROJECT,Dam,WI00733.Flow.Inst.15Minutes.0.rev,LockDam_09.Flow.Inst.15Minutes.0.rev,0,rev,0 -194,LRE,Fulton,Flow,43.3,-76.39,Inst, ,Fulton Weather Station, , , , , ,US/Eastern,Oswego,NY,UNITED STATES,"Fulton, NY",LRB,SITE, ,Fulton.Flow.Inst.1Hour.0.DCP-rev,CE41E006.Flow.Inst.1Hour.0.DCP-rev,0,DCP-rev,0 -195,MVP,WI00803,Flow,43.5766,-91.2316,Inst,LockDam_08,Mississippi R Lock and Dam 08, , ,NAD83, , ,US/Central,Unknown County or County N/A,WI,UNITED STATES, , ,PROJECT,Dam,WI00803.Flow.Inst.15Minutes.0.rev,LockDam_08.Flow.Inst.15Minutes.0.rev,0,rev,0 -196,MVP,MN00587,Flow,43.8666,-91.3083,Inst,LockDam_07,Mississippi R Lock and Dam 07, , ,NAD83, , ,US/Central,Unknown County or County N/A,MN,UNITED STATES, ,MVP,PROJECT,Dam,MN00587.Flow.Inst.15Minutes.0.rev,LockDam_07.Flow.Inst.15Minutes.0.rev,0,rev,0 -197,LRE,Berlin,Flow,43.9538,-88.95284,Inst, ,Berlin Multi-Parameter Station, , , , , ,US/Central,Green Lake,WI,UNITED STATES,"Berlin, WI",LRE,SITE, ,Berlin.Flow.Inst.0.0.shef-raw, ,0,shef-raw,0 -198,LRE,Oshkosh,Flow,43.98,-88.55,Inst, ,Oshkosh Multi-Parameter Sta, , , , , ,US/Central,Winnebago,WI,UNITED STATES,"Oshkosh, WI",LRE,SITE, ,Oshkosh.Flow.Inst.0.0.shef-raw, ,0,shef-raw,0 -199,MVP,WI00802,Flow,44,-91.4383,Inst,LockDam_06,Mississippi R Lock and Dam 06, , ,NAD83, , ,US/Central,Unknown County or County N/A,WI,UNITED STATES, ,MVP,PROJECT,Dam,WI00802.Flow.Inst.15Minutes.0.rev,LockDam_06.Flow.Inst.15Minutes.0.rev,0,rev,0 -200,LRE,WinnebagoObs,Flow,44.03333,-88.40556,Inst, ,Winnebago Observed Flow, , , , , ,US/Central,Winnebago,WI,UNITED STATES,"Stockbridge, WI",LRE,SITE, ,WinnebagoObs.Flow.Inst.0.0.shef-raw, ,0,shef-raw,0 -201,MVP,MN00588,Flow,44.0883,-91.6699,Inst,LockDam_05a,Mississippi R Lock and Dam 05a, , ,NAD83, , ,US/Central,Unknown County or County N/A,MN,UNITED STATES, ,MVP,PROJECT,Dam,MN00588.Flow.Inst.15Minutes.0.rev,LockDam_05a.Flow.Inst.15Minutes.0.rev,0,rev,0 -202,MVP,MN00589,Flow,44.1616,-91.8116,Inst,LockDam_05,Mississippi R Lock and Dam 05, , ,NAD83, , ,US/Central,Unknown County or County N/A,MN,UNITED STATES, ,MVP,PROJECT,Dam,MN00589.Flow.Inst.15Minutes.0.rev,LockDam_05.Flow.Inst.15Minutes.0.rev,0,rev,0 -203,LRE,Appleton,Flow,44.25,-88.52,Inst, ,Appleton Multi-Parameter Station, , , , , ,US/Central,Outagamie,WI,UNITED STATES,"Greenville, WI",LRE,SITE, ,Appleton.Flow.Inst.0.0.shef-raw, ,0,shef-raw,0 -204,MVP,WI00727,Flow,44.325,-91.9233,Inst,LockDam_04,Mississippi R Lock and Dam 04, , ,NAD83, , ,US/Central,Unknown County or County N/A,WI,UNITED STATES, ,MVP,PROJECT,Dam,WI00727.Flow.Inst.15Minutes.0.rev,LockDam_04.Flow.Inst.15Minutes.0.rev,0,rev,0 -205,LRE,NewLondonObs,Flow,44.39222,-88.74028,Inst, ,New London Observed Flow, , , , , ,US/Central,Waupaca,WI,UNITED STATES,"New London, WI",LRE,SITE, ,NewLondonObs.Flow.Inst.0.0.shef-raw, ,0,shef-raw,0 -206,MVP,MN00595,Flow,44.61,-92.61,Inst,LockDam_03,Mississippi R Lock and Dam 03,Mississippi River Lock and Dam 03, ,NAD83,FALSE,NATIVE,US/Central,Unknown County or County N/A,MN,UNITED STATES, ,MVP,PROJECT,Dam,MN00595.Flow.Inst.15Minutes.0.rev,LockDam_03.Flow.Inst.15Minutes.0.rev,0,rev,600 -207,MVP,MN00594,Flow,44.7599,-92.8683,Inst,LockDam_02,Mississippi R Lock and Dam 02, , ,NAD83, , ,US/Central,Unknown County or County N/A,MN,UNITED STATES, ,MVP,PROJECT,Dam,MN00594.Flow.Inst.15Minutes.0.comp,LockDam_02.Flow.Inst.15Minutes.0.comp,0,comp,0 -208,MVP,MN00591,Flow,44.9783,-93.2466,Inst,LowerSAFalls,Lower St Anthony Falls, ,Elevations are in MSL 1912,NAD83, , , ,Unknown County or County N/A,MN,UNITED STATES, , ,PROJECT,Dam,MN00591.Flow.Inst.~1Day.0.CEMVP-Legacy,LowerSAFalls.Flow.Inst.~1Day.0.CEMVP-Legacy,0,CEMVP-Legacy,0 -209,MVP,MN00579,Flow,45.17139,-96.09333,Inst,MarshLake_Dam,Marsh Lake Dam, , ,NAD83, , ,US/Central,Unknown County or County N/A,MN,UNITED STATES, ,MVP,PROJECT,Dam,MN00579.Flow.Inst.1Hour.0.Fcst-CEMVP,MarshLake_Dam.Flow.Inst.1Hour.0.Fcst-CEMVP,0,Fcst-CEMVP,0 -210,MVP,MN00581-ServiceSpillway,Flow-Out,45.22944,-96.29028,Inst,Highway75_Dam-ServiceSpillway,Highway 75 Dam Service Spillway, , ,NAD83, , ,US/Central,Unknown County or County N/A,0,UNITED STATES, ,MVP,SITE, ,MN00581-ServiceSpillway.Flow-Out.Inst.~1Day.0.CEMVP-Legacy,Highway75_Dam-ServiceSpillway.Flow-Out.Inst.~1Day.0.CEMVP-Legacy,0,CEMVP-Legacy,0 -211,MVP,Benson,Flow,45.3111,-95.6249,Inst,BENM5,Chippewa River at Benson,"Chippewa River at Benson, US12",Owner is MNDNR/MPCA,NAD27,FALSE,NATIVE,US/Central,Unknown County or County N/A,MN,UNITED STATES,Benson,MVP,SITE,DCP Gage,Benson.Flow.Inst.15Minutes.0.rev,BENM5.Flow.Inst.15Minutes.0.rev,0,rev,1009 -212,NAE,WAS,Flow,46.77722,-68.15722,Inst, ,"Arroostoock River @ Washburn, ME",Aroostoock River at Washburn,Aroostoock River at Washburn, ,FALSE,NATIVE,America/New_York,Unknown County or County N/A,ME, , , ,SITE,Streamgage,WAS.Flow.Inst.15Minutes.0.DCP-rev, ,0,DCP-rev,436 -213,MVP,ND00310-Spillway,Flow,48.40498,-97.79103,Inst,Homme_Dam-Spillway,Homme Dam Overflow Spillway, , , , , ,America/Chicago,Unknown County or County N/A,0,UNITED STATES, ,MVP,SITE, ,ND00310-Spillway.Flow.Inst.15Minutes.0.rev,Homme_Dam-Spillway.Flow.Inst.15Minutes.0.rev,0,rev,0 -214,MVP,AlamedaRsvr,Flow-Out,49.25889,-102.2306,Inst, ,Alameda Reservoir near Alameda,"Alameda Reservoir near Alameda, SK",Owner is Environment Canada, , , ,US/Central, , ,CANADA, , ,SITE,DCP Gage,AlamedaRsvr.Flow-Out.Inst.15Minutes.0.ProjectEntry, ,0,ProjectEntry,0 -215,MVP,Alameda,Flow,49.34694,-102.2556,Inst, ,Shepherd Creek near Alameda,"Shepherd Creek near Alameda, SK",Owner is Environment Canada, , , ,US/Central, , ,CANADA, , ,SITE,DCP Gage,Alameda.Flow.Inst.5Minutes.0.Raw-EnvCan, ,0,Raw-EnvCan,0 -216,MVP,AlamedaRsvr-MooseMntCreek,Flow,49.52278,-102.1719,Inst, ,Moose Mnt Creek a Alameda RSVR,"Moose Mountain Creek above Alameda Reservoir, SK",Owner is Environment Canada, , , ,US/Central, , ,CANADA, , ,SITE,DCP Gage,AlamedaRsvr-MooseMntCreek.Flow.Inst.5Minutes.0.Raw-EnvCan, ,0,Raw-EnvCan,0 -217,SPK,CA10201,Flow-Spill,39.19806,-123.1806,Ave,"CA10201 -Lake Mendocino Pool-EFRussian",Lk Mendocino-Pool,Coyote Valley Dam,COY - Lake Mendocino (Coyote Dam) Pool Elevation Station,WGS84,FALSE,NATIVE,US/Pacific,Mendocino,CA,UNITED STATES,"Calpella, CA",SPN,SITE, ,"CA10201 -Lake Mendocino Pool-EFRussian.Flow-Spill.Ave.1Hour.1Hour.Calc-val",CA10201.Flow-Spill.Ave.1Hour.1Hour.Calc-val,0,Calc-val,789 -218,NWDP,WA00302,Flow-Out,47.38537,-123.6057,Ave,12035380,Wynoochee Dam,WYNOOCHEE DAM, ,NAD83, , ,US/Pacific,Grays Harbor,WA,UNITED STATES,Aberdeen,NWS,PROJECT,Dam,WA00302.Flow-Out.Ave.1Hour.1Hour.CENWS-COMPUTED-R*,12035380.Flow-Out.Ave.1Hour.1Hour.CENWS-COMPUTED-RAW,0,CENWS-COMPUTED-RAW,0 -219,NWDP,D10D3406,Flow,46.50047,-116.3923,Ave,PEKI,Clearwater R near Peck,CLEARWATER RIVER NEAR PECK 2NE,USGS #13341050,WGS84,FALSE,NATIVE,US/Pacific,Nez Perce,ID,UNITED STATES, ,NWW,SITE,Stream Gauge,D10D3406.Flow.Ave.~1Day.1Day.CBT-COMPUTED-REV,PEKI.Flow.Ave.~1Day.1Day.CBT-COMPUTED-REV,0,CBT-COMPUTED-REV,930 -220,NWDP,ETSI,Flow-Canal,43.93333,-116.4333,Inst,34433F4C,Emmett Irrigat Dist S Side Cnl,Emmett Irrigation Dist South Side Canal,USBR Hydromet Station ETSI,WGS84,FALSE,NATIVE,US/Mountain,Gem,ID,UNITED STATES, ,NWW,SITE,Stream Gauge,ETSI.Flow-Canal.Inst.0.0.USBR-RAW,34433F4C.Flow-Canal.Inst.0.0.USBR-RAW,0,USBR-RAW,2500 -221,NWDP,12371550,Flow-Out,47.68,-114.23,Inst,KERM,Kerr Dam,Kerr Dam, ,NAD83,FALSE,NATIVE,US/Mountain,Lake,MT, , ,NWS,SITE,Dam,12371550.Flow-Out.Inst.~1Day.0.CBT-REV,KERM.Flow-Out.Inst.~1Day.0.CBT-REV,0,CBT-REV,2890 -222,NWDP,MT00652,Flow-Out,48.41056,-115.3131,Ave,CE1192D4,Libby Dam Near Libby,LIBBY DAM NEAR LIBBY, , ,FALSE,NATIVE,US/Mountain,Lincoln,MT,UNITED STATES,Libby,NWS,PROJECT,Corps Reservoir,MT00652.Flow-Out.Ave.1Hour.1Hour.CBT-REV,CE1192D4.Flow-Out.Ave.1Hour.1Hour.CBT-REV,0,CBT-REV,2342 -223,NWDP,SMCI,Flow-Canal,42.6625,-113.4889,Inst, ,S Side Minidoka Cnl nr Minidoka,S. Side Minidoka Canal Near Minidoka, ,WGS84,FALSE,NATIVE,US/Mountain,Cassia,ID,UNITED STATES, ,NWW,SITE,Stream Gauge,SMCI.Flow-Canal.Inst.0.0.USBR-RAW, ,0,USBR-RAW,4184 -224,NWDP,34437294,Flow-Canal,42.67167,-113.4839,Inst,13080000,N Side Minidoka Cnl nr Minidoka,N. Side Minidoka Canal Near Minidoka,USBR Station ID NMCI,WGS84,FALSE,NATIVE,US/Mountain,Minidoka,ID,UNITED STATES, ,NWW,SITE,Stream Gauge,34437294.Flow-Canal.Inst.0.0.USBR-RAW,13080000.Flow-Canal.Inst.0.0.USBR-RAW,0,USBR-RAW,4180 -225,NWDP,MT00565,Flow-Out,48.34111,-114.0133,Ave,345EB372,Hungry Horse Dam nr Hungry Horse,HUNGRY HORSE DAM NEAR HUNGRY HORSE, , ,FALSE,NATIVE,US/Mountain,Flathead,MT,UNITED STATES,Missoula,NWS,PROJECT,Dam,MT00565.Flow-Out.Ave.1Hour.1Hour.CBT-REV,345EB372.Flow-Out.Ave.1Hour.1Hour.CBT-REV,0,CBT-REV,3196 -226,NWDP,WFCI,Flow-Canal,43.90556,-111.6278,Inst,18D21S,Wilford Canal,Wilford Canal,USBR Station ID WFCI,WGS84,FALSE,NATIVE,US/Mountain,Fremont,ID,UNITED STATES, ,NWW,SITE,Stream Gauge,WFCI.Flow-Canal.Inst.0.0.USBR-RAW,18D21S.Flow-Canal.Inst.0.0.USBR-RAW,0,USBR-RAW,4965 -227,NWDP,MHPI,Flow-Discharge-Power,42.51667,-114.0333,Ave, ,Milner Hydroelectric Plant,Milner Hydroelectric Plant, ,WGS84,FALSE,NATIVE,US/Mountain,Cassia,ID,UNITED STATES, ,NWW,SITE,Stream Gauge,MHPI.Flow-Discharge-Power.Ave.~1Day.1Day.USBR-COM*, ,0,USBR-COMPUTED-REV,4120 -228,NWDP,ID00319,Flow-Out,48.17925,-116.9997,Ave,ALF,Albeni Falls Dam,Albeni Falls Dam, , ,FALSE,NATIVE,US/Pacific,Bonner,ID,UNITED STATES,Coeur d'Alene,NWS,PROJECT,Corps Reservoir,ID00319.Flow-Out.Ave.1Hour.1Hour.CBT-REV,ALF.Flow-Out.Ave.1Hour.1Hour.CBT-REV,0,CBT-REV,2047 -229,NWDP,WA00256,Flow-Out-Total,47.40927,-121.724,Ave,12115900,Chester Morse Lake @ Cedar Falls,CHESTER MORSE LAKE AT CEDAR FALLS NEAR NORTH BEND 7SSE, ,NAD83, , ,US/Pacific,King,WA, , ,NWS,SITE,Dam,WA00256.Flow-Out-Total.Ave.1Hour.1Hour.SCL-RAW,12115900.Flow-Out-Total.Ave.1Hour.1Hour.SCL-RAW,0,SCL-RAW,0 -230,NWDP,OR00002,Flow-Out,45.61,-121.13,Ave,14103950,The Dalles Lock and Dam,The Dalles Dam and Lake Celilo on the Columbia River, ,WGS84, , ,US/Pacific,Wasco,OR,UNITED STATES, ,NWDP,PROJECT,Dam,OR00002.Flow-Out.Ave.1Hour.1Hour.CBT-REV,14103950.Flow-Out.Ave.1Hour.1Hour.CBT-REV,0,CBT-REV,0 -231,NWDP,WA00168,Flow-Out,48.69824,-121.2091,Ave,GOD,Gorge Reservoir nr Nehalem,GORGE RESERVOIR NR NEHALEM, , , , ,US/Pacific,Whatcom,WA,UNITED STATES,Newhalem,NWS,PROJECT,Dam,WA00168.Flow-Out.Ave.1Hour.1Hour.SCL-RAW,GOD.Flow-Out.Ave.1Hour.1Hour.SCL-RAW,0,SCL-RAW,0 -232,NWDP,OR00616,Flow-Out,45.93563,-119.2977,Ave,MCN,McNary Lock and Dam,McNary Dam and Lake Wallula,McNary_Dam,WGS84,FALSE,NATIVE,US/Pacific,Umatilla,OR,UNITED STATES, ,NWDP,PROJECT,Dam,OR00616.Flow-Out.Ave.~1Day.1Day.CBT-REV,MCN.Flow-Out.Ave.~1Day.1Day.CBT-REV,0,CBT-REV,361 -233,NWDP,ID00287,Flow-Out,46.51537,-116.2962,Ave,DWR,Dworshak Dam,Dworshak_Dam,Dworshak_Dam Datum Correction 1929-1988 (CorpsCon 6) = 3.320 Ft,WGS84,FALSE,NATIVE,US/Pacific,Clearwater,ID,UNITED STATES,Moscow,NWW,PROJECT,Corps Reservoir,ID00287.Flow-Out.Ave.~6Hours.6Hours.CBT-COMPUTED-*,DWR.Flow-Out.Ave.~6Hours.6Hours.CBT-COMPUTED-REV,0,CBT-COMPUTED-REV,1613 -234,NWDP,TLCI,Flow-Canal,43.72028,-111.8272,Inst,13038434,Texas And Liberty Weir,Texas and Liberty Weir,USBR Station ID TLCI,WGS84,FALSE,NATIVE,US/Mountain,Madison,ID,UNITED STATES, ,NWW,SITE,Stream Gauge,TLCI.Flow-Canal.Inst.0.0.USBR-RAW,13038434.Flow-Canal.Inst.0.0.USBR-RAW,0,USBR-RAW,4895 -235,NWDP,WA00169,Flow-Loc,48.73278,-121.0672,Ave,ROS,Ross Reservoir nr Newhalem,ROSS RESERVOIR NEAR NEWHALEM, , , , ,US/Pacific,Whatcom,WA,UNITED STATES,Newhalem,NWS,PROJECT,Dam,WA00169.Flow-Loc.Ave.1Hour.1Hour.SCL-RAW,ROS.Flow-Loc.Ave.1Hour.1Hour.SCL-RAW,0,SCL-RAW,0 -236,NWDP,WA00300,Flow-Out,47.1422,-121.9313,Inst,MMD,Mud Mountain Dam nr Buckley WA,MUD MOUNTAIN DAM NR BUCKLEY WA, , , , ,US/Pacific,King,WA,UNITED STATES,Buckley,NWS,PROJECT,Corps Reservoir,WA00300.Flow-Out.Inst.1Hour.0.NWSRADIO-COMPUTED-R*,MMD.Flow-Out.Inst.1Hour.0.NWSRADIO-COMPUTED-RAW,0,NWSRADIO-COMPUTED-RAW,0 -237,NWDP,ARK,Flow-Out,43.59529,-115.9225,Ave,347D061C,Arrowrock Dam,ARROWROCK DAM AND RESERVOIR NEAR BOISE 14E,Datum Correction 1929-1988 (CorpsCon 6) = 3.406 Ft,WGS84,FALSE,NATIVE,US/Mountain,Boise,ID,UNITED STATES,Boise,NWW,PROJECT,Bureau of Reclamation Dam,ARK.Flow-Out.Ave.~6Hours.6Hours.USBR-COMPUTED-REV,347D061C.Flow-Out.Ave.~6Hours.6Hours.USBR-COMPUTED-REV,0,USBR-COMPUTED-REV,3220 -238,NWDP,DIA,Flow-Out,48.71556,-121.1506,Ave, ,Diablo Reservoir nr Newhalem 6NE,DIABLO RESERVOIR NEAR NEWHALEM 6NE, , , , ,US/Pacific,Whatcom,WA, , ,NWS,SITE,Dam,DIA.Flow-Out.Ave.~1Day.1Day.CBT-REV, ,0,CBT-REV,0 -239,NWDP,SQWI,Flow,43.96667,-116.3314,Inst,3483268C,Squaw Cr near Sweet 1S,Squaw Creek near Sweet 1S,USGS #13297355,WGS84,FALSE,NATIVE,US/Mountain,Gem,ID,UNITED STATES, ,NWW,SITE,Stream Gauge,SQWI.Flow.Inst.0.0.USBR-RAW,3483268C.Flow.Inst.0.0.USBR-RAW,0,USBR-RAW,5710 -240,NWDP,WA00173,Flow-Out,48.64929,-121.6907,Inst,12191600,Baker Lk @ Upr Baker Dm nr Conct,BAKER LAKE AT UPPER BAKER DAM NEAR CONCRETE, ,NAD83, , ,US/Pacific,Whatcom,WA,UNITED STATES,Concrete,NWS,PROJECT,Dam,WA00173.Flow-Out.Inst.1Hour.0.PSE-RAW,12191600.Flow-Out.Inst.1Hour.0.PSE-RAW,0,PSE-RAW,0 -241,NWDP,WA00085,Flow-Out,46.87472,-119.9714,Ave,WAN,Wanapum Dam,Wanapum Dam, , , , ,US/Pacific,Kittitas,WA, , ,NWDP,PROJECT,Dam,WA00085.Flow-Out.Ave.1Hour.1Hour.CBT-REV,WAN.Flow-Out.Ave.1Hour.1Hour.CBT-REV,0,CBT-REV,0 -242,NWDP,WA00086,Flow-Out,47.53371,-120.296,Ave,RRH,Rocky Reach Dam,Rocky Reach Dam, ,NAD83, , ,US/Pacific,Chelan,WA, , ,NWDP,PROJECT,Dam,WA00086.Flow-Out.Ave.1Hour.1Hour.CBT-REV,RRH.Flow-Out.Ave.1Hour.1Hour.CBT-REV,0,CBT-REV,0 -243,NWDP,WA00009,Flow-Out,48.98722,-117.3475,Ave,BDY,Boundary Dam,Boundary Dam, , , , ,US/Pacific,Pend Oreille,WA,UNITED STATES,Spokane,NWS,PROJECT,Dam,WA00009.Flow-Out.Ave.~1Day.1Day.CBT-REV,BDY.Flow-Out.Ave.~1Day.1Day.CBT-REV,0,CBT-REV,0 -244,NWDP,14128860,Flow-Out,45.64583,-121.9389,Ave,BON,Bonneville Lock and Dam,Bonneville Dam and Lake On Columbia River, ,WGS84, , ,US/Pacific,Multnomah,OR,UNITED STATES, ,NWDP,PROJECT,Dam,14128860.Flow-Out.Ave.1Hour.1Hour.CBT-REV,BON.Flow-Out.Ave.1Hour.1Hour.CBT-REV,0,CBT-REV,0 -245,NWDP,WA00098,Flow-Out,47.94722,-119.8651,Ave,WEL,Wells Dam,Wells Dam, ,NAD83, , ,US/Central,Douglas,WA, , ,NWDP,PROJECT,Dam,WA00098.Flow-Out.Ave.1Hour.1Hour.CBT-REV,WEL.Flow-Out.Ave.1Hour.1Hour.CBT-REV,0,CBT-REV,0 -246,NWDP,WA00088,Flow-Out,46.64442,-119.9099,Ave,PRD,Priest Rapids Dam,Priest Rapids Dam, , , , ,US/Pacific,Grant,WA, , ,NWDP,PROJECT,Dam,WA00088.Flow-Out.Ave.1Hour.1Hour.CBT-REV,PRD.Flow-Out.Ave.1Hour.1Hour.CBT-REV,0,CBT-REV,0 -247,NWDP,14048006,Flow-Out,45.71485,-120.6937,Ave,JDA,John Day Lock and Dam,John Day Dam and Lake Umatilla, ,WGS84, , ,US/Pacific,Sherman,OR,UNITED STATES, ,NWDP,PROJECT,Dam,14048006.Flow-Out.Ave.1Hour.1Hour.CBT-REV,JDA.Flow-Out.Ave.1Hour.1Hour.CBT-REV,0,CBT-REV,0 -248,NWDP,WA00299,Flow-Out,47.99511,-119.6411,Ave,12437990,Chief Joseph Dam,Chief Joseph Dam, ,NAD83, , ,US/Pacific,Douglas,WA,UNITED STATES, ,NWDP,PROJECT,Dam,WA00299.Flow-Out.Ave.1Hour.1Hour.CBT-REV,12437990.Flow-Out.Ave.1Hour.1Hour.CBT-REV,0,CBT-REV,0 -249,NWDP,GCL,Flow-Out,47.95667,-118.9805,Ave, ,Grand Coulee Dam,Grand Coulee Dam 1 Southwest, , ,FALSE,NATIVE,US/Pacific,Okanogan,WA, , ,NWDP,PROJECT,Dam,GCL.Flow-Out.Ave.1Hour.1Hour.CBT-REV, ,0,CBT-REV,1929 -250,NWDP,WA00084,Flow-Out,47.33984,-120.0945,Ave,RIS,Rock Island Dam,Rock Island Dam, ,NAD83, , ,US/Pacific,Chelan,WA, , ,NWDP,PROJECT,Dam,WA00084.Flow-Out.Ave.1Hour.1Hour.CBT-REV,RIS.Flow-Out.Ave.1Hour.1Hour.CBT-REV,0,CBT-REV,0 -251,NWDP,CSCI,Flow,44.52461,-116.0397,Ave, ,North Fork Payette R @ Cascade,NORTH FORK PAYETTE RIVER AT CASCADE,USGS #13245000,WGS84,FALSE,NATIVE,US/Mountain,Valley,ID,UNITED STATES, ,NWW,SITE,Stream Gauge,CSCI.Flow.Ave.~1Day.1Day.USBR-COMPUTED-REV, ,0,USBR-COMPUTED-REV,4720 -252,NWDP,THFO,Flow,45,-117.7833,Inst, ,Powder R Blw Thief Vly Res,Powder River Below Thief Valley Reservoir Near North Powder,USGS #13285500,WGS84,FALSE,NATIVE,US/Pacific,Union,OR,UNITED STATES, ,NWW,SITE,Stream Gauge,THFO.Flow.Inst.15Minutes.0.OWRD-RAW, ,0,OWRD-RAW,3080 -253,NWDP,REVB,Flow-Out,51.05,-118.19,Ave, ,Revelstoke Dam,Revelstoke Dam, , ,FALSE,NATIVE,Unknown or Not Applicable,Unknown County or County N/A,0, , ,NWDP,SITE,Dam,REVB.Flow-Out.Ave.1Hour.1Hour.BCHYDRO-RAW, ,0,BCHYDRO-RAW,1660 diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/EmptyDirOrFileException.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/EmptyDirOrFileException.py index dbc5ea2..82f182b 100755 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/EmptyDirOrFileException.py +++ b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/EmptyDirOrFileException.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python class EmptyDirOrFileException( Exception ): """Exception raised for empty input files or directories. Attributes: diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Observation.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Observation.py index 2039971..100e9f0 100755 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Observation.py +++ b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Observation.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python ############################################################################### # Module name: Observation # # @@ -16,8 +17,6 @@ from datetime import datetime, timedelta import dateutil.parser import pytz -#import iso8601 -#import Tracer from abc import ABCMeta, abstractmethod, abstractproperty from TimeSlice import TimeSlice @@ -221,7 +220,7 @@ def makeAllTimeSlices( self, timeresolution, outdir, suffix='usgsTimeSlice.ncdf' # the time resultions must divide 60 minutes with on remainder if 3600 % timeresolution.seconds != 0: - raise RuntimeError( "FATAL Error: Time slice resolution must " + raise RuntimeError( "FATAL ERROR: Time slice resolution must " "divide 60 minutes with no remainder." ) startTime = datetime( self.timePeriod[ 0 ].year, @@ -234,7 +233,7 @@ def makeAllTimeSlices( self, timeresolution, outdir, suffix='usgsTimeSlice.ncdf' if startTime > self.timePeriod[ 1 ]: raise RuntimeError( \ - "FATAL Error: observation time period wrong! " ) + "FATAL ERROR: observation time period wrong! " ) count = 0 while startTime <= self.timePeriod[ 1 ]: diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/TimeSlice.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/TimeSlice.py index 2917441..ce186c8 100755 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/TimeSlice.py +++ b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/TimeSlice.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python ############################################################################### # Module name: TimeSlice # # # diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Tracer.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Tracer.py deleted file mode 100755 index 75d8e73..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/Tracer.py +++ /dev/null @@ -1,19 +0,0 @@ -############################################################################### -# Module name: Tracer -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: Create a Python Tracer object for debugging purpose # -# # -############################################################################### - -import sys, trace - -def init(): - global theTracer - theTracer = \ - trace.Trace( ignoredirs=sys.path[1:], trace=True, count=False ) diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/USGS_Observation.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/USGS_Observation.py index 5eb87f9..bf59b79 100755 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/USGS_Observation.py +++ b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/USGS_Observation.py @@ -11,6 +11,7 @@ # Description: manage data in a USGS WaterXML 2.0 file # # # # 06/11/2024 ChamP - Added loadJSON() function to decode the USGS Json file # +# 02/2026 ChamP - Added parseJson() to use new USGS API json structure. # # # ############################################################################### @@ -20,33 +21,145 @@ from datetime import datetime, timedelta import dateutil.parser import pytz -#import iso8601 import xml.etree.ElementTree as etree import json from TimeSlice import TimeSlice -#import Tracer from Observation import Observation +logger = logging.getLogger(__name__) class USGS_Observation(Observation): """ - Store one USGS WaterML2.0 data + Store one USGS Water data APIs """ - def __init__(self, waterml2orcsvfilename ): + def __init__(self, waterdatafilename ): """ Initialize the USGS_Observation object with a given filename """ - self.source = waterml2orcsvfilename - if waterml2orcsvfilename.endswith( '.json' ): - self.loadJSON( waterml2orcsvfilename ) - elif waterml2orcsvfilename.endswith( '.xml' ): - self.loadWaterML2( waterml2orcsvfilename ) - elif waterml2orcsvfilename.endswith( '.csv' ): - self.loadCSV( waterml2orcsvfilename ) - else: - raise RuntimeError( "FATAL ERROR: Unknow file type: " + \ - waterml2orcsvfilename ) + self.source = waterdatafilename + self.obvPeriod = None + self.stationID = None + self.timeValueQuality = {} + + try: + if waterdatafilename.endswith( '.json' ): + self.parseJson( waterdatafilename ) + else: + logger.warning("Skipping unknown file type: %s", waterdatafilename) + return None + + + except Exception as e: + logger.warning( + "Unexpected error parsing %s: %s", + waterdatafilename,e,exc_info=True) + return None + + def parseJson(self, jsonfilename): + """ + Read real-time stream flow data from a given Json file + by parsing the JSON file + + Input: jsonfilename - the Json filename + """ + + try: + logger.info("Parsing file: %s",jsonfilename) + with open(jsonfilename, "r") as f: + data = json.load(f) + + # --------------------------------------------------------- + # Get features and handle empty features[] + # --------------------------------------------------------- + features = data.get("features", []) + if not features: + logger.warning("No features found in %s, skipping it...\n\n",jsonfilename) + return None + + # Begin and end times + beginTime = features[0]["properties"]["time"] + endTime = features[-1]["properties"]["time"] + + self._obvPeriod = dateutil.parser.parse( beginTime )\ + .astimezone(pytz.utc).replace(tzinfo=None), \ + dateutil.parser.parse( endTime )\ + .astimezone(pytz.utc).replace(tzinfo=None) + + # --------------------------------------------------------- + # Process each feature + # --------------------------------------------------------- + self._timeValueQuality = {} + MISSING_VALUE = -999999.0 + + for feature in features: + props = feature.get("properties", {}) + #print (f"features={props}") + + monitoring_location_id = props.get("monitoring_location_id") + #print (f"monitoring_location_id={monitoring_location_id}") + + self._stationID = monitoring_location_id.replace("USGS-", "") + #print (f"stationID={self._stationID}") + + valuetime = props.get("time") + #print (f"time={valuetime}") + + self._unit = props.get("unit_of_measure") + #print (f"unit={self._unit}") + + if self._unit == "ft^3/s": + unitConvertToM3perSec = 0.028317 + elif self._unit == "m^3/s": + unitConvertToM3perSec = 1.0 + else: + raise RuntimeError("FATAL ERROR: Unit " + self._unit + " is not known.") + + qualifier1 = props.get("approval_status") + + qualifiers = props.get("qualifier") or [] + qualifier2 = qualifiers[0] if qualifiers else None + #qualifier2 = qualifiers[1] if len(qualifiers) > 1 else None + #print (f"qualifier1={qualifier1}; qualifier2={qualifier2}") + + value = props.get("value") + dt = dateutil.parser.parse( valuetime ).astimezone(pytz.utc).replace(tzinfo=None) + + if (value is None + or (isinstance(value, str) and value.strip().lower() == "null")): + rvalue = MISSING_VALUE + dataquality = 0 + + else: + rvalue = float(value) * unitConvertToM3perSec + dataquality = self.calculateDataQuality(\ + rvalue,\ + qualifier1, qualifier2 ) + + # If no timestep exists yet, store it + if dt not in self._timeValueQuality: + self._timeValueQuality[ dt ] = (rvalue, dataquality) + else: + old_v = self._timeValueQuality[dt][0] + + # Replace only if existing value is missing + if old_v == MISSING_VALUE and rvalue != MISSING_VALUE: + self._timeValueQuality[ dt ] = ( rvalue, dataquality ) + + logger.info ("Parsed JSON: obvPeriod=%s, ID=%s, unit=%s, NumberTimeSteps=%d",self._obvPeriod,self._stationID,self._unit,len(self._timeValueQuality)) + for vt, (discharge, quality) in self._timeValueQuality.items(): + logger.info("%s %.6f %d", vt, float(discharge), int(quality)) + logger.info("================================\n") + + self.stationID = self._stationID + self.obvPeriod = self._obvPeriod + self.timeValueQuality = self._timeValueQuality + + except (OSError, json.JSONDecodeError) as e: + logger.warning("JSON parse error in %s: %s. Or maybe json file is empty; ==> %s Skipping...\n",\ + jsonfilename, e, jsonfilename) + return None + def loadJSON(self, jsonfilename ): """ @@ -368,8 +481,8 @@ def calculateDataQuality(self, value, qualifier1, qualifier2 ): # #%DATA_AGING_CODES = # ( -# 'P' => ['0', 'P', 'Provisional data subject to revision.'], -# 'A' => ['0', 'A', 'Approved for publication -- Processing and review +# 'P' => ['0', 'P', 'PROVISIONAL data subject to revision.'], +# 'A' => ['0', 'A', 'APPROVED for publication -- Processing and review #completed.'], # ); # @@ -402,7 +515,7 @@ def calculateDataQuality(self, value, qualifier1, qualifier2 ): # 'z' => ['1', 'z', 'Value received from backup recorder.'], # # # -- Processing Status Flags -# '*' => ['1', '*', 'Value was edited by USGS personnel.'], +# '*' => ['1', '*', 'Value was EDITED by USGS personnel.'], # # # -- Other Flags (historical UVs only) # 'S' => ['1', 'S', 'Value could be a result of a stuck recording instrument.'], @@ -411,13 +524,13 @@ def calculateDataQuality(self, value, qualifier1, qualifier2 ): # 'V' => ['1', 'V', 'Value was an alert value.'], # # # -- UV remarks -# '&' => ['1', '&', 'Value was computed from affected unit values by unspecified reasons.'], +# '&' => ['1', '&', 'Value was computed from affected unit values by UNSPECIFIED reasons.'], # '<' => ['0', '<', 'Actual value is known to be less than reported value.'], # '>' => ['0', '>', 'Actual value is known to be greater than reported value.'], # 'C' => ['1', 'C', 'Value is affected by ice at the measurement site.'], # 'B' => ['1', 'B', 'Value is affected by backwater at the measurement site.'], # 'E' => ['0', 'e', 'Value was computed from estimated unit values.'], -# 'e' => ['0', 'e', 'Value has been estimated.'], +# 'e' => ['0', 'e', 'Value has been ESTIMATED.'], # 'F' => ['1', 'F', 'Value was modified due to automated filtering.'], # 'K' => ['1', 'K', 'Value is affected by instrument calibration drift.'], # 'R' => ['1', 'R', 'Rating is undefined for this value.'], @@ -500,27 +613,20 @@ def calculateDataQuality(self, value, qualifier1, qualifier2 ): if value <= 0 or value > 90000 : # see James' email on Nov. 18 above quality = 0 else : - if ( qualifier2 and len( qualifier2 ) > 0 ) : - if qualifier1 == 'A' or qualifier1 == 'P' : - if qualifier2 == 'e' : + if qualifier2: + if qualifier1 in ("Approved", "Provisional"): + if qualifier2 == 'ESTIMATED': quality = 50 - elif qualifier2 == '&' : + elif qualifier2 == 'UNSPECIFIED': quality = 25 - elif qualifier2 == '*' : + elif qualifier2 == 'EDITED': quality = 5 - elif qualifier2 == 'A' : - quality = 100 - elif qualifier2 == 'P' : + elif qualifier2 in ("APPROVED","PROVISIONAL"): quality = 100 else: quality = 0 -# else : -# raise RuntimeError( "ERROR: unknow qualifier: " + \ -# qualifier1 ) - else: - if qualifier1 == 'A' or qualifier1 == 'P' : + else: + if qualifier1 in ("Approved", "Provisional"): quality = 100 -# else: -# raise RuntimeError( "ERROR: unknow qualifier: " + \ -# qualiifer1 ) + return quality diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_ace_xml.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_ace_xml.py deleted file mode 100755 index 3ffa10f..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_ace_xml.py +++ /dev/null @@ -1,144 +0,0 @@ -#! /usr/bin/env python -############################################################################### -# File name: make_time_slice_from_ace_xml.py # -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 5/30/2019 # -# # -# Description: The driver to create NetCDF time slice files from Army Crops # -# of Engineers real-time observations # -# # -############################################################################### - -import os, sys, time, urllib, getopt -import logging -from string import * -import xml.etree.ElementTree as etree -from datetime import datetime, timedelta -from USGS_Observation import USGS_Observation -from TimeSlice import TimeSlice -from Observation import Observation, All_Observations -from CWMS_Sites import CWMS_Sites -from ACE_Observation import ACE_Observation -#import Tracer - -""" - The driver to parse downloaded ACE XML observations and - create time slices and write to NetCDF files - Author: Zhengtao Cui (Zhengtao.Cui@noaa.gov) - Date: May 30, 2019 -""" -def main(argv): - """ - function to get input arguments - """ - inputdir = '' - try: - opts, args = getopt.getopt(argv,"hi:o:s:",["idir=", "odir=", "sites="]) - except getopt.GetoptError: - print( 'make_time_slice_from_ace_xml.py -i -o -s ' ) - sys.exit(2) - for opt, arg in opts: - if opt == '-h': - print( \ - 'make_time_slice_from_ace_xml.py -i -o -s ' ) - sys.exit() - elif opt in ('-i', "--idir"): - inputdir = arg - if not os.path.exists( inputdir ): - raise RuntimeError( 'FATAL Error: inputdir ' + \ - inputdir + ' does not exist!' ) - elif opt in ('-o', "--odir" ): - outputdir = arg - if not os.path.exists( outputdir ): - raise RuntimeError( 'FATAL Error: outputdir ' + \ - outputdir + ' does not exist!' ) - elif opt in ('-s', "--sites" ): - sitefile = arg - if not os.path.exists( sitefile ): - raise RuntimeError( 'FATAL Error: sitefile ' + \ - sitefile + ' does not exist!' ) - - return (inputdir, outputdir, sitefile) - -t0 = time.time() - -logging.basicConfig(format=\ - '%(asctime)s - %(name)s - %(levelname)s - %(message)s',\ - level=logging.INFO) -logger = logging.getLogger(__name__) -formatter = logging.Formatter(\ - '%(asctime)s - %(name)s - %(levelname)s - %(message)s') -#logger.setFormatter(formatter) -logger.info( "System Path: " + str( sys.path ) ) - -if __name__ == "__main__": - try: - odir = main(sys.argv[1:]) - except Exception as e: - logger.error("Failed to get program options.", exc_info=True) - -indir = odir[0] -outdir = odir[1] -sitefile = odir[2] -logger.info( 'Input dir is "' + indir + '"') -logger.info( 'Output dir is "' + outdir + '"') -logger.info( 'Site file is "' + sitefile + '"') - -# -# Load ACE observed XML discharge data -# - -try: - sites=CWMS_Sites( sitefile ) - - obvs = [] - - if not os.path.isdir( indir ): - raise RuntimeError( "FATAL ERROR: " + indir + \ - " is not a directory or does not exist. ") - - for file in os.listdir( indir ): - if file.endswith( ".xml" ): - logger.info( 'Reading ' + indir + '/' + file + ' ... ' ) - try: - obvs.append( ACE_Observation( \ - indir + '/' + file, sites ) ) - except Exception as e: - logger.warn( repr( e ), exc_info=True ) - continue - - if not obvs: - raise RuntimeError( "FATAL ERROR: " + indir + \ - " has no ACE xml files") - - allobvs = All_Observations( obvs ) -except Exception as e: - logger.error("Failed to load ACE XML files.", exc_info=True) - -logger.info( 'Earliest time in ACE XML: ' + \ - allobvs.timePeriodForAll()[0].isoformat() ) -logger.info( 'Latest time in ACE XML: ' + \ - allobvs.timePeriodForAll()[1].isoformat() ) - -# -# Create time slices from loaded observations -# -# Set time resolution to 15 minutes -# and -# Write time slices to NetCDF files -# -try: - timeslices = allobvs.makeAllTimeSlices( timedelta( minutes = 15 ), \ - outdir, 'aceTimeSlice.ncdf' ) -except Exception as e: - logger.error("Failed to make time slices.", exc_info=True) - logger.error("Input dir = " + indir, exc_info=True) - -logger.info( "Total number of timeslices: " + str( timeslices ) ) -logger.info( "Program finished in: " + \ - "{0:.1f}".format( (time.time() - t0) / 60.0 ) + \ - " minutes" ) diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_usgs_waterml.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_usgs_waterml.py index 08affb4..4230203 100755 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_usgs_waterml.py +++ b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/make_time_slice_from_usgs_waterml.py @@ -23,10 +23,9 @@ from TimeSlice import TimeSlice from Observation import Observation, All_Observations from EmptyDirOrFileException import EmptyDirOrFileException -#import Tracer """ - The driver to parse downloaded waterML Json observations and + The driver to parse downloaded Json observations and create time slices and write to NetCDF files Author: Zhengtao Cui (Zhengtao.Cui@noaa.gov) Date: Aug. 26, 2015 @@ -79,7 +78,7 @@ def main(argv): indir = odir[0] outdir = odir[1] logger.info( 'Input dir is "' + indir + '"') -logger.info( 'Output dir is "' + outdir + '"') +logger.info( 'Output dir is "' + outdir + '"\n\n') # # Load USGS observed JSON discharge data @@ -91,15 +90,16 @@ def main(argv): if not os.path.isdir( indir ): raise RuntimeError( "FATAL ERROR: " + indir + \ " is not a directory or does not exist. ") - for file in os.listdir( indir ): - if file.endswith( ".json" ) or file.endswith( ".xml" ) or file.endswith( ".csv" ): - logger.info( 'Reading ' + indir + '/' + file + ' ... ' ) - try: - usgsobvs.append( USGS_Observation( \ - indir + '/' + file ) ) - except Exception as e: - logger.warning( repr( e ), exc_info=True ) - continue + for filename in os.listdir( indir ): + file = os.path.join(indir, filename) + if file.endswith( ".json" ): + #logger.info("\n\n") + logger.info(' Reading ' + file + ' ... ' ) + + usgsobv = USGS_Observation( file ) + + if usgsobv.timeValueQuality: + usgsobvs.append( usgsobv ) if not usgsobvs: raise EmptyDirOrFileException( "Input directory " + indir + \ diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/runTestUSGSTimeslice.sh b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/runTestUSGSTimeslice.sh index 2d9d28f..638cdf6 100755 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/runTestUSGSTimeslice.sh +++ b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/runTestUSGSTimeslice.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash ########################################################## -# Test usgs timeslise using xml or json format data file.# +# Test usgs timeslice using xml or json format data file.# # ./runTestUSGSTimeslice.sh # # # # 06/12/2024 CPham # diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/site-file.csv b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/site-file.csv deleted file mode 100755 index 125272d..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/site-file.csv +++ /dev/null @@ -1,324 +0,0 @@ -NIDID,Office,gage,gagedFlowl,NHDWaterbo,lakeLink,RFC,Reviewer,Status,Corrected_,Comments -CO01281,NWDM,CHFI.Flow-Out.Inst.1Hour.0.Best-NWO,188657,188031,188743,MBRFC,KMS, ,0,This is total Outflow -CO01280,NWDM,CHCR.Flow-Out.Inst.1Hour.0.Best-NWO,230705,229217,230705,MBRFC,KMS, ,0,There is a DA gage on the next downstream flowline -CA00265,SPK,SJR TUL-Tulloch-Stanislaus R.Flow-Res Out.Ave.~1Day.1Day.Calc-usbr,349887,347987,349887,CNRFC,SK, ,349887,Moved to lake outlet. Good lake assoc. -OK10313,SWT,HEYB.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,373089,371555,373089,ABRFC,MC, ,0, -OK10316,SWT,CANT.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,390140,389804,390140,ABRFC,MC, ,390140,Moved to lake outflow from interior flowline. DA gage two flowlines downstream -OK10311,SWT,TENK.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,402464,402142,402464,ABRFC,LKR, ,0,Tenkiller Lake -OK02504,SWT,THUN.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,482124,481656,482124,ABRFC,MC, ,0,DA gage two flowlines downstream -KY03027,LRL,Buckhorn.Flow-Outflow.Ave.1Hour.1Hour.lrldlb-comp,487134,486928,487986,OHRFC,GID 2, ,0, -OK10300,SWT,HUGO.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,592836,591880,592836,ABRFC,LKR, ,592836,Hugo Lake; link is inside WB. FlowlineID 592836 is the outlet link. -PCLO2,SWT,PINE.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,617464,617546,617698,ABRFC,LKR, ,0,Pine Creek Lake -OK10307,SWT,BROK.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,630139,630011,630371,ABRFC,MC, ,0, -OK02502,SWT,FCOB.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,683617,681831,683617,ABRFC,MC, ,0,DA gage one flowline downstream -KS00009,NWDM,PERY.Flow-Out.Ave.1Day.1Day.Best-NWK,747785,746373,748101,MBRFC,MC, ,0,co-located with a USGS DA 06890900 -OK10302,SWT,NEWT.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,833544,832544,833542,ABRFC,LKR, ,0,Newt Graham -OK20508,SWT,BIRC.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,846662,846266,846662,ABRFC,MC, ,0, -KY03029,LRH,Dewey-Outflow.Flow.Inst.1Hour.0.OBS,886789,885333,886789,OHRFC,GID 2, ,0, -CO00050,SPA,Trinidad-Trinidad DS.Flow.Inst.~1Hour.0.MRS,938210,936750,938210,ABRFC,LKR, ,938210,move to lake outlet; gaged flowline is directly downstream ; Trinidad Lake -CO00299,SPA,Pueblo.Flow.Inst.~1Hour.0.ResData,952539,950159,952539,ABRFC,LKR, ,952539,move to lake outlet link; current is interior -TX00020,MVK,Jferson_BigC_Bay.Flow.Inst.15Minutes.0.DCP-rev,1011780,1010832,1011780,LMRFC,KMS, ,0,Keeping gage this beacuse high temporal res outflow data (15 minutes vs JFNT2 1 hrs) -KY03028,LRH,Fishtrap-Outflow.Flow.Inst.1Hour.0.OBS,1089105,1086587,1089105,OHRFC,GID 2, ,0,Linked to interior flowline. -VA195001,LRH,NoFkPound-Outflow.Flow.Inst.1Hour.0.OBS,1089209,1086597,1089209,OHRFC,GID 2, ,0, -TX00015,SWF,TBLT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,1111449,1111211,1111447,WGRFC,MC, ,0,DA gage one flowline downstream -TX00021,SWF,TXKT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,1128563,1127701,1128669,LMRFC,KMS, ,0,There is a DA gage two flowlines downstream -TX00011,SWF,JSPT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,1159213,1158647,1159739,WGRFC,MC, ,0, -TX00003,SWF,BNBT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,1269108,1267968,1269108,WGRFC,MC, ,0,DA gage one flowline downstream -TX00007,SWF,LVNT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,1292396,1291638,1292396,WGRFC,KMS, ,0, -TX00699,SWF,BCAT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,1306447,1304859,1306447,WGRFC,MC, ,0, -CO01691,SPK,Paonia.Flow-Res Out.Ave.~1Day.1Day.Raw-USBRSLC;MANUAL,1338026,1336910,1338026,CBRFC,SK, ,0,There is a DA gage on the next downstream flowline -TX00001,SWF,BDWT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,1446926,1445978,1447048,WGRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 08063800 -MO12084,NWDM,SMIE.Flow-Out.Ave.1Day.1Day.Best-NWK,2530631,2529647,2530631,MBRFC,KMS, ,0,There is a DA gage 2 flowlines downstream -TX00002,SWF,BLNT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,2572334,2571688,2572334,WGRFC,MC, ,0,DA gage three flowlines downstream -PA00011,NAP,PromptonDS.Flow.Inst.1Hour.0.Rev-DCP,2739772,2739068,2739824,MARFC,MC, ,0,"Removed """"""""DSPRP."""""""" because there are very high negative values (-2147480957). redundant with DSPRP.Flow-Reg.Inst.1Hour.0.DCP-rev" -CA10186,SPK,SAC SHA-Shasta Dam-Sacramento R.Flow-Res Out.Ave.~1Day.1Day.Calc-usbr,2782699,2781987,7966205,CNRFC,SK, ,0, -MT00560,NWDM,HSMT.Flow.Inst.1Hour.0.Best-NWDM,3024846,3022162,3024850,MBRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 06065500 -MT00134,NWDM,HEBN.Flow-Out.Ave.1Day.1Day.Raw-USBR,3059980,3056866,3059980,MBRFC,MC, ,0,DA gage two flowlines downstream -OK02503,SWT,FOSS.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,678897,3140356,3142766,ABRFC,LKR, ,0,"gaged flowline below, link 678895." -CO01675,SPK,Blue Mesa.Flow-Res Out.Ave.~1Day.1Day.Raw-USBRSLC;MANUAL,3254269,3252975,3254269,CBRFC,KMS, ,0, -OH00008,LRH,DeerCr-Outflow.Flow.Inst.1Hour.0.OBS,3484055,3483493,3484527,OHRFC,GID 2, ,0, -TX00004,SWF,SMCT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,3589578,3588682,3589578,WGRFC,MC, ,0,DA gage two flowlines downstream -KS00026,NWDM,CLIN.Flow-Out.Ave.1Day.1Day.Best-NWK,24668460,3730511,24668460,MBRFC,MC, ,0,DA gage seven flowlines downstream -AR01200,SWL,Gillham_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,3745746,3745418,3746224,ABRFC,MC, ,0, -AR01202,SWL,Dierks_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,3745814,3745478,3746252,ABRFC,KMS, ,0,Redundant with Dierks_Saline_R. Dierks_Saline_R is not in the list. SK -AR01201,SWL,DeQueen_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,3745840,3745526,3746272,ABRFC,MC, ,0, -PA01939,LRP,LakeLynn-Outflow.Flow.Inst.1Hour.0.OBS,3773975,3773141,3773977,OHRFC,GID 2, ,0, -CA00173,SPK,SJR CMN-Camanche Res-Mokelumne R.Flow-Res Out.Ave.~1Day.1Day.MANUAL,3953573,3950979,3953573,CNRFC,MC, ,0, -WV09901,LRH,EastLynn-Outflow.Flow.Inst.1Hour.0.OBS,3964916,3964366,3964916,OHRFC,GID 2, ,0,Linked to interior flowline. -OH00028,LRL,CJBrown.Flow-Outflow.Ave.1Hour.1Hour.lrldlb-comp,3985570,3984810,3985570,OHRFC,GID 2, ,0, -KY03007,LRL,Green.Flow-Outflow.Inst.0.0.lrldlb-comp,4003242,3999688,4003242,OHRFC,GID 2, ,0, -KY03011,LRL,Nolin.Flow-Outflow.Inst.0.0.lrldlb-comp,4005074,4003290,4005074,OHRFC,KMS, ,0, -MN00581,MVP,Highway75_Dam-ServiceSpillway.Flow-Out.Inst.~1Day.0.CEMVP-Legacy,4086200,4083202,4085966,NCRFC,MC, ,0, -MN00579,MVP,MarshLake_Dam.Flow.Inst.1Hour.0.Fcst-CEMVP,4086016,4083248,4086000,NCRFC,MC, ,0, -TX00009,SWF,DAWT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,4133217,4132531,4133643,WGRFC,MC, ,0,DA gage one flowline downstream -MT00569,NWDM,CLCA.Flow-Out.Ave.1Day.1Day.Raw-USBR,4165978,4167440,4170578,MBRFC,KMS, ,0, -MT00905,NWDM,LRMT.Flow-Out.Ave.1Day.1Day.Raw-USBR,4169038,4167460,4170626,MBRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 06012500 -PA00008,NAP,WhiteHaven.Flow.Inst.1Hour.0.Rev-DCP,4186403,4185065,4186393,MARFC,MC, ,0,link is co-located with USGS DA gauge 01447800; name: Francis E. Walter Dam -PA00010,NAP,BeltzvilleDS.Flow.Inst.1Hour.0.Rev-DCP,4187341,4186689,4188143,MARFC,KS, ,0,"SK removed """"""""Beltzville.Flow"""""""" because it is computed flow. redundant with Beltzville.Flow-In.Inst.1Hour.0.Computed.link is co-located with USGS DA gauge 01449800" -WV06702,LRH,Summersville-Outflow.Flow.Inst.1Hour.0.OBS,4548090,4547794,4548090,OHRFC,GID 2, ,0, -MN00582,MVP,MissHW_PineRiver.Flow-Out.Inst.~1Day.0.CEMVP-Legacy,4622350,4620258,4622350,NCRFC,MC, ,0, -PA00003,NAB,Curwensville.Flow-Reg.Inst.1Hour.0.computed outflow,4675099,4672717,4675099,MARFC,KMS, ,0, -PA00921,NAP,BlueMarshDS.Flow.Inst.1Hour.0.Rev-DCP,4783213,4782813,4783457,MARFC,MC, ,0,Snapped to DA gage flowline. Gage ID 01470960 -MN00585,MVP,MissHW_Leech.Flow-Out.Inst.~1Day.0.CEMVP-Legacy,4819627,4817675,4819627,NCRFC,MC, ,0, -OH00017,LRH,PaintCr-Outflow.Flow.Inst.1Hour.0.OBS,5232686,5231436,5233352,OHRFC,GID 2, ,0, -TX00016 ,SWF,ACTT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,5523882,5531274,5531594,WGRFC,MC, ,0, -TX00013,SWF,SOMT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,5570841,5569731,5570785,WGRFC,MC, ,0,DA gage two flowlines downstream -TX08006,SWF,GGLT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,5671667,5670445,5671667,WGRFC,KMS, ,0,DA gage on next downstream flowline -TX00022,SWF,TBRT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,5702763,5702167,5702849,WGRFC,KMS, ,0, -TX00006,SWF,HORT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,5741918,5741244,5742086,WGRFC,MC, ,0, -KS00025,NWDM,WEBR.Flow-Out.Ave.1Day.1Day.Best-NWK,5954109,5943595,5945295,MBRFC,KMS, ,0, -OK10315,SWT,WIST.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,6048164,6043008,6047652,ABRFC,MC, ,0, -CT00506,NAE,CRD.Flow.Ave.15Minutes.6Hours.DCP-rev,6107093,6106841,6107211,NERFC,MC, ,0,DA gage four flowlines downstream -GA00821,SAM,Carters.Flow-Out.Ave.1Hour.1Hour.Raw-SCADA_SAM,6479573,6479321,6479573,SERFC,AM, ,0, -GA00824,SAM,Buford.Flow-Out.Inst.15Minutes.0.Raw-UR,2045337,6495106,2051313,SERFC,MC, ,0,Snapped to DA gage flowline. Gage ID 02334430 -GA03742,SAM,Allatoona.Flow-Out.Inst.15Minutes.0.Raw-UR,6499244,6495140,6505972,SERFC,AM, ,0, -IA00017,MVR,SAYI4.Flow-Out.Inst.30Minutes.0.rev,6597700,6597410,6597700,NCRFC,MC / KMS, ,6597700,Moved to lake outlet (KMS). Correct lake association. DA gage nine flowlines downstream -MN00576,MVP,TraverseWR_Dam.Flow-Out.Inst.15Minutes.0.rev-working,909020730,6639922,6641256,NCRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 05050000 -MN00574,MVP,Orwell_Dam.Flow-Out.Inst.15Minutes.0.rev,909020763,6657709,909020763,NCRFC,MC, ,0,There is a DA gage on the next downstream flowline -WV08902,LRH,Bluestone-Outflow.Flow.Inst.1Hour.0.OBS,6906513,6906421,6906513,OHRFC,GID 2, ,0,Linked to interior flowline. -WV10924,LRH,RDBailey-Outflow.Flow.Inst.1Hour.0.OBS,6935786,6933708,6935752,OHRFC,GID 2, ,0, -KS00013,NWDM,WILN.Flow-Out.Ave.1Day.1Day.Best-NWK,7331754,7330556,7331754,MBRFC,KMS, ,0,There is a DA gage on the next downstream flowline -KS00022,NWDM,KIRN.Flow-Out.Ave.1Day.1Day.Best-NWK,7347909,7344817,7347909,MBRFC,KMS, ,7347909,Moved to lake outlet -MO30201,NWDM,PODT.Flow-Out.Ave.1Day.1Day.Best-NWK,7387495,7387259,7388811,MBRFC,KMS, ,0,There is a DA gage on the next downstream flowline -MO30203,SWL,Clearwater_Dam.Flow-Res Out.Ave.1Hour.1Hour.Regi-Comp,7669162,7666880,7669104,LMRFC,KMS, ,0,This A2W record represents outflow. Another two flowlines up represents tailwater -AR00162,SWL,Dardanelle.Flow.Inst.1Hour.0.CCP-Comp,7790194,7767759,7771859,ABRFC,KMS, ,0,Removed redundant point (LD10 Dardanelle) -AR00157,SWL,Blue_Mtn_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,7803225,7801259,7803225,ABRFC,MC, ,0, -AR00158,SWL,Nimrod_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,7830220,7827790,7830220,ABRFC,MC, ,0, -CA10102,SPK,BLB BLB-Black Butte Lake-Stony Cr.Flow-Res Out.Ave.1Hour.1Hour.Calc-val,12074514,7989989,7992981,CNRFC,SK / KMS, ,12074514,"This represents total lake outflow. Redundant with """"""""BLB BLB-North Diversion-Stony"""""""". KMS" -CA01107,SPK,SAC INV-Indian Valley-NF Cache Cr.Flow-Res Out.Ave.~1Day.1Day.MANUAL,8007863,8005383,8007863,CNRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 11451300 -CA00863,SPK,SAC BUL-Bullards Bar Res-Yuba R.Flow-Res Out.Ave.~1Day.1Day.Calc-cdec,8060745,8060079,8062451,CNRFC,SK, ,0, -CA10303,SPK,WRS WRS-Lake Sanoma-Russian.Flow-Res Out.Ave.1Hour.1Hour.Calc-val,8276453,8271433,8276453,CNRFC,SK, ,8276453,Moved to lake outlet. Good lake assoc. -LA00180,MVK,Wallace Lake.Flow.Inst.1Hour.0.DCP-rev,8342721,8341399,8342801,LMRFC,KMS, ,0, -TX04359,SWT,PATM.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,8348337,8347705,8348979,ABRFC,MC, ,0,DA gage two flowlines downstream -OK22203,SWT,WAUR.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,8358571,8357843,8358571,ABRFC,KMS, ,0, -VA089001,SAW,ROA PLP.Flow-Out.Inst.1Hour.0.DSS,8675539,8674019,8675539,SERFC,AM, ,0, -CA10179,SPK,TRK PRS-Prosser-Prosser Cr.Flow-Res Out.Ave.~1Day.1Day.MANUAL,8933720,8932974,8934488,CNRFC,SK, ,0, -NC00300,SAW,YAD WKS.Flow-Out.Inst.1Hour.0.DSS,9251746,9250140,9251746,SERFC,AM, ,0, -NY01055,NAB,Whitney Point.Flow-Reg.Inst.1Hour.0.computed outflow OLD,9423843,9422503,9424107,MARFC,KMS, ,0, -UT10125,SPK,Lost Creek.Flow-Res Out.Ave.~1Day.1Day.Raw-USBRSLC;MANUAL,10090806,10089124,10090806,CBRFC,SK, ,0,There is a DA gage on the next downstream flowline -UT10120,SPK,Echo.Flow-Res Out.Ave.~1Day.1Day.Raw-USBRSLC;MANUAL,10093132,10091588,10093132,CBRFC,SK, ,0,There is a DA gage on the next downstream flowline -UT10131,SPK,Rockport.Flow-Res Out.Ave.~1Day.1Day.Raw-USBRSLC;MANUAL,10093168,10091800,10093168,CBRFC,SK, ,0,There is a DA gage on the next downstream flowline -KS00010,NWDM,POMA.Flow-Out.Ave.1Day.1Day.Best-NWK,10116002,10114004,940290180,MBRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 06912500 -TN15901,LRN,COHT1-CORDELL_HULL.Flow.Ave.1Hour.1Hour.man-rev,10177405,10175533,10177367,OHRFC,KMS, ,0, -IN03003,LRL,CMHarden.Flow-Outflow.Inst.0.0.lrldlb-comp,10209503,10208007,10210097,OHRFC,GID 2, ,0, -KY00051,LRL,Taylorsville.Flow-Outflow.Inst.0.0.lrldlb-comp,10264636,10263686,10264636,OHRFC,GID 2, ,0, -UT10132,SPK,Pineview.Flow-Res Out.Ave.~1Day.1Day.Raw-USBRSLC;MANUAL,10275998,10273702,10275998,CBRFC,SK, ,10275998,Moved to lake outlet. Good lake assoc. -UT10119,SPK,East Canyon.Flow-Res Out.Ave.~1Day.1Day.Raw-USBRSLC;MANUAL,10277316,10276260,10277316,CBRFC,SK, ,0,There is a DA gage on the next downstream flowline -FL00435,SAM,JimWoodruff.Flow-Out.Inst.15Minutes.0.Raw-UR,2293124,10361596,2311949,SERFC,MC, ,0,Snapped to DA gage flowline. Gage ID 02358000 -WY01380,NWDM,KEYO.Flow-Out.Ave.1Day.1Day.Raw-USBR,10906553,10904095,10906421,MBRFC,KMS, ,0, -PA00273,LRP,Portersville.Flow.Inst.1Hour.0.OBS,10926383,10925571,10926455,OHRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 03106300 -SD01092,NWDM,BEND.Flow-Out.Ave.~1Day.1Day.Best-MRBWM,11546856,11546100,11546856,MBRFC,KMS, ,11546856,Moved to lake outlet. Correct lake association. -KY03012,LRL,Rough.Flow-Outflow.Inst.0.0.lrldlb-comp,11621250,11620502,11621434,OHRFC,KMS, ,0, -CO01300,NWDM,BONY.Flow-Out.Ave.1Day.1Day.Best-NWK,11699250,11699074,11700174,MBRFC,KMS, ,0, -SC00706,SAS,Keowee.Flow.Ave.1Hour.1Hour.Rev-SHEF_SAS,11749087,11748535,11749981,SERFC,AM, ,0, -SD01094,NWDM,GAPT.Flow-Out.Ave.~1Day.1Day.Best-MRBWM,11761568,11758154,11761566,MBRFC,KMS, ,0,Removed duplicates -UT10136,SPK,Starvation.Flow-Res Out.Ave.~1Day.1Day.Raw-USBRSLC;MANUAL,11966427,11965847,11967775,CBRFC,SK, ,0, -CA00035,SPK,SAC ORO-Oroville Dam-Feather R.Flow-Res Out.Ave.~1Day.1Day.MANUAL,2778598,12076080,2778598,CNRFC,KMS, ,0,This is the reservoir outflow. I eliminated the other record. -MT00571,NWDM,GDMT.Flow-Out.Ave.1Day.1Day.Raw-USBR,12395588,12394600,12395588,MBRFC,KMS, ,0, -WY01300,NWDM,BUBI.Flow-Out.Ave.1Day.1Day.Raw-USBR,4425887,12793741,12794325,MBRFC,KMS, ,0, -WY01299,NWDM,BOYN.Flow-Out.Ave.1Day.1Day.Raw-USBR,12870023,12869679,12871081,MBRFC,SK, ,0,"SK removed """"""""BYWY.Flow."""""""" because no outflow data. Redundant lake iwth BYWY.Flow.Inst.1Hour.0.Best-NWDM" -WY01378,NWDM,BULA.Flow-Out.Ave.1Day.1Day.Raw-USBR,12901134,12898716,12901134,MBRFC,KMS, ,0, -TX04358,SWT,KEMP.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,13732942,13732800,13733430,ABRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 07312100 -OK02500,SWT,ALTU.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,13757101,13756271,13757101,ABRFC,MC, ,0,DA gage one flowline downstream -MD00014,NAB,Savage.Flow-Reg.Inst.1Hour.0.computed outflow,14364126,14363834,14364126,MARFC,KMS, ,0,There is a DA gage on the next downstream flowline -CA10113,SPK,SCC SCC-Success Lake-Tule.Flow-Res Out.Inst.1Hour.0.Calc-val,17159700,14930103,14931007,CNRFC,SK, ,0, -AR00150,MVK,Blakely.Flow.Inst.1Day.0.Manual,15234446,15231972,15234506,LMRFC,KMS, ,0, -AR00535,MVK,Remmel Dam.Flow.Inst.15Minutes.0.DCP-rev,15237620,15237526,15237620,LMRFC,KMS, ,0,There is a DA gage on the next downstream flowline -MS01496,MVK,Arkabutla Lake.Flow.Inst.1Hour.0.Total Gate Flow,15256580,15252778,15256386,LMRFC,KMS, ,0,Removed redundant gages -OH00002,LRH,WillsCr-Outflow.Flow.Inst.1Hour.0.OBS,15371872,15370770,15371872,OHRFC,GID 2, ,0, -OH00020,LRH,CharlesMill-Outflow.Flow.Inst.1Hour.0.OBS,15410097,15408897,15411519,OHRFC,GID 2, ,0, -OH00001,LRH,PleasantHill-Outflow.Flow.Inst.1Hour.0.OBS,15411575,15408959,15411575,OHRFC,GID 2, ,0, -OH00018,LRH,TomJenkins-Outflow.Flow.Inst.1Hour.0.OBS,15419085,15417757,15419565,OHRFC,GID 2, ,0, -WY01295,NWDM,PATR.Flow-Out.Ave.1Day.1Day.Raw-USBR,15976270,15975492,15976270,MBRFC,KMS, ,0, -ND00148,NWDM,DIND.Flow-Out.Ave.1Day.1Day.Raw-USBR,940130592,16235047,16237447,MBRFC,MC, ,0, -CA10167,SPK,SJR LBN-Los Banos-Los Banos Cr.Flow-Res Out.Ave.~1Day.1Day.MANUAL,16604219,16603633,16610547,CNRFC,SK, ,948040343, -CO01688,SPK,Lemon.Flow-Res Out.Ave.~1Day.1Day.Raw-USBRSLC;MANUAL,17014767,17014523,17015277,CBRFC,KMS, ,0, -CO01695,SPK,Vallecito.Flow-Res Out.Ave.~1Day.1Day.Raw-USBRSLC;MANUAL,17034231,17034145,17034971,CBRFC,MC, ,0, -CA10109,SPK,NHG NHG-New Hogan Lake-Calaveras.Flow-Res Out.Inst.1Hour.0.Calc-val,17067086,17065952,17068300,CNRFC,SK, ,0, -CA00281,SPK,SJR DNP-Don Pedro Res-Tuolumne R.Flow-Res Out.Ave.~1Day.1Day.MANUAL,17080371,17080041,17080371,CNRFC,SK, ,17080371,Moved to lake outlet. Good lake assoc. -NE01518,NWDM,PA11.Flow-Out.Ave.1Hour.6Hours.Best-NWO,17217954,17216840,17217954,MBRFC,KMS, ,17217954,Moved down to lake outlet. Correct lake association. -NE01063,NWDM,SC18.Flow-Out.Ave.~1Day.1Day.Best-NWO,17405437,17404931,17405909,MBRFC,KMS, ,0, -NE01057,NWDM,SC14.Flow-Out.Ave.~1Day.1Day.Best-NWO,17405923,17404975,17405923,MBRFC,KMS, ,0, -IA00012,MVR,CRVI4.Flow-Out.Inst.30Minutes.0.rev,17540805,17539821,17540805,NCRFC,MC, ,0,DA gage is two flowlines downstream -NM00404,SPA,Cochiti.Flow.Inst.~1Hour.0.MRS,17834674,17833136,17834674,WGRFC,MC, ,0,DA gage two flowlines downstream -NM00001,SPA,Abiquiu-Abiquiu DS.Flow.Inst.~1Hour.0.MRS,17848800,17845306,17848996,WGRFC,MC, ,0,DA gage one flowline downstream -CO01671,SPA,Platoro.Flow.Inst.~1Hour.0.ResData,17876153,17875083,17876241,WGRFC,MC, ,0, -MS01494,MVK,Grenada Lake.Flow.Inst.1Hour.0.Total Gate Flow,18019788,18014672,18019788,LMRFC,KMS, ,0, -TN03722,LRN,OHIT1-OLD_HICKORY.Flow.Ave.1Hour.1Hour.man-rev,18415989,18415569,18416017,OHRFC,GID 2, ,0,Duplicate gage removed by SK. Duplicate gages near each other (OHHT1-OLD_HICKORY) -IN03002,LRL,CaglesMill.Flow-Outflow.Inst.0.0.lrldlb-comp,18465682,18465136,18465682,OHRFC,GID 2, ,0, -IN03005,LRL,Salamonie.Flow-Outflow.Inst.0.0.lrldlb-comp,18505918,18505514,18505918,OHRFC,GID 2, ,0, -KS00012,NWDM,TUCR.Flow-Out.Ave.1Day.1Day.Best-NWK,24646277,18880944,2281171,MBRFC,KMS, ,0,There is a DA gage 3 flowlines downstream -KS00019,NWDM,CEBL.Flow-Out.Ave.1Day.1Day.Best-NWK,18951675,18950909,18951675,MBRFC,KMS, ,0, -KS00023,NWDM,LOVL.Flow-Out.Ave.1Day.1Day.Best-NWK,19017185,19016317,19017757,MBRFC,KMS, ,0, -NE01066,NWDM,HACO.Flow-Out.Ave.1Day.1Day.Best-NWK,19043517,19040443,19043517,MBRFC,MC, ,0, -NE01073,NWDM,MECR.Flow-Out.Ave.1Day.1Day.Best-NWK,19063672,19063074,19063672,MBRFC,KMS, ,0, -NE01076,NWDM,REWI.Flow-Out.Ave.1Day.1Day.Best-NWK,19070261,19069455,19070261,MBRFC,KMS, ,19070261,Re-snapped to lake outlet flowline -NE01070,NWDM,ENDS.Flow-Out.Ave.1Day.1Day.Best-NWK,19081483,19080361,19081483,MBRFC,KMS, ,0, -NE01078,NWDM,TREN.Flow-Out.Ave.1Day.1Day.Best-NWK,19093175,19091673,19093175,MBRFC,KMS, ,0, -WV00701,LRH,Sutton-Outflow.Flow.Inst.1Hour.0.OBS,19322231,19322053,19322229,OHRFC,GID 2, ,0, -OH00010,LRH,Tappan-Lake.Flow.Inst.1Hour.0.OBS,19392734,19390686,19392734,OHRFC,GID 2, ,0, -OH00012,LRH,Clendening-Outflow.Flow.Inst.1Hour.0.OBS,19392806,19390726,19392806,OHRFC,GID 2, ,0, -TX00023,SWT,MERE.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,19981020,19980072,19981020,ABRFC,MC, ,19981020,Moved to lake outflow from interior flowline. Correct lake association -NM00006,SPA,Conchas.Flow.Inst.~1Hour.0.MRS,20031197,20052547,20052833,ABRFC,LKR, ,0,"Conchas Lake, Lake outlet link is 20052833" -KS00027,SWT,ELDR.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,20082038,20079044,20082038,ABRFC,MC, ,0, -CA10148,SPK,SAC FOL-Folsom Lake-American R.Flow-Reservoir Outflow.Inst.1Hour.0.CDEC-confidential-raw,15022453,20194524,15025029,CNRFC,SK, ,0, -AZ10308,SPL,Bartlett DS-Verde R.Flow.Inst.15Minutes.0.GOES-rev,20439512,20438850,20440790,CBRFC,MC, ,0, -NV10002,SPL,Mathews Cnyn DS-Mathews Cnyn W.Flow.Inst.15Minutes.0.GOES-rev,20603438,20603248,20603440,CBRFC,SK, ,0, -NV10001,SPL,Pine Cnyn DS-Pine Cnyn W.Flow.Inst.15Minutes.0.GOES-rev,20600566,20603252,20603436,CBRFC,SK, ,0, -NM00130,SPA,Sumner.Flow.Inst.~1Hour.0.ResData,20818460,20818104,20818460,WGRFC,MC, ,0,DA gage one flowline downstream -KS00006,SWT,MARI.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,20919169,20917521,20919169,ABRFC,LKR, ,0,gaged flowline below -KS00002,SWT,ELKC.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,20943898,20943110,20943984,ABRFC,KMS, ,0, -KS00011,SWT,TORO.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,20955434,20953830,20955434,ABRFC,MC, ,0, -OK10309,SWT,KEYS.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,369129,20971700,20973380,ABRFC,MC, ,0, -OK10319,SWT,GSAL.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,21001215,21000069,21001215,ABRFC,MC, ,0, -OK20509,SWT,KAWL.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,21038211,21038107,21038211,ABRFC,KMS, ,21038211,Moved to lake outlet -KS00017,SWT,CHEN.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,21160795,21160241,21161233,ABRFC,MC, ,0,redundant with CHE2.Flow.Inst.1Hour.0.Ccp-Rev -AZ10436,SPL,Coolidge DS-Gila R.Flow.Inst.15Minutes.0.GOES-rev,21274156,21318615,21320525,CBRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 09469500 -AZ10315,SPL,Laguna DS-Colorado R.Flow.Inst.15Minutes.0.GOES-rev,21412675,21411435,21412649,CBRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 09429600 -KS00003,SWT,FALL.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,21517708,21514748,21517708,ABRFC,MC, ,0, -CA00240,SPK,SJR EXC-New Exchequer-Merced R.Flow-Res Out.Ave.~1Day.1Day.MANUAL,21608661,21606665,21608661,CNRFC,SK, ,0,Moved to lake outlet. Good lake assoc. -OK00134,SWT,HUDS.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,21773255,21772239,21773125,ABRFC,LKR, ,0,gaged flowline below -OK21489,SWT,COPA.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,21784744,21783714,21784744,ABRFC,LKR, ,0, -OK10312,SWT,HULA.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,21785290,21784832,21785290,ABRFC,LKR, ,0,Hulah Lake -KS00049,SWT,BIGH.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,21797549,21795481,21797721,ABRFC,KMS, ,0, -ND00147,NWDM,BOHA.Flow-Out.Ave.~1Day.1Day.Best-NWO,21850337,21849419,21850337,MBRFC,KMS, ,0, -SD01141,NWDM,SHHI.Flow-Out.Ave.~1Day.1Day.Best-NWO,16188778,21861936,16188778,MBRFC,MC, ,0, -CA10112,SPK,PNF PNF-Pine Flat Lake-Kings.Flow-Res Out.Inst.1Hour.0.Calc-val,22063199,22050039,22063199,CNRFC,SK / KMS, ,0,Moved to lake outlet. Good lake assoc. -WY01290,NWDM,ALCR.Flow-Out.Ave.1Day.1Day.Raw-USBR,22106341,22103649,22107769,MBRFC,KMS, ,0, -AR00172,SWL,LD06-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,25239921,22845449,25239921,ABRFC,MC, ,25239921,Moved to lake outflow from interior flowline -MT00652,NWDP,LIB.Flow-Out.Ave.1Hour.1Hour.CBT-REV,22878297,22886855,22878297,NWRFC,AM, ,0,DA gage two flowlines downstream -MT00565,NWDP,HGH.Flow-Out.Ave.1Hour.1Hour.CBT-REV,22965002,22971534,22965004,NWRFC,AM, ,0, -ID00222,NWDP,CAB.Flow-Out.Ave.~1Day.1Day.CBT-REV,22975982,22983738,25073152,NWRFC,AM, ,0,DA gage one flowlines downstream -MT00223,NWDP,NOX.Flow-Out.Ave.~1Day.1Day.CBT-REV,22976070,22983840,22976094,NWRFC,AM, ,0, -WA00004,NWDP,CHL.Flow-Out.Ave.1Hour.1Hour.CBT-REV,23073739,23077959,23073871,NWRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 12452500 -WY01385,NWDP,JCK.Flow-Out.Ave.~1Day.1Day.USBR-COMPUTED-REV,23123437,23127757,23123437,NWRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 13011000 -ID00287,NWDP,DWR.Flow-Out.Ave.~6Hours.6Hours.CBT-COMPUTED-REV,23630892,23634782,23630892,NWRFC,AM /LKR, ,0,This is the main outflow record; There are many gages here; LKR - none of the other A2W locations in the area are in this Excel list. There are 2 A2W sites together. -OR00381,NWDP,CREO.Flow.Ave.~1Day.1Day.USBR-RAW,23706308,23707652,23706312,NWRFC,MC, ,0, -OR00098,NWDP,OCH.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23713984,23717064,23713984,NWRFC,AM, ,0, -OR00007,NWDP,FAL.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23752600,23756162,23752600,NWRFC,AM, ,0,DA gage one flowlines downstream -OR00006,NWDP,DEX.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23751844,23756168,23751844,NWRFC,AM, ,0, -OR00009,NWDP,LOP.Flow-Out.Ave.1Hour.1Hour.CBT-REV,23751850,23756172,23751852,NWRFC,AM, ,0, -OR00014,NWDP,HCR.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23751946,23756364,23751946,NWRFC,AM, ,0, -OR00008,NWDP,DOR.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23759588,23761332,23759588,NWRFC,AM, ,0, -OR00005,NWDP,COT.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23759310,23761342,23759312,NWRFC,AM, ,0, -OR00016,NWDP,FRN.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23763141,23769069,23763141,NWRFC,AM, ,0, -OR00013,NWDP,BLU.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23773407,23777375,23773407,NWRFC,KMS, ,23773407,Moved to lake outlet. DA gage on next downstream flowline -OR00015,NWDP,CGR.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23773011,23777431,23773011,NWRFC,AM, ,0,DA gage one flowlines downstream -OR00004,NWDP,DET.Flow-Out.Ave.1Hour.1Hour.CBT-REV,23780525,23783629,23780525,NWRFC,AM, ,0, -OR00010,NWDP,GPR.Flow-Out.Ave.1Hour.1Hour.CBT-REV,23785923,23788951,23785925,NWRFC,AM, ,0, -OR00012,NWDP,FOS.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23785767,23788981,23785769,NWRFC,AM, ,0,DA gage two flowlines downstream -OR10020,NWDP,SCO.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23805106,23807386,23805110,NWRFC,AM, ,0, -WA00302,NWDP,WYN.Flow-Out.Ave.1Hour.1Hour.CENWS-COMPUTED-RAW,23856921,23859017,23856923,NWRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 12035400 -OR00612,NWDP,LOS.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23923436,23927716,23923436,NWRFC,AM, ,0, -OR00624,NWDP,APP.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,23936035,23938563,23936037,NWRFC,AM, ,0, -WA00260,NWDP,KAC.Flow-Out.Ave.~1Day.1Day.USBR-RAW,24126099,24136753,24126101,NWRFC,AM, ,0, -WA00274,NWDP,CLE.Flow-Out.Ave.~1Day.1Day.USBR-RAW,24125829,24136807,24125831,NWRFC,AM, ,0, -OR00578,NWDP,BULO.Flow.Ave.~1Day.1Day.USBR-RAW,24150401,24152927,24150401,NWRFC,AM, ,24150401,Linked to interior flowline. Changed to lake outflow -OR00592,NWDP,THFO.Flow.Inst.15Minutes.0.OWRD-RAW,24208009,24215369,24208611,NWRFC,AM, ,0, -OR00577,NWDP,PHL.Flow-Out.Ave.~1Day.1Day.USBR-RAW,24208367,24215523,24208369,NWRFC,AM, ,0, -WA00169,NWDP,ROS.Flow-Loc.Ave.1Hour.1Hour.SCL-RAW,24255291,24260289,24255291,NWRFC,AM, ,24255291,Linked to interior flowline. Changed to lake outflow -WA00173,NWDP,UBK.Flow-Out.Inst.1Hour.0.PSE-RAW,24255913,24260671,24255915,NWRFC,AM, ,24255915,Linked to inflow flowline to downstream lake. Changed to lake outflow -WA00170,NWDP,DIA.Flow-Out.Ave.~1Day.1Day.CBT-REV,24255201,24260717,24255205,NWRFC,AM, ,0, -WA00172,NWDP,SHA.Flow-Out.Inst.1Hour.0.PSE-RAW,24255877,24260837,25184464,NWRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 12193400 -WA00263,NWDP,BUM.Flow-Out.Ave.~1Day.1Day.USBR-RAW,24423025,24428511,24423025,NWRFC,AM, ,0, -WA00273,NWDP,RIM.Flow-Out.Ave.~1Day.1Day.USBR-RAW,24423307,24428693,24423307,NWRFC,AM, ,0, -OR00579,NWDP,PRV.Flow-Out.Inst.0.0.MIXED-COMPUTED-REV,24515510,24518496,24515510,NWRFC,AM, ,0, -WA00256,NWDP,MOR.Flow-Out-Total.Ave.1Hour.1Hour.SCL-RAW,24537960,24539838,24537962,NWRFC,AM, ,0, -WV00707,LRH,Burnsville-Outflow.Flow.Inst.1Hour.0.OBS,19417491,76669453,19417491,OHRFC,GID 2, ,0, -CA10246,SPK,SJR NWM-New Melones Res-Stanislaus R.Flow-Res Out.Ave.~1Day.1Day.Calc-usbr,349829,120051899,349829,CNRFC,KMS, ,0, -MN00594,MVP,LockDam_02.Flow.Inst.15Minutes.0.comp,1101436,120051919,1101436,NCRFC,MC, ,0,DA gage is three flowlines downstream -TX00005,SWF,GPVT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,1287057,120051934,1287177,WGRFC,MC, ,0,DA gage three flowlines downstream -MT00559,NWDM,HOLM.Flow.Inst.1Hour.0.Best-NWDM,3021998,120051950,3022000,MBRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 06066500 -AR00159,SWL,Norfork_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,7653861,120052259,7653895,LMRFC,KMS, ,0, -AR00164,SWL,LD12_Ozark-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,7754500,120052270,7754492,ABRFC,MC, ,0, -KY03009,LRL,Barren.Flow-Outflow.Inst.0.0.lrldlb-comp,4036902,120052316,4037084,OHRFC,KMS, ,0, -KY05017,LRN,KYDK2-KENTUCKY.Flow.Ave.1Hour.1Hour.tva-raw,10575371,120052349,10575371,LMRFC,KMS, ,0, -ND00332,MVP,LakeDarling.Flow-Out.Inst.15Minutes.0.comp,14049291,120052509,14049291,NCRFC,MC, ,14049291,Moved to lake outlet. Correct lake association. -CA10114,SPK,TRM TRM-Lake Kaweah-Kaweah.Flow-Res Out.Ave.1Hour.1Hour.Calc-val,24758173,120052624,24758173,CNRFC,SK, ,14922787,Moved to lake outlet. Good lake assoc. -TN03701,LRN,JPPT1-J_PERCY_PRIEST.Flow.Ave.1Hour.1Hour.man-rev,18401827,120052688,18401827,OHRFC,GID 2, ,18401827,Redundant gage removed by SK. Redundant gages with JHPHT1-J_PERCY_PRIEST -KY03030,LRH,Grayson-Outflow.Flow.Inst.1Hour.0.OBS,1936384,120052749,1936720,OHRFC,MC, ,0, -AZ10312,SPL,Parker DS-Colorado R.Flow.Inst.15Minutes.0.GOES-rev,9998136,120052758,21439479,CBRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 09427520 -KS00021,NWDM,GLEL.Flow-Out.Ave.1Day.1Day.Best-NWK,3537261,120052972,3537261,MBRFC,KMS, ,3537261,Moved to lake outlet. There is a DA gage 2 flowlines downstream -ND00309,MVP,Baldhill_Dam.Flow-Out.Inst.15Minutes.0.rev,26873869,120052979,14270822,NCRFC,MC, ,0,DA gage is one flowline downstream -TX00008,SWF,LEWT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,1278690,120053021,1278674,WGRFC,MC, ,0,DA gage three flowlines downstream -TX00010,SWF,PCTT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,2569756,120053201,2569848,WGRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 08099500 -TX00017,SWF,WTYT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,5513700,120053204,5513692,WGRFC,MC, ,0,DA gage four flowlines downstream -PREW3,MVP,PREW3.Flow.Inst.15Minutes.0.comp,2651896,120053219,2651896,NCRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 05344490 -IA00016,NWDM,RATN.Flow-Out.Ave.1Day.1Day.Best-NWK,940280012,120053324,940280011,MBRFC,KMS, ,0,There is a DA gage on the next downstream flowline -TX00014,SWF,STIT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,5587560,120053388,5587560,WGRFC,KMS, ,0,There is a DA gage on the next downstream flowline -TX01087,SWF,MSDT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,5781955,120053393,5781955,WGRFC,MC, ,5781955,Moved to lake outlet from interior flowline -PA00005,NAB,Sayers.Flow-Reg.Inst.1Hour.0.computed outflow,8139718,120053440,8139718,MARFC,KMS, ,0,There is a DA gage on the next downstream flowline -VA005001,NAO,Gathright DS.Flow.Inst.0.0.DCP-rev,8521381,120053459,8523459,MARFC,MC, ,0,Snapped to DA gage flowline. Gage ID 02011800 -CA10192,SPK,TRK STP-Stampede-Little Truckee R.Flow-Res Out.Ave.~1Day.1Day.MANUAL,8933230,120053476,8934442,CNRFC,SK, ,0,Moved to lake outlet. Good lake assoc. -ND00146,NWDM,PIST.Flow-Out.Ave.~1Day.1Day.Best-NWO,11505172,120053541,11505172,MBRFC,KMS, ,0, -SD01093,NWDM,FTRA.Flow-Out.Ave.~1Day.1Day.Best-MRBWM,11550820,120053557,11550820,MBRFC,KMS, ,11550820,Moved to lake outlet. Correct lake association. -SC00529,SAS,Jocassee.Flow.Ave.1Hour.1Hour.Rev-SHEF_SAS,11748743,120053566,11749815,SERFC,KMS, ,0, -MO30202,SWL,Table_Rock_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,7625336,120053569,8586112,LMRFC,KMS, ,0, -ND00151,NWDM,JATO.Flow-Out.Ave.~1Day.1Day.Best-NWO,12577680,120053643,12577680,MBRFC,KMS, ,0, -CA10154,SPK,SJR MIL-Friant Dam-San Joaquin R.Flow-Res Out.Ave.~1Day.1Day.Calc-usbr,17116483,120053836,17116483,CNRFC,SK, ,0,There is a DA gage on the 6th downstream flowline -ID00288,NWDP,LUC.Flow-Out.Ave.~1Day.1Day.USBR-RAW,23382135,120053990,23382135,NWRFC,AM, ,0, -ID00283,NWDP,CSCI.Flow.Ave.~1Day.1Day.USBR-COMPUTED-REV,24177101,120054056,24177561,NWRFC,KMS, ,0, -CO02677,NWDM,SMCL.Flow.Inst.1Hour.0.Raw-NWDM-Backup,5241186,127819344,940190123,MBRFC,KMS, ,0, -NH00003,NAE,FFD.Flow.Inst.15Minutes.0.DCP-rev,166174264,166174267,166174264,NERFC,MC, ,166174264,Linked to interior flowline. Changed to lake outflow -TX06194,SWF,ALAT2.Flow-Out.Inst.1Hour.0.Rev-SWF-REGI,166414852,166414857,166414852,WGRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 08093360 -NC01713,SAW,NEU FLP.Flow-Out.Inst.1Hour.0.DSS,166737579,166737717,166737584,SERFC,MC, ,0,Snapped to DA gage flowline. Gage ID 02087183 -NC00173,SAW,CFR BEJ.Flow-Out.Inst.1Hour.0.DSS,26325148,166755060,8898132,SERFC,AM, ,0,"DA Gage on next downstream link. Not marked as inflow or outflow, so questionable" -GA00820,SAM,WestPoint.Flow-Out.Inst.15Minutes.0.Rev-CCP,3298918,166758703,3298566,SERFC,AM, ,0, -AL01432,SAM,WalterFGeorge.Flow-Out.Ave.1Hour.1Hour.Raw-SCADA_SAM,3443790,166758723,3443790,SERFC,AM, ,0,DA gage one flowline downstream -AL01420,SAM,Smith.Flow-Out.Inst.1Hour.0.Raw-APCO,18581863,166759211,18584047,SERFC,AM, ,0, -AL01426,SAM,Holt.Flow-Out.Inst.1Hour.0.Raw-APCO,18232675,166759236,18232675,SERFC,AM, ,0, -MS01491,SAM,Okatibbee-Spillway.Flow-Discharge.Inst.15Minutes.0.Raw-CCP,18193961,166759324,18195393,LMRFC,KMS, ,0, -GA01702,SAS,Hartwell.Flow-Out.Ave.1Hour.1Hour.Raw-SCADA_SAS,11737635,166759840,6270218,SERFC,KMS, ,0, -KY03055,LRL,CaveRun.Flow-Outflow.Inst.0.0.lrldlb-comp,2091969,166830448,2091969,OHRFC,GID 2, ,0, -OH00007,LRH,Dillon-Outflow.Flow.Inst.1Hour.0.OBS,15365719,166899180,15365765,OHRFC,GID 2, ,0, -IN03017,LRL,Brookville.Flow-Outflow.Ave.1Hour.1Hour.lrldlb-comp,3925161,166899200,3925161,OHRFC,GID 2, ,0, -OH00929,LRL,WHHarsha.Flow-Outflow.Inst.0.0.lrldlb-comp,3936190,166899203,3936190,OHRFC,GID 2, ,0,Linked to interior flowline. -OH00927,LRL,CaesarCreek.Flow-Outflow.Inst.0.0.lrldlb-comp,3935906,166899204,3935906,OHRFC,GID 2, ,3935906, -IN03001,LRL,Monroe.Flow-Outflow.Inst.0.0.lrldlb-comp,18444024,166899251,18447480,OHRFC,GID 2, ,0, -KY03046,LRN,LAPK2-LAUREL.Flow.Ave.1Hour.1Hour.man-rev,10190256,166899298,10191966,OHRFC,GID 2, ,0, -KY03010,LRN,RWNK2-WOLF_CREEK.Flow.Ave.1Hour.1Hour.man-rev,3577500,166899300,3577512,OHRFC,KMS, ,0,Redundant gage removed by SK. Redundant with WLCK2-WOLF_Creek -TN02702,LRN,DLHT1-DALE_HOLLOW.Flow.Ave.1Hour.1Hour.man-rev,10184623,166899333,10184625,OHRFC,GID 2, ,0, -KY03001,LRN,BARK2-BARKLEY.Flow.Ave.1Hour.1Hour.man-rev,11878940,166899385,11878948,LMRFC,KMS, ,0,Redundant with another gage just upstream (BAHK2) -MN00583,MVP,MissHW_Sandy.Flow-Out.Inst.~1Day.0.CEMVP-Legacy,4841534,167120397,4841848,NCRFC,MC, ,0, -IA00013,MVR,PELI4.Flow-Out.Inst.30Minutes.0.rev,4995175,167121028,22249819,NCRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 05488110 -MN00586,MVP,MissHW_Winni.Flow-Out.Inst.~1Day.0.CEMVP-Legacy,22328037,167122141,22328037,NCRFC,KMS, ,0, -MN00169,MVP,ORTM5.Flow.Inst.15Minutes.0.rev,4084418,167122203,4085926,NCRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 05292000 -IL00118,MVS,Lk Shelbyville-Kaskaskia.Flow-Out.Ave.~1Day.1Day.lakerep-rev,13772418,167122256,13772400,NCRFC,MC, ,0,Redundant site removed by SK. Redundant with another point downstream. DA gage is two flowlines downstream -IL00113,MVS,Carlyle Lk-Kaskaskia.Flow-Out.Ave.~1Day.1Day.lakerep-rev,13871378,167122265,13876230,NCRFC,MC, ,0,This is total outflow compared with CWMS timeseries_SK. Redundant site is marked by SK and will be removed. There is a DA gage 2 flowlines downstream. Redundant with some other gages -TN04102,LRN,CETT1-CENTER_HILL.Flow.Ave.1Hour.1Hour.man-rev,18434275,167122309,18434275,OHRFC,GID 2, ,0, -IL00117,MVS,Rend Lk-Big Muddy.Flow-Out.Ave.~1Day.1Day.lakerep-rev,13779254,167156996,13779550,NCRFC,MC, ,0, -MS01495,MVK,Enid Lake.Flow.Inst.1Hour.0.Total Gate Flow,15276792,167166404,15276792,LMRFC,KMS, ,0, -MS01493,MVK,Sardis Lake.Flow.Inst.1Hour.0.Total Gate Flow,15290344,167182317,15290344,LMRFC,KMS, ,0, -MN00573,MVP,RedLake.Flow-Out.Inst.15Minutes.0.rev,7043255,167201419,22194346,NCRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 05074500 -MT00568,NWDM,CAFE.Flow-Out.Ave.1Day.1Day.Raw-USBR,3024978,167204871,3024978,MBRFC,KMS, ,0, -MT00025,NWDM,FTPK.Flow-Out.Ave.~1Day.1Day.Best-MRBWM,12461756,167204901,940040008,MBRFC,KMS, ,0, -MT00576,NWDM,YETL.Flow-Out.Ave.1Day.1Day.Raw-USBR,12801362,167204997,12801364,MBRFC,KMS, ,0,There is a DA gage 2 flowlines downstream -WY01297,NWDM,SEMR.Flow-Out.Ave.1Day.1Day.Raw-USBR,15976386,167245825,15976386,MBRFC,KMS, ,0,Moved to lake outlet -CO00351,NWDM,ATCO.Flow-Out.Ave.1Day.0.Raw-CODWR,5242018,167246015,5242018,MBRFC,KMS, ,0,Poor gage placement. Adjusted to correct location -KS00024,NWDM,NORN.Flow-Out.Ave.1Day.1Day.Best-NWK,8367756,167266511,8367756,MBRFC,KMS, ,8367756,Moved to lake outlet. Correct lake association. -KS00005,NWDM,KANS.Flow-Out.Ave.1Day.1Day.Best-NWK,25068602,167266519,25068602,MBRFC,MC, ,0,DA gage one flowline downstream -MO30200,NWDM,STON.Flow-Out.Ave.1Day.1Day.Best-NWK,7372051,167267899,7373063,MBRFC,KMS, ,0, -KS00004,SWT,JOHN.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,20932440,167297255,20932366,ABRFC,LKR, ,0, -AR00174,SWL,Beaver_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,8589764,167299813,8589608,LMRFC,KMS, ,0, -AR00160,SWL,Bull_Shoals_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,7637444,167299818,7637444,LMRFC,KMS, ,7637444,Moved to lake outlet. Good lake assoc. -AR00173,SWL,GreersFerry_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,11774999,167299819,11774971,LMRFC,KMS, ,0, -OK10310,SWT,OOLO.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,833360,167299904,21799057,ABRFC,KMS, ,0, -OK00135,SWT,PENS.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,7586119,167299912,7586119,ABRFC,LKR, ,0, -OK10314,SWT,FGIB.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,21773859,167299918,21773859,ABRFC,MC, ,0, -OK20502,SWT,TOMS.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,562485,167300241,562485,ABRFC,MC, ,0, -OK10317,SWT,DENI.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,426416,167300255,426416,ABRFC,LKR, ,0,gaged flowline directly downstream; Lake Texoma -OK02501,SWT,ARBU.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,19959986,167300271,19959986,ABRFC,KMS, ,19959986,link is inside WB. FlowlineID 19959986 is the outlet link. Also cant find in A2W. -AR00536,SWL,Millwood_Dam-Tailwater.Flow.Inst.1Hour.0.CCP-Comp,3747834,167300345,3747820,ABRFC,MC, ,0, -LA00181,MVK,Caddo Lake.Flow.Inst.1Hour.0.DCP-rev,1016769,167300381,1016769,LMRFC,KMS, ,0,Moved the gage to lake outflow -GA01701,SAS,Thurmond.Flow-Out.Ave.1Hour.1Hour.Raw-SCADA_SAS,22720897,167484077,6290331,SERFC,AM, ,0, -OH00019,LRH,Mohicanville-Outflow.Flow.Inst.1Hour.0.OBS,167484497,167484552,167484498,OHRFC,GID 2, ,0, -OH00016,LRH,Mohawk-Outflow.Flow.Inst.1Hour.0.OBS,167484595,167484603,167484595,OHRFC,GID 2, ,0,Linked to interior flowline. -OK22194,SWT,MCGE.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,167484717,167484743,167484717,ABRFC,KMS, ,0, -VA117001,SAW,ROA JHK.Flow-Out.Inst.1Hour.0.DSS,8653306,167496465,8653306,SERFC,KMS, ,0, -NE01048,NWDM,LAMC.Flow-Out.Ave.~1Day.1Day.Raw-CNPPID,17462840,167794979,17462840,MBRFC,KMS, ,0,Moved upstream to the lake outflow -KS00008,NWDM,MILD.Flow-Out.Ave.1Day.1Day.Best-NWK,5927298,167800866,5927296,MBRFC,MC, ,0,DA gage five flowlines downstream -OK10308,SWT,EUFA.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,512899,167801019,512899,ABRFC,LKR, ,0,Eufaula Lake -OK10301,SWT,ROBE.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,1543609,167801029,1543627,ABRFC,LKR, ,0, -MO82201,MVS,Mark Twain Lk-Salt.Flow-Out.Ave.~1Day.1Day.lakerep-rev,4867723,937110111,4867727,NCRFC,MC, ,0,DA gage 7 flowlines downstream -OK22200,SWT,SKIA.Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup,941070051,941070128,941070050,ABRFC,LKR, ,0,Skiatook Lake -PortHuron,LRE,PortHuron.Flow.Inst.0.0.shef-raw,13196034,4800004,13196034,NCRFC,MC, ,0,Snapped to DA gage flowline. Gage ID 04159130 diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_CWMS_Sites.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_CWMS_Sites.py deleted file mode 100755 index 83f3561..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_CWMS_Sites.py +++ /dev/null @@ -1,44 +0,0 @@ -############################################################################### -# File name: make_time_slice_from_usgs_waterml.py -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: The driver to create NetCDF time slice files from USGS # -# real-time observations # -# # -############################################################################### - -import os, sys, time, urllib, getopt -import logging -from string import * -from datetime import datetime, timedelta -from CWMS_Sites import CWMS_Sites -import csv -#import Tracer - -""" - The driver to parse downloaded waterML 2.0 observations and - create time slices and write to NetCDF files - Author: Zhengtao Cui (Zhengtao.Cui@noaa.gov) - Date: Aug. 26, 2015 -""" -def main(argv): - """ - function to get input arguments - """ - sites=CWMS_Sites( "./CWMS_outflow_sites_263_index.csv") - index = sites.getIndex( "SAJ", "S135-Pump.Flow.Inst.1Hour.0.SFWMD-WM") - print("index = " + index) - - -if __name__ == "__main__": - try: - main(sys.argv[1:]) - except Exception as e: - print("Failed to get program options." + str(e)) - - diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_ace_observation.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_ace_observation.py deleted file mode 100755 index fb72279..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_ace_observation.py +++ /dev/null @@ -1,47 +0,0 @@ -############################################################################### -# File name: make_time_slice_from_usgs_waterml.py -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: The driver to create NetCDF time slice files from USGS # -# real-time observations # -# # -############################################################################### - -import os, sys, time, urllib, getopt -import logging -from string import * -import xml.etree.ElementTree as etree -from datetime import datetime, timedelta -from ACE_Observation import ACE_Observation -from TimeSlice import TimeSlice -from Observation import Observation, All_Observations -from CWMS_Sites import CWMS_Sites -#import Tracer - -""" - The driver to parse downloaded waterML 2.0 observations and - create time slices and write to NetCDF files - Author: Zhengtao Cui (Zhengtao.Cui@noaa.gov) - Date: Aug. 26, 2015 -""" -def main(argv): - """ - function to get input arguments - """ - sites=CWMS_Sites( "./CWMS_outflow_sites_263_index.csv") - aceflow=ACE_Observation( "./test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml", sites) - - irregularaceflow=ACE_Observation( "./test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml", sites) - -if __name__ == "__main__": - try: - main(sys.argv[1:]) - except Exception as e: - print("Failed to get program options." + str(e)) - - diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/README.TXT b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/README.TXT index 52afd30..6868d13 100755 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/README.TXT +++ b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/README.TXT @@ -1,25 +1,39 @@ -1) To start the download processes, at the prompt, +# Overview +This directory contains Python scripts to download USGS streamflow observations in realtime. The script runs as a daemon process when it is started. It will continously check the USGS server for any locations that have updated streamflow data since it was last checked, and then download only the updated streamflows. -./run_usgs.sh +# Prerequisite +It requires an USGS API Key. USGS API Keys can be obtained from https://api.waterdata.usgs.gov/signup. -or put this script in a cron job. It will clear the log file every day at 5:28. +A DBNROOT directory for storing log files. -Output is saved in the directory pointed to by the $OUTDIR variable. You can change the output directory by redefining the $OUTDIR variable in run_usgs.sh +A DCOMROOT directory for storing the raw data files. -The log file is saved to the file defined by the $log variable. You can change the log file by modifying the $log variable in the run_usgs.sh. +# Script description +usgs_current.py: The main driver and the realtime download script using USGS OGC APIs -The log file is reset daily at 5:28. To change the time, redefine the $RESETLOGAT variable. +# Script Usage -The empty file, 'fetch_data_last_success', in the output directory is touched at every successful download. It can be used to monitor the program. +## Setup environmental variables +Set the USGS_API_KEY, DBNROOT and DCOMROOT environmental variables +For example, -- To kill run_usgs.sh -ps -ef|grep parallel_download_master.py -kill -9 `pgrep -f parallel_download_master.py` +``` +export USGS_API_KEY=[API KEY] +export DCOMROOT=/path/to/dcomroot +export DBNROOT=/path/to/dbnroot +mkdir $DBNROOT/log +``` +## Start the daemon script +``` +python ./usgs_current.py +``` +Output is saved in the directory pointed to by the $DCOMROOT variable. -- Here is the URL to download usgs stream flow data -SITE_NO=05018000 +The log file is saved to the file defined by the $DBNROOT variable. -#site URL = https://waterservices.usgs.gov/nwis/iv/?sites=05018000&format=waterml,2.0¶meterCd=00060&period=PT6H -site URL = https://waterservices.usgs.gov/nwis/iv/?sites=05018000&format=json¶meterCd=00060&period=PT6H +# To kill the daemon program -2024-04-30 17:29:55.757442 --- Successfully downloaded stream flow data for station: 05018000 +``` +ps -ef|grep usgs_current.py +kill -9 `pgrep -f parallel_download_master.py` +``` diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/fetch_sites.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/fetch_sites.py deleted file mode 100755 index e1a2e34..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/fetch_sites.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python - -############################################################################### -# Module name: fetch_sites # -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: Download real time stream flow data from the USGS server for # -# a given list of stations. # -# # -# 06/11/2024 ChamP Replaced "waterml,2.0" with "json" format in queries to # -# the USGS data service. # -############################################################################### - -import os, sys, time, urllib.request, getopt -from string import * -import datetime -import json - -def fetch_sites( site_nos, odir, failed_sites ): - """ - Download real time stream flow data from the USGS server for - a given list of stations. - - Input: site_nos - list of USGS station numbers - odir - the output directory - failed_sites: list of USGS station numbers that failed to - download - """ - - # - # Loop through each station - # - for site_no in site_nos: - # - # Construct the query URL - # - #URL = ( 'https://staging.waterservices.usgs.gov/nwis/iv/?sites='+ - URL = ( 'https://waterservices.usgs.gov/nwis/iv/?sites='+ - site_no+ - '&format=json¶meterCd=00060&period=PT6H' ) - #'&format=waterml,2.0¶meterCd=00060&period=PT6H' ) - # - # Connect to the server - # - try: - rno = urllib.request.urlopen(URL) - except IOError as e: - print( 'WARNING: site : ', site_no, ' skipped - ') #, e.reason - # - # If failed, remember the station no and continue - # - failed_sites.append( site_no ) - continue - - # - # Write the real time flow data to waterML files - # - jso = open(odir+'/'+site_no+'.json','w') - - try: - json_data = json.loads(rno.read().decode('utf-8')) - json.dump(json_data, jso, indent=2) - - with open( odir + '/fetch_data_last_success', 'a'): - os.utime( odir + '/fetch_data_last_success', None ) - print( datetime.datetime.now(), end = " --- " ) - print( 'Successfully downloaded stream flow data for station: ', site_no) - except IOError as e: - print( datetime.datetime.now(), end = " --- " ) - print( 'WARNING: station : ', site_no, ' skipped - ') #, e.reason - failed_sites.append( site_no ) - continue - - # - # Close the connection and WaterML files - # - rno.close() - jso.close() - return diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/find_changed_site_for_huc.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/find_changed_site_for_huc.py deleted file mode 100755 index 5aaa5ac..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/find_changed_site_for_huc.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env python - -############################################################################### -# Module name: find_changed_site_for_huc # -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: 1) Find the stations that have updated data for a given HUC # -# and time interval. # -# 2) Download real time data for the list of stations found. # -# # -############################################################################### - -import os, sys, time, urllib.request, getopt, copy -from string import * -import datetime -import fetch_sites - -# -# - -def find_changed_sites_for_huc( huc, timeSinceLast, odir, site_noL, \ - total_num_of_sites ): - """ - 1) Find the stations that have updated data for a given HUC and - time interval. - 2) Download real time data for the list of stations found. - - Input: huc - the given HUC - timeSinceLast - time in minutes since last download from this HUC - odir - output directory - - Output: site_noL - list of site numbers that have changed data - total_num_of_sites - not used - """ - - # - # Consturct an url for the USGS server - # -# URL = ( 'https://staging.waterdata.usgs.gov/nwis/current?huc2_cd=' + - URL = ( 'https://waterdata.usgs.gov/nwis/current?huc2_cd=' + - str(huc).zfill(2) + - '&result_md=1&result_md_minutes='+ - str( int(round( timeSinceLast ) ) )+ - '&index_pmcode_00060=3&format=rdb' ) - - print( 'HUC URL = ', URL ) - - # - # Connect to the USGS server - # - try: - rno = urllib.request.urlopen(URL) - except IOError as e: - print ( 'Failed connecting to the server. No data was downloaded!' ) - # print ( 'Reason: ', e.reason ) - return - - # - # Download the station list - # - try: - linesL = rno.read().decode('utf-8').split('\n') - except IOError as e: - print( datetime.datetime.now(), end = " --- " ) - print( 'Failed reading the server. No data was downloaded!' ) - # print ( 'Reason: ', e.reason ) - return - - # - # Close the connection - # - rno.close() - # - # Parse the webpage and get the station names. - # - if linesL[0] == 'No sites/data found using ' \ - 'the selection criteria specified ': - print('WARN: ', linesL[ 0 ], ' for huc ', huc ) - site_noL = [] - return - - del linesL[-1] - try: - while 1: - if linesL[0][0] == '#': - del linesL[0] - else: - del linesL[0] - del linesL[0] - break - for line in linesL: - site_noL.append(line.split('\t')[1]) - except LookupError as e: - print( datetime.datetime.now(), end = " --- " ) - print ( 'WARNING: Failed reading the changed sites for HUC ' + str(huc).zfill(2) + "!" ) - print ( 'Reason: ', e.reason ) - return - - - print( datetime.datetime.now(), end = " --- " ) - print( 'Successfully downloaded site numbers of changed sites for HUC ' + str(huc).zfill(2) + "!" ) - print( 'num. of stations changed = ', len(site_noL) ) - - failed_sites = [] - - # - # Start download the real time stream flow data for the - # list of stations that have updated data. - # - fetch_sites.fetch_sites( site_noL, odir, failed_sites ) - # - # Some stations may fail during the downloading, then wait for 10 seconds, - # and try again - # - if len( failed_sites ) > 0: - print ('There are ', len(failed_sites), ' failed sites, try again ......') - #sleep 10 seconds - time.sleep( 10 ) - site_noL = copy.deepcopy( failed_sites ) - - # - # Re-do the downloading - # - fetch_sites.fetch_sites( site_noL, odir, failed_sites ) - - print( datetime.datetime.now(), end = " --- " ) - print ('Done retry ', len(failed_sites), ' of failed sites.') - - - return diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/parallel_download_master.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/parallel_download_master.py deleted file mode 100755 index 7810f01..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/parallel_download_master.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python -############################################################################### -# File name: parallel_download_master.py -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: The master process that connect the USGS real-time flow data # -# server and download real-time data for each HUC using # -# three cocurrent process. # -# # -############################################################################### - -import sys, time, os -import multiprocessing -import find_changed_site_for_huc -import usgs_iv_retrieval - -if __name__ == "__main__": - odir = usgs_iv_retrieval.main(sys.argv[1:]) - -# -# Initialize the list of HUCs and process -# -proc_hucs = dict( [ ('2604', [2, 17, 12, 18, 8, 13, 20 ] ), \ - ('2634', [10, 5, 4, 1, 16, 6, 19 ] ), \ - ('2920', [3, 7, 11, 15, 14, 9, 21 ] ) ] ) - -# -# Start the downloading process -# the total number of stations for the above HUCs is 2604 -# -procs= dict() -for proc, hucs in iter( proc_hucs.items() ): - procs[ proc] = multiprocessing.Process( name= proc,\ - target=usgs_iv_retrieval.download_for_hucs,\ - args=( odir, hucs, proc ) ) - -for p in procs.values(): - print( 'start : ', p.name ) - p.start() - -while True: - - time.sleep( 2*3600 ) - - proc_restarted = [] - for p in procs.values(): - if p.is_alive(): - if os.path.isfile( odir + '/usgs_iv_retrieval_' + p.name ): - t = os.stat( odir + '/usgs_iv_retrieval_' + p.name ) - c = t.st_mtime - if c < time.time() - 180 : - print( 'process: ', p.name, 'stalled!!') - # restart - p.terminate() - pr = multiprocessing.Process( name= p.name,\ - target=usgs_iv_retrieval.download_for_hucs,\ - args=( odir, proc_hucs[ p.name ], p.name ) ) - proc_restarted.append( pr ) - pr.start() - print( 'restarted : ', p.name ) - else: - print( 'process: ', p.name, 'status file doesn\'t exist') - p.terminate() - pr = multiprocessing.Process( name= p.name,\ - target=usgs_iv_retrieval.download_for_hucs,\ - args=( odir, proc_hucs[ p.name ], p.name ) ) - proc_restarted.append( pr ) - pr.start() - print( 'process: ', p.name, 'restarted :' ) - else: - - print( 'process: ', p.name, ' is not alive.') - p.terminate() - pr = multiprocessing.Process( name= p.name,\ - target=usgs_iv_retrieval.download_for_hucs,\ - args=( odir, proc_hucs[ p.name ], p.name ) ) - proc_restarted.append( pr ) - print( 'process: ', p.name, 'restarted :') - pr.start() - - if proc_restarted: - for p in proc_restarted: - procs[ p.name ] = p - -for p in procs.values(): - p.join() - print( '%s.exitcode = %s' % (p.name, p.exitcode) ) - diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/run_usgs.sh b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/run_usgs.sh deleted file mode 100755 index d9d23eb..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/run_usgs.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash - -############################################################################### -# File name: run_usgs.sh # -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 12/5/2019 # -# Changed python/2.7.14 to default python module, python/3.6.3 # -# # -# Description: Run the USGS Stream Flow scripts # -# Supported by the NWS Water Predication Center # -# # -# # -############################################################################### - -module unload python -module load python -module list - -#cd /lfs/h1/owp/nwm/noscrub/$LOGNAME/test/packages/nwm.v3.1.0/ush/usgs_download/stream_flow_download - -#log=$DBNROOT/user/usgs_download/parallel_download_master.log -log=/lfs/h1/owp/ptmp/$LOGNAME/usgs/usgs_download.log - -#OUTDIR=$DCOMROOT/${envir}/usgs_streamflow -OUTDIR=/lfs/h1/owp/ptmp/$LOGNAME/usgs - -touchfiles=("$OUTDIR/usgs_iv_retrieval_2604" \ - "$OUTDIR/usgs_iv_retrieval_2634" \ - "$OUTDIR/usgs_iv_retrieval_2920") - -PARALLEL_DOWNLOAD_MASTER=./parallel_download_master.py - -DATE=`/bin/date +%H:%M` - -RESETLOGAT="05:28" - -# Check if process is already running with this package -if pgrep -f parallel_download_master.py > /dev/null 2>&1 -then - echo "Message: parallel_download_master.py package is running" - if [ "$DATE" = "$RESETLOGAT" ] - then - echo "Message: reset USGS parallel_download_master log file" - rm $log - fi - - for f in ${touchfiles[@]} - do - timediff=$((`date +%s` - `stat -c "%Y" $f`)) - if [ $timediff -gt $(( 3600 * 2 )) ] #three hours - then - echo "Message: touch file $f is older than 3 hours" - echo "Message: restart USGS parallel_download_master.py" - kill -9 `pgrep -f parallel_download_master.py` - nohup $PARALLEL_DOWNLOAD_MASTER -o $OUTDIR >> $log 2>&1 & - echo "Message: done restart USGS parallel_download_master.py" - break - fi - - done - -else - echo "Message: parallel_download_master.py package NOT running" - nohup $PARALLEL_DOWNLOAD_MASTER -o $OUTDIR >> $log 2>&1 & -fi -exit diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_current.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_current.py new file mode 100644 index 0000000..6a56738 --- /dev/null +++ b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_current.py @@ -0,0 +1,350 @@ +#!/usr/bin/env python3 + +################################################################### +# Script: usgs_monitor.py +# Version: 1.0 +# Purpose: Find updated usgs steamflow gauge data and pull in json +# format. +# Author: Salemi 01/25/2025 +# +################################################################### + +import requests +import datetime +import json +import pytz +import os +import time +import sys +import signal +import concurrent.futures +import logging +from logging.handlers import TimedRotatingFileHandler + +# Import environmental variables +required_env_vars = ['DCOMROOT', 'DBNROOT'] +env_vars = {} + +for var in required_env_vars: + value = os.getenv(var) + if value: + # If the variable is found, store it in the dictionary. + env_vars[var] = value + else: + # If not found, log a critical error and exit. + print(f"Required {var} not found") + exit() + +# --- CONFIGURATION CONSTANTS --- +DBN_ROOT = env_vars['DBNROOT'] +DCOM_ROOT = env_vars['DCOMROOT'] +SLEEP_INTERVAL_MIN = 2 # How long to wait between checks +LOOKBACK_BUFFER_MIN = 3 # Time window to search for updates +MAX_WORKERS = 20 # Maximum number of concurrent threads for downloading + +BASE_URL_CHECK = "https://api.waterdata.usgs.gov/ogcapi/v0/collections/latest-continuous/items" +BASE_URL_PULL = "https://api.waterdata.usgs.gov/ogcapi/v0/collections/continuous/items" +# We only care about streamflow data (00060) +PARAMETER_CODE = '00060' +HEARTBEAT_TIMEOUT_MINS = 15 + +STATE_FILE = os.path.join(DBN_ROOT, 'user/usgs_api/last_pull_time.txt') +PID_FILE = os.path.join(DBN_ROOT, 'user/usgs_api/daemon.pid') + + +# --- HELPER FUNCTIONS --- + +def setup_logging(log_path): + + logger = logging.getLogger('usgs_streamflow_monitor.log') + logger.setLevel(logging.INFO) +# Create a TimedRotatingFileHandler. + handler = TimedRotatingFileHandler( + LOG_FILE_PATH, + when='midnight', + interval=1, + backupCount=7, + delay=True + ) +# Create a formatter and add it to the handler. + formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') + handler.setFormatter(formatter) + logger.addHandler(handler) + return logger + + +def load_manual_env(file_path=None): + if file_path is None: + file_path = os.path.join(DBN_ROOT, "user/usgs_api", ".usgs_env") + + if os.path.exists(file_path): + with open(file_path, "r") as f: + for line in f: + # Remove whitespace and ignore comments or empty lines + line = line.strip() + if not line or line.startswith("#"): + continue + + # Split by the first '=' found + if "=" in line: + key, value = line.split("=", 1) + # Set it in the environment so os.environ.get works later + os.environ[key.strip()] = value.strip().strip('"').strip("'") + + +def load_last_pull_time(): + """Loads the last recorded pull time from the state file.""" + if os.path.exists(STATE_FILE): + with open(STATE_FILE, 'r') as f: + # Strip newline and return the ISO 8601 string + return f.read().strip() + + # If file doesn't exist, start 3 minutes in the past + logger.info("INFO: No state file found. Starting 5 minutes ago.") + initial_start = datetime.datetime.now(pytz.utc) - datetime.timedelta(minutes=5) + return initial_start.strftime("%Y-%m-%dT%H:%M:%SZ") + + +def save_last_pull_time(timestamp_str): + """Saves the current time as the new starting time for the next cycle.""" + with open(STATE_FILE, 'w') as f: + f.write(timestamp_str) + logger.info(f"State updated to {timestamp_str}") + + +def get_time_range(last_pull_time_str): + """Calculates the time range (start/end) for the API query.""" + # Ensure current time is UTC + now_utc = datetime.datetime.now(pytz.utc) + + # Calculate the end time (1 minute ago for safety) + end_time = now_utc - datetime.timedelta(minutes=1) + end_time_str = end_time.strftime("%Y-%m-%dT%H:%M:%SZ") + + # Use the previous pull time as the start time + start_time_str = last_pull_time_str + + return start_time_str, end_time_str + + +def fetch_full_site_data(site_id, odir, site_name): + """Fetches the full JSON data for a specific site and saves it.""" + + # The time parameter requests the last 6 hours of instantaneous data (PT6H) + params = { + 'monitoring_location_id': site_id, + 'parameter_code': PARAMETER_CODE, + 'time': 'PT6H', + 'f': 'json', # Request JSON format explicitly + 'limit': 50 + } + + API_KEY = os.environ.get("USGS_API_KEY") + + headers = { + 'X-Api-Key': API_KEY, + 'Accept': 'application/json' + } + + try: + response = requests.get(BASE_URL_PULL, params=params, headers=headers, timeout=15) + response.raise_for_status() + data = response.json() + + data['monitoring_location_name'] = site_name + + # Save the file + site_id = site_id.replace('USGS-', '') + file_name = f"{site_id}.json" + output_path = os.path.join(odir, file_name) + + with open(output_path, 'w') as f: + json.dump(data, f, indent=2) + + os.chmod(output_path, 0o664) + + logger.info(f"SUCCESS: Downloaded and saved data for site {site_id}.") + return True + + except requests.exceptions.RequestException as e: + logger.info(f"WARNING: Failed to pull full data for site {site_id}. Error: {e}") + return False + + +def run_monitor_cycle(last_pull_time_str, odir): + """Runs one complete cycle: discovers updated sites and initiates data pull.""" + + start_time_str, end_time_str = get_time_range(last_pull_time_str) + + logger.info(f"\n--- Starting Check: {start_time_str} to {end_time_str} ---") + + time_range_value = f"{start_time_str}/{end_time_str}" + + try: + # datetime_value_encoded = quote(time_range_value, safe=':/Z-') + + # --- 1. Discover Updated Sites --- + params = { + 'last_modified': time_range_value, + 'parameter_code': PARAMETER_CODE, + 'limit': 700 # Adjust based on expected volume + } + + response = requests.get(BASE_URL_CHECK, params=params, timeout=30) + response.raise_for_status() + data = response.json() + + except requests.exceptions.RequestException as e: + logger.info(f"FATAL: Discovery API request failed. Skipping cycle. Error: {e}") + return last_pull_time_str, 0 # Return old time to retry range later + + features = data.get('features', []) + updated_sites = {} + + for feature in features: + # Extract the site ID from the properties dictionary + props = feature.get('properties', {}) + site_id = props.get('monitoring_location_id') + site_name = ( + props.get('monitoring_location_name') or + props.get('name') or + "Unknown Name" + ) + + if site_id: + # Remove the "USGS-" prefix for consistency with the site URL query + # site_id = site_id.replace('USGS-', '') + updated_sites[site_id] = site_name + + if not updated_sites: + logger.info("INFO: No sites found with updates in the interval.") + # Only update state time if we successfully queried the server + return end_time_str, 0 + + logger.info(f"INFO: Found {len(updated_sites)} unique sites with updates.") + + # --- 2. Pull Full Data for Each Updated Site (Parallelized) --- + successful_downloads = 0 + + # Using ThreadPoolExecutor to run downloads concurrently + with concurrent.futures.ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor: + # Submitting all download tasks to the thread pool + future_to_site = { + executor.submit(fetch_full_site_data, sid, odir, sname): sid + for sid, sname in updated_sites.items() + } + + # Waiting for results and counting successes + for future in concurrent.futures.as_completed(future_to_site): + site_id = future_to_site[future] + try: + # future.result() returns the boolean (True/False) result of fetch_full_site_data + if future.result(): + successful_downloads += 1 + except Exception as exc: + logger.info(f'WARNING: Site {site_id} generated an unhandled exception during pull: {exc}') + + # Only update the state time if the discovery was successful + logger.info(f"INFO: {successful_downloads} out of {len(updated_sites)} sites downloaded successfully.") + return end_time_str, successful_downloads + + +def is_process_running(pid): + """Check if there is any running process with given PID.""" + try: + os.kill(pid, 0) # Signal 0 does nothing but checks if process exists + except OSError: + return False + return True + + +def manage_process_state(): + # 1. Check if PID file exists + if os.path.exists(PID_FILE): + with open(PID_FILE, 'r') as f: + try: + old_pid = int(f.read().strip()) + except ValueError: + old_pid = None + + if old_pid and is_process_running(old_pid): + # 2. Check if the state file is "stale" + if os.path.exists(STATE_FILE): + last_mtime = os.path.getmtime(STATE_FILE) + seconds_since_update = time.time() - last_mtime + + if seconds_since_update > (HEARTBEAT_TIMEOUT_MINS * 60): + logger.info(f"Stale process detected (PID {old_pid}). Killing and restarting...") + try: + os.kill(old_pid, signal.SIGTERM) + time.sleep(2) # Give it a moment to release ports/files + except OSError: + pass + else: + logger.info(f"Daemon already running (PID {old_pid}) and active. Exiting.") + sys.exit(0) + + # 3. Create/Overwrite PID file for the current process + with open(PID_FILE, 'w') as f: + f.write(str(os.getpid())) + + +# --- MAIN EXECUTION BLOCK --- +def run_daemon(): + # Load initial state + last_pull_time = load_last_pull_time() + + # Define the main monitoring loop + while True: + try: + current_date = datetime.datetime.now().strftime('%Y%m%d') + output_dir = os.path.join(DCOM_ROOT, current_date, 'obs/raw/water_level/usgs_streamflow') + # Setup output directory + if not os.path.exists(output_dir): + os.makedirs(output_dir) + + new_parts = [current_date, "obs", "raw", "water_level", "usgs_streamflow"] + + current_path = DCOM_ROOT + for part in new_parts: + current_path = os.path.join(current_path, part) + # Apply 775 only to these segments + os.chmod(current_path, 0o775) + logger.info(f"INFO: Created output directory: {output_dir}") + + # Run the data retrieval cycle + new_pull_time, count = run_monitor_cycle(last_pull_time, output_dir) + + # Update the state for the next run + if new_pull_time != last_pull_time: + save_last_pull_time(new_pull_time) + last_pull_time = new_pull_time + + # Wait for the next interval + logger.info(f"\nINFO: Cycle complete. Sleeping for {SLEEP_INTERVAL_MIN} minutes...") + time.sleep(SLEEP_INTERVAL_MIN * 60) + + except KeyboardInterrupt: + logger.info("\nMonitor stopped by user.") + sys.exit(0) + except Exception as e: + logger.info(f"CRITICAL ERROR in main loop: {e}. Sleeping for 5 minutes.") + time.sleep(300) # Sleep longer on critical errors + + +if __name__ == "__main__": + load_manual_env() + + lock_file = manage_process_state() + + LOG_FILE_PATH = os.path.join(DBN_ROOT, "log", "usgs_streamflow_monitor.log") + logger = setup_logging(LOG_FILE_PATH) + + logger.info("Daemon started successfully. Monitoring cycle beginning...") + + try: + run_daemon() + finally: + # Cleanup PID file on clean exit + if os.path.exists(PID_FILE): + os.remove(PID_FILE) diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_iv_retrieval.py b/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_iv_retrieval.py deleted file mode 100755 index 1a2e3c9..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/stream_flow_download/usgs_iv_retrieval.py +++ /dev/null @@ -1,188 +0,0 @@ -#!/usr/bin/env python - -############################################################################### -# Module name: usgs_iv_retrieval # -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: The main function to download real time stream flow -# # -############################################################################### - -import os, sys, time, urllib, getopt, copy -from string import * -import datetime -import find_changed_site_for_huc - - -def main(argv): - """ - Function to get output directory - - Return: Output directory - """ - outputdir = '' - try: - opts, args = getopt.getopt(argv,"h:o:",["odir="]) - except getopt.GetoptError: - print( 'usgs_iv_retrieval.py -o ' ) - sys.exit(2) - for opt, arg in opts: - if opt == '-h': - print( 'usgs_iv_retrieval.py -o ' ) - sys.exit() - elif opt in ("-o", "--odir"): - outputdir = arg - if not os.path.exists( outputdir ): - os.makedirs( arg ) - - print( 'Output dir is "', outputdir ) - return outputdir - -def cleanup_dir( path, numberofdays ): - """ - Delete files older than number of days in a given directory - Input: path - the given directory - numberofdays - number of days older - """ - if not os.path.isdir(path ): - return - - now = time.time() - cutoff = now - ( numberofdays * 86400 ) - files = os.listdir( path ) - for onefile in files: - if os.path.isfile( path + '/' + onefile ): - t = os.stat( path + '/' + onefile ) - c = t.st_mtime - if c < cutoff : - os.remove( path + '/' + onefile ) - return - -def usgs_iv_retrieval( odir, download_id, hucs ): - """ - The main function to download real time stream flow - - Input: odir - Output directory - download_id - The unique identifier of the download process - hucs - list of HUCs - """ - -# -# For the first loop, get all stations that have data upated in the last 15 minutes. -# In the following loops, use the actual time interval between the loops -# - timeSinceLast = 15 -# -# Time stamp when the process starts -# - URL_start = [ time.time()] * len( hucs ) - - firstloop = True -# -# Got to the infinite loop -# - while True: - - # - # touch a file and update the time stamp to indicate it is alive - # - with open( odir + '/usgs_iv_retrieval_' + download_id, 'a'): - os.utime( odir + '/usgs_iv_retrieval_' + download_id, None ) -# -# remove files older than two days in the output directory -# -# NCO is using a cron job to remove old files. So don't delete old file here -# print 'cleaning up ...' -# cleanup_dir( odir, 2 ) -# - -# Initialize the lists for time tracking -# - counter_start = time.time() - total_sites = 0 - - huc_seq = 0 - -# -# Loop through each HUC -# - for huc in hucs: - site_noL = [] - if not firstloop: - timeSinceLast = ( time.time() - URL_start[ huc_seq ] ) / 60 - # - #If two queries are less than 2 minutes apart, wait - # two minutes before the next query. - # - if timeSinceLast < 2: - time.sleep( 120 ) - timeSinceLast = ( time.time() - URL_start[ huc_seq ] ) / 60 - - URL_start[ huc_seq ] = time.time() - - no_of_sites = [] - # - # Query the USGS server to find the stations that have updated their - # real time data. - # - find_changed_site_for_huc.find_changed_sites_for_huc( huc, timeSinceLast, odir, site_noL, no_of_sites ) - - print( download_id, ': looptime = ', datetime.datetime.now(), ' num. of sites = ', len(site_noL) ) - - # - # Count the total number of sites that have been updated - # - if no_of_sites: - total_sites += no_of_sites[ 0 ] - - # - # If there are any stations that are failed during the query such as - # no responding from the server, wait for 10 seconds and try again. - # - if not site_noL: - print ( download_id + ": wait 10 seconds and try again!" ) - time.sleep( 10 ) - no_of_sites = [] - find_changed_site_for_huc.find_changed_sites_for_huc( huc, timeSinceLast, odir, site_noL, no_of_sites ) - - - # - # The failed sites need to be counted too. - # - if no_of_sites: - total_sites += no_of_sites[ 0 ] - - # - # increment the sequence number - # - huc_seq += 1 - - URL_end = time.time() - # - # print total time spent on this loop - # - print( download_id, ': looptime = ', datetime.datetime.now(), round( ( URL_end - counter_start ) / 60, 2), ' minutes' ) - - # - # not the first loop - # - firstloop = False - -def download_for_hucs( odir, hucs, download_id ): - """ - The wrapper to call usgs_iv_retrieval - - Input: odir - Output directory - download_id - The unique identifier of the download process - hucs - list of HUCs - """ - - # - # call the real time retrieval function - # - usgs_iv_retrieval( odir, download_id, hucs ) From 85769dd0cf63b7f5ff5b059e10e70d4dd331e9f9 Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Wed, 24 Jun 2026 13:51:53 -0400 Subject: [PATCH 12/26] Added functionality to create a json for ngen to capture netcdf metadata --- .../output_variables/consts.py | 3 + .../output_variables/utils.py | 91 ++++++++++++++----- 2 files changed, 71 insertions(+), 23 deletions(-) diff --git a/data_assimilation_engine/output_variables/consts.py b/data_assimilation_engine/output_variables/consts.py index 95a38c0..6ad1cd7 100644 --- a/data_assimilation_engine/output_variables/consts.py +++ b/data_assimilation_engine/output_variables/consts.py @@ -7,3 +7,6 @@ DIM_TIME = "time" DIM_CATCHMENTS = "catchments" GPKG_GEOMETRY_TYPE_IDENTIFIER = "geometry_type" +X_LOC = ['x', 'lon', 'longitude'] +Y_LOC = ['y', 'lat', 'latitude'] +CRS_INFO = ['crs', 'CRS', 'spatial_ref'] diff --git a/data_assimilation_engine/output_variables/utils.py b/data_assimilation_engine/output_variables/utils.py index 1de68d2..05d8986 100644 --- a/data_assimilation_engine/output_variables/utils.py +++ b/data_assimilation_engine/output_variables/utils.py @@ -10,7 +10,7 @@ from bs4 import BeautifulSoup from datetime import datetime from pyproj import CRS -from typing import List, Set, Tuple, Optional +from typing import List, Set, Tuple, Dict, Union, Optional from functools import reduce @@ -121,22 +121,28 @@ def __init__( y_loc: str, wkt: Optional[str], variables: str, + dimensions: str, + scalar_variables: Dict[str, List[str]], + data_variables_dim: Dict[str, Union[int, float, str]], output_class: str, category: str, domain: str, ) -> None: - self.file_path: str = file_path - self.resolution_x: float = resolution_x - self.resolution_y: float = resolution_y - self.origin_x: float = origin_x - self.origin_y: float = origin_y - self.x_name: str = x_loc - self.y_name: str = y_loc - self.nwm_variables: str = variables - self.crs_wkt: str = wkt - self.output_class: str = output_class - self.category: str = category - self.domain: str = domain + self.file_path = file_path + self.resolution_x = resolution_x + self.resolution_y = resolution_y + self.origin_x = origin_x + self.origin_y = origin_y + self.x_name = x_loc + self.y_name = y_loc + self.nwm_variables = variables + self.nwm_dimensions = dimensions + self.scalar_variables = scalar_variables + self.data_variables_dim = data_variables_dim + self.crs_wkt = wkt + self.output_class = output_class + self.category = category + self.domain = domain def key(self) -> tuple[str, str, str]: """ @@ -161,7 +167,10 @@ def obtain_metadata_information(local_root: str, output_name: str) -> None: output_csv = os.path.join(local_root, output_name + ".csv") write_metadata_to_csv(metadata_list, output_csv) output_json = os.path.join(local_root, output_name + "_config.json") - write_metadata_to_config_json(metadata_list, output_json) + ngen_json = os.path.join(local_root, output_name + "_ngenconfig.json") + write_metadata_to_config_json(metadata_list, output_json, ngen_json) + + def process_downloaded_files(local_root: str) -> List[NetCDFMetadata]: """ @@ -181,9 +190,6 @@ def extract_netcdf_metadata(file_path: str) -> NetCDFMetadata: filename = os.path.basename(file_path) output_class, category, domain = parse_filename_metadata(filename) - x_loc_info = ['x', 'lon', 'longitude'] - y_loc_info = ['y', 'lat', 'latitude'] - crs_info = ['crs', 'CRS', 'spatial_ref'] res_x = -9999 res_y = -9999 origin_x = -9999 @@ -191,27 +197,42 @@ def extract_netcdf_metadata(file_path: str) -> NetCDFMetadata: proj_wkt = 'Not Available' vars_in_netcdf = [] nwm_variables = '' + dimensions = '' x_loc_name = '' y_loc_name = '' + scalar_dict = {} + data_dict = {} ds = xr.open_dataset(file_path) + dimensions = ", ".join(ds.sizes.keys()); for nwm_var in ds.variables: - if nwm_var in x_loc_info: #XRes: assume only one of the x_loc_info will be in the file + dims_list = list(ds[nwm_var].dims) + num_dims = len(dims_list) + if num_dims == 0: + scalar_val = ds[nwm_var].values.item() + if isinstance(scalar_val, bytes): #scalar variables need to be converted from bytes to string. + scalar_val = scalar_val.decode('utf-8') + scalar_dict[str(nwm_var)] = scalar_val + elif num_dims > 0: + data_dict[str(nwm_var)] = dims_list + + if nwm_var in consts.X_LOC: #XRes: assume only one of the x_loc will be in the file x = ds.variables[nwm_var].values res_x = compute_resolution(x) origin_x = float(x.min()) x_loc_name = nwm_var - elif nwm_var in y_loc_info: #YRes: assume only one of the y_loc_info will be in the file + elif nwm_var in consts.Y_LOC: #YRes: assume only one of the y_loc will be in the file y = ds.variables[nwm_var].values res_y = compute_resolution(y) origin_y = float(y.min()) y_loc_name = nwm_var - elif nwm_var in crs_info: #CRS wkt + elif nwm_var in consts.CRS_INFO: #CRS wkt proj_wkt = extract_wkt_from_crs(ds.variables[nwm_var]) elif nwm_var in consts.NWM_VARIABLES_LIST: #NWM output variables vars_in_netcdf.append(nwm_var) nwm_variables = ", ".join(vars_in_netcdf) - return NetCDFMetadata(file_path, res_x, res_y, origin_x, origin_y, x_loc_name, y_loc_name, proj_wkt, nwm_variables, output_class, category, domain) + return NetCDFMetadata(file_path, res_x, res_y, origin_x, origin_y, x_loc_name, y_loc_name, proj_wkt, + nwm_variables, dimensions, scalar_dict, data_dict, output_class, category, domain) def compute_resolution(coords: np.ndarray) -> float: """ @@ -275,9 +296,9 @@ def write_metadata_to_csv(metadata_list: List[NetCDFMetadata], output_csv: str) } ) -def write_metadata_to_config_json(metadata_list: List[NetCDFMetadata], output_json: str) -> None: +def write_metadata_to_config_json(metadata_list: List[NetCDFMetadata], output_json: str, ngen_json: str) -> None: """ - Writes NetCDFMetadata objects to config JSON using WKT CRS. + Writes NetCDFMetadata objects to config JSON. """ info_list = [] for mdata in metadata_list: @@ -297,6 +318,9 @@ def write_metadata_to_config_json(metadata_list: List[NetCDFMetadata], output_js }, "crs_wkt": mdata.crs_wkt, "nwm_variables": mdata.nwm_variables, + "nwm_dimensions": mdata.nwm_dimensions, + "nwm_scalar_variables": mdata.scalar_variables, + "nwm_var_dimensions": mdata.data_variables_dim, "class": mdata.output_class, "category": mdata.category, "domain": mdata.domain @@ -311,6 +335,27 @@ def write_metadata_to_config_json(metadata_list: List[NetCDFMetadata], output_js print(f"Config JSON written to: {output_json}") + info_list = [] + for mdata in metadata_list: + metadata_info_dict = { + "class": mdata.output_class, + "category": mdata.category, + "domain": mdata.domain, + "nwm_variables": mdata.nwm_variables, + "nwm_dimensions": mdata.nwm_dimensions, + "nwm_scalar_variables": mdata.scalar_variables, + "nwm_var_dimensions": mdata.data_variables_dim + } + info_list.append(metadata_info_dict) + + config = { + "nwm_info": info_list + } + with open(ngen_json, "w", encoding="utf-8") as f: + json.dump(config, f, indent = 2) + + print(f"Config JSON written to: {ngen_json}") + def debug_netcdf_structure_in_folder(folder_path: str) -> None: """ Recursively scans a folder for NetCDF files and prints their structure. From e96d325f8c4f75f397fa073f344cd690bc5d3149 Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Wed, 1 Jul 2026 07:14:37 -0400 Subject: [PATCH 13/26] Changes with code implementation for various netcdf product categories that are gridded. --- .../output_variables/DataProcessor.py | 428 +++++++++++------- .../output_variables/DataReader.py | 31 +- .../output_variables/consts.py | 33 +- .../output_variables/utils.py | 123 +++-- netcdf_production_sample.py | 80 +++- 5 files changed, 474 insertions(+), 221 deletions(-) diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index 9eff6a4..8e9dc95 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -1,3 +1,4 @@ +import sys import os import json import geopandas as gpd @@ -12,42 +13,36 @@ from pyproj import CRS from typing import List, Optional from .DataReader import DataReader +from .utils import NetCDFMetadata from . import consts class DataProcessor(DataReader): """ Handles catchment-time NetCDF and grid generation. """ - def __init__(self, catchment_netcdf_file: str, gpkg_file: str, - config_path: str, output_class: str | None, category: str | None, - domain: str | None, chunk_size: int = 100) -> None: + def __init__(self, catchment_netcdf_file: str, gpkg_file: str, chunk_size: int = 100) -> None: super().__init__(catchment_netcdf_file, chunk_size) self._catchment_ds: xr.Dataset = self.dataset self._gpkg_file = gpkg_file - self._config_path = config_path - self._output_class = output_class - if category in ['channel_rt', 'reservoir', 'total_water']: - raise ValueError(f"The requested category - {category} - is not a gridded netcdf. This cannot be processed.") - else: - self._category = category - self._domain = domain + filename = os.path.basename(gpkg_file) + self._geo_id = filename.replace(consts.GPKG_FILE_PREFIX, '').replace('.gpkg', '') # Normalize catchment ids in netcdf with a cat- prefix for consistency. nc_catchments = self._normalize_catchment_ids(self._catchment_ds[self.catchment_coord].values) # Read geopackage, determine schema and "divides" layer - is_new_NHF_schema: bool = self._is_new_NHF_schema(gpkg_file, "reference_flowpaths") - gpkg_gdf = gpd.read_file(gpkg_file, layer="divides") + is_new_NHF_schema: bool = self._is_new_NHF_schema(gpkg_file, consts.NHF_REF_OBJECT) + gpkg_gdf = gpd.read_file(gpkg_file, layer=consts.GPKG_DIVIDES_LYR) if gpkg_gdf.empty: raise ValueError("No polygon geometries found in GeoPackage") # Check schema and assign catchment ID field. if is_new_NHF_schema: - self.catchment_field = "div_id" + self.catchment_field = consts.NHF_DIV_ID else: - self.catchment_field = "divide_id" + self.catchment_field = consts.NONNHF_DIV_ID # Normalize catchment ids in gpkg with a 'cat-' prefix for consistency. gpkg_gdf[self.catchment_field] = self._normalize_catchment_ids(gpkg_gdf[self.catchment_field].values) @@ -56,8 +51,31 @@ def __init__(self, catchment_netcdf_file: str, gpkg_file: str, # Check if catchments from netcdf and geopackage match if set(nc_catchments) != set(gpkg_catchment_list): - raise ValueError("There is a mistmatch between catchment IDs in geopackage and netcdf") + raise ValueError("There is a mistmatch between catchment IDs in geopackage and netcdf") + + @property + def nwm_output_class(self): + return self._output_class + + @property + def nwm_category(self): + return self._category + + @property + def nwm_domain(self): + return self._domain + + @nwm_output_class.setter + def nwm_output_class(self, value): + self._output_class = value + + @nwm_category.setter + def nwm_category(self, value): + self._category = value + @nwm_domain.setter + def nwm_domain(self, value): + self._domain = value def set_template_grid(self, template_grid_path: str): self.ds_template_grid = xr.open_dataset(template_grid_path) @@ -89,102 +107,169 @@ def _snap_to_grid(self, value: float, origin: float, resolution: int, direction: elif direction == np.ceil: return origin + np.ceil((value - origin) / resolution) * resolution - def create_template_grid_netcdf_using_config(self, template_grid_netcdf_path: str) -> None: + def create_template_grid_netcdf_using_config(self, mdata: NetCDFMetadata, template_netcdf_folder: str) -> None: """ Create a template grid aligned to a reference grid defined in config.json. The template grid covers the extents in the geopackage (usually basin level). """ - # Read config file - with open(self._config_path, "r") as f: - config = json.load(f) - - # Find matching entry - entry = next((c_item for c_item in config["files"] if - c_item["class"] == self._output_class and - c_item["category"] == self._category and - c_item["domain"] == self._domain), None) - if entry is None: - raise ValueError(f"Cannot find a config file entry that matches {self._output_class}, {self._category} and {self._domain}") - - origin_x = entry["origin"]["x"] - origin_y = entry["origin"]["y"] - res_x = entry["resolution"]["x"] - res_y = entry["resolution"]["y"] - wkt = entry["crs_wkt"] - file_name = entry["file_path"] - x_name = entry["location_name"]["x"] - y_name = entry["location_name"]["y"] - - ds = xr.open_dataset(file_name) - # To do: Have to figure out a workflow when CRS is "Not Available" - target_crs = CRS.from_user_input(wkt) + + os.makedirs(template_netcdf_folder, exist_ok = True) + + self._output_class = mdata.output_class + self._category = mdata.category + self._domain = mdata.domain + origin_x = mdata.origin_x + origin_y = mdata.origin_y + res_x = mdata.resolution_x + res_y = mdata.resolution_y + wkt = mdata.crs_wkt + file_name = mdata.file_path + x_name = mdata.x_name + y_name = mdata.y_name + + # Check if the template file already exists for this request + template_nc_name = self._geo_id + '_' + self._output_class + '_' + self._category + '_' + self._domain + '.nc' + template_nc_file = os.path.join(template_netcdf_folder, template_nc_name) + if os.path.isfile(template_nc_file): + print(f"Reusing existing template file in local for {self._output_class}, {self._category}, {self._domain}") + else: + ds = xr.open_dataset(file_name) + # To do: Have to figure out a workflow when CRS is "Not Available" + target_crs = CRS.from_user_input(wkt) + + gdf = self._gpkg_gdf.to_crs(target_crs) + geom = unary_union(gdf.geometry) + + # Get bounding box and snap to origin in config + minx, miny, maxx, maxy = gdf.total_bounds + + snapped_minx = self._snap_to_grid(minx, origin_x, res_x, np.floor) + snapped_maxx = self._snap_to_grid(maxx, origin_x, res_x, np.ceil) + snapped_miny = self._snap_to_grid(miny, origin_y, res_y, np.floor) + snapped_maxy = self._snap_to_grid(maxy, origin_y, res_y, np.ceil) + + ds_subset = ds.sel( + { + x_name: slice(snapped_minx, snapped_maxx), + y_name: slice(snapped_miny, snapped_maxy), + } + ) + x_subset = ds_subset[x_name].values + y_subset = ds_subset[y_name].values + xx, yy = np.meshgrid(x_subset, y_subset) + + mask = intersects_xy(geom, xx, yy) + mask_da = xr.DataArray(mask, + dims=(y_name, x_name), + coords={ + y_name: ds_subset[y_name], + x_name: ds_subset[x_name], + }, + ) + ds_masked = ds_subset.copy() + + for var in ds_subset.data_vars: + da = ds_subset[var] + # Only mask numeric variables + if np.issubdtype(da.dtype, np.number): + ds_masked[var] = da.where(mask_da) + else: + ds_masked[var] = da # Leave non-numeric untouched + + # Drop empty rows/cols that are outside of the polygon boundary + ds_clipped = ds_masked.dropna(dim=y_name, how="all") + ds_clipped = ds_clipped.dropna(dim=x_name, how="all") + + # Create crs as a scalar variable. + crs_attrs = ds_clipped["crs"].attrs + ds_clipped = ds_clipped.drop_encoding() + del ds_clipped["crs"] + ds_clipped["crs"] = xr.DataArray("", dims=()) + ds_clipped["crs"].attrs = crs_attrs + + # Save to nc file + ds_clipped.to_netcdf(template_nc_file) + print(f"NetCDF template grid written to {template_nc_file}") - gdf = self._gpkg_gdf.to_crs(target_crs) - geom = unary_union(gdf.geometry) + self.ds_template_grid = xr.open_dataset(template_nc_file) + + def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> None: + # change variable name in the randomvals.nc This is strictly for testing purposes. + # The case statements should be removed before going into production. + produce_output = False + ds_test = self._catchment_ds + data_modified = False + cat_class_domain = mdata.output_class + '_' + mdata.category + '_' + mdata.domain + target_variables_dict = mdata.data_variables_dim + for var_name, dims in target_variables_dict.items(): + if var_name in ds_test.data_vars: + continue # the variable exists in ngen output. We don't need to do anything - # Get bounding box and snap to origin in config - minx, miny, maxx, maxy = gdf.total_bounds - - snapped_minx = self._snap_to_grid(minx, origin_x, res_x, np.floor) - snapped_maxx = self._snap_to_grid(maxx, origin_x, res_x, np.ceil) - snapped_miny = self._snap_to_grid(miny, origin_y, res_y, np.floor) - snapped_maxy = self._snap_to_grid(maxy, origin_y, res_y, np.ceil) - - ds_subset = ds.sel( - { - x_name: slice(snapped_minx, snapped_maxx), - y_name: slice(snapped_miny, snapped_maxy), - } - ) - x_subset = ds_subset[x_name].values - y_subset = ds_subset[y_name].values - xx, yy = np.meshgrid(x_subset, y_subset) - - mask = intersects_xy(geom, xx, yy) - mask_da = xr.DataArray(mask, - dims=(y_name, x_name), - coords={ - y_name: ds_subset[y_name], - x_name: ds_subset[x_name], - }, - ) - ds_masked = ds_subset.copy() - - for var in ds_subset.data_vars: - da = ds_subset[var] - # Only mask numeric variables - if np.issubdtype(da.dtype, np.number): - ds_masked[var] = da.where(mask_da) - else: - ds_masked[var] = da # Leave non-numeric untouched + # if the variable doesn't exist, we will find a matching variable with those dims. + # make a copy of it and use it for testing. + dims_set = sorted([str(dim) for dim in dims]) + print(f"{var_name} is missing. Searching for another variable with same dimensions: {dims}...") + match_found = False + for existing_var in ds_test.data_vars: + # Get existing dimensions as a sorted list of strings + existing_dims_set = sorted([str(dim) for dim in ds_test[existing_var].dims]) + if dims_set == existing_dims_set: # Compare both dimensional sets + print(f"Found matching variable. Copying nc structure from {existing_var}") + + # xr.full_like preserves the exact multi-axis coordinates, shape, and chunking + ds_test[var_name] = xr.full_like(ds_test[existing_var], fill_value=-1.0) + + # Strip out old attributes to prevent metadata contamination + ds_test[var_name].attrs = {"long_name": f"Generated {var_name}", "units": "unknown"} + + match_found = True + data_modified = True + break # Iterate to the next variable. + + if not match_found: + print(f"No existing variable matches the dimensions {dims} for '{var_name}'.") + + if data_modified: + print(f"Data modified for testing: {cat_class_domain}") + else: + print(f"No changes needed. File matches NWM layout for {cat_class_domain}") - # Drop empty rows/cols that are outside of the polygon boundary - ds_clipped = ds_masked.dropna(dim=y_name, how="all") - ds_clipped = ds_clipped.dropna(dim=x_name, how="all") - - # Reinforce crs as a scalar variable. - # This removes the string1 dimension that gets added - # and creates crs as a string scalar variable. - crs_attrs = ds_clipped["crs"].attrs - ds_clipped = ds_clipped.drop_encoding() - del ds_clipped["crs"] - ds_clipped["crs"] = xr.DataArray("", dims=()) - ds_clipped["crs"].attrs = crs_attrs - - # Save - ds_clipped.to_netcdf(template_grid_netcdf_path) - self.ds_template_grid = xr.open_dataset(template_grid_netcdf_path) - - print(f"NetCDF template grid written to {template_grid_netcdf_path}") - - def produce_nwm_output_grid(self, output_dir: str) -> None: + match cat_class_domain: + case "analysis_assim_land_conus": + # analysis_assim.land.conus + produce_output = True + case "analysis_assim_terrain_rt_conus" | "medium_range_blend_terrain_rt_conus": + # analysis_assim.terrain_rt.conus; medium_range_blend.terrain_rt.conus + produce_output = True + case "long_range_land_2_conus": + # long_range.land_2.conus + produce_output = True + case "medium_range_blend_land_conus": + # medium_range_blend.land.conus + produce_output = True + + if produce_output: + catchment_grid = self.build_catchment_id_grid(mdata.x_name, mdata.y_name) + mapped_grid = self.map_catchment_data_to_grid(ds_test, catchment_grid, consts.DIM_CATCHMENTS, mdata.x_name, mdata.y_name) + + start_time = time.perf_counter() + self.write_netcdf_per_timestep(mapped_grid, output_dir, consts.DIM_TIME) + end_time = time.perf_counter() + duration_minutes = (end_time - start_time) / 60 + print(f"Function execution time: {duration_minutes:.4f} minutes") + else: + print(f"Production skipped for {cat_class_domain}") + + def obsolete_produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> None: # change variable name in the randomvals.nc This is strictly for testing purposes. # The case statements should be removed before going into production. - cat_class_domain = self._output_class + '_' + self._category + '_' + self._domain + produce_output = False + cat_class_domain = mdata.output_class + '_' + mdata.category + '_' + mdata.domain + ds_test = self._catchment_ds match cat_class_domain: case "analysis_assim_land_conus": # analysis_assim.land.conus - self._catchment_ds = self._catchment_ds.rename({ + ds_test = self._catchment_ds.rename({ 'sm_frac_0.4m': 'ACCET', 'sm_profile_0.1m': 'ACSNOM', 'sm_profile_0.4m': 'EDIR', @@ -192,16 +277,18 @@ def produce_nwm_output_grid(self, output_dir: str) -> None: 'sm_profile_2m': 'QRAIN', 'SWE_mm': 'QSNOW' }) + produce_output = True case "analysis_assim_terrain_rt_conus" | "medium_range_blend_terrain_rt_conus": # analysis_assim.terrain_rt.conus; medium_range_blend.terrain_rt.conus - self._catchment_ds = self._catchment_ds.drop_vars(["sm_profile_0.4m", "sm_profile_1.5m", "sm_profile_2m", "SWE_mm"]) - self._catchment_ds = self._catchment_ds.rename({ + ds_test = self._catchment_ds.drop_vars(["sm_profile_0.4m", "sm_profile_1.5m", "sm_profile_2m", "SWE_mm"]) + ds_test = self._catchment_ds.rename({ 'sm_frac_0.4m': 'sfcheadsubrt', 'sm_profile_0.1m': 'zwattablrt' }) + produce_output = True case "long_range_land_2_conus": # long_range.land_2.conus - self._catchment_ds = self._catchment_ds.rename({ + ds_test = self._catchment_ds.rename({ 'sm_frac_0.4m': 'ACCET', 'sm_profile_0.1m': 'UGDRNOFF', 'sm_profile_0.4m': 'SOILSAT', @@ -209,9 +296,10 @@ def produce_nwm_output_grid(self, output_dir: str) -> None: 'sm_profile_2m': 'SOILSAT_TOP', 'SWE_mm': 'SNEQV' }) + produce_output = True case "medium_range_blend_land_conus": # medium_range_blend.land.conus - self._catchment_ds = self._catchment_ds.rename({ + ds_test = self._catchment_ds.rename({ 'sm_frac_0.4m': 'FSA', 'sm_profile_0.1m': 'FIRA', 'sm_profile_0.4m': 'HFX', @@ -219,77 +307,86 @@ def produce_nwm_output_grid(self, output_dir: str) -> None: 'sm_profile_2m': 'LH', 'SWE_mm': 'SNEQV' }) + produce_output = True + + if produce_output: + catchment_grid = self.build_catchment_id_grid(mdata.x_name, mdata.y_name) + mapped_grid = self.map_catchment_data_to_grid(ds_test, catchment_grid, consts.DIM_CATCHMENTS, mdata.x_name, mdata.y_name) + + start_time = time.perf_counter() + self.write_netcdf_per_timestep(mapped_grid, output_dir, consts.DIM_TIME) + end_time = time.perf_counter() + duration_minutes = (end_time - start_time) / 60 + print(f"Function execution time: {duration_minutes:.4f} minutes") + else: + print(f"Production skipped for {cat_class_domain}") - catchment_grid = self.build_catchment_id_grid("x", "y") # Change hardcoded values later - mapped_grid = self.map_catchment_data_to_grid(catchment_grid, consts.DIM_CATCHMENTS) - - start_time = time.perf_counter() - self.write_netcdf_per_timestep(mapped_grid, output_dir, consts.DIM_TIME) - end_time = time.perf_counter() - duration_minutes = (end_time - start_time) / 60 - print(f"Function execution time: {duration_minutes:.4f} minutes") - - def build_catchment_id_grid(self, x_dim: str = "x", y_dim: str = "y") -> xr.DataArray: + def build_catchment_id_grid(self, x_dim_name: str, y_dim_name: str) -> xr.DataArray: """ Returns a DataArray (y, x) where each cell in the basin-level grid contains a catchment ID. """ - ds = self.ds_template_grid - x = ds[x_dim].values - y = ds[y_dim].values - - # Origin point is assumed to be bottom-left. It may be others too. - # So, sort the values for consistency - if x[0] > x[-1]: - ds = ds.sortby(x_dim) - x = ds[x_dim].values - if y[0] > y[-1]: - ds = ds.sortby(y_dim) - y = ds[y_dim].values - - # Build centroid points and create geodataframe - xx, yy = np.meshgrid(x, y) - df_points = pd.DataFrame({ - "x": xx.ravel(), - "y": yy.ravel() - }) - crs = CRS.from_wkt(ds["crs"].attrs["spatial_ref"]) - gdf_ncgrid_points = gpd.GeoDataFrame( - df_points, - geometry=gpd.points_from_xy(df_points["x"], df_points["y"]), - crs=crs - ) - - # Spatial join with catchments for grid point to catchment association - # To do: Using sjoin here. For larger areas, we may need to revisit if computing efficiency drops. - gdf_poly = self._gpkg_gdf.to_crs(crs) - joined = gpd.sjoin( - gdf_ncgrid_points, - gdf_poly[[self.catchment_field, "geometry"]], - how="left", - predicate="within" - ) - catchment_ids = joined[self.catchment_field].to_numpy() - catchment_grid = catchment_ids.reshape(len(y), len(x)) + try: + ds = self.ds_template_grid + x = ds[x_dim_name].values + y = ds[y_dim_name].values + + # Origin point is assumed to be bottom-left. It may be others too. + # So, sort the values for consistency + if x[0] > x[-1]: + ds = ds.sortby(x_dim_name) + x = ds[x_dim_name].values + if y[0] > y[-1]: + ds = ds.sortby(y_dim_name) + y = ds[y_dim_name].values + + # Build centroid points and create geodataframe + xx, yy = np.meshgrid(x, y) + df_points = pd.DataFrame({ + x_dim_name: xx.ravel(), + y_dim_name: yy.ravel() + }) + crs = CRS.from_wkt(ds["crs"].attrs["spatial_ref"]) + gdf_ncgrid_points = gpd.GeoDataFrame( + df_points, + geometry=gpd.points_from_xy(df_points[x_dim_name], df_points[y_dim_name]), + crs=crs + ) - catchment_id_da = xr.DataArray( - catchment_grid, - dims=(y_dim, x_dim), - coords={y_dim: y, x_dim: x}, - name="catchment_id" - ) - # It is important to pass on the CRS info to the functions downstream - # Attaching the crs wkt as a xr.dataarray attribute - catchment_id_da.attrs["crs"] = ds["crs"].attrs["spatial_ref"] + # Spatial join with catchments for grid point to catchment association + # To do: Using sjoin here. For larger areas, we may need to revisit if computing efficiency drops. + gdf_poly = self._gpkg_gdf.to_crs(crs) + joined = gpd.sjoin( + gdf_ncgrid_points, + gdf_poly[[self.catchment_field, "geometry"]], + how="left", + predicate="within" + ) + catchment_ids = joined[self.catchment_field].to_numpy() + catchment_grid = catchment_ids.reshape(len(y), len(x)) + + catchment_id_da = xr.DataArray( + catchment_grid, + dims=(y_dim_name, x_dim_name), + coords={y_dim_name: y, x_dim_name: x}, + name="catchment_id" + ) + # It is important to pass on the CRS info to the functions downstream + # Attaching the crs wkt as a xr.dataarray attribute + catchment_id_da.attrs["crs"] = ds["crs"].attrs["spatial_ref"] + except Exception as e: + raise RuntimeError(f"Error in building catchment grid: {e}") from e + return catchment_id_da - def map_catchment_data_to_grid(self, catchment_grid: xr.DataArray, - catchment_dim: str = consts.DIM_CATCHMENTS + def map_catchment_data_to_grid(self, ds: xr.Dataset, catchment_grid: xr.DataArray, catchment_dim: str, + x_dim_name: str, y_dim_name: str + ) -> xr.Dataset: """ Assign catchment-based variables onto basin-level grid using the catchment_id grid. """ - ds_data = self._catchment_ds + ds_data = ds # Convert catchment IDs to index positions catchment_ids = ds_data[catchment_dim].values @@ -319,8 +416,8 @@ def map_catchment_data_to_grid(self, catchment_grid: xr.DataArray, # Attach coordinates from template ds_out = ds_out.assign_coords({ - "x": self.ds_template_grid["x"], - "y": self.ds_template_grid["y"] + x_dim_name: self.ds_template_grid[x_dim_name], + y_dim_name: self.ds_template_grid[y_dim_name] }) # Add CRS info from template grid @@ -373,6 +470,5 @@ def write_netcdf_per_timestep(self, mapped_grid: xr.Dataset, output_dir: str, ti # Output filename and save t_str = np.datetime_as_string(t, unit='s') formatted_t = t_str.replace('-', '_').replace(':', '_') - output_file = os.path.join(output_dir, f"grid_{formatted_t}.nc") # To do: Get this as function argument + output_file = os.path.join(output_dir, f"nwm.{self._geo_id}.{self._output_class}.{self._category}.{self._domain}.{formatted_t}.nc") # To do: Get this as function argument ds_t.to_netcdf(output_file) - diff --git a/data_assimilation_engine/output_variables/DataReader.py b/data_assimilation_engine/output_variables/DataReader.py index 1c86f04..b5f8ed1 100644 --- a/data_assimilation_engine/output_variables/DataReader.py +++ b/data_assimilation_engine/output_variables/DataReader.py @@ -29,7 +29,7 @@ def _infer_catchment(self): # Find coordinate with IDs for coord_name in ds.coords: coord = ds[coord_name] - if coord.dtype.kind in {"U", "S", "O"} and coord.ndim == 1: #assumes catchments are string type. + if coord.dtype.kind in {"i", "u"} and coord.dtype.itemsize == 8 and coord.ndim == 1: #assumes catchments are the only long type. return coord.dims[0], coord_name raise ValueError("Could not find catchment IDs") @@ -39,13 +39,19 @@ def assign_random_values(self, output_file: str) -> None: Assign random values between 1 and 10 to all data variables. This function can be deleted once we address the catchment netcdf writing issue. """ - + var_list = ['sm_frac_0.4m', 'sm_profile_0.1m', 'sm_profile_0.4m', 'sm_profile_1.5m', 'sm_profile_2m', 'SWE_mm'] with fsspec.open(self.netcdf_file, mode="rb") as f: ds = xr.open_dataset(f) if ds.sizes.get(consts.DIM_TIME, 0) > 48: ds_48 = ds.isel(time=slice(0, 48)) else: ds_48 = ds + + # Check if all the vairables are present in the netcdf. If not add it. Only for testing. + for var in var_list: + if var not in ds_48.data_vars: + ds_48[var] = ds['SWE_mm'].copy(deep = True) + for var_name in ds_48.data_vars: print(f"Assigning random values to {var_name}") random_values = np.random.uniform( @@ -53,5 +59,26 @@ def assign_random_values(self, output_file: str) -> None: ) ds_48[var_name].values = random_values + ds_48.to_netcdf(output_file) + print(f"Saved updated dataset to {output_file}") + + def add_missing_variables(self, output_file) -> None: + """ + Add any missing variables in the variables list to the netcdf file. + This function can be deleted once we address the catchment netcdf writing issue. + """ + var_list = ['sm_frac_0.4m', 'sm_profile_0.1m', 'sm_profile_0.4m', 'sm_profile_1.5m', 'sm_profile_2m', 'SWE_mm'] + with fsspec.open(self.netcdf_file, mode="rb") as f: + ds = xr.open_dataset(f) + if ds.sizes.get(consts.DIM_TIME, 0) > 48: + ds_48 = ds.isel(time=slice(0, 48)) + else: + ds_48 = ds + + # Check if all the vairables are present in the netcdf. If not add it. Only for testing. + for var in var_list: + if var not in ds_48.data_vars: + ds_48[var] = ds['SWE_mm'].copy(deep = True) + ds_48.to_netcdf(output_file) print(f"Saved updated dataset to {output_file}") \ No newline at end of file diff --git a/data_assimilation_engine/output_variables/consts.py b/data_assimilation_engine/output_variables/consts.py index 6ad1cd7..6f2f945 100644 --- a/data_assimilation_engine/output_variables/consts.py +++ b/data_assimilation_engine/output_variables/consts.py @@ -4,9 +4,36 @@ 'SNLIQ', 'SNEQV', 'QSNOW', 'SOIL_T', 'SOIL_M', 'SFCRNOFF', 'ACCECAN', 'ACCEDIR', 'ACCETRAN', 'UGDRNOFF', 'GRDFLX', 'TRAD', 'FSA', 'CANWAT', 'LH', 'FIRA', 'HFX'] -DIM_TIME = "time" -DIM_CATCHMENTS = "catchments" -GPKG_GEOMETRY_TYPE_IDENTIFIER = "geometry_type" +NOMADS_BASE_URL = 'https://nomads.ncep.noaa.gov/pub/data/nccf/com/nwm/prod' +NWM_DATA_LOCAL_FOLDER = 'nwm_ref_files' +NWM_NGEN_TEMPLATE_FOLDER = 'ngen_templates' +NWM_NGEN_OUTPUT_FOLDER = 'ngen_outputs' +NWM_OUTPUT_FOLDER = 'nwm_output' +NWM_CONFIG_LOCAL_FOLDER = 'configs' +NWM_CONFIG_FILE_NAME = 'metadata' +NWM_CONFIG_FILE_SUFFIX = '_config' +DIM_TIME = 'time' +DIM_CATCHMENTS = 'catchments' +NHF_REF_OBJECT = 'reference_flowpaths' +NHF_DIV_ID = 'div_id' +NONNHF_DIV_ID = 'divide_id' +GPKG_DIVIDES_LYR = 'divides' +GPKG_GEOMETRY_TYPE_IDENTIFIER = 'geometry_type' +GPKG_FILE_PREFIX = 'gauge_' X_LOC = ['x', 'lon', 'longitude'] Y_LOC = ['y', 'lat', 'latitude'] CRS_INFO = ['crs', 'CRS', 'spatial_ref'] +JSON_X = 'x' +JSON_Y = 'y' +JSON_FILE_PATH = 'file_path' +JSON_RESOLUTION = 'resolution' +JSON_ORIGIN = 'origin' +JSON_LOC = 'location_name' +JSON_CRS = 'crs_wkt' +JSON_NWM_VAR = 'nwm_variables' +JSON_DIMENSION = 'nwm_dimensions' +JSON_VAR_DIM_MAP = 'nwm_var_dimensions' +JSON_SCALAR_VAR = 'nwm_scalar_variables' +JSON_CLASS = 'class' +JSON_CATEGORY = 'category' +JSON_DOMAIN = 'domain' diff --git a/data_assimilation_engine/output_variables/utils.py b/data_assimilation_engine/output_variables/utils.py index 05d8986..8a18994 100644 --- a/data_assimilation_engine/output_variables/utils.py +++ b/data_assimilation_engine/output_variables/utils.py @@ -1,4 +1,5 @@ import os +import shutil import requests import xarray as xr import csv @@ -31,17 +32,25 @@ def parse_filename_metadata(filename: str) -> Tuple[str, str, str]: # endregion # region data download -def download_nwm_data_from_server(base_url: str, local_root: str) -> None: +def download_nwm_data_from_server(local_root: str, re_download: bool) -> None: """ Main function to download a unique set of output files from the server """ - if not os.path.exists(local_root): - os.makedirs(local_root) + os.makedirs(local_root, exist_ok = True) + nwm_data_folder = os.path.join(local_root, consts.NWM_DATA_LOCAL_FOLDER) + os.makedirs(nwm_data_folder, exist_ok = True) + + # Re-download if requested + if (re_download): + if len(os.listdir(nwm_data_folder)) > 0: + # Delete all the contents in the local folder and re-create + shutil.rmtree(nwm_data_folder) + os.makedirs(nwm_data_folder, exist_ok = True) formatted_date = datetime.now().strftime("%Y%m%d") - formatted_url = f"{base_url}/nwm.{formatted_date}/" - existing_keys = build_existing_keys(local_root) # build class, category, domain keys in local folder, if exists. - download_nwm_data_recursive(formatted_url, local_root, existing_keys) + formatted_url = f"{consts.NOMADS_BASE_URL}/nwm.{formatted_date}/" + existing_keys = build_existing_keys(nwm_data_folder) # build class, category, domain keys in local folder, if exists. + download_nwm_data_recursive(formatted_url, nwm_data_folder, existing_keys) def download_nwm_data_recursive(download_url: str, local_path: str, existing_keys: Set[Tuple[str, str, str]] @@ -77,7 +86,7 @@ def download_nwm_data_recursive(download_url: str, local_path: str, os.makedirs(local_path) save_path = os.path.join(local_path, file_link) download_file(file_url, save_path) - # Add to existing set AFTER successful download + # Add to existing set after successful download existing_keys.add(key) def download_file(url: str, save_path: str) -> None: @@ -144,35 +153,41 @@ def __init__( self.category = category self.domain = domain - def key(self) -> tuple[str, str, str]: + def key(self) -> tuple[str, str, str]: # not used yet. """ Unique identifier for duplicate checking """ return (self.output_class, self.category, self.domain) - def __repr__(self) -> str: #for debugging purposes + def __repr__(self) -> str: # for debugging purposes return ( f"NetCDFMetadata(file_path={self.file_path}, " f"class={self.output_class}, category={self.category}, domain={self.domain})" ) -def obtain_metadata_information(local_root: str, output_name: str) -> None: +def obtain_metadata_information(local_root: str) -> None: """ Parse the metadata information from the downloaded NWM output files and write a CSV and a json """ if not os.path.exists(local_root): raise Exception(f"Folder does not exist: {local_root}") - metadata_list = process_downloaded_files(local_root) - output_csv = os.path.join(local_root, output_name + ".csv") + nwm_local_folder = os.path.join(local_root, consts.NWM_DATA_LOCAL_FOLDER) + if not os.path.exists(nwm_local_folder): + raise Exception(f"Folder does not exist: {nwm_local_folder}") + + nwm_config_folder = os.path.join(local_root, consts.NWM_CONFIG_LOCAL_FOLDER) + os.makedirs(nwm_config_folder, exist_ok = True) + metadata_list = extract_metadata_from_downloaded_files(nwm_local_folder) + output_csv = os.path.join(nwm_config_folder, consts.NWM_CONFIG_FILE_NAME + ".csv") write_metadata_to_csv(metadata_list, output_csv) - output_json = os.path.join(local_root, output_name + "_config.json") - ngen_json = os.path.join(local_root, output_name + "_ngenconfig.json") + output_json = os.path.join(nwm_config_folder, + consts.NWM_CONFIG_FILE_NAME + consts.NWM_CONFIG_FILE_SUFFIX + ".json") + ngen_json = os.path.join(nwm_config_folder, + consts.NWM_CONFIG_FILE_NAME + '_ngen' + consts.NWM_CONFIG_FILE_SUFFIX + ".json") write_metadata_to_config_json(metadata_list, output_json, ngen_json) - - -def process_downloaded_files(local_root: str) -> List[NetCDFMetadata]: +def extract_metadata_from_downloaded_files(local_root: str) -> List[NetCDFMetadata]: """ Process downloaded files and create a list of metadata objects for config json """ @@ -182,11 +197,11 @@ def process_downloaded_files(local_root: str) -> List[NetCDFMetadata]: for file in files: if file.endswith(".nc"): file_path = os.path.join(root, file) - metadata_list.append(extract_netcdf_metadata(file_path)) + metadata_list.append(extract_netcdf_metadata_from_netcdf(file_path)) return metadata_list -def extract_netcdf_metadata(file_path: str) -> NetCDFMetadata: +def extract_netcdf_metadata_from_netcdf(file_path: str) -> NetCDFMetadata: filename = os.path.basename(file_path) output_class, category, domain = parse_filename_metadata(filename) @@ -303,27 +318,27 @@ def write_metadata_to_config_json(metadata_list: List[NetCDFMetadata], output_js info_list = [] for mdata in metadata_list: metadata_info_dict = { - "file_path": mdata.file_path, - "resolution": { - "x": mdata.resolution_x, - "y": mdata.resolution_y, + consts.JSON_FILE_PATH: mdata.file_path, + consts.JSON_RESOLUTION: { + consts.JSON_X: mdata.resolution_x, + consts.JSON_Y: mdata.resolution_y, }, - "origin": { - "x": mdata.origin_x, - "y": mdata.origin_y, + consts.JSON_ORIGIN: { + consts.JSON_X: mdata.origin_x, + consts.JSON_Y: mdata.origin_y, }, - "location_name": { - "x": mdata.x_name, - "y": mdata.y_name, + consts.JSON_LOC: { + consts.JSON_X: mdata.x_name, + consts.JSON_Y: mdata.y_name, }, - "crs_wkt": mdata.crs_wkt, - "nwm_variables": mdata.nwm_variables, - "nwm_dimensions": mdata.nwm_dimensions, - "nwm_scalar_variables": mdata.scalar_variables, - "nwm_var_dimensions": mdata.data_variables_dim, - "class": mdata.output_class, - "category": mdata.category, - "domain": mdata.domain + consts.JSON_CRS: mdata.crs_wkt, + consts.JSON_NWM_VAR: mdata.nwm_variables, + consts.JSON_DIMENSION: mdata.nwm_dimensions, + consts.JSON_SCALAR_VAR: mdata.scalar_variables, + consts.JSON_VAR_DIM_MAP: mdata.data_variables_dim, + consts.JSON_CLASS: mdata.output_class, + consts.JSON_CATEGORY: mdata.category, + consts.JSON_DOMAIN: mdata.domain } info_list.append(metadata_info_dict) @@ -335,6 +350,7 @@ def write_metadata_to_config_json(metadata_list: List[NetCDFMetadata], output_js print(f"Config JSON written to: {output_json}") + info_list = [] for mdata in metadata_list: metadata_info_dict = { @@ -419,6 +435,39 @@ def debug_netcdf_structure_in_folder(folder_path: str) -> None: except Exception as e: print(f"\n Failed to read file: {file_path}") print(f"Error: {e}") + +def read_output_variables_info_from_config(json_file: str) -> List[NetCDFMetadata]: + """ + Parses a multi-element JSON string into a list of NetCDFMetadata objects. + """ + netcdf_metadata_list: List[NetCDFMetadata] = [] + if os.path.isfile(json_file): + with open(json_file, "r", encoding="utf-8") as file_stream: + config_data = json.load(file_stream) + + for item in config_data.get("files", []): + info_item = NetCDFMetadata( + file_path = item.get(consts.JSON_FILE_PATH, ''), + resolution_x = item.get(consts.JSON_RESOLUTION, {}).get(consts.JSON_X, -9999), + resolution_y = item.get(consts.JSON_RESOLUTION, {}).get(consts.JSON_Y, -9999), + origin_x = item.get(consts.JSON_ORIGIN, {}).get(consts.JSON_X, -9999), + origin_y = item.get(consts.JSON_ORIGIN, {}).get(consts.JSON_Y, -9999), + x_loc = item.get(consts.JSON_LOC, {}).get(consts.JSON_X, ''), + y_loc = item.get(consts.JSON_LOC, {}).get(consts.JSON_Y, ''), + wkt = item.get(consts.JSON_CRS, ''), + variables = item.get(consts.JSON_NWM_VAR, ''), + dimensions = item.get(consts.JSON_DIMENSION, ''), + scalar_variables = item.get(consts.JSON_SCALAR_VAR, {}), + data_variables_dim = item.get(consts.JSON_VAR_DIM_MAP, {}), + output_class = item.get(consts.JSON_CLASS, ''), + category = item.get(consts.JSON_CATEGORY, ''), + domain = item.get(consts.JSON_DOMAIN, '') + ) + netcdf_metadata_list.append(info_item) + else: + raise ValueError("Specified config file does not exist") + + return netcdf_metadata_list # endregion # region (to delete) create template grids diff --git a/netcdf_production_sample.py b/netcdf_production_sample.py index e6f3de4..8a38403 100644 --- a/netcdf_production_sample.py +++ b/netcdf_production_sample.py @@ -1,7 +1,10 @@ import argparse +import os +from datetime import datetime from data_assimilation_engine.output_variables.DataReader import DataReader from data_assimilation_engine.output_variables.DataProcessor import DataProcessor import data_assimilation_engine.output_variables.utils as utils +import data_assimilation_engine.output_variables.consts as consts def randomize_values(netcdf_file: str, output_file: str) -> None: #Usage: @@ -10,10 +13,11 @@ def randomize_values(netcdf_file: str, output_file: str) -> None: reader = DataReader(netcdf_file) reader.assign_random_values(output_file) -def create_template_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str, config_json_file: str): +def create_template_grid_for_gpkg(netcdf_file: str, gpkg_file: str, template_grid_file: str): #Usage # python netcdf_production_sample.py create-template-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json - processor = DataProcessor(netcdf_file, gpkg_file, config_json_file, 'analysis_assim', 'land', 'conus') + #processor = DataProcessor(netcdf_file, gpkg_file, config_json_file, 'analysis_assim', 'land', 'conus') + processor = DataProcessor(netcdf_file, gpkg_file) processor.create_template_grid_netcdf_using_config(template_grid_file) def create_nwm_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str, config_json_file: str): @@ -24,15 +28,15 @@ def create_nwm_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str, c output_dir = 'sample_data/sample_netcdf/sample_output/new_test' processor.produce_nwm_output_grid(output_dir) -def download_netcdf_from_nomads(download_url: str, output_folder: str): +def download_netcdf_from_nomads(output_folder: str, re_download: bool = False): #Usage: - # python netcdf_production_sample.py download-nwm-outputs https://nomads.ncep.noaa.gov/pub/data/nccf/com/nwm/prod sample_data/nwm_output - utils.download_nwm_data_from_server(download_url, output_folder) + # python netcdf_production_sample.py download-nwm-outputs sample_data + utils.download_nwm_data_from_server(output_folder, re_download) -def extract_netcdf_metadata(netcdf_root_folder: str, output_file_name: str): +def extract_netcdf_metadata(netcdf_root_folder: str): #Usage: # python netcdf_production_sample.py obtain-netcdf-metadata sample_data/nwm_output metadata - utils.obtain_metadata_information(netcdf_root_folder, output_file_name) + utils.obtain_metadata_information(netcdf_root_folder) #utils.debug_netcdf_structure_in_folder(netcdf_root_folder) def create_template_nwm_grids_data(netcdf_root_folder: str, templates_folder: str): @@ -45,6 +49,49 @@ def combine_basin_grids(reference_grid: str, netcdf_folder: str, output_folder: # python netcdf_production_sample.py create-combined-basin-grid sample_data/nwm_output/analysis_assim/nwm.t00z.analysis_assim.land.tm00.conus.nc sample_data/sample_netcdf/sample_output/merge_test sample_data/sample_netcdf/sample_output/merge_test utils.create_combined_basin_netcdf_products(reference_grid, netcdf_folder, output_folder) +def overall_netcdf_workflow(ngen_netcdf_output_file: str, ngen_gpkg_file: str, output_folder: str): + #Usage + # python netcdf_production_sample.py test-overall-workflow sample_data/outputs_0629/ngen_outputs/catchment_output_sr_01123000.nc sample_data/sample_gpkg/gauge_01123000.gpkg sample_data/outputs_0629 + download = False + create_config = False + if download: + re_download = False + download_netcdf_from_nomads(output_folder, re_download) # Download unqiue set of NWM data + print('Downloaded NWM data from NOMADS') + + if create_config: + # Create the config file for the nwm output netcdf files + extract_netcdf_metadata(output_folder) + print('Extracted netcdf metadata') + + # Read all metadata from the config file for each NWM output category, class and domain. + json_file = os.path.join(output_folder, consts.NWM_CONFIG_LOCAL_FOLDER, + consts.NWM_CONFIG_FILE_NAME + consts.NWM_CONFIG_FILE_SUFFIX + ".json") + netcdf_metadata_list = [] + if os.path.isfile(json_file): + netcdf_metadata_list = utils.read_output_variables_info_from_config(json_file) + else: + raise ValueError("Specified config file does not exist") + print('Read output variables info from config') + + # Begin data processing + # reader = DataReader(ngen_netcdf_output_file) + # randomized_nc_name = 'ngen_randomvals_' + datetime.now().strftime("%Y%m%d_%H%M%S") + '.nc' + # ngen_netcdf_output_file = os.path.join(output_folder, randomized_nc_name) + # reader.add_missing_variables(ngen_netcdf_output_file) + # reader.assign_random_values(ngen_netcdf_output_file) + + processor = DataProcessor(ngen_netcdf_output_file, ngen_gpkg_file) + ngen_template_nc_folder = os.path.join(output_folder, consts.NWM_NGEN_TEMPLATE_FOLDER) + nwm_output_folder = os.path.join(output_folder, consts.NWM_OUTPUT_FOLDER) + for mdata in netcdf_metadata_list: + print(f"Ready to process: {mdata.output_class}, {mdata.category}, {mdata.domain}") + if any(cat.lower() in mdata.category.lower() for cat in ['channel_rt', 'reservoir', 'total_water']): + print(f"The requested category - {mdata.category} - is not a gridded netcdf. The functionality is not implemented yet") + continue + processor.create_template_grid_netcdf_using_config(mdata, ngen_template_nc_folder) + processor.produce_nwm_output_grid(mdata, nwm_output_folder) + def main() -> None: parser = argparse.ArgumentParser(description="NetCDF Data Tool") @@ -57,7 +104,7 @@ def main() -> None: parser_randomize.add_argument("output_file") #create template grid - parser_template_grid = subparsers.add_parser("create-template-grid") + parser_template_grid = subparsers.add_parser("create_template_grid_for_gpkg") parser_template_grid.add_argument("catchment_netcdf_file") parser_template_grid.add_argument("catchment_gpkg_file") parser_template_grid.add_argument("template_grid_file") @@ -72,13 +119,12 @@ def main() -> None: #download current NWM output netcdfs from nomads server parser_nwm_download = subparsers.add_parser("download-nwm-outputs") - parser_nwm_download.add_argument("download_url") parser_nwm_download.add_argument("output_folder_path") + parser_nwm_download.add_argument("re_download") #Extract metadata info from current NWM output netcdfs that are downloaded parser_nwm_info = subparsers.add_parser("obtain-netcdf-metadata") parser_nwm_info.add_argument("local_folder_path") - parser_nwm_info.add_argument("file_name") #create template NWM output grids using the downloaded files from nomad server parser_template_grids = subparsers.add_parser("create-template-nwm-grid") @@ -90,23 +136,31 @@ def main() -> None: parser_basin_grids.add_argument("reference_grid") parser_basin_grids.add_argument("timestep_grids_folder") parser_basin_grids.add_argument("output_basin_grids_folder") - + + #overall netcdf workflow + overall_workflow = subparsers.add_parser("test-overall-workflow") + overall_workflow.add_argument("ngen_netcdf_output_file") + overall_workflow.add_argument("ngen_gpkg_file") + overall_workflow.add_argument("output_folder") + args = parser.parse_args() if args.command == "randomize": randomize_values(args.input_file, args.output_file) elif args.command == "create-template-grid": - create_template_grid(args.catchment_netcdf_file, args.catchment_gpkg_file, args.template_grid_file, args.config_json_file) + create_template_grid_for_gpkg(args.catchment_netcdf_file, args.catchment_gpkg_file, args.template_grid_file) elif args.command == "create-nwm-grid": create_nwm_grid(args.catchment_netcdf_file, args.catchment_gpkg_file, args.template_grid_file, args.config_json_file) elif args.command == "download-nwm-outputs": download_netcdf_from_nomads(args.download_url, args.output_folder_path) elif args.command == "obtain-netcdf-metadata": - extract_netcdf_metadata(args.local_folder_path, args.file_name) + extract_netcdf_metadata(args.local_folder_path) elif args.command == "create-template-nwm-grid": create_template_nwm_grids_data(args.nwm_output_grids_folder, args.nwm_template_grids_folder) elif args.command == "create-combined-basin-grid": combine_basin_grids(args.reference_grid, args.timestep_grids_folder, args.output_basin_grids_folder) + elif args.command == "test-overall-workflow": + overall_netcdf_workflow(args.ngen_netcdf_output_file, args.ngen_gpkg_file, args.output_folder) else: parser.print_help() From 4937f6bc0549c4e8a3704facf6d4efc5a20b5bf2 Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Wed, 1 Jul 2026 07:16:24 -0400 Subject: [PATCH 14/26] Replacing old with new NHF schema gpkgs --- sample_data/sample_gpkg/gages-09359500.gpkg | Bin 634880 -> 0 bytes sample_data/sample_gpkg/gages-13240000.gpkg | Bin 270336 -> 0 bytes ...ages-01123000.gpkg => gauge_01123000.gpkg} | Bin 225280 -> 299008 bytes sample_data/sample_gpkg/gauge_09353500.gpkg | Bin 0 -> 688128 bytes sample_data/sample_gpkg/gauge_09359500.gpkg | Bin 634880 -> 0 bytes sample_data/sample_gpkg/gauge_12175500.gpkg | Bin 0 -> 450560 bytes 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 sample_data/sample_gpkg/gages-09359500.gpkg delete mode 100644 sample_data/sample_gpkg/gages-13240000.gpkg rename sample_data/sample_gpkg/{gages-01123000.gpkg => gauge_01123000.gpkg} (56%) create mode 100644 sample_data/sample_gpkg/gauge_09353500.gpkg delete mode 100644 sample_data/sample_gpkg/gauge_09359500.gpkg create mode 100644 sample_data/sample_gpkg/gauge_12175500.gpkg diff --git a/sample_data/sample_gpkg/gages-09359500.gpkg b/sample_data/sample_gpkg/gages-09359500.gpkg deleted file mode 100644 index 09d8a294076c9f10d6628aa9f10b8ac66454f4db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 634880 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

;~*k+H?d-H%8} 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 J4okVz{{dHBZZ!Y^ diff --git a/sample_data/sample_gpkg/gages-13240000.gpkg b/sample_data/sample_gpkg/gages-13240000.gpkg deleted file mode 100644 index 90b72d793c1c05fd1d318c7c8f834e86c512e3d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270336 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ℑXhrQp%y6T0K!W8P6pZP?j8*x%Ykz^uY1 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%0Dt{1i}X0jH${`~k5uQ4i7eeln# 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�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 literal 225280 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 a^DH-9OV7kOrH&glvZhKK$1@=Ci2WbgMoPp0 diff --git a/sample_data/sample_gpkg/gauge_09353500.gpkg b/sample_data/sample_gpkg/gauge_09353500.gpkg new file mode 100644 index 0000000000000000000000000000000000000000..bcfd6f60155536741d6aa3a6103c7fab47515e08 GIT binary patch literal 688128 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

6WZmu#4fq32oBvDZ*BIevEX=p5`3j5zrn z=hyd^->?HQzK^o==@*!M0$&sbj=zP82YjSpf!fSAJ2nIl+H~!!-4zTpy88*8Bd<^; z-{aLOo}NQ(QwZB}m;3YYC#|QgtVK~UQ&0>y!{oi0c^iNCEtAh}_PTnH<{I6M#oztA zNFv_`z6y+Say!$E^GM6DIFg* zbQ_q5jL8$0uivWf3`ZqgWN?9PYIx($z;7$*-tUK3o*8;K3`@|xV zG0U1zSfV;$?Nyk(Vj&mDaym2t_V*nvip2hrEVGNQ@Xc%ZT??4JV=|@A#Aq#b@5~lU zDiSfP)^5W|{dAJkQ&#IG^@qt;18E5<>ODzH=~Mnci)($445 zc90cX{t)(j@W3?_KJBx<;!P^b?o`jj8}LMKL}1=2%rTy8qREFFkABoz@ zZE8BBPh(_{2`peXrat;^+3wNB_9q4ED9ck!4UJX9b}Rnr`}{ivk_!wfuN>Y)^qY(| ztHecPP?%hB@b45z^nH>?kRh0@6j~qRC70G+yUwfxm3*~V4qWh*zWmcgu=oC*UZQwO zMQEPfbsc9GJ$X?qAAjj3tFi2Hc=lf=ZZP4Lmfg&DU+PujM&%sN?VtuT8C0<7V19I{(j&Y8hjZY+WtW2qlF-)waJ|zvM!NvoBv}Ti{LYf94?&)i&}7 za%n^9!pT>5PcVFVUu9Ve#{KKKc(qyKqT`h4JFwc@@q1~Vm`SsCcOEe>K{nO5Y!NK6 z<`n-5{DqxSmW{_cWNH%<3gk86bYniF7wxE){kZ~O+qwlZ@b}ihur=79GEpZ^EY)+R zc4OHMoG;qGUUOF~Y8U+izplW74j$Jf;qgs9(T(t__%G8jkI>^6#9n?A_TZ(fSqR4k zXD=YGPfICKAfp9Eg9?>IlJJOiNE}d-~i9w zIRU8lNGxgMIRjHAtK~n{;kz8lnL8cu?h+{}Z}{XzkAz$Bo;;=fd@!BIYs(sVXGeK_ zIjTiBGk?7pfb~yb&)NW!cPw9?%Gi%;kcZ~_v%T2g`@Uj%5==cN&3zkgUa@(ISXVf= zdUHqvOvYSya_&SXOgyO0bEh+Bw)vW}cu-rc+`=cQpTrh?*&KU|HpgH{bpF$i)WNLP zy;B+2e?KTJg=tLD(zY-Q_mTTE#p>?|MJ`-9uq$LgQRb2hSlaV!%Cf>djlUlhF~y2J zf()7VI_ip^y8kh44z);?M`SmoUF~`Q_6nQ@_v+_I-z2%)9Ow!E>K^ z@=w8L;{8eQ)6n11B=n#k9?bH5y$0Sg-Np9?R-a_hyoxgWFl$9x4SepPqLMtEJwNAF z75va^^TF&BaF%2*G4tbaN!<%Mxbxbhqr@+Xu86;1)POtVH+&u=gqb6mg694^U@B8@ zXgF*apt@BR=K3(i_ys0of{Xzo!jo(LW`0{Pc`D%@kwd80^iruGH8wmPRaj5`aL?Q+ z^m{V(b%^JLgB(Clehc`4F+b^=_CIGcz*@lpmykRix3jI(!S zJK_k>&p#FkVgJ>{tpmh7>K}I|OFlhEOS@C*%~Q;4Zol?DH5;a#YIcc+m31r4q~Nvl zb`IwrKm){aA=BDt=+LaVc6%kP99Ans=|KaJU29OoMioDy8E_taeV`4>qy)`Fyl*2tcXy0n#&*ym~pQJXuxRLTM#ZI#%YjaN`Y^eH=WxFS7xvJbBul_Po$K?KZgv;sbz0ruE|&@d_IAuaN0?#~@U|xyxH&rn1ulmtjHU-VZH!1q~h$(O(VE z39eu0hF8!a%{%uko}Al-z#cxBe3HexreB}KE9htY$-hfBZ7oy$0*s-8YPgxke^%4U zkq~n2rWJq2Ovu&B{w~>wY)XbCL*%Yot093RdcDN>sYpLexStNZEDk#pi~u>8uYLaQlB=R>v!Wk7^b>AKp^8 zWRV|y{(B%#B@(LZ37y8h@E*w`%>=mN$FET-cx2Aw4SMiXQ#K=Ic%kRw%DM2iBBiaN zFiWYb{#_(w@{Y+nB_i~5kgWL3R_Jae5wTAKpAAz#f2>(?Qkp`W*Ccq@mFWQWwz7PL zll8UV5v!xEpiEIwGBb;kp#5i;3>i%kH}sy>m!m!QXZg40n0mXyh}k)o=#n8rk|8?1 zPVjbJ#k+MPkmqJN=3ueXeT%w=zBA#-#z5HgXb^1#u557=Sqx8R{aB`szO3_YUO%V8 zkb?t4_w>Uz8sC0Xf;B}ymaIbG*kc>VW`>g;wY=UWP;8a%+r) zqNU4NW_};mO=P`7fvb+nMYCSVss-~BCg|Wcb>2(1Fx~zOd*9%j%b&_|jNItUbFFMS zH37%2SWv7EA7JTNI1ESUGQhwI;U;yeO zeX8E8U`gX@dv`c_C^x1U4xV-!*M)o6@~QrWwcF@)=wNSmm2JML+e}VxO=$4{@8#6K zFu9e@BvdS?MkLfey2>{+cCmWLcF_;C)httEAFg;%2eQu4+s8g26RM61Mb%hdE=-B~ zdztUqoxXn(D7jb`nf%B_v;Hmth-JRXkYtG7cD?bvNa8D)-$s5z(w?1=i3^^hEBy9* zD-$?#;arC}sW)QY$5bpbrFMGpRRvn^q#j?K6f)T=M_#yzHU&RwX&m9B{%2O`-<2}* zGNKzh^n}r4Ltak(enX+W_}Mv(m=*eJ`-G`2LXsgo)lYUg!kXs&gWfnoTd}oF4qo43 zvR)h}&)gzx9nlkqk10QF{z$?82^OKXF>sUm3chqWb~lfT68tiD+^ZCx?kdX~ip9sM z>C-WKB}kDRlpF4F*XDpyd$@=H_~7?L7}VKPJFE)7h^pcjfUAX4_0(Yw|Iw2lV({^3 z{!ocLEG{4P>^WRK?*5zxE9?@jONKWL^~Ta&MhYw4cl$ZMdcSL;mrwLfxeNxMCBD)> zvh&-r_3)3gZxVfB#-q!JGGV!isJ#Yo7u}<_0r=Xo)mMqH=(ogQPNSf&$?`yXno<;U z=+#>pKVcT$)E#w^`1q6|mV12}-kGP5#U{a%ZUf6D@!%I;_!uDxlTUIw1bq=Y`D{^1++qhljPa;}+F5PqtkMB=k_TMR%Xf}~YkSnxxbFZy?hL=BiWV^t1syHn5Ld=OR38RzO zcf>Wc%G5S_cqwwgzdmc)B*4jLpHjtO{$I!YT;OeAL(|k@`RvhU9I)C*FW)wJG`H0F z$s=?XX$ek;!*n%e3dGOltW9cBJ_*m!e$qSKf}(Hggwz=B8Cxpd}n--hQbRrG>M}1SH94};i^7n(%)l$`?SQzV=Me?u1)Fq&hPW7dq4mF9*^Je zd;7>|x#nB1CZUy?*romWFih(Z;W>|1rcwLt^~CXN0uN)GG(?4XcQG+8KvTk-EY<~GX$3!_=p~_pG0^;DjE90~>a6a3ID}k{0KHbkt zXoZ&Sh)Z{em0z9DOe zjQRH7_D16C=(K6f#*ZQ+^=)tX(2Ze?L-dMYMB&Svuez(@h`c){`N&A2w-w$}!IXBv zh7z#zV1d#jTzJYl`V$k#2$58QSMR}H@x?p?Xoc>0n7sGG|Hv3hLykXR=k_aO7?88* z-XoB8yg61x=0sR6dv7u8{FKr=Ns2iS@gP#h&{P#t!)x6F1a|%P+`m7@tC(}_SMc;A zjPS?P<4BJg{5@k3pZoXcg9u5VP&%4>^GGT(hFFpj6F$+tsP&c>Olk9I^~;ZV7`LM7 zvkkC<>B99|*sxcWdLaePYxbp2j&SxnjSa1EqKmhaExaw~+4ofVSWsYwKdiu7V0Qw( zU;p0qIZXbX>X=(HF67&tFVf)n3B5ix_=)kw5j)su<@?^DBm_!KZoj93ll8QpSHos2 zOq(Qo(EoRRc$oMcKJxiqr?1^uLKV+&Jq?~^V@e8vkDH70y2H&^=7Q$BaAC|YQLw_# z^=2JHDV` zS-(8Oy94%Y*L(lJp8H2|{Pc4H0P(qh#2RGUd`B#StlE9AjaL_eA#X}3BIB`AOQ*u^ zw7eapjA9^(^~rMj#E!*E3UM;V)AYJ@akNvE>A=7L{yhW#^9%&Is3THh_1921?P@_a zeXQp6)Qce#{gz&`D71tVcA_W}0v zFy(U4bvn5EUIs@jtoH2S`xgr6CzToR$b%P;nWWdjk>5j}RF0tM@9)-i7uKp3rOO$` z@JU1N;T!P9bvaG9#t@1V5~7ZR*HzpT)&GWmTJ^aY7r3z^f#xLaU2g7Z1RwkSWA}Mj zFq$Sw0OsTDJY@wp)z!1CfZ3S&AC=?tN|+BPM$4n>@``JZfalVm``f{rIR!gzz!m&C z)mva2vaQoqFhl0aJ{s8WTR0CnKCk2(?WW0H7+SvBFCGAM-ljD92;ZLUH?*3-GGC_> zpL zTBqT)efmFFGNWaua6X*O)x1c&ve7zpu@`4hb&pLda3cN6rnWiGS@Z`gs$zLyQjYL6 z*C^wLiLFtFnuBIP{~B7-psLcAvq^U#P`Rx(ycA$VV4qgHdY`=NuPRDTSq`r#k<&K~ z(^bQZG=7EV{wu@jZ;;W|B@=xpG&Sxzi=R#UnkR~eXLR=enc;Mh;kFp4%ZM(ab@?j= z-8C!4R`{M%c+0X8UTT~%k$-C$bLqxfH&w&=W7PGpU^$jYVyW`F#OhQ+u&}Ucbvb4j#VxW`!WELUD247tXI@7TEwt zlov0m!R2|u>?!!Z!DPZ|;#=k4Z$ElB1SY?Hq)HdI3@=-MQ# zeyw!c7QUZVoKOWXr$5hNgHv55d+K5KH*}JV`Z&JFtTv_a9{!FE6YzyIcXP{NG7ERp z1bAP}-NI0~>zb0mupWY(QrkA(fOp-qFE@v?Q?^}9gy&b*>oUM+;#P*9f;VpqjL5^> zvkbuuzJNr=xUU;dxrV5i%BhqecA6h_vm4>f`_!f3%OGWM^*zr?Q zXt6dLbru2DYvDrs{1+1Nv1|JyfBe8BCd_sh_G#f>YGdB;8qRZa?9PI}Z+Uq}7*@(# zo|T8&`4rDie8(ULbzoMpCSv!igJ>AB{hRpSY-)H-R{YyVY}XE^6D`v~qj7QBssy&a zwsO5beC00r@H)7gjH&CrI_~w>X9q^+MIL@|8R5x*3yz6rU4Z-A>BAqZ;ei7q#YSoH zzRhNDHQ+p@OdcOtIBLd&7ruVrjz}}AL@(Ytw>sKmlBP zh-&L)*m>!NNH#1MQ(xu*`x8Frhr(C(Xt{sdivie|HZ5ylFTPC;%5c$fx+WnMXu}D& zz(dM%yGbP}YauRua1Yk?b1ki=#`eoPRmL%J?P?kgPNMZfUU(%B;T{KVZ?Vz5-@8;S~8wAMdy5f!8$1-G*T0{-=BYUlr;HW^;#JD$$3euUU~de`&W2mVNxHzklx>5WDxJl%y2b z76m&!@q@3GSF66k9YVg|=UOh@O8CN}1q){v-;+TBQL5oqW`;X2-@Q`+i#nG?q{|_L zx6St@paAA^-+avmA7NoM*nt9k%S`udw=C}PYgCttVD+?8!6vv^+hZgc6~^~@rio_Q zNgy}J3l&b4o{@SD-1XvqAORJWc=-X5EAT{!#U@r%pv>=|K2nDd9&o)Tg9=#d>bntE zSmJwnG!2F5!_c)yJ{RD~eFKm9PQlB$(NRa?8@1ImZ&!#u{GfHjUKOUYb_@=n6n#iK zQ=~KK+8Vmu5!;D(I@`$!cRVSbvsgr_?(V#m{xxCa(b3wk42`4<4BZj1Be%XGNR$BE6eXiubWO8H7k^c2GyWcMmF=9yCgOoy?hF9qz;wAMR zn^GQO&p$tj_(LsfZxEj%zQ&?%jJT9a$C=O045z#_1666IWw$Vk6`cf!}bWzn`MJA+0v$h$N0SQ^!E{& zu=0;vZf9Y#9mADFMP%3ZsU5` zZ2i^QX`H#Jxs&qa2T)SD!g?m)qYE19Sup9$*3h#tg}{Ly_m95E_TYt~wI;B5^>`{7 zK962aOIr$Fkf|hyz>=NqZ8uFZKf%)?h!|+IwSCmB0&fy9I1mo+)cn{l0sonih#BP2 zYOyBbU*hBDkWqBw6eDQ}l$kTUEg3Nc0a4vP|EXD}o*S&!p47hkl~I&Y1<9z&O8Ku; zMioT%x4;!?@U7HKq^2L!DM$;LNP}^|=WybiBuRUaQcT-CiTA}+p<4^AHY^zayFMh4 zuoIrw<3H7a;XQHB#hU`~oJfXzD9jqYV?+?nO%(Im0dv`MQqEw$?ChnNYpCFUMVdMf zOf_0}MTVoq8Fey$$MiU+8u5K^eHsX_%;OgIf^GM0b|JvFiI*w0;Yw$LN0jhT(1|%o zc=*-E_)0A0lD6Bqehfzzn4+ZZ4U>+P|H9l0UHBx8IVS_sTb&$w{?-xeH>O4>^x%b9 z`xhecKQ8T3&LzJ0?>|es&Q7u_&3vR0VYL+^uqcn(nXf2Ns%Lpx%X0bGg;2%Nq>#R( z+Ryp_G~{z+3@P*?wA*R4sm-VkQflCT{QK|!*JmI=7oi{0e24#P1I*JLY~Xx}_ppugJ`5x*F?+` zCtNpMsl}(kbG3Bb`qlV_N=d2#Xe7$c*jcr}bZW&%hv4EmwmlXY*8V=~HN%5OX9iFI z62(JISdZ0qHin(7&V8Q3%%~NV8#~m|h-I&OIPwTHt8QK4*1Q6{dlvLNV&>Je!S>tr zu(4X7$N*eDb3T9-jpWj(0qX0Rxy7w6>B)jdwC%8xQx|L=Z>FIM&*m?mO2tgClb1}I zuD~&`@C;BCV5#<(Wv}3K@%#1>C)9VaEhT@0$@RV+nTInnHMKY33Vmd-##nn_pi$HaZN+lWMm1#fxDiS48-zIc=49tTXUNY?NQ=>Pn?r)UGQ&7wh` z&q`prw`;=qR3?F`dFA?+!R^1=EUE_TLgK3X#4j-F{aQSW!NUK_P^Zs3DjMU)H|x(& zxQ~o=Jn>bE8~RdGZvxUH(Wm`ALlGCx)|{tSY(`2_3euj=Spz8_(d(T1e3LMW?PD&q zY2k3oqmG}gA*REw$y&OYUVOM&!3(#(-eX=VdOGL@<$O}S0=wVpO3^_t@H2I#f+B8h z-xDoU3(@P_;`mA_2X1&lkwyoTelh8n5>JFVfot*S33)k4L2MJ9sn1+TppvUr>swn# zV3Yh5Rk7y=sV#&D1j-hWX{%2YFKb#QK3Qf}2kXCB`enN=L%1J3nDY7!w_0pn5 zO|_QOE8+l)^LMyv!5cOQZe@dWSxyGOfxoL5m?WVaeRVu}dIL(_n&f9(F7Vq=clh_A z#AVgVDzU@PyRWCOK?z$cJ(JpsZuIec&sI6YKSUUeZo@Z*i*5@O+E(o|Pz3 zV&?J5UvR<6zX=k2k)euZB~v^9M+P|brPlSoGr%divKj*Y)!dfgeZ>UseJow<<20lU zASowgV5+&#&qe3gV&UIQMECo71;ux0k^HJ^Nd<4$W&hNRD1g6b0ODfdKU3Bvl&EgO z4^EJp(IggOCmQFUWvfQIEY%QhvN@r!5;>amiC6h56`R}8n9ezsO#Ft_w>=71-l8A= zPBB#mCjBDY;azE4;hzWUWKCU~EN~{WgKVaf~a8gQA**Jdq03iaE2x*T=)?TGV z__9n+${~Eh$39+#FtonuI(SnX5qOF7i&D~U!P988=u$Vs|9F52-Cv0ZN;*J2r9>K~ z2~$A@r|x>C=|Dr<&tf*D12hpAl8{js5A@Z-)5VFc*540sPlfB|fH4#xNiS{Fe#EPO zg}h%ygpAapM*95#x8MLtDM=|Ja|MMwu;)sjs4bb;W9P=&xp`P3ugAq5_PV=#e8(WV zAMQKOvcZJoKC>_32|3M@W)%6lI4(8v&j`IXdMxF@o^yefS#ZMMxvvqtYUQcvmyL=zs~z@aD2M%t=qWZq$|Q=lzU$S?kLfZT!roKS3Vos zA+n|_J2$h8?<gmx&UupkZYoV{giJ-r{MR>zpZYK z$4y&~{9eu`c;5z7S>jFKw9!n&7{|+;Aig&hjRZdHF#8sqpRCu~ng?Osn=Ydo@Rws! zlk;d)3~1-C*ahQlKr4OVn)OCkHo;t)sz1cxnegTL?eNW;Z%@ym(L$*^ylMfS^jT7w zL?eewLi~XWzR!ZINbfHEKKt^4{cur&z`bK|^g~aEF{Izl7>0elM17MvU=8lgN?s^HtJl<}5PdwoWY1$1 zn3TQ8lM7+{ZnF?w6p%i@i`PcsN{`U3C*X;od&iext)*86lqeuaC#R&Q;hBP+l?m{b zGJ~#4Shf7I$Sev(Rj8x$XPjW_R==Q3obY#X?0W0}#|dYgynFY*PPn$BvEKq=m8r`O z&-6V6(E|@D+42TSCtOEUNYX@HExKKi5bh});T)jU*p{5n<&w`fgCYLgjI$%%RKIa1R4*&o-h2de`PRbIemR0 zeN8ni;36ZVTp>(G7rE*M^+x>1zyJO{1OJ|Ze>?-hE=G6=j@92P<3pFK=T=$>~^ zmA#Iz{I7@K7;cGOaB=&yGM2$-lTwmWTu;cBp-RL+V=U!G7VM!Q;dILizGCmM(~LC_ zXWVu#&%onPSprnxw5tsJB$Cj)@bgjF2P`dovwizXi=fby!Gl!ifVmpFQKS`c?>c23I^@ zla82(bd-z}+_iVLtMe_yQ0!L7o;Zeqalejl=QFUKsdhpbW*DE9&4A+@G9{Ve&`nOm zjd075Wbdt`IR7l1IbUIGLUFn;-2Z-=dl}Zazj9O+cAVb2Z5&>;*Cw7Fu4rLqCBKcE zt?ct7tqy3uKbSu33R}Oj$@hadSx*n;!MWE=M#bSD4%?`|!sZVimNUUKykbin$YCpr zzbt>U$LzyjIj%3vHBkXp7R-J87U>s!4351yf`>d7ru&z{{Bgy}F)+1!gUJJ!Cm!ZL@Rs@cFNeAFMC;drFWYm?vG zqQ`G3?6n`>R*+WR2+vb2#mD1(`o3`E5rSiOt5$iydVG8_BQ{tu@N~F>ii+qj#U_IsT!S_K}gOq96-XYJYed<4xG?d7}0%kahQp=Eb?>EkzDF6`ei8d^Mw z#>u>ggWNo}JH>oZEQf1MOsG%7YVthQhVY*cnIhg4a|)$ciGQ;x2t~L#>V2vt6cN~> z>Q0l8BWH;Xy_*S1h{|H(~+cQoypGEVv)28c86+)v|zeDqvITK(R|h=?@wC~H~*+_njb`k658(N ziq;Rylhv<^;bXBGa=YM~mEWgmVE*!ypk=g%A}OpkY#cyqNNZQ;GgyqhiaDhp{m;is zGpX=}ZN=+Xz)}`^(o(QSuJirIJ{(V&&w(LgYl(XQstVZp;1tDKI9HwGPy!r1u*y*j zK6vwT<$m~C;GvRru!;8#ueI>gz`a3>XiW(!?UDERgr`2$U%%J_y9j;zVhOKqiFUgU z50uK513ooZ`Q|ISBQ`d?+le!W;tzH`Urp?uIC=2o z!iLT3$P>D;cFK9Xt1q0le3(-Ywxx+_^@RQMlaI)C!Gb21VQ`QC4gb5HxIVX@z9()! z$zE7^yB)uWG3q%NEcdW|`#LzFy5bEpT=TJ1D*ppQbS;cW*Y& zhAR+3`u0G&rUw=Z4i|TC#q~0+`$9aPq_rnfq-`LkPgEetj@X01meL zrYH`}4!Nd|V5ZZ4oj!SDRCr&Wb=qtA&yqwes0T9}+K7KGc5EX)$x+Ak;PHC|_7<)q z8M}%In{rP{b!7+qYRxLEsR`+b%c=P(VnOTAm$LjGpdk%&=kyFJ5`)mB&@yQN{r3V( zd?^cQ4^j#>FH1#Y(7FDCPD(L;FzJ(c59*}({Eq{$u+f_P?*s5=s%}yGdV>F0%i3=Q z@~~+k7deJs2cW7ZA*3m%BOT&`5xJL<|pvCMY&u*xFL_b-1Z)N zrjv9u`xKF5UWcRyz}-3-@2ud6O|5xbva#+t=6l(G4C~B(uTeLLc??*3Ps7qhW?zTk z&*x9E-iG&bX1Q5;1twkJa?VxlSWg$Da>j z|HnO-REQn^(dQ=#UGUCkEqw|EAnrX%&iw-WaSy-8dW_w@QcG;l;Zf&nybW+^?~j~t z_@MIUt&8x^I!Csn@H*B+Dq%#74kcyYafX$9s3lC{w4idmkFZ0JxH}~RAS-97`!?YB z*jlzyorc%0Yxi)4uP3$MtAHbn4K`-N&pR18n&G6c`D#LWcnC{DhW8MBXH;QT4D97$ z7EGK=_KcyRas=L^KU^XOJBawsAJ0escvN333jRpAQB?>}(vZh=!1WK3^f(JJ@BQLd zC*oYT1qMn7c~~ge^O_kP!v2JovJerk4NuR!h6SRvePm#T^?tSt>L}4yD`>C7tVY=% z)nU3&f!p#$NMEYL916!!ZQObSe%N?tXCd4{Ay60(i-|c2uh&46ZNC0^D{NXmA#DU- z4|uRbp%_i9iJqDy`1YZ!_j0h3;!3a2u;HA%t`@u~Q4~po2%@%~=>g;W$nQ_r|0sm_ zX>NVw1Sc`oF3F``Ae!VkzOZNn8Ss4Wnkzfs=OZ9(RRz8~4^<;)oRvXy@OG56kI+59 zGHPz79qcfvMj+Jy#EOR9UF;4d1L!^|X6rTd#2gaaoc$&7g%>~^V<+s;@6jAom^oO@f!{<2{Z;~VL zQaxhINI-YROP0R$67p(1IhBDV{5tZ076bBTR#Lsy3fR(&qBI*W@G-p=f$mDS4F#h( z@?s_Pe6<`bUFs@+0)CcubCDO`@RIDM1oE20)cwpQbXN`-=5;v04aRiFJ@9cVulMg^ zC)rYC3pjetfz=FoZG1jflnoBfxu3Rxy!BmXO|*{_t}P{DWj?O$NcwL2RdBb|E8%op zOa4u_KhHa&JAe@@y)wKnspDSDE7-SIl)DYrHr=RkejmIdqlU7-9O>5uy7r>`;qulz zW^)CG$YVCiKY-WDvFE11g1*|^#O}(hpZe1^l^B2EvT$xcio9GbYIY6oe-YSt7p@v; zXm+c{%K{kkB)7rd@~>!z;GGwu*Uvbh?qbO`OsGNY?4tB{JGjeCOMD65TjtrY2WIJg zcfsc&=GC4{jUPdG<9WBmXbr4zmanoI4r`y3xlxN~{FGKk5ghsInP5O2&S&|$tYdK1 z;xhUaq^;kI>o>mWeKeGpRRxHiI9&wKOb;)#K%B8)5I#fCpFM<!f?CHY8fNgZ2Hk&Zg}9#i=a0! zA;P0>BYZXSgVU)7#PVKB`Hdez-GB3BgmWXN6|OH|@f_YQ7R`AbHdWAzE`_7btWOaK z46hZJ38unv(&{=V;B9qxcV33im{)k~G~xKvY~+7Dp918L@d);JeLZHfA0*A5@+S< z7RU~sC9qAI-VblzLfBL)bEj?t>CpqKSOg}iqb?i3W%{4lc>fix-_sedd@cl4QQFoY zw>&V&FnZTyrzL)t5@YOceEsi@3F2%#Qp%G`y?b-5aB~avo-aR%3`19$e-^&>k~gOM zl*q##o9X1!a3V$Tr1)u!AZOI**~5Cd{7v<+e`xvT-SB}^%4{@eFwuGVVVVGJm8;I- z13$LfYSNEilKqnVRx<3&)g@jBC-x@aHuA(TJ+*u~0WNZv{UwjY|a36iEC;d}9)q^d9A0w4D3`heei*ZL&o`v7Ff>yK9{qW{V^(Gn~g zhywpmr6dYwy4@-{0UM@-YOl1x%{;XDtzr;Hz;EWzJHzfD=2NENat7n9E9ftK(wZ$vokTJ8?}-s8Iz4tzECfJ!a9Dju1V( zuzVS|)RNZbhEJ}cxa0+A%j#dDhHqq8%AbST%zQsJqK4HbH_1tbDRUn%#lSbhw;$hr z4ohq1_z#)F%91S_3~Nb%Qp90Z@v5yH88#Q4a-J&uis$JDR@z;?rkL; z_sm;S0Zy{8ksW}Yxpvj8A=cQ(4sf#}1BQ7OGfbmKb}d|U=@wi}m_PR(zT^~55#o=P z2iJDxK7}7XV~<;l44QoD@{{}UNrmu_$KaOL`pc0p*Ss%N4m=(I$=V8bf7vAU3hu~w zo3{)0@Hps0fegGmBmQQxP!VRS6s!Aa$YErL{R002<;faqi|Fep2s$F)=L>2yW zQGkU9KRCE_`6|r|%xO_K^Dak;u6XLud=6HTF)DP2i`E<+DuXw0*XO)Lji8e@F2VQ` zi^VdOdV3r8R& zIJAiyCLK{w&D7=Zh@deJC#>p6`oQz)3DxidmAvUkSa!-Y%pMLKKVY{3`!|_e1!%yZ z+boBL;dMhQmq$?Jt#z#|VSumH(D*)qH(zsIGlTt$Z@v^0gQadgIrJXpS^sKm88zm) zb?2WA!dbU9S6jgRnap#U8pvARAP=vS;pG?%QwE+Hb zVt(!$Om8YKN_?!lXu>f23VfbsP4)wQ_`!t}{KMG3C#oTEC)~y&TkZtQey(JshdIu8 z4;a9KTJKvwBS1zo*Q{&>bM5NX$$@hZ=3OLSzoJ$n^PTX}(P+&l@I|&v3krDZu8MmN z9L^zgs0RTwp-*31#o>EZ?-g8MLC(;f+SY=Td(U%vDnX0Bl_!y z;geEdxCY=)=FfRUVBW&w&<~dpvEK7S^#dvlv)I7rj0c14fFbbF}dIbiE{KeshkP$5d@4%|lt zbDyGc$P9kjA5WtO%Pkq2Q^(_c+ehc6p+b>JYoFf@XAH%b#le!sV+ZQ5qJPeADRc`~ z{YFpu_!=rCvYX5?u*)K?&_n`$k8An+a5(hyyq4*8+~K9KnGls3f7(}R)&ut z=jlJ52;Y*1Hvg}jC}7Q=7Y_G49k@`5?TdVoF%&m20p<3djRUZOS#lcj-8>eJA6+Nm zAe!OeQTT^#2j>_}%HgEJMq63uAH{ea|y{#`duaoQftL&*MOW@g? z%HsNgistBk{r%=e>P!tZwR}x-MwJ!6U-$z$QIY%gFL!zTc>?%w0!S%IDZJj1b^a-$jw3))7aI@=@0)qvyAj@#9G~k66E5Z7*a>@P zC#7b7AiqwqvdCXniFK5njU;)}|_jL<`KW`T~!HQRKEmst`9C?KZ(k{r$AB_CU8!A9f6-mm|Wn8t1`3Q9>CFG-pGyN z%+p2cK6?wFi_4Fig!3O;yNtp`hs=i8ApN&hT!tg??5K9ucG%^ci>C$RA;uq!IHKUe zKKG6@u$y#ATQN*^;LhlEc=zg%q-XGt`mxLr*yxx_V5v%@V5hpj@otrE;eZRN9h}|iFm2>ZgrqJK} zmEuwQN7iXLWR|V15B>iK^#UiOHQE!2}kjl|jaEb^K~!x3B1rt3LE#feFr>dBpMc)`G8vuhHKY@7Q&o z3$8lo8&m*S_iC;;M2#c#MXUWV?DU-w+58!^E7u(1-3^~IKD3`WUDbHjp}* zS@d^1!zWH{Gc$k}P0lqGe?<2oc{`x{)<4*j(0}%s{(E9F(@@V4kKzwJdXnQD3 zp8sk0zIL=W&mNoD0WVj-IQ!}Yx~r8{-@l+WUUfcJ%KklC+wpQC*6x2Y6}8(0ew4(t>5dS2}|5C z8Qwp41ST}x;9m z>fIw2xMcI(*|*q!g-Lnm5L&nCUu=es!KwMY^hL0BMFrm$xY+0%bvj&Q0N02?Kx83@tgs&y7$|l_ae=pF);pabZkr~m?wK(w!qLW(>a^V&_ z>>NU_4BNG)L@b;{2Ke<2^8E6?ci-wrTgyN!Qf>|Xd{c&X|)WbiPCPC>U5Snoad z=~ym&TlergD!AjRAe}d?_n}JTEbdrG_DvCtVY`Uh$I5VG%Z}JDC=iG5?7Z2DI~2K} z{d;QIH+wAB3KlpWmb!ofLMidSWEbqe?$eD*c%kIb`U%{@zMmPNxC@`)8TSZ)PosY& z1vf@|c*wxAr#0z!!llnnR?p*(q;%~xp8;&W;2r-S-nP{|@C?k}F+8LL`{qR}sliLO zdOE~AfWve%r6tU5t^dUsj{4C#vIkDvVtbMazH&XpD+dL3kb?7^E2_}+)p{e7D6lHL zeB2$V0EgPNM()Dx6Pyx0@Rq1lB~AFO7XLwE*vHto>M;uF`JA;)tf(LlyyaLQ4JR+! zuK0usaL>Aik{T4)#>+9*zVJX9`;Z*0mTu#04UbRi8Fit6wzpo~zZa%p)V#?C59)lZ z)`p|0dY9TzVDIG2W-7z4hew`q!_Et{uPNab8ZL78QD9}-Bc5lX0xjO5QD2P$Yp}py zt_!=oyLKW01=fhCxt9mlzn`JVf&#jyuI-x}D$JnGksIkzKq*?~g`ME5mgJf=FHj3XblyO4)a8Z&P=4DTgT*Y5R2G#p;kF>);;YEuRm;s%Hxf z+fm^$6&BU6hf7jR>Ox^hg?Fo8pn#T6)wmC$0t#~JW_<(m=!I0@f#uJ+Uveua`*@ifJZIHOL^=}F%+*i+Lyi4D#rPgJXfSt>qVUI9PnisaIQ^>>`Q`3e<~ zhJEYzW3b%ek$1WDJv z4)Hkvq?Du-N5eT%I2zH!JaGKzA~J}R(J-AZoVuqX?ITQUw$hRMDKbpclSi%aPFqQ( zldu{`%=SX~xTc5TBbZ6Lg4GMQe#)^l2{S+J3++P&a^1jve?7+d-e}vb&Ve~pZ?QxX z$Na2yzd6A__NpSXf)zxa{Gs&l#&0uW0tkr3jIE6KMh1K8nYQsZtaG&Gh9-PK(#Mtz zM|`s?A)gf<7;jm57Jga2c7q}^80m}@zTK^L8X4@*05tK$-_?nAB>p9h5oTR*KBF|3 zl>EbWke#rSRoLPFO8;LMKvh{n$V6QI=lXvtigGfB$W;;4m6Tucpa1^*_YC}h;S2kW!E}SBO&KW~;~>SJI0;Ze*=? zJC2*Fb5?{<9{g%-zLW=!vYYA*g?U}7msY`pVkWUJaO|34ve#%WAAII?RTsAFe-v2^ zGj#4&;D8;IKkN>L%`8Tgmpw5*WQ9)eF8II~-glJPzD0WI&;V}EH^?;JvcbF4{KSvJ z4IA^+H^ZN%vMhJO`jJIGtKq@B)Vi;6v)(84adR_1kE3b!;eL3D;Uje-%vj~f(u~%2 z{L0zf>u`;O_Rce~nA@jwe(>o=n&dXz%onXjX4&Dv;uHIG;XL8e?=6U*jJ&uy6AHVI zF679-lzYrM(qQtMr8o76muT=EJ{|yfADW4bg^jw7JFbN}IdgVVz%P!733I`zVN>y4 zX#9OKuIl_jY%E+D`FtIIpPi+23C^TfJt+kb%DI^zg-f&7>6W1J_ve)))^X$ABHBOy z>c_|tyQ>X6(_%`?(-nfG-i-?T6UbKwH^SG=N;rDpfK8cWZt!-g zPxM+iqI(uxwi}54b%ft?6@tE=#q`^gpH3aa_Tn{`eYNnHhrUeN*#FM{cB?sW47We* z3r~Z$lw@~S!9QlgN+V$Bt=$9ZaEsu!a1~;D(W`6yVXD(KRl2Z%{Js7|u*=Ddd%a-2 z!+B=AV8i{zR)Mg%U5x|}Oj|sgd<0hAe<^7m8TiF<`xnIXWw251ZXKNR?Z>B^u+6rY zC#qqmTle2>!{A0FW#*-ia0so1b7MGKJJKAMuVDu7E&c4U!^t13V&HJ4x6ddrcrvMD zF31SK*gfC#BMjZ^u&9ZT$lwo*y1r2*GWe@hjhb^o z=#DK!40*tbPYg~S!*F*@V1fKzSk5y$px7TzM-hFiOMKNv)_d!@7Zf={wZVAhuK=Q&s=ko4tciZ0uJu1==>3n^NT0>micGJ$3*6FNfi|qE7Y# zSZ1(ynpgm$U$V@+fw{{P_C&)}f+I$iF!Kq9VOO}dIQ0H8n6oKULl*Ym61H6jZW$Ix zSOwd-mYnE>Q@Kuk=O}DsLp+MB~t`iVCkI|_i+JtUoaL>2df~9bs z^VvK-*rM*vQU|=dFC?J}8N49;+ocDvsoXJ*0ywrKk*5kaSz&h|0#>qAr{};K3uZfN zU|)PS=?$#1g5FKxJ4cEipO8kyF>l=PeXSz!(hiEIHlr}VK?9Wr=g zSJIjz@Y(L|MC-9^fq!>e`B~2KYZgjE8`7h*o~C(hveXW zC#8${U|GSLNiO&@ckuKQGVC{MWybBWSD&yw@s$ zCu0s18X6gP!X@qvbo}t!3pXq_!58vWG#(-YGn`>aUJd(gjnyoN#r=l{Dsg_M<#u*& zByQg@XH*C8cxK`Al(AS!r)8vf7x0&YSD=bmYcNOF?pixbVcmLiU z*n%3`XvkMw=D$)l;$2&!@SX7TCnDIBb%)AE8kpndzHNpu>5~N-FZ4vg3MCGsJlI~* z^YUsF{8)Z&!yWj_kF3oEbO-D{-I?x#RWcjXvSEvJ2kDut5Rp|-(bh-*wQqmT%gwNJ zwnUsUJfbIkNDf{iUv;zqeqzT@V21M<^fz;&Kh7yxDkBWjZd7^d1y4`%N9(|`cQLD-R=Q6$J3-~XMzcQ4`zqmo@KC=X+}GNe5u5pG}XT|HxiJIv~<8#57q zpj-WMnbQ_iM$g!dzJrrbDz4fI2Nfl@5hL&_+Rlgb;MX1Z^N+#P{2L7T?T9tBnr;ld z(Dvy0o+GGW>Q=}$!J_g$EhX?imkM7R#80XN4Q9OUvBE5zp^+CZNSa!`(*Xgp_J@+r zFkfrr(=Isg0W;-C*m&W`D~Y2RVR)z9_#IxHsY~TOh6h^ER`hH{{H9{A>cD14oNtAY z6f=1AGR2U;6DE{p@}3)mTQ0E_Y(tK^?>pkW67iv-AhLi8Si$nFvL#H)af*%h7ee8- z?lCRm_RO`Le2d@@56^1cfs-!*OZ-uY)8uYnY^2xXrX@iy#Np& zu1!iwN+EqStmzOkK#que(j(LWooTnj>)@vj7sBG;!%Ve8zQ_X1x|_;;4D7b1wqXkC6{Z4YmfJFD_#EZO!uh;yzF9>g>n0jP{3~O#dA+-ip>KM;$MurvGcWyf!EI-Im zz84wJ(lb@-%RgthHB07k-~KDZ>92B;!c25;t}Cl6atT}GVsD?A>Lk^;%KL;=P2}*V zTdelZtNlrsZ2YkdyEcZSZ<7CT zgqLNGIx_2^f1i+*u?Ak~bnsAtFOxeC(Za7@I&L|ki`F2mgE$lH?|aEQ7k1WIx<>|2 z50hok>tVi36U&RzP~41FI_*~J<6)JJK@RgFm~1(2)@2N{8=O!ng`YjJU><@^i`Fg~ zz!47)c}f@{pqJ##KNgID;U`tTAvpePa-9bpw4G1!6wctg0LlwkN;;Fo)}k)u zYU0zOSaqDA}*Uy^w-T>T~k(BNZCNrB*^y&R^cJrpgcc@;cHeJI0b`Ih9;gG#?)`sw_3jT^)@XPG> zdNFu!$Pw-H@WtA}Q%vxaD`yk<;BA6i6h9*avFe4Si`62lhS=Y}3Jb35Ue14r3zXwC zp#t~cjXq`rd$0>nE+PZ4x*j$$fS)rqIQ76T2KSA_YA_*5%iyao9P6`V@jUD~O~z>t zr+iqO5Cyv>`v}OxuXFjIor53wuW6@**Ei^r)xxsh#T^roq1ck8^K#&J@6R_6!kzAQ z8pQO5gfonM@WQP}K4;+A4uA6zWT={gdzt1iw^r-(E;z}r&S7me7DySJoqhyMls)eq zt;BG2-saq7_*GKu^<(fsuHlH&aK%WuEkFE&A%UI?-uJ3Brx7a#Pff_Yo~bzB6$Cx1x+-n6k?-o*WJ-IvRWg?qYau^7sJ?SftOaG;BI+edRU$ zRkwKyE$qCuq5d>1kXw`V2pK%-ym5>^{D$yJV*|Wi`tHlkuv+5|-{*mdf3V89&6eSL zhfd6$&T!wu$uvrAFXFsa*&l%S?(rA}5x2`N2nRR7Rtzg$4#Tb@=tdli&_Gkm{kb{C&)KF}&OL82+Om>wmu^QqlQ~Vs|Y87<(0aCaSPk8*0ZXqw2-8fsf53x9o~@n_X5~q zt?mEr9A*zxnQgl4^PjNVLjz08Pso11ch^`^07-k0QWU#xS}wvT*q#->T#r58EVFZm z!JOGYQm?_Xvt}D35Flew-<7rj4of?*c_(~)+j2@4GN2otNRxwa4*n35q5;=`75VAz zHJ4J4BEwBJU*H+Q_M+Or6khlwYv?AT8}^<|X2J!vXS=p(J-)A>mN{7u7pU~qGj5{e zhj*mN;Domy%(+Mm7z)3-+}ec`YU{=%B?+swv6ENAG&+vV&G@{BVfKXyutl$D-9y-X z^PpT9oM2tQnRsT(8+()OVA7eo7`HZM6TIjjwaFNtSFH0ar4j*1d5@acR&a)k`{Cp8 zp8-o^&8e~dF7Y*JYnE$=`G_^BV5K-8feIbq`^`cGo{jszGdBR zxFhn(M^W6;49BAMy5YpN&UyoI^}~B=wCMkKU*PqBfLq!TL7Dr+{acfZ`Jn^2MX}2ta7=}_8{59gfcv?( z9L!~z);3hzU;^)Mc4axU9|4)|)mI|nEn-v}%EqV>wAO|ZL-aqk>QDs2<4s%T z=@H@Jlx~wHH^KUV5Aq$c@U^y6Jk4-@apErG5W?jC$qzcFSU~ik!*4yVkYLZk>$~v% zm}cQMuo#Wu>C^+5fb_2GX&2H*od^`W_D)C$O$-6}cSA z^s5HbR8tmGmo@#l{(r@aMKan=R1x^|@4tV~z`tkU|CTf0&v*{eGYIWv%w@ zaqd3n-n-8}`|SPN=iIx(7+y5*!rhnfiMi%K#bG%iwqRm=pJQ`RFv0~k!J+H0y$!~O zUF(md|3-UtFRRDxVF=o_@Dy=(WplT##WvQrsgxduJx_|DFJK3W*S486ae_Frt|LG-W;FH58139VuEuu=jShm z`HfwtzNR2tZkSj8ISk*Juw)(ECRkCgZITPm8@TrQo;!sLti6{CE5IfC0`}YB9Xx|q zBH>->S@#*?o3oZ=oQHc87qOp6#sIIwUMvRo+HyD33bta1x}y?-)2UbF(bFgKQ*||O z4TIpqmsy{GCSgKZb8&Ma9J62nLnpl1i%=k}*fEa2&0kEUAKJoz}kFg%xa*BKdj`#h69)u^zY zUqyt5QT|sJOq@-GE9Hd~AHj1iPLJ$_^S?yZcEOhlwamETLmXUpBjBX!W6z$TLYr>o zwR3?-pXSWJ0-t)U80!w#x<5aC7+#ylZ!sQ<12{Zzwlw_i>@kIDIHw}?f*|}>JtNl< z`G532XYRxS;8S%wwImfUNo?hy-L>C@eJ(v~@OEA2eLriEh^Q{)&4exn$`@;up zZy-B)>w6q9@9y2BPB>rnkd}G~k9Kcl6Gr~?KMwTfz{B3U9xU+TqOqe9aE~y{rz)(U zK7M!~5fCU_wVq!ZRYh0cmJxA!TK)U=?q-hs2Po^N&l01d8uQ1-au2Dq3ia z9>`hoaMrzubAKL?yKz9$*P!RHUUO{K9?b6?WUxx?&BpzlYZoqF3_H~8FyzB5&wP7d zyJ12(>F#wsSY^)6v~%$6a{VVfa7U$S?i*M1-?tv+f1ZW=Y0qD~n+kVJ4lm7zZ|X4j zAA!>!e3glZMO95N2EapuK5e3~_<|4oi(&J3`(Jft;u|FHU3l>Y^Hr=uu2N@UhdEDH zpM$-kigd!^YnERU-ebP2a^vc!v2b*jer_%NJjtvu7@nFlV3Y>OKOl2j!qvTp2KT`q zo9y*pW?%=4wI92L`L`v5dd4@-;sBE!td@Z(jvqASVM(E&g<|lBfaoATxL$MndMS8K zN3`KkI<7$YV11JnUc}syoCb68oOd3<{NB>*??qf-?q_SWU&HHnlb7s*YihD|p1>1g z7h`$gO)kQxf506@J@&O}_=b<_afu;lTWhcs~9?1iLBB9<)%!9d^rj z6~zbduXVj}0N(jt`qSG~T!3C~VI5#K5OUa!L1wieZ_#+kDpYb zoPdKP^bLvUZzuVf>cIk|d><#_&P(YT%CP%D14lR9!tYejh6dU3$7#_ouxuCLGGl5Z7r^x)_3H-3Ca_$T?sc{I@KoVzlb z;2(;0!~5aQCq~`d;PsRgSuz~)aDCitydTkmb$cY>EPK1$d9XP{a_1l#V1tjUL2U4q zS@j!x;SF=etgm7HaNBo_UZKHkpHndVCY-&7FWCalj^4l)M7-Wmw(KAp!1vwn4u`_B zu_pRY;i}nVjvjDgZr|QUc#)&ki39M@z}+J`uu{@Gzs0b239sO0_)LP5EerhMbbtmC zgPlz|9l-^s@HK62MFZK#_4V}iUAV(*aj(;MxcR`3j$l~r*JCq9*upkxTgFbz{C`n1 z{DKCLQ$zGhB&?9jmDdAzy^*~T2d7aU$KQe1Y&QIU88!=C8iU}Qt?(E9OX^~uiGet6}qi&hkPbI;)0j8mse_M!cIDt$%`<4T_(1uO%Wbs zW4o$`@$Q}_rI&soK=rNR$yH;FpXd1={q`94z4P`Z2mHBBa>I4lYkugSSd7Po<3-QM z!>1SrKQb!XCwn=)tpXB5TJH&)8~VRx*wN+HtLnAVyear%X!~oaGY7o`CpA!juzJ zJY2u?oAex5snI?n3ce>Swy_oQm5~zVSKe^HoUg)Zcu*$cvmwlIKdN#F@tDjShonXD zpJyK8#I}Bq^&#SsHickeTX=MZ&XRnm&ZyZBbTp?UJRdpTq6ff?&7`c%)qj8g|18Y^ z^RR0%b>lxXfB$1kAi~rG(d>VYKG=79op|bjQ}e8+{?X{7(7P}k6V=i_`G0nH=Ar!Z zxQh*@&^@B(kceT^QpFZVr@N)Emyb zJ=lB!cW?0*SUkY<{6Ur{3t^Vs;h$3Bz9fbbXShy@Q{fma@^(ptB9T8Nb}iz@BV_eOgJ>~V$dyo(r#Pf z!wX^hCx7apG;)!A{Rcmp_9ug4{@2@Vt3C z{14zI>w6nk!0Eo-JR`7@R;BMRbQd3QNo`w;*Z<<|B=-RRv$IGX)G1sq8i>bJm&J_H zd$q6&yw0UPF2pBr;yj=BWWmITwYjwDwy}|c8onLJ+&IS0oy2hRpS@T5^laiJbD@X^ zW@(Jv4K4=bdklTAuAM^L{P*a#DRwBAL;9y|z5mL2UUBP1g>@LOOWC|?#hRN0emuLf z7FR!|_xlgS45}uKZ*=heZsjo++PEI~zUUG=Q`mdesT_N_f_wJjRdCeLyo;W2ZO34L zuQq;Gwf#}FkcTgX_oms7uWk1F%@gOn`b`jtose$c>)YX#UN!Qy2-{9vzmhZX?pLy8kq!)_(+qG>T zzzeqa?e&67lk9%v!Ce>UE1iYI-!SaI35xmgKdWd9A3jWt{6H@!z**9 zw@ZbgchO{f@&oM7tCf`l51T(|S%mjLarH{h8~AkBF2^xEzr-VW!WGjQ9{XjT*~6IdZyr%y4L^HH=`w_44i(vm!~8e8nYY41F}pq3VRk=`taMoQ z>-o(isF{zoZoIk%Wh|WfvcL z9)OFdH9kt=Y$<`k%0;f?)$>fvo)M)ZdIGl~cEP~W)9!gUtG z>do9!4mjT2ot`)l^Vfx~-#RK`*|Q(Q)8Lr>8nd_K_zhoqUa$?8e!H=56OQjqb*IBv z(IW8W?N<$jch0)#z8IE^oyB<%o)t7?OI*OQQ)B%_BVBwQ*rM-oS}>*Oolqj2Qp|BR z2(GfN-Pr(t4`euY3|{E}b5$_flRJ0I?TG12vNp%=X1IQ_U*#28Ohm(6OCRk=uzGeL z%q=}Pt_9wG?@&)M%$K8bJ=6fl$Nh~3L~nFUsexn%OmD%if0kAeG{X3tspG_3JTEIX z9{Uh3)>-P=1k+nU`UNUP!)k8N`;>Sz-J4DPK!h2|>phvMC`hTAD62=A?)}#rFs_Aoei1gt#h;~aHGH$EMvc0j5Vg01^Nu5fW!~97dpX8m&Ia&Q6LGeN=X`UTiC_$hp^5_ORfTJ zu_exu1qDJOC6{i58`d9Ls01^nHrE=%DH{A9_VCMMmp9XhH~IMFc*VfWxQ-=8TwY%nytKcfSRdYflHY$R@+TQC%+i3%lpP10V9wa#jmzPhpiK|F;g{|o zW9GuO?DiQBaL6l5hW8krO*f0Z_J`ZG4IMh*t|rOACis+E*FZD8X8EDLa}DwJSxnWJ za^Q6v9vUo$_XO=x_JB17OSyDmrt~#G4B$!bTHpQf0Q>5ueHflSIIN&b=#PHa3QnWAO3#+h4{oJbQ4hB=#M=^up=9C-D4P^0`Y<;h2P5DIYO> zI^?RwZwreyYe?UOnN$LF<1qbe5wr9~Bs?Y~6w?at(mNpU3J+f%s$xP7@@}uOQ-|p_ z>b<8;E>WQu4qS+ukLR^Cp9s|aHx+uLf;9DtB3gwu*V_4$O=s3;_s>69ebV7C+xsZ^ zoD{7>8yg!-DI1$v9r1Ac*Pl3|$G1cK^Ve-pMlnPx-n~k+L#^{HJ@NMbUZIJfIHKpI z=jbhY`Z4|#uIL~q3Nm4hX6N#iOH(i&`#Gfg3LoIg3X85IaEZJ|?``;Xk!Z=B)3_q1 zdeN}9(wz-I;5jUhoP*%$hf5}nQ&Az;{`6NS zp5K$l69P|+)s_)0DyLE4wRiB{sj(6^*l}aJ)QU9RFTQ8j_ID_mVSnbgmtmFR1%l=9 z^zyzfvg!B+nUm?ZRWL(~&8@RAy(FJ|c(RIQpa=0H{R`2ezt?owl?fYE9gii(rylC+ zN#U8eq-2%ai%R$>@7rI$;5CU$^Ze3ohN z%ZG3jfyqvF!H4C`;) zqyJ$FmT=Zwco=Tq$l9iH2{&-mhKiQJ(f&^=_QKz;H#~17o^Rbfc@FOE{UkIFr;``V zzXUs^6wMYueGAtA)cKLfKdi{L0_M41H7D~j?%>*(c$V;JT544ttjF`?i5~3wY5lUV zaAu#N3vov5xp~u3`3f3X?pfqZ@U6@ozU#2z`<)kBVZ*(RTh*>&!XsP9`w1-Jm#Og+ zwiNLt<-_zNl0G*_oVnJ%zg|Usq|G=9Op7+@@NNw7t5LqGBepzi+TrIF+5vB%WG#iC zCH(#U|BSH=ByA2mHWB7@{CDQ>|4a!S=Jvw1NdFvuzY;Rpw-k|}Kf4Gae1|Q5o&B@z zmBgE;uR+gIXy2v$3$df&cRSx#V2!r5)7RtRl#6G}o#FhF+~t|L7U)#cVKE~1F8*Zb2`Cit?Llr?Vy;f3?kn55v* zrJIL+;P&@UoFyC3HtCYNZDFee*0yB$sD1snRj|?L{f`aSi}ZyH+A@Sli(H3EOGbY7auzd z)}piNn!Wr{ES!3t&*nbSdp~yTq82QFMpj+{mc6i3_%LGaaW6hTj6*kf-nkqZ2KdjK zO0-F42gjp{$Bm~e*Ad|h=O`&}9iF~ZF{75a4T`5H~D}}=$2mbZ) zX8PtY+;XzjRzWe+dezpNO%xvNj=y(Ch|8PlIq5k>(+rI-V9jUG&&^@S8iUaRiwEF~ z)qci5u!HuRcQZ1m;^gxya`9VOgFFzt3O=ls6BG(>yBebWH%fadVVH zCakdJY^oH7k6YW8{!E8!2Tm2(!B_Yes~m=fo{=8Lz|yOhi0*`CWQHed;IQXH3cN5= zl-+$E3^!Fule2qJVI*E`{E^&(t;fB2Xf zzYuRV8A64NS*kguj^XWoksBez?EfSDKICbbuVqPBDN!MfEY2`uxVxzIPRbg%k0n&r z2~OS~c#;J+%i~h>fz@}JlR8jAljTxQ?t-u7urc0*SM@9p*aLgMQ973cTguF{J`AVv zy4NJaM)_C8OJT<^0Z(G#OMUVRQ?Rr`?RVmGmO;T~eakSM4jNAnxeOQ9uP`!)r`~KU zB_^-5U(edH16I`2>Lk{G5c=Lq9lmfPo#G8AHfAU3!&+sDFAytO+jO0`CjjPM=kBenM9Zd8VU%zm@C^fKQsMf>r` zRX=Rsu069wd;RwVP#6aweGPh!O^u12m#~GRJjI)wSR=h>dEW(i(s`asGg|Pwi{9(_ z!Vd?tb&kM!yN`Paz*X5P{MK;XrQH#Q*U{TfX0`f`19-XkQma!i`}?=Ox8XOQNk4Pp z1ePu94#FyTHLu@=ozh!n3}B(9=`YLR{!hNI#Nm%^anc`3@O_IHpKNr+0bR!^q4pFG z$XKvX8>YOIoqZ49rk-<_1>P0C^Uz0FQbxDCia3BXkKeroe>Nc1?uXBX`mkieg2n95 zi37B6x%bjtaQmCsjzrk%<-zo2F!!N396|8ud*S`n#rVBH%@y6waHo#pf^^uSF4%4xusuSJvkaKJo?o^@j_%>WCytzYv|G4<`+b(Sqw5s6^TALww|)0ciT>OZcXa z3uBN%zijMP_#7Xme^j7ls6h0b^c)9^o!9NanstJc%ga$A>M83x$6?Z0rRoiEgMC6J z?>U^(Hkwu){ewM--ojZ>{P)6b;MAg}!FSaHx+(vwsO}WtD6d%3`=ws3Nm!59~6&=729e z7NxLO01m0H*!Bo6*|Vg!2Nk5D=ba}x7nfU4MA|hG706`ax`QzDvSRTP_@T3m^=H_U zw7WhQ4$m87R>5$}_M@ky6+9KOlU)hJr48f-Hd632$NkICzynqW987Tc^HDz)43}&i z3)s_8VGK-*#e(2N8^7=q70&mxjgtt5OQxKCq}_1%qA36C@C(qVmRb7(Y0v{e6GDMDgu7xEXSw{r=B5;<-tGASWAunB0=N1pc?xkHP6xiI{>xzk;>1R`!W4V8}ki=Iw)7MC9zP9NBa&%-2 zdv=E6dY{VR-EDAI>5i@1@S&j=)tB&(SXs@8qOB(Mz zhkB)P6%e%_uchL z00MlQDFdI*^!LR8=jx?>N+;WsOI^ps%r!e94QVQGcVMhTeG zyE0D{*79jt+u@HAsWoK$g()!G4UaqS`r-3*$XvStpPP>N%7J@~hR+>`kH03X6vF!J z69Nrkxo?+$orbq>-gr$Cwkcrxwgc|#7`VX)3%+4vr1;_h6>zI#fG?!9B+h})uekT9 z4JCg!YLT+N4Y-rk% zaG9=9UaJ@Gry%e0h=xBzI`dQ?zy*V}J^NzlvSQVKd;!IoEBA@~buy#c@AjdKq&jc@ z2YBJftimAJT~%++SGb{v(doD+x|oVu^D5w%5}wPNJW%0prp4caV|EGuaD%@l@fe(k z%ilhmXmH0EX;k#i37B59=##NT#XXg=xrO>jn<&_Q>+5@d zS72i!bww$4U3Dem{(sh491Pr^oLU?vvu`s!0A~LF2bMsDR=~gB%XWN)XRZ;=&n^11DI@M>qvxdOFn+k+aV0t3aT!p*LJb2__O@X~aCzNy#$xR+lLcN`J^QqOTt5G+T|An0C>xlmN?9ozs2}n0|JT@k z%Gy#pdAztjB#pNFJ8!tx(FEgSM5n#Y{OD+4t}fttopuJkOJxR;W4`JD?@@gBC2| zSe`lw*S9z(TfqG3*Mi>jqjOX%{=opwF6x-0I1l-^9BbEvt*fKjV&LVeL$5gCYxc{8 zp2Fm#57j?i#Bh^A`Q^s>Xge=7bN9iY4s%%FfyE1w#!ta!+WDI)0_a=~1&-*!;;|bU zmIz|FX1~aIx&X0ZyZA!V0?dBqcy*=0tPdQ#x5Cp2hU;D7du0piYhmB6U)S~EpK zit=Xn%Ok;`I3*;H!V8mc&t`%z*(6U^!Sbe6d7m#J{?&4wnPV|#lizg~mctiAbCp*t z!L`BHpRYU&>tx&r-2r<}x2CzmjQQ-Jir^BX!}8W}@8*<#e=&?^cJ%LF0|)iht98LY zr>2M1U}0`Ke@=09#$1lHNW$&+Lzxud&FK?gX2XL0ovZC&5z&AnKTz|Qssu2ffIsX$ z@op40yWtph9}epib7VyRhffB&OqL?vw&=M27d-!HaIEeLOs~0Sr#3#)lE7R^l}O42 zp64K`>AAsYrshV>!}=;r$@S@Q_MMpBdN9*hBi$yLSM`GUBY5lk_vO{_$-5a!^H5#` z-ONLc@Q$X0WyIx3i^r8riS>83?-?J0Z?QzAUWO|druqJYzqsdhBrQV&Q~XR`7yFk% z^rXu-I7#ecx;o65=dH1NIl@c9QWBEz2Tj*=KjAwJDX(8+efkl3weR4rE|@sbGv72{ zpgulxTSgr4;m@~S*5REMSCIE)SVz=+OI+PB?e1e^6LS+OYeh??C~iLz!_me67@j|$ zqkivt8M=nNG6RfgXTB>7ocxF`7`=V@`|x}T4){M?Ao`kn%cJjwqOI?it$oLdElGN_ zk*r~df!d=kaPGOEV@u(@3l4+9FzN|^?s_#B1n$`84hAb*Z;;HV_ry85bHJX|!q<@swI zz?rwcD;|e0*RUm>ggwiyc~rq)pV$qqgpd8mOaBQ+Uv@hti34_r;f*h{*uI&Qt4ITO z$SuXw{X5{KAy?UWc!@HT)hT$z5fkVAutJiDZw5S;WMpOrUuLnFl!4ijLT}H5Lqj!I z6=M6b5?N0!VF$MMaI~hwCz>Q;F zpAc?8@(C4ko6Our{ILG5;*1ue!gANX6@aS-7_VG}rA*dba)e`8Y)nJo=CAYY&%=hE zDL0hhKA*`NFW58Z{OdFv5Uk~;afji1=Kft8a9b*KO)gy86ZJ_9rq__y!8VcOs2RFW zX`5p3JiVq66*0ld>jCk2?A*~qM1|DJwYsds)LGym;jXVE{KiD4HS84q3}m2!;l6@V zn1?TkA>82~6_Or)-B=c;=`D+>%JUy3au}r2!?Ay_kh4)C|IAq@<+1&fJmN#k3#J?} zoZeY~O1WME72?Fxq;PotYnzXWifB=rb2HQ6WD&0FM@op-Tr`&IfSp1$@AE0+_ZcSL^�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

;~*k+H?d-H%8} zIjyr;$eGu_IQIPBH70`C$??)cC87}!>PJr?z&AF!QuqRIc%tZxJKdKFFkRq|L{Ilb zwY@HL|7u6b%V0y`=cUh*7sf+>8_(?Uk#HNBSF?pZ7fmG+M;rV?%uU2NA%l<<6mjwe zzUX3MJO6*8_5Q!(UO^tc-SS=Uy69vR@!#=Z`j-{+p@dh)qN(k3TPo+yh>t#}=B*wh z25ey=S1`6zwl@0;6CE|R?}2M3SQg7GV}uWX**0pj0*X*8l zh>4D(78KeCul^gfnenm{m(dZOYUlQ^E%RyG-aTav*<4Sy8byVz_WsZscGgqN7mhWY zL4#*sosfM-!;6|oW<*JXtq`-(P$sF+hg<_ecq-2<4C5MqDt4fThvRTtbUUfs*_YR; zq=ea5OvrllxL}u_f!wxxa~u8~cAANf-1)Cxp8-_8v9ns%-jOr%vor3r*N&Osfg&Q; z8oK`-tPbw~c5A5g^sM*0YU-ebo9_SqvFaYw=gX=oJtJC^?NuYvGL@IQXqq`eB(-#R zGBT(Yv2?AuNYw`tD5JHcjuq7=-{a`^z8tT`s3{A%899~rjk>j&iH?-{eI99q6&A$p z{LEVLGeox;xLjG=GR{Dxs=mpH=hNb*IU}n+=aZ0a9~lBe*S_rjp&s&CZR_tDp+JKd z8?{F79agrWsfLIZ3U|GcGAXe(oUtU378@BYat$3nj3tfkibO7wYb${^%5_vraUB;t zZMio@|CXMCTtQN}Y2U^WCfd=K0jrCurWRxTk0i|q6PTNuKJ1*KV<2k!$VHCFY3dsJSlY*}&o=n=KQXM<(4CO=e^Rt)*B2P+jhIYrp3cvEaYaU|LgMeUVWLkt@AD;UfTO%_W&Rb z_`nzc4BUAdO5p={ess5t@^D2+2QwaLAW~d6!LYzx`b*CiwU)ZTd5vFAls((r*Pz?l z$Qs&Stlc@I)n=6V&XepfS9+n;BlC=1XLTgpiCKj_IS?c*j~v`SiWWdM&%mh@`8LR#dvP>`-Qro`KxP z&kAm2N5wF4YuRZ8>j0OKB^m*de^^iaGc=CytZ0G{Tyd);05-0>9bSsZ8HfySj}aah zL?7Bl3@(CTUvKx4NrwtUHtgW;<#6yTGJ|hLb&o)<6~y~;@&~xIL4CZ3kC?9aCU1~P ze_S}0%GRFqZ2#Q;d7ng+l{IsWy@bep{QYroga6&|p;r|oU389#`%y_=Q-aXsJR*A=C z6_yV%=ni+WIFx=R4=-h&Z-)}L7Uwlv9gYV2Tpt)4)5J<0*g{%Le1&Q`*j4Gsp8e$? zVm({=yFsA#N5rADRog{(mCBvHLn&#~UE8DE<2xRY^bF*FsBt$je0m2aZoRoV1266U zM@JDL@+}*L5x9HY*aRQo`i++I^3a(>*?4_@GoDYlOD`*{*k$Zow>?oK-zq!#gAp1f zg;==rZ@*_s&E|aq<#29<_Dw7? zfY>flDa*7gZk2TV-|As+A1z$cUC%(yTsUInZnKDrVah6@~4Ox?tL|zl0vGc<=WAqH@Q8_VZoK*mfvF_Qb&DZ#PfMsd;b3J zp`U1Amm8I`W_Q}qkn63uuZ_6~e#a2_WyX)IG~Un@<(d1Ar0FQ>(ADho!7IovN3Xsh zQPFg9hA>!8_y!wD3~|#XNMMcH-BeP%$-FAArsjU*^$g@T7EDe)6P3wCM{%pRW>6_C zpq;oi+n51gz%_E>`0eA*5gunCYVtve5swqr1aS+mZ3(sM4&Anf+|Z=%r+)5-687aM zr=_$(LoUsFu%ZWV+UjV5!j~$LP&YJ=bM!b>v4l4bh$9s)6=vfu4Ya>%yRkvjSps)f zi5pAWYv`g?Qi3?k9{)7rr%p%o4CJ=VuX}L8-iu76xa;y6roxW9zo;rX-&Od5BHTqz zmQ_yCg`8N#?KyI*6n@7Lki265$tG)1!j48iH=Y)OJ|22wyi3YZtHddxz=F;MlQ0g} zmeeTUmJFMfbj3Ld-$BU@tt_q0Y$7^IVGf@Hcq1R^JpJ#ZUsnBT(Ie#r7IKB3o*22x z`&TAX%=NiughjM4mjNG`$qA{OT+^?o!DGajYwxzjW$?L>vyBV^+`ETnwe5ov4*uS& zaQ|Y|yI;GTq0?-)6G7)_I>SKZ34)?ZO5B7&t;nG$o1o&X63v&zCed}2Ko_MXmCiH% za5c)d+mDrE{NKNC@Ngcw|CLk+9=J~z;C zQ|$HtG8;;`MI=qQ|If`MRp!$c{Qomva`^bqzkgQXpB4CL1^!uqe^%h175KYWAWPL- zf|2Bqm()c|I8^STAHDbZ&O4Phu#lTKBcL*O_%kM&Wj>|wcXH3<`!S-Ry=MWyNV=eT zA%_oKaqgnh^3a))ggjds@qA(=rN30&To{}V{=fVMPL6~usbUCx{URu#<4-6dK|OT# zg==Wg-MgBi=I4oh6ia*PkQ1@lrZ_%Lop2O}!9EhJF(;g#1gv}nm>xPVzIE+q^AVdtSKeC`f<2M-Z^Wt z2bR`JxS`cEkjs9MGcoMcdM54(d}73l`oc|y08v26!VEwc?qXd9pp3g*keV0$0e0^+)l|E34BAxp9u$#z@LqxD3H$fi>CW8fg5v@ubiwc(=(7eFlg1ddUakfQAAgoVFlla1K=;1;TvaL99viRtS_sv z^KD*N`kcDhZ(6fjDB-~5e$z@0qNGuc%VLgJBl}zoJD&ta!}L{cgchg)U`KuMmEcsn J4okVz{{dHBZZ!Y^ diff --git a/sample_data/sample_gpkg/gauge_12175500.gpkg b/sample_data/sample_gpkg/gauge_12175500.gpkg new file mode 100644 index 0000000000000000000000000000000000000000..0e2c2a55a08581873c9e7750c7da6d3a44bbeaaf GIT binary patch literal 450560 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%0Am{N6zr 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

t?k~@45#zkb!b6r!3f&KR6i|EaRf^-p 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

4D3P+##*jp(uRWq&+d;M6NKmL} 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∓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

#h`tnCnemphSRttRxgK#1@B3d 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 b0m=YnfHFWCpbSt3C Date: Wed, 8 Jul 2026 08:54:23 -0400 Subject: [PATCH 15/26] Commit with function to convert catchment output csvs to netcdf. Also has temporary log file for easy debugging during development. --- .../output_variables/DataProcessor.py | 205 +++++++----------- .../output_variables/consts.py | 14 ++ .../output_variables/utils.py | 158 ++++++++++---- netcdf_production_sample.py | 41 ++-- 4 files changed, 232 insertions(+), 186 deletions(-) diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index 8e9dc95..7ccf72d 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -7,6 +7,7 @@ import xarray as xr import dask.array as da import time +import math from shapely.geometry import Point from shapely.ops import unary_union from shapely import intersects_xy @@ -29,8 +30,7 @@ def __init__(self, catchment_netcdf_file: str, gpkg_file: str, chunk_size: int = filename = os.path.basename(gpkg_file) self._geo_id = filename.replace(consts.GPKG_FILE_PREFIX, '').replace('.gpkg', '') - # Normalize catchment ids in netcdf with a cat- prefix for consistency. - nc_catchments = self._normalize_catchment_ids(self._catchment_ds[self.catchment_coord].values) + nc_catchments = self._catchment_ds[self.catchment_coord].values # Read geopackage, determine schema and "divides" layer is_new_NHF_schema: bool = self._is_new_NHF_schema(gpkg_file, consts.NHF_REF_OBJECT) @@ -44,8 +44,6 @@ def __init__(self, catchment_netcdf_file: str, gpkg_file: str, chunk_size: int = else: self.catchment_field = consts.NONNHF_DIV_ID - # Normalize catchment ids in gpkg with a 'cat-' prefix for consistency. - gpkg_gdf[self.catchment_field] = self._normalize_catchment_ids(gpkg_gdf[self.catchment_field].values) gpkg_catchment_list = gpkg_gdf[self.catchment_field].values.tolist() self._gpkg_gdf = gpkg_gdf @@ -53,6 +51,11 @@ def __init__(self, catchment_netcdf_file: str, gpkg_file: str, chunk_size: int = if set(nc_catchments) != set(gpkg_catchment_list): raise ValueError("There is a mistmatch between catchment IDs in geopackage and netcdf") + # Set log file which will be redirect to stdout. + # Only for testing + self._original_stdout = sys.stdout + self._log_file = None + @property def nwm_output_class(self): return self._output_class @@ -65,6 +68,10 @@ def nwm_category(self): def nwm_domain(self): return self._domain + @property + def log_file(self): + return self._log_file + @nwm_output_class.setter def nwm_output_class(self, value): self._output_class = value @@ -77,6 +84,19 @@ def nwm_category(self, value): def nwm_domain(self, value): self._domain = value + @log_file.setter + def log_file(self, log_file_path: str): + self.close_log() + if log_file_path is None: + return + + log_folder = os.path.dirname(log_file_path) + if log_folder: + os.makedirs(log_folder, exist_ok=True) + + self._log_file = open(log_file_path, "w", encoding="utf-8") + sys.stdout = self._log_file + def set_template_grid(self, template_grid_path: str): self.ds_template_grid = xr.open_dataset(template_grid_path) @@ -88,19 +108,6 @@ def _is_new_NHF_schema(self, geopackage_path: str, layer_name: str) -> bool: tabular_layers = layers[layers[consts.GPKG_GEOMETRY_TYPE_IDENTIFIER].isna()] return layer_name.lower() in tabular_layers['name'].tolist() - def _normalize_catchment_ids(self, ids) -> np.ndarray: - """ - Ensure all IDs are prefixed with 'cat-'. This is necessary when catchments are not prefixed - with 'cat-' in netcdf and geopackage for consistency. - """ - ids_str = ids.astype(str) - - normalized = np.array([ - id_ if id_.startswith("cat-") else f"cat-{id_}" - for id_ in ids_str - ]) - return normalized - def _snap_to_grid(self, value: float, origin: float, resolution: int, direction: np.ufunc): if direction == np.floor: return origin + np.floor((value - origin) / resolution) * resolution @@ -131,7 +138,7 @@ def create_template_grid_netcdf_using_config(self, mdata: NetCDFMetadata, templa template_nc_name = self._geo_id + '_' + self._output_class + '_' + self._category + '_' + self._domain + '.nc' template_nc_file = os.path.join(template_netcdf_folder, template_nc_name) if os.path.isfile(template_nc_file): - print(f"Reusing existing template file in local for {self._output_class}, {self._category}, {self._domain}") + print(f"----Reusing existing template file in local for {self._output_class}, {self._category}, {self._domain}") else: ds = xr.open_dataset(file_name) # To do: Have to figure out a workflow when CRS is "Not Available" @@ -180,6 +187,12 @@ def create_template_grid_netcdf_using_config(self, mdata: NetCDFMetadata, templa ds_clipped = ds_masked.dropna(dim=y_name, how="all") ds_clipped = ds_clipped.dropna(dim=x_name, how="all") + # Set values of NWM variables to zero in the template grid + nwm_vars = [name for name, var in ds_clipped.data_vars.items() + if var.ndim > 0 and name not in ds_clipped.coords] + for var in nwm_vars: + ds_clipped[var] = ds_clipped[var] * 0 + # Create crs as a scalar variable. crs_attrs = ds_clipped["crs"].attrs ds_clipped = ds_clipped.drop_encoding() @@ -197,129 +210,40 @@ def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> Non # change variable name in the randomvals.nc This is strictly for testing purposes. # The case statements should be removed before going into production. produce_output = False - ds_test = self._catchment_ds - data_modified = False - cat_class_domain = mdata.output_class + '_' + mdata.category + '_' + mdata.domain - target_variables_dict = mdata.data_variables_dim - for var_name, dims in target_variables_dict.items(): - if var_name in ds_test.data_vars: - continue # the variable exists in ngen output. We don't need to do anything + ds_modified = self._catchment_ds + + # Remove data variables that should not be part of the product. + # You can remove variables that are in the ignore variables as well. + target_variables = [var.strip() for var in mdata.nwm_variables.split(",")] + removed_items = list(set(target_variables).intersection(set(consts.NWM_VARS_IGNORE_LIST))) # for logging + print(f"----Variables ignored: {removed_items}") + ignore_set = set(consts.NWM_VARS_IGNORE_LIST) + pruned_variables = [item for item in target_variables if item not in ignore_set] + variables_to_drop = [var for var in ds_modified.data_vars if var not in pruned_variables and len(ds_modified[var].dims) > 0] + ds_filtered = ds_modified.drop_vars(variables_to_drop) - # if the variable doesn't exist, we will find a matching variable with those dims. - # make a copy of it and use it for testing. - dims_set = sorted([str(dim) for dim in dims]) - print(f"{var_name} is missing. Searching for another variable with same dimensions: {dims}...") - match_found = False - for existing_var in ds_test.data_vars: - # Get existing dimensions as a sorted list of strings - existing_dims_set = sorted([str(dim) for dim in ds_test[existing_var].dims]) - if dims_set == existing_dims_set: # Compare both dimensional sets - print(f"Found matching variable. Copying nc structure from {existing_var}") - - # xr.full_like preserves the exact multi-axis coordinates, shape, and chunking - ds_test[var_name] = xr.full_like(ds_test[existing_var], fill_value=-1.0) - - # Strip out old attributes to prevent metadata contamination - ds_test[var_name].attrs = {"long_name": f"Generated {var_name}", "units": "unknown"} - - match_found = True - data_modified = True - break # Iterate to the next variable. - - if not match_found: - print(f"No existing variable matches the dimensions {dims} for '{var_name}'.") - - if data_modified: - print(f"Data modified for testing: {cat_class_domain}") - else: - print(f"No changes needed. File matches NWM layout for {cat_class_domain}") + cat_class_domain = mdata.output_class + '.' + mdata.category + '.' + mdata.domain - match cat_class_domain: - case "analysis_assim_land_conus": - # analysis_assim.land.conus - produce_output = True - case "analysis_assim_terrain_rt_conus" | "medium_range_blend_terrain_rt_conus": - # analysis_assim.terrain_rt.conus; medium_range_blend.terrain_rt.conus - produce_output = True - case "long_range_land_2_conus": - # long_range.land_2.conus - produce_output = True - case "medium_range_blend_land_conus": - # medium_range_blend.land.conus - produce_output = True - - if produce_output: - catchment_grid = self.build_catchment_id_grid(mdata.x_name, mdata.y_name) - mapped_grid = self.map_catchment_data_to_grid(ds_test, catchment_grid, consts.DIM_CATCHMENTS, mdata.x_name, mdata.y_name) - - start_time = time.perf_counter() - self.write_netcdf_per_timestep(mapped_grid, output_dir, consts.DIM_TIME) - end_time = time.perf_counter() - duration_minutes = (end_time - start_time) / 60 - print(f"Function execution time: {duration_minutes:.4f} minutes") - else: - print(f"Production skipped for {cat_class_domain}") - - def obsolete_produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> None: - # change variable name in the randomvals.nc This is strictly for testing purposes. - # The case statements should be removed before going into production. - produce_output = False - cat_class_domain = mdata.output_class + '_' + mdata.category + '_' + mdata.domain - ds_test = self._catchment_ds - match cat_class_domain: - case "analysis_assim_land_conus": - # analysis_assim.land.conus - ds_test = self._catchment_ds.rename({ - 'sm_frac_0.4m': 'ACCET', - 'sm_profile_0.1m': 'ACSNOM', - 'sm_profile_0.4m': 'EDIR', - 'sm_profile_1.5m': 'ISNOW', - 'sm_profile_2m': 'QRAIN', - 'SWE_mm': 'QSNOW' - }) - produce_output = True - case "analysis_assim_terrain_rt_conus" | "medium_range_blend_terrain_rt_conus": - # analysis_assim.terrain_rt.conus; medium_range_blend.terrain_rt.conus - ds_test = self._catchment_ds.drop_vars(["sm_profile_0.4m", "sm_profile_1.5m", "sm_profile_2m", "SWE_mm"]) - ds_test = self._catchment_ds.rename({ - 'sm_frac_0.4m': 'sfcheadsubrt', - 'sm_profile_0.1m': 'zwattablrt' - }) - produce_output = True - case "long_range_land_2_conus": - # long_range.land_2.conus - ds_test = self._catchment_ds.rename({ - 'sm_frac_0.4m': 'ACCET', - 'sm_profile_0.1m': 'UGDRNOFF', - 'sm_profile_0.4m': 'SOILSAT', - 'sm_profile_1.5m': 'SFCRNOFF', - 'sm_profile_2m': 'SOILSAT_TOP', - 'SWE_mm': 'SNEQV' - }) - produce_output = True - case "medium_range_blend_land_conus": - # medium_range_blend.land.conus - ds_test = self._catchment_ds.rename({ - 'sm_frac_0.4m': 'FSA', - 'sm_profile_0.1m': 'FIRA', - 'sm_profile_0.4m': 'HFX', - 'sm_profile_1.5m': 'TRAD', - 'sm_profile_2m': 'LH', - 'SWE_mm': 'SNEQV' - }) - produce_output = True + for var_name in pruned_variables: + if var_name in ds_filtered.data_vars: + continue # the variable exists in ngen output. We don't need to do anything + else: + print(f"----'{var_name}' is missing in ngen output") + + if (cat_class_domain in consts.NWM_PRODUCTS_LIST): + produce_output = True if produce_output: catchment_grid = self.build_catchment_id_grid(mdata.x_name, mdata.y_name) - mapped_grid = self.map_catchment_data_to_grid(ds_test, catchment_grid, consts.DIM_CATCHMENTS, mdata.x_name, mdata.y_name) + mapped_grid = self.map_catchment_data_to_grid(ds_filtered, catchment_grid, consts.DIM_CATCHMENTS, mdata.x_name, mdata.y_name) start_time = time.perf_counter() self.write_netcdf_per_timestep(mapped_grid, output_dir, consts.DIM_TIME) end_time = time.perf_counter() duration_minutes = (end_time - start_time) / 60 - print(f"Function execution time: {duration_minutes:.4f} minutes") + print(f"----Function execution time: {duration_minutes:.4f} minutes") else: - print(f"Production skipped for {cat_class_domain}") + print(f"----Production skipped for {cat_class_domain}") def build_catchment_id_grid(self, x_dim_name: str, y_dim_name: str) -> xr.DataArray: """ @@ -472,3 +396,24 @@ def write_netcdf_per_timestep(self, mapped_grid: xr.Dataset, output_dir: str, ti formatted_t = t_str.replace('-', '_').replace(':', '_') output_file = os.path.join(output_dir, f"nwm.{self._geo_id}.{self._output_class}.{self._category}.{self._domain}.{formatted_t}.nc") # To do: Get this as function argument ds_t.to_netcdf(output_file) + + def close_log(self): + """Restores the original terminal output and closes the file.""" + original_stream = getattr(self, "_original_stdout", sys.stdout) + if sys.stdout != original_stream: + sys.stdout = original_stream + + log_file_obj = getattr(self, "_log_file", None) + if log_file_obj and not log_file_obj.closed: + log_file_obj.flush() + log_file_obj.close() + + # Reset the private attribute safely + if hasattr(self, "_log_file"): + self._log_file = None + + def __del__(self): + """ + Close the log file if the script ends unexpectedly. + """ + self.close_log() \ No newline at end of file diff --git a/data_assimilation_engine/output_variables/consts.py b/data_assimilation_engine/output_variables/consts.py index 6f2f945..8a95122 100644 --- a/data_assimilation_engine/output_variables/consts.py +++ b/data_assimilation_engine/output_variables/consts.py @@ -4,6 +4,18 @@ 'SNLIQ', 'SNEQV', 'QSNOW', 'SOIL_T', 'SOIL_M', 'SFCRNOFF', 'ACCECAN', 'ACCEDIR', 'ACCETRAN', 'UGDRNOFF', 'GRDFLX', 'TRAD', 'FSA', 'CANWAT', 'LH', 'FIRA', 'HFX'] +NWM_VARS_IGNORE_LIST = ['ACCET', 'ACCECAN', 'ACCEDIR', 'ACCETRAN', 'CANWAT', 'SOILSAT', + 'EDIR', 'FSA', 'GRDFLX', 'ISNOW', 'UGDRNOFF', 'zwattablrt'] + +NWM_PRODUCTS_LIST = ['analysis_assim.land.conus', 'analysis_assim.terrain_rt.conus', + 'medium_range_blend.land.conus', 'medium_range_blend.terrain_rt.conus', + 'medium_range.land_1.conus', 'medium_range.terrain_rt_1.conus', + 'medium_range.land_2.conus', 'medium_range.terrain_rt_2.conus', + 'medium_range.land_3.conus', 'medium_range.terrain_rt_3.conus', + 'medium_range.land_4.conus', 'medium_range.terrain_rt_4.conus', + 'long_range.land_1.conus', 'long_range.land_2.conus', 'long_range.land_3.conus', 'long_range.land_4.conus', + 'short_range.land.conus', 'short_range.terrain_rt.conus'] + NOMADS_BASE_URL = 'https://nomads.ncep.noaa.gov/pub/data/nccf/com/nwm/prod' NWM_DATA_LOCAL_FOLDER = 'nwm_ref_files' NWM_NGEN_TEMPLATE_FOLDER = 'ngen_templates' @@ -12,6 +24,7 @@ NWM_CONFIG_LOCAL_FOLDER = 'configs' NWM_CONFIG_FILE_NAME = 'metadata' NWM_CONFIG_FILE_SUFFIX = '_config' +LOG_FOLDER = 'logs' DIM_TIME = 'time' DIM_CATCHMENTS = 'catchments' NHF_REF_OBJECT = 'reference_flowpaths' @@ -37,3 +50,4 @@ JSON_CLASS = 'class' JSON_CATEGORY = 'category' JSON_DOMAIN = 'domain' +CSV_BASE_COLS = ['time step','time'] #use lowercase diff --git a/data_assimilation_engine/output_variables/utils.py b/data_assimilation_engine/output_variables/utils.py index 8a18994..25e7fd7 100644 --- a/data_assimilation_engine/output_variables/utils.py +++ b/data_assimilation_engine/output_variables/utils.py @@ -3,6 +3,7 @@ import requests import xarray as xr import csv +import pandas as pd import numpy as np import json import logging @@ -29,6 +30,123 @@ def parse_filename_metadata(filename: str) -> Tuple[str, str, str]: category = components[3] domain = components[5] return output_class, category, domain + +def convert_csvs_to_netcdf(csv_folder: str): + """ + Takes a directory for ngen output CSVs, automatically discovers NWM variables, + analyzes their native data types, and converts them to netcdf. + """ + # Find all CSV files in the target directory + csv_files = [] + try: + with os.scandir(csv_folder) as entries: + for entry in entries: + if entry.is_file() and entry.name.lower().endswith('.csv'): + csv_files.append(entry.path) + except FileNotFoundError: + print(f"The directory '{csv_folder}' does not exist.") + return + + if not csv_files: + print(f"No CSV files found in directory: {csv_folder}") + return + + # 1. Discover variables using the first valid CSV file + template_df = pd.read_csv(csv_files[0]) + base_cols = consts.CSV_BASE_COLS + nwm_variables = [col for col in template_df.columns if col.lower() not in base_cols] + + print(f"NWM variables for netcdf: {nwm_variables}") + + catchment_nc_data = [] + + for file_path in csv_files: + filename = os.path.basename(file_path) + try: + # Use file names to extract the catchment IDs. We are using splitext and isdigit + # instead of the usual replace 'cat-' so that it can handle other filename formats + # Assumes that the file name contains long integer catchment IDs. + catchment_id_name = os.path.splitext(filename)[0] + catchment_id_str = ''.join(filter(str.isdigit, catchment_id_name)) + catchment_id = np.int64(catchment_id_str) # for latest NHF schema + except ValueError: + print(f"Skipping {filename}: Could not parse catchment ID as a long integer.") + continue + + # Load CSV into Pandas + df = pd.read_csv(file_path) + + #Convert Time column to lower case + if 'Time' in df.columns: + df.rename(columns={'Time': consts.DIM_TIME}, inplace=True) + + # Safety check: Ensure this specific CSV contains all discovered data columns + if not set(nwm_variables).issubset(df.columns): + print(f"Skipping {filename}: Headers do not match the expected dataset schema.") + continue + + # Convert time to UNIX Epoch + df['datetime'] = pd.to_datetime(df['time']) + df['epoch'] = (df['datetime'].astype('int64') // 10**9).astype(np.int32) # int32 good until year 2038 + + # 2. Dynamically extract columns based on their native types + nwm_vars_dict = {} + for var in nwm_variables: + col_type = df[var].dtype + + if col_type.kind in {"U", "S", "O"}: # If the column is text/string or generic object data + nwm_vars_dict[var] = (["time"], df[var].astype(str).values) + elif col_type.kind in {"i", "u"}: # If the column is an integer type (like status codes, IDs) + nwm_vars_dict[var] = (["time"], df[var].values) + else: # Default floats/doubles + nwm_vars_dict[var] = (["time"], df[var].values) + + # Set coordinates for xarray translation + df = df.set_index('epoch') + + # Convert individual dataframe to an xarray Dataset + catchment_ds = xr.Dataset( + data_vars = nwm_vars_dict, + coords = { + consts.DIM_TIME: (["time"], df.index.values.astype(np.int32)), + consts.DIM_CATCHMENTS: catchment_id + } + ) + + # Expand the dataset to include 'entity' as a dimension axis + catchment_ds = catchment_ds.expand_dims(consts.DIM_CATCHMENTS) + catchment_nc_data.append(catchment_ds) + + if not catchment_nc_data: + print("No valid data was extracted. NetCDF generation aborted.") + return + + print(" Combining and aligning all catchments") + + # Merge all separate entities together along the 'entity' dimension + combined_ds = xr.combine_by_coords(catchment_nc_data) + + # Explicitly enforce structural array coordinates to be 64-bit long integers + combined_ds[consts.DIM_TIME] = combined_ds[consts.DIM_TIME].astype(np.int32) + combined_ds[consts.DIM_CATCHMENTS] = combined_ds[consts.DIM_CATCHMENTS].astype(np.int64) + + # Add descriptive metadata attributes dynamically + combined_ds[consts.DIM_TIME].attrs = {"units": "seconds since 1970-01-01 00:00:00", "calendar": "gregorian"} + combined_ds[consts.DIM_CATCHMENTS].attrs = {"Catchment_ID": "Catchment identifier in input"} + + for var in nwm_variables: + # Do we need to have a dictionary of variable name, mapping and units for attributes? + type_label = combined_ds[var].dtype.name + combined_ds[var].attrs = {"long_name": f"{var}"} + combined_ds[var].attrs["_FillValue"] = -1.0 + combined_ds[var].attrs["missing_value"] = -1.0 + + + output_netcdf_path = os.path.join(csv_folder, 'catchment_output.nc') + print(f"Saving unified NetCDF to: {output_netcdf_path}") + combined_ds.to_netcdf(output_netcdf_path) + print("Process complete!") + # endregion # region data download @@ -243,7 +361,7 @@ def extract_netcdf_metadata_from_netcdf(file_path: str) -> NetCDFMetadata: y_loc_name = nwm_var elif nwm_var in consts.CRS_INFO: #CRS wkt proj_wkt = extract_wkt_from_crs(ds.variables[nwm_var]) - elif nwm_var in consts.NWM_VARIABLES_LIST: #NWM output variables + elif nwm_var in consts.NWM_VARIABLES_LIST or len(ds[nwm_var].dims) > 1: #NWM output variables vars_in_netcdf.append(nwm_var) nwm_variables = ", ".join(vars_in_netcdf) return NetCDFMetadata(file_path, res_x, res_y, origin_x, origin_y, x_loc_name, y_loc_name, proj_wkt, @@ -470,44 +588,6 @@ def read_output_variables_info_from_config(json_file: str) -> List[NetCDFMetadat return netcdf_metadata_list # endregion -# region (to delete) create template grids -def create_nwm_template_grids(src_root_folder: str, dest_root_folder: str) -> None: - """ - Creates template grids for all NWM netcdf products using a sample set of netcdfs. - """ - # This function is there for testing purposes. - # We can delete this once we are prodution ready. - coords_to_reset = ['time', 'x', 'y', 'latitude', 'longitude'] - - for root, dirs, files in os.walk(src_root_folder): - # Determine the relative path to recreate subfolders - rel_path = os.path.relpath(root, src_root_folder) - target_dir = os.path.join(dest_root_folder, rel_path) - - # Create the target directory if it doesn't exist - os.makedirs(target_dir, exist_ok=True) - - for file in files: - if file.endswith('.nc'): - src_path = os.path.join(root, file) - dest_path = os.path.join(target_dir, file) - - # Process the NetCDF using xarray - with xr.open_dataset(src_path) as ds: - # Reset data variables - for var in ds.data_vars: - if var in consts.NWM_VARIABLES_LIST: - ds[var].values[:] = -1 - - # Reset coordinate variables - for coord in coords_to_reset: - if coord in ds.coords: - ds[coord].values[:] = - 1 # To do: Gives warning for time. Need to address - # Save to the desired location - ds.to_netcdf(dest_path) - print(f"Processed: {dest_path}") -# endregion - # region basin grid products def create_combined_basin_netcdf_products (reference_grid: str, timestep_netcdf_folder: str, output_folder: str) -> None: """ diff --git a/netcdf_production_sample.py b/netcdf_production_sample.py index 8a38403..9fbee90 100644 --- a/netcdf_production_sample.py +++ b/netcdf_production_sample.py @@ -39,10 +39,10 @@ def extract_netcdf_metadata(netcdf_root_folder: str): utils.obtain_metadata_information(netcdf_root_folder) #utils.debug_netcdf_structure_in_folder(netcdf_root_folder) -def create_template_nwm_grids_data(netcdf_root_folder: str, templates_folder: str): +def convert_csv_to_netcdf(csv_folder: str): #Usage: - # python netcdf_production_sample.py create-template-nwm-grid sample_data/nwm_output sample_data/nwm_templates - utils.create_nwm_template_grids(netcdf_root_folder, templates_folder) + # python netcdf_production_sample.py convert-csv-to-netcdf sample_data/medium_range_mem2 + utils.convert_csvs_to_netcdf(csv_folder) def combine_basin_grids(reference_grid: str, netcdf_folder: str, output_folder: str): #Usage: @@ -72,7 +72,7 @@ def overall_netcdf_workflow(ngen_netcdf_output_file: str, ngen_gpkg_file: str, o netcdf_metadata_list = utils.read_output_variables_info_from_config(json_file) else: raise ValueError("Specified config file does not exist") - print('Read output variables info from config') + # print('Read output variables info from config') # Begin data processing # reader = DataReader(ngen_netcdf_output_file) @@ -85,12 +85,20 @@ def overall_netcdf_workflow(ngen_netcdf_output_file: str, ngen_gpkg_file: str, o ngen_template_nc_folder = os.path.join(output_folder, consts.NWM_NGEN_TEMPLATE_FOLDER) nwm_output_folder = os.path.join(output_folder, consts.NWM_OUTPUT_FOLDER) for mdata in netcdf_metadata_list: - print(f"Ready to process: {mdata.output_class}, {mdata.category}, {mdata.domain}") - if any(cat.lower() in mdata.category.lower() for cat in ['channel_rt', 'reservoir', 'total_water']): - print(f"The requested category - {mdata.category} - is not a gridded netcdf. The functionality is not implemented yet") - continue - processor.create_template_grid_netcdf_using_config(mdata, ngen_template_nc_folder) - processor.produce_nwm_output_grid(mdata, nwm_output_folder) + # if mdata.output_class == 'medium_range' and mdata.category =='land_1' and mdata.domain == 'conus': + if mdata.output_class == 'analysis_assim' and mdata.category =='land' and mdata.domain == 'conus': + # if mdata.output_class == 'medium_range_blend' and mdata.category =='terrain_rt' and mdata.domain == 'conus': + # if mdata.output_class == 'long_range' and mdata.category =='land_4' and mdata.domain == 'conus': + log_file = os.path.join(output_folder, consts.LOG_FOLDER, 'nwm_' + mdata.output_class + '.' + mdata.category + + '.' + mdata.domain + '.' + datetime.now().strftime("%Y%m%d_%H%M%S") + '.log') + processor.log_file = log_file + processor.create_template_grid_netcdf_using_config(mdata, ngen_template_nc_folder) + processor.produce_nwm_output_grid(mdata, nwm_output_folder) + # print(f"Ready to process: {mdata.output_class}, {mdata.category}, {mdata.domain}") + # if any(cat.lower() in mdata.category.lower() for cat in ['channel_rt', 'reservoir', 'total_water']): + # print(f"----The requested category - {mdata.category} - is not a gridded netcdf. The functionality is not implemented yet") + # continue + def main() -> None: @@ -104,7 +112,7 @@ def main() -> None: parser_randomize.add_argument("output_file") #create template grid - parser_template_grid = subparsers.add_parser("create_template_grid_for_gpkg") + parser_template_grid = subparsers.add_parser("create-template-grid") parser_template_grid.add_argument("catchment_netcdf_file") parser_template_grid.add_argument("catchment_gpkg_file") parser_template_grid.add_argument("template_grid_file") @@ -126,10 +134,9 @@ def main() -> None: parser_nwm_info = subparsers.add_parser("obtain-netcdf-metadata") parser_nwm_info.add_argument("local_folder_path") - #create template NWM output grids using the downloaded files from nomad server - parser_template_grids = subparsers.add_parser("create-template-nwm-grid") - parser_template_grids.add_argument("nwm_output_grids_folder") - parser_template_grids.add_argument("nwm_template_grids_folder") + #convert CSV files from ngen outputs to netcdf + parser_csv_to_nc = subparsers.add_parser("convert-csv-to-netcdf") + parser_csv_to_nc.add_argument("csv_folder_path") #create basin level netcdf using timestep netcdfs parser_basin_grids = subparsers.add_parser("create-combined-basin-grid") @@ -155,8 +162,8 @@ def main() -> None: download_netcdf_from_nomads(args.download_url, args.output_folder_path) elif args.command == "obtain-netcdf-metadata": extract_netcdf_metadata(args.local_folder_path) - elif args.command == "create-template-nwm-grid": - create_template_nwm_grids_data(args.nwm_output_grids_folder, args.nwm_template_grids_folder) + elif args.command == "convert-csv-to-netcdf": + convert_csv_to_netcdf(args.csv_folder_path) elif args.command == "create-combined-basin-grid": combine_basin_grids(args.reference_grid, args.timestep_grids_folder, args.output_basin_grids_folder) elif args.command == "test-overall-workflow": From 2c3b622483e4a9873dd9b9b8528cd96517d815dc Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Wed, 8 Jul 2026 08:56:24 -0400 Subject: [PATCH 16/26] geopackage updated --- sample_data/sample_gpkg/gauge_01123000.gpkg | Bin 299008 -> 299008 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/sample_data/sample_gpkg/gauge_01123000.gpkg b/sample_data/sample_gpkg/gauge_01123000.gpkg index 2a8b05c1da7619bc3741736c4708eb8704309b23..93cf5ee201ff58b8c478a0e449e90bd0b87cc211 100644 GIT binary patch delta 60 zcmZozAk?rxNG3SYC$l6~AuYcsH?c&)m_dMniHX5ML4kpR!Dgb2Gph}QUbt6dN^1&Z PYYJ0q3iH+!mO1?Z^yCn2 delta 60 zcmZozAk?rxNG3SYC$l6~AuYcsH?c&)m_dMnk&(ecL4kpR!Fr;MGpjX&UNU22N^1&Z PYYJ0q3iH+!mO1?Z@NW<- From 97c6932fb3f9304a7df25606d7b8afff21c63a1f Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Thu, 9 Jul 2026 10:25:06 -0400 Subject: [PATCH 17/26] Added soil and snow layers to ngen output netcdf that stacks with those layers --- .../output_variables/DataProcessor.py | 45 ++++++++++++++++++- .../output_variables/consts.py | 2 + 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index 7ccf72d..023e643 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -8,6 +8,7 @@ import dask.array as da import time import math +import re from shapely.geometry import Point from shapely.ops import unary_union from shapely import intersects_xy @@ -207,11 +208,27 @@ def create_template_grid_netcdf_using_config(self, mdata: NetCDFMetadata, templa self.ds_template_grid = xr.open_dataset(template_nc_file) def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> None: - # change variable name in the randomvals.nc This is strictly for testing purposes. - # The case statements should be removed before going into production. produce_output = False ds_modified = self._catchment_ds + # if the output needs to have SOIL_M or SOIL_T, we need to + # stack the ngen output into the layers. + var_prefix_list = [] + if 'SOIL_M' in mdata.nwm_variables: + var_prefix_list.append('SOIL_M_') + if 'SOIL_T' in mdata.nwm_variables: + var_prefix_list.append('SOIL_T_') + + if len(var_prefix_list) > 0: + ds_modified = self.stack_soil_variables(var_prefix_list) + + # if the output needs to have SNLIQ (snow layer liquid water), I need to expand + # dimensions to include a snow layer. It is assumed to be of length=1 + if 'SNLIQ' in mdata.nwm_variables: + expanded_var = ds_modified['SNLIQ'].expand_dims(dim = consts.DIM_SNOW_LYR) + expanded_var = expanded_var.transpose(consts.DIM_TIME, consts.DIM_SNOW_LYR, consts.DIM_CATCHMENTS) + ds_modified['SNLIQ'] = expanded_var + # Remove data variables that should not be part of the product. # You can remove variables that are in the ignore variables as well. target_variables = [var.strip() for var in mdata.nwm_variables.split(",")] @@ -245,6 +262,30 @@ def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> Non else: print(f"----Production skipped for {cat_class_domain}") + def stack_soil_variables(self, var_prefix_list: List[str]) -> xr.Dataset: + stacked_ds = self._catchment_ds.copy() + for var_prefix in var_prefix_list: + matching_vars = [var for var in stacked_ds.data_vars if var.startswith(var_prefix)] + if not matching_vars: + raise ValueError(f"ngen output netcdf has no variables found matching the prefix '{var_prefix}'") + + var_val_dict = {} + for var in stacked_ds.data_vars: + if var in matching_vars: + soil_depth = var[len(var_prefix) :] + depth_num = re.search(r"\d*\.\d+|\d+", soil_depth) + var_val_dict[var] = float(depth_num.group()) if depth_num else 0.0 + + sorted_vars = sorted(var_val_dict.keys(), key = lambda k: var_val_dict[k]) + arrays_for_stack = [stacked_ds[v].rename(var_prefix.strip("_")) for v in sorted_vars] + stacked_var = xr.concat(arrays_for_stack, dim = consts.DIM_SOIL_LYR) + stacked_var = stacked_var.transpose(consts.DIM_TIME, consts.DIM_SOIL_LYR, consts.DIM_CATCHMENTS) + stacked_ds[var_prefix.strip("_")] = stacked_var + stacked_ds = stacked_ds.drop_vars(matching_vars) + return stacked_ds + + + def build_catchment_id_grid(self, x_dim_name: str, y_dim_name: str) -> xr.DataArray: """ Returns a DataArray (y, x) where each cell in the basin-level grid contains a catchment ID. diff --git a/data_assimilation_engine/output_variables/consts.py b/data_assimilation_engine/output_variables/consts.py index 8a95122..61f7c82 100644 --- a/data_assimilation_engine/output_variables/consts.py +++ b/data_assimilation_engine/output_variables/consts.py @@ -27,6 +27,8 @@ LOG_FOLDER = 'logs' DIM_TIME = 'time' DIM_CATCHMENTS = 'catchments' +DIM_SOIL_LYR = 'soil_layers_stag' +DIM_SNOW_LYR = 'snow_layers' NHF_REF_OBJECT = 'reference_flowpaths' NHF_DIV_ID = 'div_id' NONNHF_DIV_ID = 'divide_id' From 6b899d48130818c3db187399d0468570dcad21d2 Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Mon, 13 Jul 2026 10:44:49 -0400 Subject: [PATCH 18/26] Cleaned up streamflow and rfc_ingetstion folders and pushing the contents --- .../ace_download/analysis/crontab.txt | 96 - .../canada_download/TimeSliceC.py | 242 - .../canada_download/WSC_Observation.py | 397 - .../canadian_flow_retrieval.py | 298 - .../canada_download/fetch_hydrometric_csv.py | 24 - .../how_data_assimilation_works.txt | 36 - .../make_time_slice_from_canada.py | 93 - .../canada_download/parallel_dm_can.py | 79 - .../canada_download/run_canflow.sh | 47 - .../analysis/bsub_timeslice.bash | 44 - .../usgs_download/analysis/crontab.txt | 97 - ...l.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml | 1136 - .../SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml | 29880 ---------------- .../analysis/test_data/XML/01122500.xml | 1 - .../analysis/test_data/XML/0208111310.xml | 1 - .../analysis/test_data/XML/02186645.xml | 1 - .../analysis/test_data/XML/02289060.xml | 1 - .../analysis/test_data/XML/07027005.xml | 1 - .../analysis/test_data/XML/08329918.xml | 1 - .../analysis/test_data/XML/09423000.xml | 1 - .../analysis/test_data/XML/16296500.xml | 1 - .../test_data/diffDischargeQuality.sh | 22 - .../analysis/time_slice_job_cray.bsub | 30 - .../EmptyDirOrFileException.py | 1 - .../rfc_ingestion/PI_XML.py | 620 + .../rfc_ingestion/PI_XML_test.py | 283 + .../rfc_ingestion/RFCHelper.py | 150 + .../rfc_ingestion/RFCTimeSeries.py | 495 + .../rfc_ingestion/RFCTimeSeries_test.py | 166 + .../rfc_ingestion/RFC_Forecast.py | 775 + .../rfc_ingestion/RFC_Forecast_test.py | 145 + ..._for_Forecast_Ingest_into_NWM_All_RFCs.csv | 395 + .../rfc_ingestion/RFC_Sites.py | 138 + .../rfc_ingestion/RFC_Sites_test.py | 17 + .../make_time_series_from_pi_xml.py | 220 + .../rfc_ingestion/nwmrfccopy.sh | 102 + .../2019112712_ABRFC_RES_NWM_pixml_export.xml | 4297 +++ .../201911281800_CBRFC_Reservoir_Export.xml | 15559 ++++++++ ...1290600_CNRFC_Reservoir_Export_for_NWM.xml | 19358 ++++++++++ .../201911290111_LMRFC_Reservoir_export.xml | 16144 +++++++++ .../2019112712_MARFC_Reservoir_Export.xml | 456 + .../201911111541_MBRFC_Reservoir_Export.xml | 3519 ++ .../201911081100_NCRFC_Reservoir_Export.xml | 328 + .../201911181200_NCRFC_Reservoir_Export.xml | 322 + .../testdata/nerfc/NERFC_11.07.2019.16.xml | 684 + .../testdata/nerfc/NERFC_11.07.2019.17.xml | 699 + .../testdata/nerfc/NERFC_11.07.2019.22.xml | 684 + .../testdata/nerfc/NERFC_Reservoir_Export.xml | 678 + .../testdata/nwrfc/NWRFC_11.29.2019.2100.xml | 3774 ++ ...1911271319_OHRFC_Reservoir_Export_SAGU.xml | 384 + ...1911271327_OHRFC_Reservoir_Export_SAGL.xml | 479 + ...1911271331_OHRFC_Reservoir_Export_SMNU.xml | 194 + ...1911271332_OHRFC_Reservoir_Export_SBVR.xml | 479 + ...1911271332_OHRFC_Reservoir_Export_SMNL.xml | 99 + .../201911290600_SERFC_Reservoir_Export.xml | 724 + .../testdata/wgrfc/WGRFC_11.27.2019.16.00.xml | 18231 ++++++++++ 56 files changed, 90598 insertions(+), 32530 deletions(-) delete mode 100644 data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/crontab.txt delete mode 100644 data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py delete mode 100644 data_assimilation_engine/Streamflow_Scripts/canada_download/WSC_Observation.py delete mode 100644 data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py delete mode 100644 data_assimilation_engine/Streamflow_Scripts/canada_download/fetch_hydrometric_csv.py delete mode 100644 data_assimilation_engine/Streamflow_Scripts/canada_download/how_data_assimilation_works.txt delete mode 100644 data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py delete mode 100644 data_assimilation_engine/Streamflow_Scripts/canada_download/parallel_dm_can.py delete mode 100644 data_assimilation_engine/Streamflow_Scripts/canada_download/run_canflow.sh delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/bsub_timeslice.bash delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/crontab.txt delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/01122500.xml delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/0208111310.xml delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02186645.xml delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02289060.xml delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/07027005.xml delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/08329918.xml delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/09423000.xml delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/16296500.xml delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/diffDischargeQuality.sh delete mode 100755 data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/time_slice_job_cray.bsub rename data_assimilation_engine/{Streamflow_Scripts/canada_download => rfc_ingestion}/EmptyDirOrFileException.py (93%) create mode 100644 data_assimilation_engine/rfc_ingestion/PI_XML.py create mode 100644 data_assimilation_engine/rfc_ingestion/PI_XML_test.py create mode 100644 data_assimilation_engine/rfc_ingestion/RFCHelper.py create mode 100644 data_assimilation_engine/rfc_ingestion/RFCTimeSeries.py create mode 100644 data_assimilation_engine/rfc_ingestion/RFCTimeSeries_test.py create mode 100644 data_assimilation_engine/rfc_ingestion/RFC_Forecast.py create mode 100644 data_assimilation_engine/rfc_ingestion/RFC_Forecast_test.py create mode 100644 data_assimilation_engine/rfc_ingestion/RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv create mode 100644 data_assimilation_engine/rfc_ingestion/RFC_Sites.py create mode 100644 data_assimilation_engine/rfc_ingestion/RFC_Sites_test.py create mode 100644 data_assimilation_engine/rfc_ingestion/make_time_series_from_pi_xml.py create mode 100644 data_assimilation_engine/rfc_ingestion/nwmrfccopy.sh create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/abrfc/2019112712_ABRFC_RES_NWM_pixml_export.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/cbrfc/201911281800_CBRFC_Reservoir_Export.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/cnrfc/201911290600_CNRFC_Reservoir_Export_for_NWM.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/lmrfc/201911290111_LMRFC_Reservoir_export.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/marfc/2019112712_MARFC_Reservoir_Export.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/mbrfc/201911111541_MBRFC_Reservoir_Export.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/ncrfc/201911081100_NCRFC_Reservoir_Export.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/ncrfc/201911181200_NCRFC_Reservoir_Export.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_11.07.2019.16.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_11.07.2019.17.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_11.07.2019.22.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_Reservoir_Export.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/nwrfc/NWRFC_11.29.2019.2100.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271319_OHRFC_Reservoir_Export_SAGU.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271327_OHRFC_Reservoir_Export_SAGL.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271331_OHRFC_Reservoir_Export_SMNU.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271332_OHRFC_Reservoir_Export_SBVR.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271332_OHRFC_Reservoir_Export_SMNL.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/serfc/201911290600_SERFC_Reservoir_Export.xml create mode 100644 data_assimilation_engine/rfc_ingestion/testdata/wgrfc/WGRFC_11.27.2019.16.00.xml diff --git a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/crontab.txt b/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/crontab.txt deleted file mode 100644 index 1538a9f..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/ace_download/analysis/crontab.txt +++ /dev/null @@ -1,96 +0,0 @@ -# DO NOT EDIT THIS FILE - edit the master and reinstall. -# (/tmp/crontab.XXXXrP3mII installed on Wed Jan 20 16:11:58 2016) -# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $) -BASH_ENV=/u/Zhengtao.Cui/.bashrc -SHELL=/usr/bin/bash -l -# -#create time slices at every 15 minutes starting at 10 minutes of the hour -# -#10,25,40,55 * * * * /gpfs/hps/nwc/save/Zhengtao.Cui/chps-wrf-hydro/usgs_download/analysis/make_time_slice_from_usgs_waterml.py -i /gpfs/gp1/dcomdev/us007003/usgs_streamflow -o /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices > /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices.log -#10,25,40,55 * * * * /gpfs/hps/nwc/save/Zhengtao.Cui/chps-wrf-hydro/usgs_download/analysis/make_time_slice_from_usgs_waterml.py -i /gpfs/hps/nwc/noscrub/Zhengtao.Cui/usgs_flow -o /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices > /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices.log -#10,25,40,55 * * * * bsub < /gpfs/hps/nwc/save/Zhengtao.Cui/chps-wrf-hydro/usgs_download/analysis/time_slice_job_cray.bsub -10,25,40,55 * * * * $HOME/usgs_download/analysis/bsub_timeslice.bash /gpfs/hps/nwc/noscrub/Zhengtao.Cui/usgs_flow -# -# Forcing engine and wrf-hydro model run -# -30 00 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 00 -30 00 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 00 - -### create short ranging forecast. The forcing engine will wait 40 minutes (maximu) of related NCEP model results. -00 01 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 00 - -## wrapper_qpe_bias.bash update the precipitation so that we can run model analysis first. -45 00 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 00 - -# run model analysis, will assume the forcing data is always available. -00 01 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 00 - -#run Short_Range forecast. wrapper_Short_Range.sh will wait realted forcing engine to finish with 40 minutes maximum -15 01 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 00 - -#GFS data test -#run forcing_engine of GFS first. The script will wait 4 hours (maximum) of GFS model results. -00 05 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_gfs.bash 00 -#run hydro forecast with GFS forcing created above. The script will wait 4 hours (maximum) of GFS forcing data to be created by forcing engine. -10 05 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Medium_Range.sh 00 - -#CFS1 data test -#run forcing_engine of CFS1 first. The script will wait 4 hours (maximum) of CFS model results. -00 08 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_cfs1.bash 00 -#run hydro forecast with CFS1 forcing data. The script will wait 4 hours (maximum) of CFS1 forcing data to be created by forcing engine. -30 09 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Long_Range1.sh 00 - - -30 03 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 03 -30 03 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 03 -00 04 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 03 -45 03 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 03 -00 04 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 03 -15 04 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 03 - -30 06 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 06 -30 06 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 06 -00 07 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 06 -45 06 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 06 -00 07 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 06 -15 07 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 06 - -30 09 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 09 -30 09 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 09 -00 10 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 09 -45 09 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 09 -00 10 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 09 -15 10 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 09 - -30 12 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 12 -30 12 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 12 -00 13 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 12 -45 12 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 12 -00 13 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 12 -15 13 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 12 - -30 15 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 15 -30 15 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 15 -00 16 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 15 -45 15 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 15 -00 16 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 15 -15 16 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 15 - -30 18 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 18 -30 18 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 18 -00 19 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 18 -45 18 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 18 -00 19 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 18 -15 19 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 18 - -30 21 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 21 -30 21 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 21 -00 22 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 21 -45 21 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 21 -00 22 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 21 -15 22 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 21 - - -# -10 5 * * 1,4 find /gpfs/hps/ptmp/Zhengtao.Cui -print0 | xargs -0 touch - diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py deleted file mode 100644 index 477482d..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/TimeSliceC.py +++ /dev/null @@ -1,242 +0,0 @@ -#!/usr/bin/env python - -import os, sys, time, math -from string import * -from datetime import datetime, timedelta -import calendar -import netCDF4 -import numpy as np -import pytz - -def isclose(a, b, rel_tol=1e-09, abs_tol=0.0): - '''Python 2 implementation of Python 3.5 math.isclose() - https://hg.python.org/cpython/file/tip/Modules/mathmodule.c#l1993''' - # sanity check on the inputs - if rel_tol < 0 or abs_tol < 0: - raise ValueError("tolerances must be non-negative") - - # short circuit exact equality -- needed to catch two infinities of - # the same sign. And perhaps speeds things up a bit sometimes. - if a == b: - return True - - # This catches the case of two infinities of opposite sign, or - # one infinity and one finite number. Two infinities of opposite - # sign would otherwise have an infinite relative tolerance. - # Two infinities of the same sign are caught by the equality check - # above. - if math.isinf(a) or math.isinf(b): - return False - - # now do the regular computation - # this is essentially the "weak" test from the Boost library - diff = math.fabs(b - a) - result = (((diff <= math.fabs(rel_tol * b)) or - (diff <= math.fabs(rel_tol * a))) or - (diff <= abs_tol)) - return result - -def dict_compare(d1, d2): - d1_keys = set(d1.keys()) - d2_keys = set(d2.keys()) - intersect_keys = d1_keys.intersection(d2_keys) - added = d1_keys - d2_keys - removed = d2_keys - d1_keys - modified = dict() - for o in intersect_keys: - f0 = d1[o][0] == d2[o][0] - f1 = isclose( d1[o][1], d2[o][1],abs_tol=0.01 ) - f2 = isclose( d1[o][2], d2[o][2]) - if not f0 or not f1 or not f2: - modified[o] = (d1[o], d2[o]) - same = set(o for o in intersect_keys if d1[o] == d2[o]) - return added, removed, modified, same - -class TimeSliceC: - """ Description: Store one time slice data (from Canadian data) - Author: Tim Hunter (tim.hunter@noaa.gov) drawing HEAVILY on - original code by Zhengtao Cui (Zhengtao.Cui@noaa.gov) - Date: Feb 15, 2018 - """ - stationIdStrLen = 15 - stationIdLong_name = "WSC station id padded to length 15" - timeStrLen = 19 - timeUnit = "UTC" - timeLong_name = "YYYY-MM-DD_HH:mm:ss UTC" - dischargeUnit = "m^3/s" - dischargeLong_name = "Discharge.cubic_meters_per_second" - dischargeQualityUnit = "-" - dischargeQualityLong_name = \ - "Discharge quality 0 to 100 to be scaled by 100." - - def __init__(self, time_stamp, resolution, station_time_value ): - # insure that time stamp is tz-aware. Time is already UTC. - self.centralTimeStamp = time_stamp.replace(tzinfo=pytz.UTC) - self.sliceTimeResolution = resolution - self.obvStationTimeValue = station_time_value - - def isEmpty( self ): - return not self.obvStationTimeValue - - def print_station_time_value( self ): - for e in self.obvStationTimeValue: - print( "Slice: central time: ", \ - self.centralTimeStamp.isoformat(), \ - e[0], e[1].isoformat(), e[2] ) - - def getStationIDs( self ): - stationL = [] - for e in self.obvStationTimeValue: - stationL.append( list( e[ 0 ][4:] ) ) - for s in stationL: - if len(s) < self.stationIdStrLen: - for i in range( len(s), self.stationIdStrLen ): - s.insert(0, ' ' ) - elif len(s) > self.stationIdStrLen: - s = s[0:self.stationIdStrLen - 1] - return stationL - - def getDischargeValues( self ): - values = [] - for e in self.obvStationTimeValue: - values.append( e[ 2 ] ) - return values - - def getDischargeTimes( self ): - obvtimes = [] - for e in self.obvStationTimeValue: - obvtimes.append(list(e[1].strftime("%Y-%m-%d_%H:%M:00"))) - return obvtimes - - def getQueryTimes( self ): - qtimes = [] - for e in self.obvStationTimeValue: - qtimes.append( calendar.timegm( e[ 1 ].utctimetuple() ) ) - return qtimes - - def getSliceNCFileName( self ): - tval = (self.sliceTimeResolution.days * 24 * 60) + (self.sliceTimeResolution.seconds // 60) - filename = (self.centralTimeStamp.strftime("%Y-%m-%d_%H_%M_00.") + - str(int(tval)).zfill(2) + "min.wscTimeSlice.ncdf") - return filename - - def getDischargeQuality( self ): - dq = [] - for e in self.obvStationTimeValue: - dq.append( e[ 3 ] ) - return dq - - def toNetCDF( self, outputdir = './' ): - fname = outputdir + '/' + self.getSliceNCFileName() - nc_fid = netCDF4.Dataset(fname, 'w', format='NETCDF4' ) - nc_fid.createDimension( 'stationIdStrLen', self.stationIdStrLen ) - nc_fid.createDimension( 'stationIdInd', None ) - nc_fid.createDimension( 'timeStrLen', self.timeStrLen ) - stationId = nc_fid.createVariable( 'stationId', 'S1',\ - ('stationIdInd', 'stationIdStrLen') ) - stationId.setncatts( {'long_name' : self.stationIdLong_name, \ - 'units' : '-'} ) - - time = nc_fid.createVariable( 'time', 'S1',\ - ('stationIdInd', 'timeStrLen' ) ) - time.setncatts( {'long_name' : self.timeLong_name, \ - 'units' : self.timeUnit} ) - - discharge = nc_fid.createVariable( 'discharge', 'f4',\ - ('stationIdInd', ) ) - discharge.setncatts( {'long_name' : self.dischargeLong_name, \ - 'units' : self.dischargeUnit} ) - discharge_quality = \ - nc_fid.createVariable( 'discharge_quality', 'i2',\ - ('stationIdInd', ) ) - discharge_quality.setncatts( {'long_name' : \ - self.dischargeQualityLong_name, \ - 'units' : self.dischargeQualityUnit, \ - 'multfactor' : '0.01' } ) - queryTime = nc_fid.createVariable( 'queryTime', 'i4',\ - ('stationIdInd', ) ) - - queryTime.setncatts( { 'units' : \ - 'seconds since 1970-01-01 00:00:00 local TZ' } ) - - tres = self.sliceTimeResolution.days * 24 * 60 + \ - self.sliceTimeResolution.seconds // 60 - nc_fid.setncatts( { 'fileUpdateTimeUTC': \ - datetime.utcnow().strftime( "%Y-%m-%d_%H:%M:00" ), \ - 'sliceCenterTimeUTC' : \ - self.centralTimeStamp.strftime( "%Y-%m-%d_%H:%M:00" ),\ - 'sliceTimeResolutionMinutes' : \ - str(int(tres)).zfill(2) } ) - - discharge[ : ] = self.getDischargeValues() - queryTime[ : ] = self.getQueryTimes() - - stations = self.getStationIDs() - stationId[ : ] = stations - - time[ : ] = self.getDischargeTimes() - discharge_quality[:] = self.getDischargeQuality() - - nc_fid.close() - - @classmethod - def fromNetCDF( self, ncfilename ): - nc_fid = netCDF4.Dataset( ncfilename, 'r' ) - timestamp = datetime.strptime( \ - nc_fid.getncattr( 'sliceCenterTimeUTC' ), \ - "%Y-%m-%d_%H:%M:00" ) - - time_resol = timedelta( minutes = \ - int( nc_fid.getncattr( 'sliceTimeResolutionMinutes' ) ) ) - - stations = netCDF4.chartostring( \ - nc_fid.variables[ 'stationId'][ : ] ) - - discharge = nc_fid.variables[ 'discharge'][ : ] - - queryTime = nc_fid.variables[ 'queryTime'][ : ] - - quality = nc_fid.variables[ 'discharge_quality'][ : ] - - stationTimeValue = [] - for s, d, q, qual in zip( stations, discharge, queryTime, quality ): - stationTimeValue.append( \ - ( 'CAN.' + s.strip(), \ - datetime.utcfromtimestamp( q ).replace(tzinfo=pytz.UTC), \ - d, qual ) ) - - nc_fid.close() - return self( timestamp, time_resol, stationTimeValue ) - - def mergeOld( self, oldTimeSlice ): - if self.centralTimeStamp != oldTimeSlice.centralTimeStamp or \ - self.sliceTimeResolution != oldTimeSlice.sliceTimeResolution: - print( 'new_cts=', self.centralTimeStamp ) - print( 'old_cts=', oldTimeSlice.centralTimeStamp ) - print( 'new_res=', self.sliceTimeResolution ) - print( 'old_res=', oldTimeSlice.sliceTimeResolution ) - raise RuntimeError( "FATAL ERROR: the two time slices " + - " differ, not merging ..." ) - else: - site_time_value = dict() - for e in self.obvStationTimeValue: - site_time_value[ e[ 0 ] ] = ( e[1], e[2], e[3] ) - old_site_time_value = dict() - - for e in oldTimeSlice.obvStationTimeValue: - old_site_time_value[ e[ 0 ] ] = ( e[1], e[2], e[3] ) - - added, removed, modified, same = ( - dict_compare(site_time_value, old_site_time_value )) - - if not added and not modified : - return False - - old_site_time_value.update( site_time_value ) - self.obvStationTimeValue = [] - for site in old_site_time_value: - self.obvStationTimeValue.append( ( site, \ - old_site_time_value[ site ][ 0 ], \ - old_site_time_value[ site ][ 1 ], \ - old_site_time_value[ site ][ 2 ] ) ) - return True diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/WSC_Observation.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/WSC_Observation.py deleted file mode 100644 index ebdc6fe..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/WSC_Observation.py +++ /dev/null @@ -1,397 +0,0 @@ -import os, sys, time, csv -from string import * -from datetime import datetime, timedelta -# import xml.utils.iso8601 -import xml.etree.ElementTree as etree -from TimeSliceC import TimeSliceC -import pytz -from EmptyDirOrFileException import EmptyDirOrFileException - -class WSC_Observation: - "Store one WSC data set " - - def __init__(self, csvfilename): - self.timevalue = dict() - - # - # Define the column names I want to use - # If WSC changes file formats, this may need to be updated. - # - #csvfields = ('id', 'date', 'level', 'lgrade', 'lsymbol', 'lqaqc', - # 'discharge', 'dgrade', 'dsymbol', 'dqaqc') - # - #The header has changed since Feb 22, 2023. - csvfields = ('ID', 'Date', 'Water Level / Niveau d\'eau (m)', - 'Grade', 'Symbol / Symbole', 'QA/QC', - 'Discharge / DÃit (cms)', 'Grade', 'Symbol / Symbole', 'QA/QC') - # - #Using utf-8 causes error like this, - #'utf-8' codec can't decode byte 0xe9 in position 81: invalid continuation byte - #use 'latin-1' or 'ISO-8859-1' instead - # - #with open(csvfilename, 'r', encoding="utf-8") as csvfile: - #with open(csvfilename, 'r', encoding="latin-1") as csvfile: - with open(csvfilename, 'r', encoding="ISO-8859-1") as csvfile: - reader = csv.DictReader(csvfile, fieldnames=csvfields) - next(reader) - for row in reader: - try: - dischstr = row['Discharge / DÃit (cms)'] - discharge = float(dischstr) * 1.0 - qstr = row['QA/QC'] - except: - discharge = -999999.0 - dkey = None - try: - # - # Split the date string into two parts... Y-M-D and H:M:S - # Then parse them into a timezone-naive object - # Per the documentation from WSC, this timestamp is described as: - # "data timestamp in ISO 8601 format, Local Standard Time (LST)" - # So if the timestamp is - # 2018-08-16T13:30:00-0500 - # I am interpreting that as 1:30 pm local time, and that local time - # is 5 hours behind UTC. If this interpretation is incorrect, the - # following code should be modified appropriately. - # - # Once I have a datetime object representing the local time, I can - # use the timezone info to translate that into UTC, which is what - # will be used as the data key value. - # - # NOTE!!!!! When storing the data, we are rounding/stripping the - # seconds field to 0. So I need to do the same thing here. - # That is accomplished very simply, by replacing whatever was - # specified for seconds with '00'. If this is not done we end up - # with mismatch issues when we are merging timeslices. - # - s = row['Date'].split("T") - ymd = s[0] - hms = s[1][:6] + '00' - dsnz = ymd + ' ' + hms # format is YYYY-MM-DD HH:MM:SS - dtnz = datetime.strptime(dsnz, '%Y-%m-%d %H:%M:%S') # timezone-naive object - - tz = s[1][8:] - tzh = int(tz[1:3]) # time zone hours, *absolute value*; typically 4 or 5 for GL region - tzm = int(tz[4:]) # time zone minutes, typically 0 for GL region - tzoff = timedelta(hours=tzh, minutes=tzm) - - # - # Adjust the time appropriately so that it represents - # the UTC time. - # - if (tz[0] == '-'): - dtu = dtnz + tzoff # this is GL case - else: - dtu = dtnz - tzoff - - # - # Make it timezone-aware, assigning it to UTC timezone and - # then using that datetime value as the dictionary key - # - dkey = dtu.replace(tzinfo=pytz.UTC) - except Exception as e: - raise Exception( \ - 'cannot parse date... {}'.format(e) ) from e - if dkey and discharge >= 0: - dataquality = self.calculateDataQuality(discharge, \ - int( qstr ) ) - self.timevalue[dkey] = (discharge, dataquality) - else: - self.timevalue[dkey] = (-999999.0, 0) - self.stationID = 'CAN.' + row['ID'] - - timekeys = sorted( self.timevalue.keys() ) - - self.obvPeriod = timekeys[0], timekeys[-1] - self.stationName = self.stationID - self.generationTime = timekeys[0] - self.unit = 'm3/s' - - - def calculateDataQuality(self, value, qacode): - """ Calculate a quality code for the discharge measurement based on - the value and associated QA/QC code. The defined QA/QC codes are: - 1 = preliminary, 2 = reviewed, 3 = checked, 4 = approved - """ -######################################################################## -#Date: Fri, 10 Jul 2020 12:49:57 -0600 -#From: James McCreight -#To: Zhengtao Cui -#Cc: Tim Hunter - NOAA Federal , -#Brian Cosgrove - NOAA Federal , -#Arezoo RafieeiNasab , David Gochis , -#Aubrey Dugger , Ryan Cabell , -#Laura Read -#Subject: Re: High priority....Canada streamflow issue -#Parts/Attachments: -#1 OK ~342 lines Text (charset: UTF-8) -#2 Shown ~728 lines Text (charset: UTF-8) -#---------------------------------------- -#So, I would say it depends on our expectations of what the codes really -#mean, but the weight penalties should be thought of as "relative to model -#error" with .5 giving something like equal weight. Generally, the -#observation is going to be much better (there are exceptions) even when it's -#not revised (at least for USGS).... unless this is just not true for these -#gages. -#I might suggest the weighting scheme below in code, based on my best guess. -#Here is my basic thought process: -#Within 28 hours (the extended look back period), we dont get to QC levels 3 -#and 4 because that process likely takes longer. -#So, once we reach 2, we are probably doing as well as can be expected. -#It would be informative to see how much the OPERATIONAL data stream has -#quality 1 and 2 and what the ?tis between obs time and time that that flag -#arrives. -#It might be informative to also see if/how much the discharge values change -#when their quality codes change. -#It is possible that the necessary data/flow is beyond what is currently -#setup, but doing an aggressive saving of the canada gage obs files could -#shed some light. -# -#def calculateDataQuality(self, value, qacode): -# """ Calculate a quality code for the discharge measurement based on -# the value and associated QA/QC code. The defined QA/QC codes are: -# 1 = preliminary, 2 = reviewed, 3 = checked, 4 = approved -# """ -# quality = 0 -# if value <= 0 or value > 9000: -# quality = 0 -# else: -# if qacode == 1: -# quality = 75 -# elif qacode == 2: -# quality = 100 -# elif qacode == 3: -# quality = 100 -# elif qacode == 4: -# quality = 100 -# else: -# quality = 0 -# return quality -#------------------------------------------------------- -#James L. McCreight -#NCAR Research Applications Lab -#office: FL2 2065 -#office phone: 303-497-8404 -#cell: 831-261-5149 -######################################################################## -#Date: Thu, 16 Jul 2020 14:15:12 -0400 -#From: Brian Cosgrove - NOAA Federal -#To: Arezoo RafieeiNasab -#Cc: Zhengtao Cui , -# James McCreight , -# Tim Hunter - NOAA Federal , -# David Gochis , Aubrey Dugger , -# Ryan Cabell , Laura Read -# Subject: Re: High priority....Canada streamflow issue -# Parts/Attachments: -# 1.1 OK 509 lines Text (charset: UTF-8) -# 1.2 Shown ~39 KB Text (charset: UTF-8) -# 2 OK 977 KB Image -#---------------------------------------- -#Okay, barring any further input/concerns from folks, let's do this.... -#Zhengtao, can you alter it so that it gives 100% weight (quality) to the -#incoming obs even if the QC code is only '1'? I don't' think we're seeing -#the desired impact of the obs currently....let's see how it looks after that -#change in real-time. -# -#So this would change to quality = 100 -# -# > if qacode == 1: -# > quality = 75 -# -# Thanks, -# Brian -# - quality = 0 - if value <= 0 or value > 9000: - quality = 0 - else: - if qacode == 1: - quality = 100 - elif qacode == 2: - quality = 100 - elif qacode == 3: - quality = 100 - elif qacode == 4: - quality = 100 - else: - quality = 0 - return quality - - def getTimeValueAt(self, at_time, resolution = timedelta() ): - closestTimes = [] - distances = [] - for k in sorted(self.timevalue): - td = abs(k - at_time) - if td <= resolution/2: - closestTimes.append(k) - distances.append(td) - if closestTimes: - closest = [x for y,x in sorted(zip(distances,closestTimes))] [0] - return (closest, self.timevalue[closest]) - else: - return None - - -class All_WSC_Observations: - """Store all WSC data in a given directory""" - def __init__(self, wscdatadir ): - self.source = wscdatadir - self.wscobvs = [] - if not os.path.isdir(wscdatadir): - raise RuntimeError("FATAL ERROR: " + wscdatadir - + " is not a directory or does not exist. ") - - twodaysago = datetime.now() - timedelta( days = 2 ) - for file in os.listdir(wscdatadir): - if file.endswith(".csv"): - fname = wscdatadir + '/' + file - st = os.stat( fname ) - # - # Don't process data older than 2 days. - # - if datetime.fromtimestamp( st.st_mtime) > twodaysago: - try: - print( 'Reading ' + fname + ' ... ' ) - self.wscobvs.append(WSC_Observation(fname)) - except Exception as e: - print( "WARNING: parsing CSV file error: " + \ - file + ", skipping ... " ) - print( e ) - continue - - if not self.wscobvs: - raise EmptyDirOrFileException( "Input directory " + wscdatadir \ - + " has no Water Survey of Canada CSV files or the " - "Water Survey CSV files contain no flow data!" ) - - self.index = -1 - - self.timePeriod = self.wscobvs[0].obvPeriod - for obv in self.wscobvs: - if self.timePeriod[0] > obv.obvPeriod[0]: - self.timePeriod = ( obv.obvPeriod[0], self.timePeriod[1]) - if self.timePeriod[1] < obv.obvPeriod[1]: - self.timePeriod = ( self.timePeriod[0], obv.obvPeriod[1]) - - - def __iter__(self): - return self - - def next(self): - if self.index == len( self.wscobvs ) - 1: - self.index = -1 - raise StopIteration - self.index = self.index + 1 - return self.wscobvs[self.index] - - def timePeriodForAll(self): - return self.timePeriod - - # - # Step through the observations, finding the entry that - # is closest (time-wise) to the desired timestamp. - # Append that observation to the station_time_value_list. - # Then create a TimeSliceC object from all of the observations in that list. - # - def makeTimeSlice(self, timestamp, timeresolution): - station_time_value_list = [] - for obv in self.wscobvs: - closestObv = obv.getTimeValueAt( timestamp, timeresolution ) - if closestObv: - c0 = closestObv[0] - c10 = closestObv[1][0] - c11 = closestObv[1][1] - station_time_value_list.append((obv.stationID, c0, c10, c11)) - timeSlice = TimeSliceC(timestamp, timeresolution, station_time_value_list) - return timeSlice - - def makeAllTimeSlices(self, timeresolution, outdir): - # - # the time resolutions must divide 60 minutes with no remainder - # - if 3600 % timeresolution.seconds != 0: - raise RuntimeError( "FATAL Error: Time slice resolution must " - "divide 60 minutes with no remainder." ) - - # - # Always start two days ago because sometimes the downloaded realtime - # files contain old data older than six months, See the email from NCO - # Simon Hsiao on Dec 16, 2022, with subject - # "20221216 12z nwm_canada_timeslices job hung". - # - # -# NWM team, -# -# The 20221216 12z nwm_canada_timeslices job hung failed seeing hung reached walltime 10 min. here are the job logfiles and working dir for your investigations, rerun still hung - -# /lfs/h1/ops/prod/output/20221216/nwm_canada_timeslices_12_1725.o33696851 -- 1st run -# /lfs/h1/ops/prod/output/20221216/nwm_canada_timeslices_12_1739.o33703661 -- 2nd run -# /lfs/f1/ops/prod/tmp/nwm_canada_timeslices_12_1725.33696851.dbqs01 - 1st run working dir -# /lfs/f1/ops/prod/tmp/nwm_canada_timeslices_12_1739.33703661.dbqs01/ -- 2nd run working dir -# In the working dir,there are some 2022-06-01 15 min WscTimeSlice.ncdf data files as below , why back to 202206 ? -# 2022-06-01_05_00_00.15min.wscTimeSlice.ncdf -# ... -# 2022-06-03_23_00_00.15min.wscTimeSlice.ncdf -# -# Thanks, -# -# /Simon -# SPA Office - - # - # need to use UTC time here - startTime = datetime.now().replace(tzinfo=pytz.UTC) - timedelta( days = 2 ) - - #Round the start time to the nearist 0, 15, 30 and 45 minutes - #Otherwise the filename will be wrong. - - #startTime = self.timePeriod[0] - - if startTime.minute >= 8 and startTime.minute <= 22: - startTime = datetime( startTime.year, startTime.month, - startTime.day, startTime.hour, - 15, tzinfo=startTime.tzinfo ) - elif startTime.minute >= 23 and startTime.minute <= 37: - startTime = datetime( startTime.year, startTime.month, - startTime.day, startTime.hour, - 30, tzinfo=startTime.tzinfo ) - elif startTime.minute >= 38 and startTime.minute <= 52: - startTime = datetime( startTime.year, startTime.month, - startTime.day, startTime.hour, - 45, tzinfo=startTime.tzinfo ) - elif startTime.minute < 8: - startTime = datetime( startTime.year, startTime.month, - startTime.day, startTime.hour, - 0, tzinfo=startTime.tzinfo ) - else: # > 52 - startTime = datetime( startTime.year, startTime.month, - startTime.day, startTime.hour, - 0, tzinfo=startTime.tzinfo ) + \ - timedelta( hours = 24 ) - - while startTime < self.timePeriod[0]: - startTime += timeresolution - - if startTime > self.timePeriod[1]: - raise RuntimeError("FATAL Error: observation time period wrong!") - - count = 0 - print ("Timeslice start time: ", startTime ) - while startTime <= self.timePeriod[1]: - print ("making time slice for ", startTime.isoformat()) - oneSlice = self.makeTimeSlice(startTime, timeresolution) - if ( not oneSlice.isEmpty() ): - updatedOrNew = True - slicefilename = outdir + '/' +oneSlice.getSliceNCFileName() - if os.path.isfile( slicefilename ): - oldslice = TimeSliceC.fromNetCDF( slicefilename ) - updatedOrNew = oneSlice.mergeOld( oldslice ) - if updatedOrNew: - oneSlice.toNetCDF(outdir) - print (oneSlice.getSliceNCFileName() + " updated!") - else: - print (oneSlice.getSliceNCFileName() + " not updated!") - count = count + 1 - - startTime += timeresolution - return count diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py deleted file mode 100644 index ac96446..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/canadian_flow_retrieval.py +++ /dev/null @@ -1,298 +0,0 @@ -#!/usr/bin/env python - -from contextlib import closing -import os, sys, time, getopt, re -from datetime import datetime, timedelta -import time -import pytz -from string import * -from six.moves import urllib -import ssl -import fetch_hydrometric_csv -#import HTMLParser - - -def main(argv): - """ - Function to get output directory - - Return: Output directory - """ - outputdir = '' - try: - opts, args = getopt.getopt(argv,"h:o:",["odir="]) - except getopt.GetoptError: - print( 'canadian_flow_retrieval.py -o ' ) - sys.exit(2) - for opt, arg in opts: - if opt == '-h': - print( 'canadian_flow_retrieval.py -o ' ) - sys.exit() - elif opt in ("-o", "--odir"): - outputdir = arg - if not os.path.exists( outputdir ): - os.makedirs( arg ) - - print( 'Output dir is "', outputdir ) - return outputdir -#----------------------------------------------------------- -# -# Download real time stream flow data from the Canadian "datamart" -# for a given list of stations. -# -def fetch_ca_sites( sites, province, odir ): - - good_sites = () - fail_sites = () - # - # Loop through each station - # - for site_id in sites: - print( datetime.now(), end = " --- " ) - print( 'downloading ', site_id ) - # - # Construct the query URL - # - - base_url = "https://dd.weather.gc.ca/{date}/WXO-DD/hydrometric/csv/{province}/hourly/" - for delta in [0, 1]: # try today, then yesterday - date_str = (datetime.utcnow() - timedelta(days=delta)).strftime("%Y%m%d") - filename = province + '_' + site_id + '_hourly_hydrometric.csv' - URL = base_url.format(date=date_str, province=province) + filename - localFile = odir + os.path.sep + filename - print( datetime.now(), end = " --- " ) - print( "URL: " + URL) - print( datetime.now(), end = " --- " ) - print( "local file: " + localFile) - try: - # - # Connect to the server - # - lFile = urllib.request.urlretrieve(URL, localFile) - good_sites = good_sites + (site_id,) - print(f"Success: {URL}") - break - except Exception as e: - # - # If failed, remember the station id and continue - # - fail_sites = fail_sites + ( site_id, ) - print(f"Failed ({date_str}): {e}") - - return good_sites, fail_sites - -#----------------------------------------------------------- -def build_download_list( province, odir ): - # - # province = 'ON' or 'QC' (Ontario or Quebec) - # odir = output directory - # - # - # Get the UTC offset, in seconds, then convert that to a - # timedelta object. - # - tz_offset = timedelta(seconds=time.timezone) - - # - # Define the regular expression search patterns that will be repeatedly used - # with the information on the web page listing. - # site_pattern will identify sites that are in the Great Lakes basin only ("02" is the key) - # ts_pattern is used for parsing the modification timestamp - # - site_pattern = re.compile(province + '_02' + '.{5}' + '_hourly_hydrometric.csv') - ts_pattern = re.compile('[\d]{4}-[\d]{2}-[\d]{2} [\d]{2}:[\d]{2}') - - # - # Define some useful date constants - # - missing_time = datetime(1000, 1, 1, 1, 1, 1, 1) - future_offset = timedelta(days=99999) - - # - # Get the directory listing from the web page. - # Parse each line. If it is a file entry, check the "modified time" vs the - # local file's timestamp. If the modified time is more recent, then we - # need to update that file, so add it to the list. - # - total_sites = 0 - sitelist=list() - - urllib.request.urlcleanup() - #urlstring = 'https://dd.weather.gc.ca/hydrometric/csv/' + province + '/hourly/' - #urlstring = 'https://dd.weather.gc.ca/today/hydrometric/csv/' + province + '/hourly/' - dirlisting = fetch_hydrometric_csv.fetch_hydrometric_csv( province ) - data_str = dirlisting.decode('utf-8') - print( datetime.now(), end = " --- " ) - lines = data_str.splitlines(keepends=True) - for line in lines: - match_site = site_pattern.search(line) - if (match_site): - total_sites += 1 - fname = match_site.group(0) # e.g. "ON_02AB006_hourly_hydrometric.csv" - id = fname[3:10] - - # - # Get timestamp for the existing local file with that same id (if - # it exists.) Adjust to UTC, because the modification times reported - # on the remote server are given in UTC. - # If the remote file's timestamp is newer, that means it has been - # updated since the last time we downloaded a file for that site. - # - local_file = odir + os.path.sep + fname - l_mod_time = missing_time # default invalid value, long ago - if os.path.isfile(local_file): - try: - lfm = os.path.getmtime(local_file) # local file mod time (float value) - l_mod_time = datetime.fromtimestamp(lfm) - l_mod_time = l_mod_time + tz_offset - except: - l_mod_time = missing_time - - # - # Extract the modified time for the remote file (from the html dir listing) - # Format (in testing, at least) is, e.g. "2018-08-16 18:46". - # These are UTC times. - # - # If the time retrieval fails (or formatting has changed since this - # code was updated), then the remote file is assigned a modification - # date far into the future, which will force the file to be flagged as - # "new", and needing to be updated. The resulting sitelist will contain - # a list of the site IDs for those files that need to be updated. - # - match_ts = ts_pattern.search(line) - if match_ts: - ds = match_ts.group(0) - try: - r_mod_time = datetime.strptime(ds, '%Y-%m-%d %H:%M') - except: - r_mod_time = datetime.now() - else: - r_mod_time = l_mod_time + future_offset # default future value - - # - # Compare timestamps and add to list if needed - # - try: - if (r_mod_time > l_mod_time): sitelist.append(id) - except Exception: - pass - - print( datetime.now(), end = " --- " ) - print(len(sitelist), ' of ', total_sites, ' need to be updated') - return sitelist - - -#----------------------------------------------------------- -# -# The main function to download real time stream flow -# -# -def canadian_flow_retrieval( odir ): - - # - # This fixes the certificate verify error - # ERROR: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777) - # - try: - _create_unverified_https_context = ssl._create_unverified_context - except AttributeError: - # Legacy Python that doesn't verify HTTPS certificates by default - pass - else: - # Handle target environment that doesn't support HTTPS verification - ssl._create_default_https_context = _create_unverified_https_context - - # - # How often to check for new files (in minutes). - # It appears (by simple observation) that the files are - # updated about every 30 minutes. Not all files are updated - # at the same time, so setting this to an interval of about - # 10 minutes seems like a reasonable value to me, but users - # should adjust to whatever they deem appropriate. - # - download_frequency = 10 - - # - # Time stamp when the process starts - # - loop_start = time.time() - - # - # Infinite loop - # For testing, disable the "while True:" line and enable the - # two loop number lines. - # - lnum = 0 -# while True: -# while lnum < 25: - while lnum < 1: - lnum = lnum + 1 - # - # Query the Canadian web site to build a list of files that have been updated - # since the last time we updated them on the local filesystem. - # Total number of sites available is approximately 500, so this executes quickly. - # - updated_ON = build_download_list( 'ON', odir ) - updated_QC = build_download_list( 'QC', odir ) - list_of_updated_sites = updated_ON + updated_QC - - # - # How many files need to be updated? - # - upd_count = 0 - if (list_of_updated_sites): - upd_count = len(list_of_updated_sites) - - # - # If count > 0, then update the files in the list. - # Two lists are returned: - # good_sites = list of sites that were successfully updated - # fail_sites = list of sites that failed when trying to update them. - # - if (upd_count > 0): - good_sites_on, fail_sites_on = fetch_ca_sites( updated_ON, 'ON', odir ) - good_sites_qc, fail_sites_qc = fetch_ca_sites( updated_QC, 'QC', odir ) - good_sites = good_sites_on + good_sites_qc - fail_sites = fail_sites_on + fail_sites_qc - try: - i = len(good_sites) - except: - i = 0 - try: - j = len(fail_sites) - except: - j = 0 - print( datetime.now(), end = " --- " ) - print('There were ', i, ' good downloads and ', j, ' failed downloads') - - - # - # Compute the correct amount of time to sleep before - # doing this again. - # - loop_end = time.time() - elapsed = loop_end - loop_start # seconds - sleep_time = (download_frequency * 60.0) - elapsed - - # - # If the specified sleep time has already elapsed because - # the download took longer than the specified time, then - # just sleep for an arbitrary 10 seconds in order to - # be sure that everything gets to a fully reset state. - # - if (sleep_time <= 10): sleep_time = 10 - - # - # Sleep for the specified number of seconds. - # -# print('sleeping for ', sleep_time, ' seconds') -# time.sleep( sleep_time ) - loop_start = time.time() - -#----------------------------------------------------------- -#----------------------------------------------------------- - -#MyDir = '/gpfs/hps3/ptmp/Zhengtao.Cui/CanDA/test1' -#MyDir = '/gpfs/hps3/ptmp/Zhengtao.Cui/wscxml2' - -#canadian_flow_retrieval( odir ) diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/fetch_hydrometric_csv.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/fetch_hydrometric_csv.py deleted file mode 100644 index 3f7e0bf..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/fetch_hydrometric_csv.py +++ /dev/null @@ -1,24 +0,0 @@ -import urllib.request -from datetime import datetime, timedelta -from contextlib import closing - - -def fetch_hydrometric_csv(province): - base_url = "https://dd.weather.gc.ca/{date}/WXO-DD/hydrometric/csv/{province}/hourly/" - - for delta in [0, 1]: # try today, then yesterday - date_str = (datetime.utcnow() - timedelta(days=delta)).strftime("%Y%m%d") - url = base_url.format(date=date_str, province=province) - try: - with closing( urllib.request.urlopen(url, timeout=30)) as response: - data = response.read() - print(f"Success: {url}") - return data - except Exception as e: - print(f"Failed ({date_str}): {e}") - - raise RuntimeError(f"Could not retrieve data for province '{province}' for today or yesterday.") - - -if __name__ == "__main__": - data = fetch_hydrometric_csv("ON") diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/how_data_assimilation_works.txt b/data_assimilation_engine/Streamflow_Scripts/canada_download/how_data_assimilation_works.txt deleted file mode 100644 index ab37947..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/how_data_assimilation_works.txt +++ /dev/null @@ -1,36 +0,0 @@ -Description of how the Data Assimilation scripting works. - -James McCreight of NCAR supplied me with scripts developed by Zhengtao Cui (at NCAR?) for automated retrieval of streamflow gauge data from USGS and format conversion into a standard netCDF format used by the National Water Model. These source code files are also available on github.com under the NCAR domain, project name wrf_hydro_nwm_NWIS and I think they are a match to what I received, although I did not verify that. I used the scripts from James as a template for doing the same thing with Canadian streamflow data. All scripts are written in Python 2.7 and are intended for use in a linux environment. - -Basic download workflow is to start up a master process that runs in an infinite loop. It appears to me that there may be some limitations on process length in the environment for which this was developed, so the master process seems to be set up to die and restart on a schedule. Regardless of that mechanism, the underlying process is based on this infinite never-ending loop that checks the server at a prescribed interval. It compares timestamps of the streamflow gauge data files with the timestamps of the corresponding file on the local file system. When the remote file is newer than the local file, that means it has been updated and needs to be downloaded. That is done, and the downloaded data is then translated into an appropriate netCDF file. After all files have been checked, the process sleeps until the next prescribed update check. - -Conversion to NetCDF format is done as a separate process, and the code for that process is also supplied. - - -USGS scripts received from James McCreight: -name purpose ---------------------- ---------------------------------------------------------------- -run_usgs.sh bash script used to start the main infinite loop process -parallel_download_master.py infinite loop process to run routine for check/download -usgs_iv_retrieval.py control script to get all stations updated in the last N minutes -find_changed_site_for_huc.py determine which stations are updated, and make list -fetch_sites.py download the stations identified in a list - -make_time_slice_from_usgs_waterml.py convert downloaded station data from USGS format to NWM netCDF -TimeSlice.py build the netCDF timeslice files -USGS_Observation.py read USGS format - - -Scripts developed by Tim Hunter for Canadian flow data: -name purpose ---------------------- ---------------------------------------------------------------- -run_canflow.sh bash script used to start the main infinite loop process -parallel_dm_can.py infinite loop process to run routine for check/download -canadian_flow_retrieval.py control script to identify and download all stations updated in the last N minutes - -make_time_slice_from_canada.py convert downloaded station data from WSC format to NWM netCDF -TimeSliceC.py build the netCDF timeslice files -WSC_Observation.py read WSC (Water Survey of Canada) format - - -Note that I kept the script organization and naming relatively consistent with the stuff developed by Zhengtao, but I did simplify/combine the Canadian stuff a little bit. It should be relatively easy and straightforward for whoever implements this on WCOSS or elsewhere to adapt the code and use the new Canadian scripts as a separate standalone process. If the goal is to build a combined process script for doing both the US and Canadian files together, then that will likely be a bit more complicated, obviously. But my hope is that keeping things relatively parallel in structure and naming will facilitate that work (if needed). diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py deleted file mode 100644 index 77f02dc..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/make_time_slice_from_canada.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python -import os, sys, time, urllib, getopt -import logging -from string import * -import xml.etree.ElementTree as etree -from datetime import datetime, timedelta -from WSC_Observation import WSC_Observation, All_WSC_Observations -from TimeSliceC import TimeSliceC -from EmptyDirOrFileException import EmptyDirOrFileException - -""" - The driver to parse downloaded hydrologic data files from - Environment and Climate Change Canada (Water Survey of Canada), - and then to create time slices and write to NetCDF files. - Author: Tim Hunter (tim.hunter@noaa.gov) drawing heavily on - the prior work done by Zhengtao Cui for the USGS data. - Date: February 2018 -""" -def main(argv): - """ - function to get input arguments - """ - inputdir = '' - try: - opts, args = getopt.getopt(argv,"hi:o:",["idir=", "odir="]) - except getopt.GetoptError: - print( 'make_time_slice_from_canada.py -i -o ' ) - sys.exit(2) - for opt, arg in opts: - if opt == '-h': - print( \ - 'make_time_slice_from_canada.py -i -o ' ) - sys.exit() - elif opt in ('-i', "--idir"): - inputdir = arg - if not os.path.exists( inputdir ): - raise RuntimeError( 'FATAL ERROR: inputdir ' + \ - inputdir + ' does not exist!' ) - elif opt in ('-o', "--odir" ): - outputdir = arg - if not os.path.exists( outputdir ): - raise RuntimeError( 'FATAL ERROR: outputdir ' + \ - outputdir + ' does not exist!' ) - - return (inputdir, outputdir) - -logging.basicConfig(format=\ - '%(asctime)s - %(name)s - %(levelname)s - %(message)s',\ - level=logging.INFO) -logger = logging.getLogger(__name__) -formatter = logging.Formatter(\ - '%(asctime)s - %(name)s - %(levelname)s - %(message)s') -#logger.setFormatter(formatter) -logger.info( "System Path: " + str( sys.path ) ) - -if __name__ == "__main__": - odir = main(sys.argv[1:]) - -indir = odir[0] -outdir = odir[1] - -# -# Load discharge data as downloaded from ECCC datamart. Current URL -# for a parent directory is http://dd.weather.gc.ca/hydrometric/csv/ -# Files are found further down that tree. -# -try: - allobvs = All_WSC_Observations( indir ) -except EmptyDirOrFileException as e: - logger.warning( str(e), exc_info=True) - sys.exit(0) -except Exception as e: - logger.error("Failed to load Canadian CSV files: " + str(e), exc_info=True) - sys.exit(3) - -print( 'earliest time: ', allobvs.timePeriodForAll()[0] ) -print( 'latest time: ', allobvs.timePeriodForAll()[1] ) - -# -# Create time slices from loaded observations -# -# Set time resolution to 15 minutes -# and -# Write time slices to NetCDF files -# -try: - timeslices = allobvs.makeAllTimeSlices( timedelta( minutes = 15 ), outdir ) -except Exception as e: - logger.error("Failed to make time slices: " + str(e) , exc_info=True) - logger.error("Input dir = " + indir, exc_info=True) - sys.exit(3) - -print( "total number of timeslices: ", timeslices ) diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/parallel_dm_can.py b/data_assimilation_engine/Streamflow_Scripts/canada_download/parallel_dm_can.py deleted file mode 100644 index de6a3f2..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/parallel_dm_can.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python - -import sys, time, os -import multiprocessing -import canadian_flow_retrieval - -if __name__ == "__main__": - odir = canadian_flow_retrieval.main(sys.argv[1:]) - print( "odir=" + odir) - canadian_flow_retrieval.canadian_flow_retrieval( odir ) - -# -# Start the downloading process -# "procs['can']=" creates a new process (thread), -# but does not make it start executing. So in this case we are -# creating a thread, but it does not begin executing yet. -# -# Note that this code/method is overly complicated for the single -# process that is being created here, but I am keeping things as -# close as possible to Zhengtao Ciu's code/method. He was making -# 3 processes. -# -procs=dict() -procs['can'] = multiprocessing.Process( name='can', \ - target=canadian_flow_retrieval, args=(odir) ) - -# -# Here is where we actually start those new threads executing -# -#for p in procs.values(): -# print( 'start : ' + p.name ) -# p.start() - -## -## Infinite loop to keep the process running. -## If it stalled or crashed, restart. -## -#while True: -# time.sleep( 2*3600 ) -# proc_restarted = [] -# for p in procs.values(): -# if p.is_alive(): -# if os.path.isfile( odir + '/canadian_flow_retrieval'): -# t = os.stat( odir + '/canadian_flow_retrieval') -# c = t.st_mtime -# if c < time.time() - 180 : -# print( 'process: ', p.name, 'stalled!!' ) -# # restart -# p.terminate() -# pr = multiprocessing.Process( name=p.name, -# target=canadian_flow_retrieval, args=(odir) ) -# proc_restarted.append( pr ) -# pr.start() -# print( 'restarted : ', p.name ) -# else: -# print( 'process: ', p.name, 'status file doesn\'t exist' ) -# p.terminate() -# pr = multiprocessing.Process( name=p.name, -# target=canadian_flow_retrieval, args=(odir) ) -# proc_restarted.append( pr ) -# pr.start() -# print( 'process: ', p.name, 'restarted :' ) -# else: -# print( 'process: ', p.name, ' is not alive.' ) -# p.terminate() -# pr = multiprocessing.Process( name=p.name, -# target=canadian_flow_retrieval, args=(odir) ) -# proc_restarted.append( pr ) -# print( 'process: ', p.name, 'restarted :' ) -# pr.start() -# -# if proc_restarted: -# for p in proc_restarted: -# procs[ p.name ] = p - -#for p in procs.values(): -# p.join() -# print( '%s.exitcode = %s' % (p.name, p.exitcode) ) - diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/run_canflow.sh b/data_assimilation_engine/Streamflow_Scripts/canada_download/run_canflow.sh deleted file mode 100644 index a9d2eb5..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/run_canflow.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash - -# Run the Canadian Stream Flow scripts -# Developed by Tim Hunter at NOAA/GLERL, shamelessly plagiarizing work by -# Zhengtao Cui at NOAA/OHD - -log=/gpfs/hps3/ptmp/Zhengtao.Cui/CanDA/can_download_log.txt -OUTDIR=/gpfs/hps3/ptmp/Zhengtao.Cui/CanDA/test1/ - -touchfiles=("$OUTDIR") - -cd /gpfs/hps3/nwc/noscrub/Zhengtao.Cui/nwtest3/nwm.v2.1/ush/canada_download -PARALLEL_DM_CAN=/gpfs/hps3/nwc/noscrub/Zhengtao.Cui/nwtest3/nwm.v2.1/ush/canada_download/parallel_dm_can.py - -DATE=`/bin/date +%H:%M` - -RESETLOGAT="05:28" - -# Check if process is already running with this package -if pgrep -f parallel_dm_can.py > /dev/null 2>&1 -then - echo "Message: parallel_dm_can.py package is running" - if [ "$DATE" = "$RESETLOGAT" ] - then - echo "Message: reset Canadian parallel_dm_can log file" - rm $log - fi - - for f in ${touchfiles[@]} - do - timediff=$((`date +%s` - `stat -c "%Y" $f`)) - if [ $timediff -gt $(( 3600 * 3 )) ] #three hours - then - echo "Message: touch file $f is older than 3 hours" - echo "Message: restart Canadian parallel_dm_can.py" - kill -9 `pgrep -f parallel_dm_can.py` - nohup $PARALLEL_DM_CAN -o $OUTDIR >> $log 2>&1 & - echo "Message: done restart Canadian parallel_dm_can.py" - break - fi - - done -else - echo "Message: parallel_dm_can.py package NOT running" - nohup $PARALLEL_DM_CAN -o $OUTDIR >> $log 2>&1 & -fi -exit diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/bsub_timeslice.bash b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/bsub_timeslice.bash deleted file mode 100755 index 9dcc753..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/bsub_timeslice.bash +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash - -############################################################################### -# File name: bsub_timeslice.bash # -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: Make calls to the time slice making program and submit the # -# job to the dev_shared queue # -# # -############################################################################### - -if [ ! -e "$HOME/usgs_download/time_slices" ]; then mkdir -p $HOME/usgs_download/time_slices; fi - -if [ ! -e "$HOME/usgs_download/LOGS" ]; then mkdir -p $HOME/usgs_download/LOGS; fi - -cd $HOME/usgs_download/LOGS - -if [ -e "time_slices.bsub" ]; then rm -f "time_slices.bsub"; fi - -cat > time_slices.bsub << EOF -#!/bin/bash -#BSUB -J time_slice_for_da # Job name -#BSUB -o time_slice_for_da.out # output filename -#BSUB -e time_slice_for_da.err # error filename -#BSUB -L /bin/sh # shell script -#BSUB -q "dev_shared" # queue -#BSUB -W 00:30 # wallclock time - timing require to complete run -#BSUB -P "OHD-T2O" # Project name -#BSUB -R 'span[ptile=10]' -#BSUB -M 2048 where ## is memory in MB - -source $HOME/.bashrc - -find $HOME/usgs_download/time_slices -mtime +5 -exec rm {} \; - -$HOME/usgs_download/analysis/make_time_slice_from_usgs_waterml.py -i $1 -o $HOME/usgs_download/time_slices > $HOME/usgs_download/LOGS/time_slices.log -EOF - -bsub < time_slices.bsub diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/crontab.txt b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/crontab.txt deleted file mode 100755 index 9877188..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/crontab.txt +++ /dev/null @@ -1,97 +0,0 @@ -# DO NOT EDIT THIS FILE - edit the master and reinstall. -# (/tmp/crontab.XXXXrP3mII installed on Wed Jan 20 16:11:58 2016) -# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $) - -BASH_ENV=/u/Zhengtao.Cui/.bashrc -SHELL=/usr/bin/bash -l -# -#create time slices at every 15 minutes starting at 10 minutes of the hour -# -#10,25,40,55 * * * * /gpfs/hps/nwc/save/Zhengtao.Cui/chps-wrf-hydro/usgs_download/analysis/make_time_slice_from_usgs_waterml.py -i /gpfs/gp1/dcomdev/us007003/usgs_streamflow -o /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices > /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices.log -#10,25,40,55 * * * * /gpfs/hps/nwc/save/Zhengtao.Cui/chps-wrf-hydro/usgs_download/analysis/make_time_slice_from_usgs_waterml.py -i /gpfs/hps/nwc/noscrub/Zhengtao.Cui/usgs_flow -o /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices > /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices.log -#10,25,40,55 * * * * bsub < /gpfs/hps/nwc/save/Zhengtao.Cui/chps-wrf-hydro/usgs_download/analysis/time_slice_job_cray.bsub -10,25,40,55 * * * * $HOME/usgs_download/analysis/bsub_timeslice.bash /gpfs/hps/nwc/noscrub/Zhengtao.Cui/usgs_flow -# -# Forcing engine and wrf-hydro model run -# -30 00 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 00 -30 00 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 00 - -### create short ranging forecast. The forcing engine will wait 40 minutes (maximu) of related NCEP model results. -00 01 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 00 - -## wrapper_qpe_bias.bash update the precipitation so that we can run model analysis first. -45 00 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 00 - -# run model analysis, will assume the forcing data is always available. -00 01 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 00 - -#run Short_Range forecast. wrapper_Short_Range.sh will wait realted forcing engine to finish with 40 minutes maximum -15 01 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 00 - -#GFS data test -#run forcing_engine of GFS first. The script will wait 4 hours (maximum) of GFS model results. -00 05 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_gfs.bash 00 -#run hydro forecast with GFS forcing created above. The script will wait 4 hours (maximum) of GFS forcing data to be created by forcing engine. -10 05 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Medium_Range.sh 00 - -#CFS1 data test -#run forcing_engine of CFS1 first. The script will wait 4 hours (maximum) of CFS model results. -00 08 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_cfs1.bash 00 -#run hydro forecast with CFS1 forcing data. The script will wait 4 hours (maximum) of CFS1 forcing data to be created by forcing engine. -30 09 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Long_Range1.sh 00 - - -30 03 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 03 -30 03 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 03 -00 04 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 03 -45 03 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 03 -00 04 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 03 -15 04 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 03 - -30 06 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 06 -30 06 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 06 -00 07 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 06 -45 06 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 06 -00 07 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 06 -15 07 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 06 - -30 09 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 09 -30 09 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 09 -00 10 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 09 -45 09 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 09 -00 10 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 09 -15 10 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 09 - -30 12 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 12 -30 12 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 12 -00 13 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 12 -45 12 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 12 -00 13 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 12 -15 13 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 12 - -30 15 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 15 -30 15 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 15 -00 16 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 15 -45 15 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 15 -00 16 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 15 -15 16 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 15 - -30 18 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 18 -30 18 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 18 -00 19 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 18 -45 18 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 18 -00 19 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 18 -15 19 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 18 - -30 21 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_only.bash 21 -30 21 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash wrapper_radar_gauge.bash 21 -00 22 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/bsub_queue.bash run_rap_hrr.bash 21 -45 21 * * * $HOME/forcing_engine/HYDRO/REGRID/bin_driver/wrapper_qpe_bias.bash 21 -00 22 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Anal_Assim.sh 21 -15 22 * * * $HOME/model_flow/HYDRO/bin/driver/wrapper_Short_Range.sh 21 - - -# -10 5 * * 1,4 find /gpfs/hps/ptmp/Zhengtao.Cui -print0 | xargs -0 touch - diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml deleted file mode 100755 index 4ead415..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWF_TX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI.xml +++ /dev/null @@ -1,1136 +0,0 @@ -cpc-ora-db50:S0CWMSZ22019-05-06T15:29:26ZPT3.339SPT0.049S1900-01-01T00:00:00Z2019-05-06T15:29:26ZXMLSWFTX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGIENNATIVE1111331133SWFTX08008-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGIRAY ROBERTS DAM-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGIRRLT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.ReportingRRLT2-Gated_Total.Flow-Out.Ave.~1Day.1Day.Rev-SWF-REGI -2016-01-01T06:00:00Z 3778.043 0 -2016-01-02T06:00:00Z 1972.447 0 -2016-01-03T06:00:00Z 1971.421 0 -2016-01-04T06:00:00Z 1970.413 0 -2016-01-05T06:00:00Z 1969.352 0 -2016-01-06T06:00:00Z 1968.151 0 -2016-01-07T06:00:00Z 1966.907 0 -2016-01-08T06:00:00Z 1966.547 0 -2016-01-09T06:00:00Z 1965.922 0 -2016-01-10T06:00:00Z 1964.843 0 -2016-01-11T06:00:00Z 1963.532 0 -2016-01-12T06:00:00Z 1962.116 0 -2016-01-13T06:00:00Z 2233.907 0 -2016-01-14T06:00:00Z 2444.594 0 -2016-01-15T06:00:00Z 2442.665 0 -2016-01-16T06:00:00Z 2440.831 0 -2016-01-17T06:00:00Z 2438.887 0 -2016-01-18T06:00:00Z 2436.696 0 -2016-01-19T06:00:00Z 2434.568 0 -2016-01-20T06:00:00Z 2432.179 0 -2016-01-21T06:00:00Z 2430.069 0 -2016-01-22T06:00:00Z 2428.139 0 -2016-01-23T06:00:00Z 2426.039 0 -2016-01-24T06:00:00Z 2423.844 0 -2016-01-25T06:00:00Z 2421.708 0 -2016-01-26T06:00:00Z 2419.732 0 -2016-01-27T06:00:00Z 2417.817 0 -2016-01-28T06:00:00Z 2415.511 0 -2016-01-29T06:00:00Z 2413.471 0 -2016-01-30T06:00:00Z 2411.262 0 -2016-01-31T06:00:00Z 2409.079 0 -2016-02-01T06:00:00Z 2407.047 0 -2016-02-02T06:00:00Z 2404.998 0 -2016-02-03T06:00:00Z 2402.751 0 -2016-02-04T06:00:00Z 2400.541 0 -2016-02-05T06:00:00Z 2398.292 0 -2016-02-06T06:00:00Z 1772.397 0 -2016-02-07T06:00:00Z 1286.317 0 -2016-02-08T06:00:00Z 1285.556 0 -2016-02-09T06:00:00Z 1284.763 0 -2016-02-10T06:00:00Z 1283.95 0 -2016-02-11T06:00:00Z 1283.143 0 -2016-02-12T06:00:00Z 1282.457 0 -2016-02-13T06:00:00Z 1281.776 0 -2016-02-14T06:00:00Z 1281.047 0 -2016-02-15T06:00:00Z 1280.248 0 -2016-02-16T06:00:00Z 1279.677 0 -2016-02-17T06:00:00Z 2034.853 0 -2016-02-18T06:00:00Z 3002.952 0 -2016-02-19T06:00:00Z 2998.715 0 -2016-02-20T06:00:00Z 2995.372 0 -2016-02-21T06:00:00Z 2991.519 0 -2016-02-22T06:00:00Z 2988.049 0 -2016-02-23T06:00:00Z 2984.798 0 -2016-02-24T06:00:00Z 2147.098 0 -2016-02-25T06:00:00Z 1115.318 0 -2016-02-26T06:00:00Z 1115.233 0 -2016-02-27T06:00:00Z 1114.793 0 -2016-02-28T06:00:00Z 1114.321 0 -2016-02-29T06:00:00Z 1113.87 0 -2016-03-01T06:00:00Z 1113.443 0 -2016-03-02T06:00:00Z 2156.398 0 -2016-03-03T06:00:00Z 3130.882 0 -2016-03-04T06:00:00Z 3126.684 0 -2016-03-05T06:00:00Z 2003.03 0 -2016-03-06T06:00:00Z 952.6647 0 -2016-03-07T06:00:00Z 952.11 0 -2016-03-08T06:00:00Z 951.8296 0 -2016-03-09T06:00:00Z 956.8007 0 -2016-03-10T06:00:00Z 961.5744 0 -2016-03-11T06:00:00Z 404.6193 0 -2016-03-12T06:00:00Z 5.890134 0 -2016-03-13T06:00:00Z 5.891227 0 -2016-03-14T05:00:00Z 5.892082 0 -2016-03-15T05:00:00Z 5.892593 0 -2016-03-16T05:00:00Z 5.892847 0 -2016-03-17T05:00:00Z 5.893063 0 -2016-03-18T05:00:00Z 5.893493 0 -2016-03-19T05:00:00Z 5.893817 0 -2016-03-20T05:00:00Z 5.893924 0 -2016-03-21T05:00:00Z 5.893795 0 -2016-03-22T05:00:00Z 525.8743 0 -2016-03-23T05:00:00Z 965.1952 0 -2016-03-24T05:00:00Z 964.8251 0 -2016-03-25T05:00:00Z 964.835 0 -2016-03-26T05:00:00Z 964.5617 0 -2016-03-27T05:00:00Z 964.1598 0 -2016-03-28T05:00:00Z 963.7516 0 -2016-03-29T05:00:00Z 963.2984 0 -2016-03-30T05:00:00Z 962.8389 0 -2016-03-31T05:00:00Z 962.4658 0 -2016-04-01T05:00:00Z 962.1391 0 -2016-04-02T05:00:00Z 961.7447 0 -2016-04-03T05:00:00Z 961.2151 0 -2016-04-04T05:00:00Z 960.6818 0 -2016-04-05T05:00:00Z 1307.718 0 -2016-04-06T05:00:00Z 1588.494 0 -2016-04-07T05:00:00Z 1587.261 0 -2016-04-08T05:00:00Z 1586.094 0 -2016-04-09T05:00:00Z 1584.934 0 -2016-04-10T05:00:00Z 1583.714 0 -2016-04-11T05:00:00Z 1582.446 0 -2016-04-12T05:00:00Z 1581.549 0 -2016-04-13T05:00:00Z 1580.649 0 -2016-04-14T05:00:00Z 1579.579 0 -2016-04-15T05:00:00Z 1578.547 0 -2016-04-16T05:00:00Z 1577.394 0 -2016-04-17T05:00:00Z 1576.205 0 -2016-04-18T05:00:00Z 725.7781 0 -2016-04-19T05:00:00Z 5.876896 0 -2016-04-20T05:00:00Z 5.878191 0 -2016-04-21T05:00:00Z 5.882891 0 -2016-04-22T05:00:00Z 5.886289 0 -2016-04-23T05:00:00Z 5.88687 0 -2016-04-24T05:00:00Z 5.887146 0 -2016-04-25T05:00:00Z 5.887211 0 -2016-04-26T05:00:00Z 5.887287 0 -2016-04-27T05:00:00Z 5.887438 0 -2016-04-28T05:00:00Z 5.88919 0 -2016-04-29T05:00:00Z 5.890118 0 -2016-04-30T05:00:00Z 5.89037 0 -2016-05-01T05:00:00Z 5.890694 0 -2016-05-02T05:00:00Z 5.890912 0 -2016-05-03T05:00:00Z 5.890771 0 -2016-05-04T05:00:00Z 5.890733 0 -2016-05-05T05:00:00Z 5.890626 0 -2016-05-06T05:00:00Z 5.8906 0 -2016-05-07T05:00:00Z 5.89059 0 -2016-05-08T05:00:00Z 5.890366 0 -2016-05-09T05:00:00Z 5.890236 0 -2016-05-10T05:00:00Z 1368.151 0 -2016-05-11T05:00:00Z 2545.741 0 -2016-05-12T05:00:00Z 2539.007 0 -2016-05-13T05:00:00Z 2536.659 0 -2016-05-14T05:00:00Z 2533.801 0 -2016-05-15T05:00:00Z 2531.355 0 -2016-05-16T05:00:00Z 2528.913 0 -2016-05-17T05:00:00Z 2525.887 0 -2016-05-18T05:00:00Z 2523.646 0 -2016-05-19T05:00:00Z 2521.81 0 -2016-05-20T05:00:00Z 2519.182 0 -2016-05-21T05:00:00Z 2347.863 0 -2016-05-22T05:00:00Z 1267.308 0 -2016-05-23T05:00:00Z 1266.62 0 -2016-05-24T05:00:00Z 1934.163 0 -2016-05-25T05:00:00Z 2525.983 0 -2016-05-26T05:00:00Z 2524.573 0 -2016-05-27T05:00:00Z 2522.729 0 -2016-05-28T05:00:00Z 2521.587 0 -2016-05-29T05:00:00Z 2520.956 0 -2016-05-30T05:00:00Z 2518.897 0 -2016-05-31T05:00:00Z 2520.563 0 -2016-06-01T05:00:00Z 2522.348 0 -2016-06-02T05:00:00Z 1824.911 0 -2016-06-03T05:00:00Z 1273.942 0 -2016-06-04T05:00:00Z 597.2918 0 -2016-06-05T05:00:00Z 1 0 -2016-06-06T05:00:00Z 1 0 -2016-06-07T05:00:00Z 1 0 -2016-06-08T05:00:00Z 1 0 -2016-06-09T05:00:00Z 1 0 -2016-06-10T05:00:00Z 1 0 -2016-06-11T05:00:00Z 1 0 -2016-06-12T05:00:00Z 1 0 -2016-06-13T05:00:00Z 1 0 -2016-06-14T05:00:00Z 1 0 -2016-06-15T05:00:00Z 1 0 -2016-06-16T05:00:00Z 1 0 -2016-06-17T05:00:00Z 1916.588 0 -2016-06-18T05:00:00Z 3537.242 0 -2016-06-19T05:00:00Z 3532.512 0 -2016-06-20T05:00:00Z 3527.58 0 -2016-06-21T05:00:00Z 3522.654 0 -2016-06-22T05:00:00Z 3517.529 0 -2016-06-23T05:00:00Z 3512.372 0 -2016-06-24T05:00:00Z 3507.299 0 -2016-06-25T05:00:00Z 2728.366 0 -2016-06-26T05:00:00Z 1918.64 0 -2016-06-27T05:00:00Z 1916.915 0 -2016-06-28T05:00:00Z 1915.25 0 -2016-06-29T05:00:00Z 1913.725 0 -2016-06-30T05:00:00Z 1911.968 0 -2016-07-01T05:00:00Z 1910.225 0 -2016-07-02T05:00:00Z 1908.505 0 -2016-07-03T05:00:00Z 1906.665 0 -2016-10-01T05:00:00Z 35.04116 0 -2016-10-02T05:00:00Z 35.03968 0 -2016-10-03T05:00:00Z 35.03828 0 -2016-10-04T05:00:00Z 35.03646 0 -2016-10-05T05:00:00Z 35.03428 0 -2016-10-06T05:00:00Z 35.03306 0 -2016-10-07T05:00:00Z 35.03179 0 -2016-10-08T05:00:00Z 35.04001 0 -2016-10-09T05:00:00Z 35.04232 0 -2016-10-10T05:00:00Z 35.04144 0 -2016-10-11T05:00:00Z 35.03997 0 -2016-10-12T05:00:00Z 35.03832 0 -2016-10-13T05:00:00Z 35.03714 0 -2016-10-14T05:00:00Z 35.03647 0 -2016-10-15T05:00:00Z 35.03515 0 -2016-10-16T05:00:00Z 35.03343 0 -2016-10-17T05:00:00Z 35.03221 0 -2016-10-18T05:00:00Z 35.03134 0 -2016-10-19T05:00:00Z 35.03099 0 -2016-10-20T05:00:00Z 35.03056 0 -2016-10-21T05:00:00Z 35.036 0 -2016-10-22T05:00:00Z 35.03739 0 -2016-10-23T05:00:00Z 35.03667 0 -2016-10-24T05:00:00Z 35.03489 0 -2016-10-25T05:00:00Z 35.03432 0 -2016-10-26T05:00:00Z 35.03364 0 -2016-10-27T05:00:00Z 35.03263 0 -2016-10-28T05:00:00Z 35.03209 0 -2016-10-29T05:00:00Z 35.03166 0 -2016-10-30T05:00:00Z 35.03045 0 -2016-10-31T05:00:00Z 35.02964 0 -2016-11-01T05:00:00Z 35.02867 0 -2016-11-02T05:00:00Z 35.02767 0 -2016-11-03T05:00:00Z 35.02673 0 -2016-11-04T05:00:00Z 35.03737 0 -2016-11-05T05:00:00Z 35.03961 0 -2016-11-06T05:00:00Z 35.03965 0 -2016-11-07T06:00:00Z 35.03898 0 -2016-11-08T06:00:00Z 35.05026 0 -2016-11-09T06:00:00Z 118.9946 0 -2016-11-10T06:00:00Z 190 0 -2016-11-11T06:00:00Z 190 0 -2016-11-12T06:00:00Z 190 0 -2016-11-13T06:00:00Z 190 0 -2016-11-14T06:00:00Z 190 0 -2016-11-15T06:00:00Z 190 0 -2016-11-16T06:00:00Z 190 0 -2016-11-17T06:00:00Z 190 0 -2016-11-18T06:00:00Z 120 0 -2016-11-19T06:00:00Z 22 0 -2016-11-20T06:00:00Z 22 0 -2016-11-21T06:00:00Z 22 0 -2016-11-22T06:00:00Z 22 0 -2016-11-23T06:00:00Z 22 0 -2016-11-24T06:00:00Z 22 0 -2016-11-25T06:00:00Z 22 0 -2016-11-26T06:00:00Z 22 0 -2016-11-27T06:00:00Z 22 0 -2016-11-28T06:00:00Z 22 0 -2016-11-29T06:00:00Z 22 0 -2016-11-30T06:00:00Z 29.6875 0 -2016-12-01T06:00:00Z 51.02083 0 -2016-12-02T06:00:00Z 83.92708 0 -2016-12-03T06:00:00Z 124.125 0 -2016-12-04T06:00:00Z 150 0 -2016-12-05T06:00:00Z 150 0 -2016-12-06T06:00:00Z 150 0 -2016-12-07T06:00:00Z 195.9681 0 -2016-12-08T06:00:00Z 196 0 -2016-12-09T06:00:00Z 196 0 -2016-12-10T06:00:00Z 196 0 -2016-12-11T06:00:00Z 196 0 -2016-12-12T06:00:00Z 196 0 -2016-12-13T06:00:00Z 196 0 -2016-12-14T06:00:00Z 196 0 -2016-12-15T06:00:00Z 196 0 -2016-12-16T06:00:00Z 196 0 -2016-12-17T06:00:00Z 103.8333 0 -2016-12-18T06:00:00Z 38 0 -2016-12-19T06:00:00Z 38 0 -2016-12-20T06:00:00Z 38 0 -2016-12-21T06:00:00Z 38 0 -2016-12-22T06:00:00Z 38 0 -2016-12-23T06:00:00Z 38 0 -2016-12-24T06:00:00Z 38 0 -2016-12-25T06:00:00Z 38 0 -2016-12-26T06:00:00Z 38 0 -2016-12-27T06:00:00Z 38 0 -2016-12-28T06:00:00Z 38 0 -2016-12-29T06:00:00Z 38 0 -2016-12-30T06:00:00Z 38 0 -2016-12-31T06:00:00Z 38 0 -2017-01-01T06:00:00Z 38 0 -2017-01-02T06:00:00Z 38 0 -2017-01-03T06:00:00Z 38 0 -2017-01-04T06:00:00Z 38 0 -2017-01-05T06:00:00Z 38 0 -2017-01-06T06:00:00Z 38 0 -2017-01-07T06:00:00Z 38 0 -2017-01-08T06:00:00Z 38 0 -2017-01-09T06:00:00Z 38 0 -2017-01-10T06:00:00Z 38 0 -2017-01-11T06:00:00Z 38 0 -2017-01-12T06:00:00Z 38 0 -2017-01-13T06:00:00Z 38 0 -2017-01-14T06:00:00Z 38 0 -2017-01-15T06:00:00Z 38 0 -2017-01-16T06:00:00Z 38 0 -2017-01-17T06:00:00Z 133.0833 0 -2017-01-18T06:00:00Z 784.9498 0 -2017-01-19T06:00:00Z 1401.021 0 -2017-01-20T06:00:00Z 755.9695 0 -2017-01-21T06:00:00Z 640.4506 0 -2017-01-22T06:00:00Z 792.0489 0 -2017-01-23T06:00:00Z 1400.251 0 -2017-01-24T06:00:00Z 1399.433 0 -2017-01-25T06:00:00Z 1398.733 0 -2017-01-26T06:00:00Z 1398.065 0 -2017-01-27T06:00:00Z 1397.248 0 -2017-01-28T06:00:00Z 1028.267 0 -2017-01-29T06:00:00Z 775.9787 0 -2017-01-30T06:00:00Z 775.6878 0 -2017-01-31T06:00:00Z 453.9903 0 -2017-02-01T06:00:00Z 206 0 -2017-02-02T06:00:00Z 206 0 -2017-02-03T06:00:00Z 206 0 -2017-02-04T06:00:00Z 136 0 -2017-02-05T06:00:00Z 86 0 -2017-02-06T06:00:00Z 86 0 -2017-02-07T06:00:00Z 56.625 0 -2017-02-08T06:00:00Z 39 0 -2017-02-09T06:00:00Z 39 0 -2017-02-10T06:00:00Z 39 0 -2017-02-11T06:00:00Z 39 0 -2017-02-12T06:00:00Z 39 0 -2017-02-13T06:00:00Z 39 0 -2017-02-14T06:00:00Z 39 0 -2017-02-15T06:00:00Z 39 0 -2017-02-16T06:00:00Z 39 0 -2017-02-17T06:00:00Z 39 0 -2017-02-18T06:00:00Z 39 0 -2017-02-19T06:00:00Z 39 0 -2017-02-20T06:00:00Z 39 0 -2017-02-21T06:00:00Z 39 0 -2017-02-22T06:00:00Z 242.4429 0 -2017-02-23T06:00:00Z 463.5556 0 -2017-02-24T06:00:00Z 463.5005 0 -2017-02-25T06:00:00Z 463.442 0 -2017-02-26T06:00:00Z 463.3661 0 -2017-02-27T06:00:00Z 463.2601 0 -2017-02-28T06:00:00Z 463.1718 0 -2017-03-01T06:00:00Z 231.7573 0 -2017-03-02T06:00:00Z 36 0 -2017-03-03T06:00:00Z 36 0 -2017-03-04T06:00:00Z 36 0 -2017-03-05T06:00:00Z 36 0 -2017-03-06T06:00:00Z 36 0 -2017-03-07T06:00:00Z 36 0 -2017-03-08T06:00:00Z 36 0 -2017-03-09T06:00:00Z 36 0 -2017-03-10T06:00:00Z 36 0 -2017-03-11T06:00:00Z 36 0 -2017-03-12T06:00:00Z 36 0 -2017-03-13T05:00:00Z 36 0 -2017-03-14T05:00:00Z 36 0 -2017-03-15T05:00:00Z 36 0 -2017-03-16T05:00:00Z 36 0 -2017-03-17T05:00:00Z 36 0 -2017-03-18T05:00:00Z 36 0 -2017-03-19T05:00:00Z 36 0 -2017-03-20T05:00:00Z 36 0 -2017-03-21T05:00:00Z 36 0 -2017-03-22T05:00:00Z 36 0 -2017-03-23T05:00:00Z 36 0 -2017-03-24T05:00:00Z 36 0 -2017-03-25T05:00:00Z 36 0 -2017-03-26T05:00:00Z 36 0 -2017-03-27T05:00:00Z 36 0 -2017-03-28T05:00:00Z 36 0 -2017-03-29T05:00:00Z 36 0 -2017-03-30T05:00:00Z 36 0 -2017-03-31T05:00:00Z 36 0 -2017-04-01T05:00:00Z 36 0 -2017-04-02T05:00:00Z 36 0 -2017-04-03T05:00:00Z 36 0 -2017-04-04T05:00:00Z 405.0463 0 -2017-04-05T05:00:00Z 679.1964 0 -2017-04-06T05:00:00Z 679.0041 0 -2017-04-07T05:00:00Z 678.7336 0 -2017-04-08T05:00:00Z 499.5519 0 -2017-04-09T05:00:00Z 365.9863 0 -2017-04-10T05:00:00Z 365.9093 0 -2017-04-11T05:00:00Z 184.7331 0 -2017-04-12T05:00:00Z 49.68037 0 -2017-04-13T05:00:00Z 49.678 0 -2017-04-14T05:00:00Z 49.67713 0 -2017-04-15T05:00:00Z 49.67611 0 -2017-04-16T05:00:00Z 49.67522 0 -2017-04-17T05:00:00Z 49.67473 0 -2017-04-18T05:00:00Z 49.69 0 -2017-04-19T05:00:00Z 579.3193 0 -2017-04-20T05:00:00Z 990.9417 0 -2017-04-21T05:00:00Z 990.774 0 -2017-04-22T05:00:00Z 990.5925 0 -2017-04-23T05:00:00Z 991.8918 0 -2017-04-24T05:00:00Z 991.8843 0 -2017-04-25T05:00:00Z 991.5043 0 -2017-04-26T05:00:00Z 991.0627 0 -2017-04-27T05:00:00Z 1293.938 0 -2017-04-28T05:00:00Z 1608.733 0 -2017-04-29T05:00:00Z 1278.798 0 -2017-04-30T05:00:00Z 678.6295 0 -2017-05-01T05:00:00Z 678.4012 0 -2017-05-02T05:00:00Z 678.114 0 -2017-05-03T05:00:00Z 347.9604 0 -2017-05-04T05:00:00Z 31 0 -2017-05-05T05:00:00Z 31 0 -2017-05-06T05:00:00Z 31 0 -2017-05-07T05:00:00Z 31 0 -2017-05-08T05:00:00Z 31 0 -2017-05-09T05:00:00Z 31 0 -2017-05-10T05:00:00Z 31 0 -2017-05-11T05:00:00Z 31 0 -2017-05-12T05:00:00Z 31 0 -2017-05-13T05:00:00Z 31 0 -2017-05-14T05:00:00Z 31 0 -2017-05-15T05:00:00Z 31 0 -2017-05-16T05:00:00Z 31 0 -2017-05-17T05:00:00Z 31 0 -2017-05-18T05:00:00Z 31 0 -2017-05-19T05:00:00Z 31 0 -2017-05-20T05:00:00Z 31 0 -2017-05-21T05:00:00Z 31 0 -2017-05-22T05:00:00Z 31 0 -2017-05-23T05:00:00Z 31 0 -2017-05-24T05:00:00Z 31 0 -2017-05-25T05:00:00Z 31 0 -2017-05-26T05:00:00Z 31 0 -2017-05-27T05:00:00Z 31 0 -2017-05-28T05:00:00Z 31 0 -2017-05-29T05:00:00Z 31 0 -2017-05-30T05:00:00Z 31 0 -2017-05-31T05:00:00Z 31 0 -2017-06-01T05:00:00Z 31 0 -2017-06-02T05:00:00Z 31 0 -2017-06-03T05:00:00Z 31 0 -2017-06-04T05:00:00Z 31 0 -2017-06-05T05:00:00Z 31 0 -2017-06-06T05:00:00Z 31 0 -2017-06-07T05:00:00Z 31 0 -2017-06-08T05:00:00Z 31 0 -2017-06-09T05:00:00Z 31 0 -2017-06-10T05:00:00Z 31 0 -2017-06-11T05:00:00Z 31 0 -2017-06-12T05:00:00Z 31 0 -2017-06-13T05:00:00Z 31 0 -2017-06-14T05:00:00Z 31 0 -2017-06-15T05:00:00Z 31 0 -2017-06-16T05:00:00Z 24.85096 0 -2017-06-17T05:00:00Z 20.45839 0 -2017-06-18T05:00:00Z 20.45749 0 -2017-06-19T05:00:00Z 20.45697 0 -2017-06-20T05:00:00Z 17.51813 0 -2017-06-21T05:00:00Z 15.59273 0 -2017-06-22T05:00:00Z 15.59237 0 -2017-06-23T05:00:00Z 15.59173 0 -2017-06-24T05:00:00Z 15.59133 0 -2017-06-25T05:00:00Z 15.59564 0 -2017-06-26T05:00:00Z 15.60044 0 -2017-06-27T05:00:00Z 15.60041 0 -2017-06-28T05:00:00Z 15.60031 0 -2017-06-29T05:00:00Z 15.59977 0 -2017-06-30T05:00:00Z 15.59918 0 -2017-07-01T05:00:00Z 15.59862 0 -2017-07-02T05:00:00Z 15.59844 0 -2017-07-03T05:00:00Z 15.59816 0 -2017-07-04T05:00:00Z 15.59777 0 -2017-07-05T05:00:00Z 15.59807 0 -2017-07-06T05:00:00Z 15.598 0 -2017-07-07T05:00:00Z 15.59779 0 -2017-07-08T05:00:00Z 15.59747 0 -2017-07-09T05:00:00Z 15.59717 0 -2017-07-10T05:00:00Z 15.5971 0 -2017-07-11T05:00:00Z 15.59731 0 -2017-07-12T05:00:00Z 15.59688 0 -2017-07-13T05:00:00Z 15.59623 0 -2017-07-14T05:00:00Z 15.59559 0 -2017-07-15T05:00:00Z 15.5951 0 -2017-07-16T05:00:00Z 15.59498 0 -2017-07-17T05:00:00Z 15.5946 0 -2017-07-18T05:00:00Z 15.59404 0 -2017-07-19T05:00:00Z 15.59332 0 -2017-07-20T05:00:00Z 15.59268 0 -2017-07-21T05:00:00Z 15.59197 0 -2017-07-22T05:00:00Z 15.5913 0 -2017-07-23T05:00:00Z 15.59058 0 -2017-07-24T05:00:00Z 15.58994 0 -2017-07-25T05:00:00Z 15.59115 0 -2017-07-26T05:00:00Z 15.59068 0 -2017-07-27T05:00:00Z 15.59005 0 -2017-07-28T05:00:00Z 15.58933 0 -2017-07-29T05:00:00Z 15.58861 0 -2017-07-30T05:00:00Z 15.58817 0 -2017-07-31T05:00:00Z 15.58741 0 -2017-08-01T05:00:00Z 15.58654 0 -2017-08-02T05:00:00Z 15.58576 0 -2017-08-03T05:00:00Z 15.58516 0 -2017-08-04T05:00:00Z 15.58486 0 -2017-08-05T05:00:00Z 15.58422 0 -2017-08-06T05:00:00Z 15.58342 0 -2017-08-07T05:00:00Z 15.58246 0 -2017-08-08T05:00:00Z 15.58241 0 -2017-08-09T05:00:00Z 15.58175 0 -2017-08-10T05:00:00Z 15.58106 0 -2017-08-11T05:00:00Z 15.58032 0 -2017-08-12T05:00:00Z 15.57975 0 -2017-08-13T05:00:00Z 15.5795 0 -2017-08-14T05:00:00Z 15.58237 0 -2017-08-15T05:00:00Z 15.58577 0 -2017-08-16T05:00:00Z 15.58705 0 -2017-08-17T05:00:00Z 15.58692 0 -2017-08-18T05:00:00Z 15.5945 0 -2017-08-19T05:00:00Z 15.60476 0 -2017-08-20T05:00:00Z 15.60555 0 -2017-08-21T05:00:00Z 15.60545 0 -2017-08-22T05:00:00Z 15.60497 0 -2017-08-23T05:00:00Z 15.6045 0 -2017-08-24T05:00:00Z 15.60494 0 -2017-08-25T05:00:00Z 15.61826 0 -2017-08-26T05:00:00Z 657.7848 0 -2017-08-27T05:00:00Z 1116.494 0 -2017-08-28T05:00:00Z 960.0352 0 -2017-08-29T05:00:00Z 1093.292 0 -2017-08-30T05:00:00Z 1279.627 0 -2017-08-31T05:00:00Z 1278.754 0 -2017-09-01T05:00:00Z 1277.841 0 -2017-09-02T05:00:00Z 996.2293 0 -2017-09-03T05:00:00Z 649.8683 0 -2017-09-04T05:00:00Z 649.7461 0 -2017-09-05T05:00:00Z 649.6119 0 -2017-09-06T05:00:00Z 649.4015 0 -2017-09-07T05:00:00Z 649.1086 0 -2017-09-08T05:00:00Z 648.8199 0 -2017-09-09T05:00:00Z 494.1207 0 -2017-09-10T05:00:00Z 332.9867 0 -2017-09-11T05:00:00Z 332.8958 0 -2017-09-12T05:00:00Z 240.295 0 -2017-09-13T05:00:00Z 174.1686 0 -2017-09-14T05:00:00Z 84.96372 0 -2017-09-15T05:00:00Z 15.60075 0 -2017-09-16T05:00:00Z 15.59985 0 -2017-09-17T05:00:00Z 15.59939 0 -2017-09-18T05:00:00Z 15.59893 0 -2017-09-19T05:00:00Z 15.59852 0 -2017-09-20T05:00:00Z 15.59799 0 -2017-09-21T05:00:00Z 15.59744 0 -2017-09-22T05:00:00Z 15.5968 0 -2017-09-23T05:00:00Z 15.59629 0 -2017-09-24T05:00:00Z 15.59598 0 -2017-09-25T05:00:00Z 15.59526 0 -2017-09-26T05:00:00Z 15.59468 0 -2017-09-27T05:00:00Z 15.59442 0 -2017-09-28T05:00:00Z 15.59416 0 -2017-09-29T05:00:00Z 15.5934 0 -2017-09-30T05:00:00Z 15.59302 0 -2017-10-01T05:00:00Z 15.59282 0 -2017-10-02T05:00:00Z 15.59188 0 -2017-10-03T05:00:00Z 15.59119 0 -2017-10-04T05:00:00Z 15.59085 0 -2017-10-05T05:00:00Z 15.59209 0 -2017-10-06T05:00:00Z 15.59204 0 -2017-10-07T05:00:00Z 15.5914 0 -2017-10-08T05:00:00Z 15.59087 0 -2017-10-09T05:00:00Z 15.59047 0 -2017-10-10T05:00:00Z 15.58964 0 -2017-10-11T05:00:00Z 15.58961 0 -2017-10-12T05:00:00Z 15.58883 0 -2017-10-13T05:00:00Z 15.58811 0 -2017-10-14T05:00:00Z 15.58749 1 -2017-10-15T05:00:00Z 15.58717 1 -2017-10-16T05:00:00Z 15.58676 1 -2017-10-17T05:00:00Z 15.58622 1 -2017-10-18T05:00:00Z 15.58538 1 -2017-10-19T05:00:00Z 15.5846 1 -2017-10-20T05:00:00Z 15.58401 1 -2017-10-21T05:00:00Z 15.58335 1 -2017-10-22T05:00:00Z 15.58286 1 -2017-10-23T05:00:00Z 15.58394 1 -2017-10-24T05:00:00Z 15.58348 1 -2017-10-25T05:00:00Z 15.58278 1 -2017-10-26T05:00:00Z 15.58187 1 -2017-10-27T05:00:00Z 15.58084 1 -2017-10-28T05:00:00Z 15.58001 1 -2017-10-29T05:00:00Z 15.57932 1 -2017-10-30T05:00:00Z 15.57852 1 -2017-10-31T05:00:00Z 15.57775 1 -2017-11-01T05:00:00Z 15.57717 1 -2017-11-02T05:00:00Z 15.57662 1 -2017-11-03T05:00:00Z 15.57609 1 -2017-11-04T05:00:00Z 15.57579 1 -2017-11-05T05:00:00Z 15.57566 1 -2017-11-06T06:00:00Z 15.57553 1 -2017-11-07T06:00:00Z 15.5754 1 -2017-11-08T06:00:00Z 15.57527 1 -2017-11-09T06:00:00Z 15.57535 1 -2017-11-10T06:00:00Z 15.57547 1 -2017-11-11T06:00:00Z 15.5752 1 -2017-11-12T06:00:00Z 15.57478 1 -2017-11-13T06:00:00Z 15.57434 1 -2017-11-14T06:00:00Z 15.57401 1 -2017-11-15T06:00:00Z 15.57379 1 -2017-11-16T06:00:00Z 15.57358 1 -2017-11-17T06:00:00Z 15.57328 1 -2017-11-18T06:00:00Z 15.57297 1 -2017-11-19T06:00:00Z 15.57266 1 -2017-11-20T06:00:00Z 15.57229 1 -2017-11-21T06:00:00Z 15.57171 1 -2017-11-22T06:00:00Z 15.57123 1 -2017-11-23T06:00:00Z 15.57088 1 -2017-11-24T06:00:00Z 15.57035 1 -2017-11-25T06:00:00Z 15.56986 1 -2017-11-26T06:00:00Z 15.56946 1 -2017-11-27T06:00:00Z 15.56907 1 -2017-11-28T06:00:00Z 15.56867 1 -2017-11-29T06:00:00Z 15.56827 1 -2017-11-30T06:00:00Z 15.56794 1 -2017-12-01T06:00:00Z 15.56769 1 -2017-12-02T06:00:00Z 15.56746 1 -2017-12-03T06:00:00Z 15.5672 1 -2017-12-04T06:00:00Z 15.56688 1 -2017-12-05T06:00:00Z 15.56676 1 -2017-12-06T06:00:00Z 15.56733 1 -2017-12-07T06:00:00Z 15.5666 1 -2017-12-08T06:00:00Z 15.56609 1 -2017-12-09T06:00:00Z 15.56559 1 -2017-12-10T06:00:00Z 15.56508 1 -2017-12-11T06:00:00Z 15.56455 1 -2017-12-12T06:00:00Z 15.56407 1 -2017-12-13T06:00:00Z 15.56361 1 -2017-12-14T06:00:00Z 15.56319 1 -2017-12-15T06:00:00Z 15.56287 1 -2017-12-16T06:00:00Z 15.56257 1 -2017-12-17T06:00:00Z 15.56205 1 -2017-12-18T06:00:00Z 15.56272 1 -2017-12-19T06:00:00Z 15.56272 1 -2017-12-20T06:00:00Z 15.56425 1 -2017-12-21T06:00:00Z 15.5667 1 -2017-12-22T06:00:00Z 15.56678 1 -2017-12-23T06:00:00Z 15.56781 1 -2017-12-24T06:00:00Z 15.56873 1 -2017-12-25T06:00:00Z 15.56877 1 -2017-12-26T06:00:00Z 15.56857 1 -2017-12-27T06:00:00Z 15.56839 1 -2017-12-28T06:00:00Z 15.56797 1 -2017-12-29T06:00:00Z 15.56728 1 -2017-12-30T06:00:00Z 15.56687 1 -2017-12-31T06:00:00Z 15.56691 1 -2018-01-01T06:00:00Z 15.56681 1 -2018-01-02T06:00:00Z 15.56634 1 -2018-01-03T06:00:00Z 15.56589 1 -2018-01-04T06:00:00Z 15.56532 1 -2018-01-05T06:00:00Z 15.56506 1 -2018-01-06T06:00:00Z 15.56479 1 -2018-01-07T06:00:00Z 15.56446 1 -2018-01-08T06:00:00Z 15.56415 1 -2018-01-09T06:00:00Z 15.56462 1 -2018-01-10T06:00:00Z 15.5645 1 -2018-01-11T06:00:00Z 15.56436 1 -2018-01-12T06:00:00Z 15.56582 1 -2018-01-13T06:00:00Z 15.56554 1 -2018-01-14T06:00:00Z 15.56513 1 -2018-01-15T06:00:00Z 15.56455 1 -2018-01-16T06:00:00Z 15.56444 1 -2018-01-17T06:00:00Z 15.56438 1 -2018-01-18T06:00:00Z 15.56382 1 -2018-01-19T06:00:00Z 15.5632 1 -2018-01-20T06:00:00Z 15.56266 1 -2018-01-21T06:00:00Z 15.56237 1 -2018-01-22T06:00:00Z 15.56247 1 -2018-01-23T06:00:00Z 15.56265 1 -2018-01-24T06:00:00Z 15.56244 1 -2018-01-25T06:00:00Z 15.56236 1 -2018-01-26T06:00:00Z 15.56209 1 -2018-01-27T06:00:00Z 15.56187 1 -2018-01-28T06:00:00Z 15.56222 1 -2018-01-29T06:00:00Z 15.56215 1 -2018-01-30T06:00:00Z 15.56204 1 -2018-01-31T06:00:00Z 15.56155 1 -2018-02-01T06:00:00Z 15.56097 1 -2018-02-02T06:00:00Z 15.5608 0 -2018-02-03T06:00:00Z 15.56061 0 -2018-02-04T06:00:00Z 15.56042 0 -2018-02-05T06:00:00Z 15.56023 0 -2018-02-06T06:00:00Z 15.56003 0 -2018-02-07T06:00:00Z 15.55983 0 -2018-02-08T06:00:00Z 15.55964 0 -2018-02-09T06:00:00Z 15.55945 0 -2018-02-10T06:00:00Z 15.55926 0 -2018-02-11T06:00:00Z 15.55909 0 -2018-02-12T06:00:00Z 15.55887 0 -2018-02-13T06:00:00Z 15.55863 0 -2018-02-14T06:00:00Z 15.55837 0 -2018-02-15T06:00:00Z 15.55805 0 -2018-02-16T06:00:00Z 15.55787 0 -2018-02-17T06:00:00Z 15.55853 0 -2018-02-18T06:00:00Z 15.55899 0 -2018-02-19T06:00:00Z 15.55931 0 -2018-02-20T06:00:00Z 15.5592 0 -2018-02-21T06:00:00Z 15.56374 0 -2018-02-22T06:00:00Z 15.5831 0 -2018-02-23T06:00:00Z 15.60131 0 -2018-02-24T06:00:00Z 15.60942 0 -2018-02-25T06:00:00Z 15.62022 0 -2018-02-26T06:00:00Z 15.62911 0 -2018-02-27T06:00:00Z 339.9041 0 -2018-02-28T06:00:00Z 650.8204 0 -2018-03-01T06:00:00Z 650.9202 0 -2018-03-02T06:00:00Z 373.9303 0 -2018-03-03T06:00:00Z 380.3797 0 -2018-03-04T06:00:00Z 652.114 0 -2018-03-05T06:00:00Z 652.0799 0 -2018-03-06T06:00:00Z 651.9802 0 -2018-03-07T06:00:00Z 651.813 0 -2018-03-08T06:00:00Z 651.6462 0 -2018-03-09T06:00:00Z 1016.645 0 -2018-03-10T06:00:00Z 1282.398 0 -2018-03-11T06:00:00Z 1281.759 0 -2018-03-12T05:00:00Z 1281.192 0 -2018-03-13T05:00:00Z 1280.458 0 -2018-03-14T05:00:00Z 1279.708 0 -2018-03-15T05:00:00Z 1278.92 0 -2018-03-16T05:00:00Z 1278.066 0 -2018-03-17T05:00:00Z 1277.271 0 -2018-03-18T05:00:00Z 1276.626 0 -2018-03-19T05:00:00Z 1275.837 0 -2018-03-20T05:00:00Z 929.6672 0 -2018-03-21T05:00:00Z 649.1014 0 -2018-03-22T05:00:00Z 648.904 0 -2018-03-23T05:00:00Z 467.906 0 -2018-03-24T05:00:00Z 333.0367 0 -2018-03-25T05:00:00Z 333.0048 0 -2018-03-26T05:00:00Z 332.977 0 -2018-03-27T05:00:00Z 332.9382 0 -2018-03-28T05:00:00Z 333.0977 0 -2018-03-29T05:00:00Z 333.4517 0 -2018-03-30T05:00:00Z 333.5827 0 -2018-03-31T05:00:00Z 333.5851 0 -2018-04-01T05:00:00Z 333.537 0 -2018-04-02T05:00:00Z 333.5133 0 -2018-04-03T05:00:00Z 333.4506 0 -2018-04-04T05:00:00Z 333.3746 0 -2018-04-05T05:00:00Z 333.3358 0 -2018-04-06T05:00:00Z 333.2436 0 -2018-04-07T05:00:00Z 333.2088 0 -2018-04-08T05:00:00Z 333.202 0 -2018-04-09T05:00:00Z 333.1184 0 -2018-04-10T05:00:00Z 333.0634 0 -2018-04-11T05:00:00Z 124.7185 0 -2018-04-12T05:00:00Z 15.60517 0 -2018-04-13T05:00:00Z 15.60425 0 -2018-04-14T05:00:00Z 15.60479 0 -2018-04-15T05:00:00Z 15.6055 0 -2018-04-16T05:00:00Z 15.6045 0 -2018-04-17T05:00:00Z 15.60387 0 -2018-04-18T05:00:00Z 15.60346 0 -2018-04-19T05:00:00Z 15.60328 0 -2018-04-20T05:00:00Z 15.60322 0 -2018-04-21T05:00:00Z 15.60274 0 -2018-04-22T05:00:00Z 15.60333 0 -2018-04-23T05:00:00Z 15.60438 0 -2018-04-24T05:00:00Z 15.60414 0 -2018-04-25T05:00:00Z 15.60413 0 -2018-04-26T05:00:00Z 15.60413 0 -2018-04-27T05:00:00Z 15.60413 0 -2018-04-28T05:00:00Z 15.60412 0 -2018-04-29T05:00:00Z 15.60396 0 -2018-04-30T05:00:00Z 15.60369 0 -2018-05-01T05:00:00Z 15.60337 0 -2018-05-02T05:00:00Z 15.60304 0 -2018-05-03T05:00:00Z 15.6028 0 -2018-05-04T05:00:00Z 15.60421 0 -2018-05-05T05:00:00Z 15.6063 0 -2018-05-06T05:00:00Z 15.6067 0 -2018-05-07T05:00:00Z 15.6067 0 -2018-05-08T05:00:00Z 15.6067 0 -2018-05-09T05:00:00Z 15.60666 0 -2018-05-10T05:00:00Z 15.60632 0 -2018-05-11T05:00:00Z 15.60585 0 -2018-05-12T05:00:00Z 10 0 -2018-05-13T05:00:00Z 10 0 -2018-05-14T05:00:00Z 10 0 -2018-05-15T05:00:00Z 10 0 -2018-05-16T05:00:00Z 10 0 -2018-05-17T05:00:00Z 10 0 -2018-05-18T05:00:00Z 10 0 -2018-05-19T05:00:00Z 10 0 -2018-05-20T05:00:00Z 10 0 -2018-05-21T05:00:00Z 10 0 -2018-05-22T05:00:00Z 4.1875 0 -2018-05-23T05:00:00Z 1 0 -2018-05-24T05:00:00Z 1 0 -2018-05-25T05:00:00Z 1 0 -2018-05-26T05:00:00Z 1 0 -2018-05-27T05:00:00Z 1 0 -2018-05-28T05:00:00Z 1 0 -2018-05-29T05:00:00Z 1 0 -2018-05-30T05:00:00Z 7.875 0 -2018-05-31T05:00:00Z 16 0 -2018-06-01T05:00:00Z 16 0 -2018-06-02T05:00:00Z 16 0 -2018-06-03T05:00:00Z 16 0 -2018-06-04T05:00:00Z 16 0 -2018-06-05T05:00:00Z 16 0 -2018-06-06T05:00:00Z 16 0 -2018-06-07T05:00:00Z 16 0 -2018-06-08T05:00:00Z 16 0 -2018-06-09T05:00:00Z 16 0 -2018-06-10T05:00:00Z 16 0 -2018-06-11T05:00:00Z 16 0 -2018-06-12T05:00:00Z 16 0 -2018-06-13T05:00:00Z 16 0 -2018-06-14T05:00:00Z 16 0 -2018-06-15T05:00:00Z 16 0 -2018-06-16T05:00:00Z 16 0 -2018-06-17T05:00:00Z 16 0 -2018-06-18T05:00:00Z 16 0 -2018-06-19T05:00:00Z 16 0 -2018-06-20T05:00:00Z 16 0 -2018-06-21T05:00:00Z 16 0 -2018-06-22T05:00:00Z 16 0 -2018-06-23T05:00:00Z 16 0 -2018-06-24T05:00:00Z 16 0 -2018-06-25T05:00:00Z 16 0 -2018-06-26T05:00:00Z 16 0 -2018-06-27T05:00:00Z 16 0 -2018-06-28T05:00:00Z 16 0 -2018-06-29T05:00:00Z 16 0 -2018-06-30T05:00:00Z 16 0 -2018-07-01T05:00:00Z 16 0 -2018-07-02T05:00:00Z 16 0 -2018-07-03T05:00:00Z 16 0 -2018-07-04T05:00:00Z 16 0 -2018-07-05T05:00:00Z 16 0 -2018-07-06T05:00:00Z 16 0 -2018-07-07T05:00:00Z 16 0 -2018-07-08T05:00:00Z 16 0 -2018-07-09T05:00:00Z 16 0 -2018-07-10T05:00:00Z 16 0 -2018-07-11T05:00:00Z 16 0 -2018-07-12T05:00:00Z 16 0 -2018-07-13T05:00:00Z 16 0 -2018-07-14T05:00:00Z 16 0 -2018-07-15T05:00:00Z 16 0 -2018-07-16T05:00:00Z 16 0 -2018-07-17T05:00:00Z 16 0 -2018-07-18T05:00:00Z 16 0 -2018-07-19T05:00:00Z 16 0 -2018-07-20T05:00:00Z 16 0 -2018-07-21T05:00:00Z 16 0 -2018-07-22T05:00:00Z 16 0 -2018-07-23T05:00:00Z 16 0 -2018-07-24T05:00:00Z 16 0 -2018-07-25T05:00:00Z 16 0 -2018-07-26T05:00:00Z 16 0 -2018-07-27T05:00:00Z 16 0 -2018-07-28T05:00:00Z 16 0 -2018-07-29T05:00:00Z 16 0 -2018-07-30T05:00:00Z 16 0 -2018-07-31T05:00:00Z 16 0 -2018-08-01T05:00:00Z 16 0 -2018-08-02T05:00:00Z 16 0 -2018-08-03T05:00:00Z 16 0 -2018-08-04T05:00:00Z 16 0 -2018-08-05T05:00:00Z 16 0 -2018-08-06T05:00:00Z 16 0 -2018-08-07T05:00:00Z 16 0 -2018-08-08T05:00:00Z 16 0 -2018-08-09T05:00:00Z 16 0 -2018-08-10T05:00:00Z 16 0 -2018-08-11T05:00:00Z 16 0 -2018-08-12T05:00:00Z 16 0 -2018-08-13T05:00:00Z 16 0 -2018-08-14T05:00:00Z 16 0 -2018-08-15T05:00:00Z 16 0 -2018-08-16T05:00:00Z 16 0 -2018-08-17T05:00:00Z 16 0 -2018-08-18T05:00:00Z 16 0 -2018-08-19T05:00:00Z 16 0 -2018-08-20T05:00:00Z 16 0 -2018-08-21T05:00:00Z 16 0 -2018-08-22T05:00:00Z 16 0 -2018-08-23T05:00:00Z 16 0 -2018-08-24T05:00:00Z 16 0 -2018-08-25T05:00:00Z 16 0 -2018-08-26T05:00:00Z 16 0 -2018-08-27T05:00:00Z 16 0 -2018-08-28T05:00:00Z 16 0 -2018-08-29T05:00:00Z 16 0 -2018-08-30T05:00:00Z 16 0 -2018-08-31T05:00:00Z 16 0 -2018-09-01T05:00:00Z 16 0 -2018-09-02T05:00:00Z 16 0 -2018-09-03T05:00:00Z 16 0 -2018-09-04T05:00:00Z 16 0 -2018-09-05T05:00:00Z 16 0 -2018-09-06T05:00:00Z 16 0 -2018-09-07T05:00:00Z 16 0 -2018-09-08T05:00:00Z 16 0 -2018-09-09T05:00:00Z 16 0 -2018-09-10T05:00:00Z 16 0 -2018-09-11T05:00:00Z 16 0 -2018-09-12T05:00:00Z 16 0 -2018-09-13T05:00:00Z 16 0 -2018-09-14T05:00:00Z 16 0 -2018-09-15T05:00:00Z 16 0 -2018-09-16T05:00:00Z 16 0 -2018-09-17T05:00:00Z 16 0 -2018-09-18T05:00:00Z 16 0 -2018-09-19T05:00:00Z 16 0 -2018-09-20T05:00:00Z 16 0 -2018-09-21T05:00:00Z 16 0 -2018-09-22T05:00:00Z 16 0 -2018-09-23T05:00:00Z 16 0 -2018-09-24T05:00:00Z 16 0 -2018-09-25T05:00:00Z 16 0 -2018-09-26T05:00:00Z 16 0 -2018-09-27T05:00:00Z 691.8687 0 -2018-09-28T05:00:00Z 2253.265 0 -2018-09-29T05:00:00Z 3175.244 0 -2018-09-30T05:00:00Z 3172.078 0 -2018-10-01T05:00:00Z 3168.099 0 -2018-10-02T05:00:00Z 3164.392 0 -2018-10-03T05:00:00Z 3160.396 0 -2018-10-04T05:00:00Z 3156.067 0 -2018-10-05T05:00:00Z 3152.122 0 -2018-10-06T05:00:00Z 3148.577 0 -2018-10-07T05:00:00Z 3145.154 0 -2018-10-08T05:00:00Z 3143.792 0 -2018-10-09T05:00:00Z 3143.032 0 -2018-10-10T05:00:00Z 3142.938 0 -2018-10-11T05:00:00Z 1482.842 0 -2018-10-12T05:00:00Z 10.7633 0 -2018-10-13T05:00:00Z 10.76519 0 -2018-10-14T05:00:00Z 10.77792 0 -2018-10-15T05:00:00Z 10.79466 0 -2018-10-16T05:00:00Z 10.80249 0 -2018-10-17T05:00:00Z 10.81005 0 -2018-10-18T05:00:00Z 10.81185 0 -2018-10-19T05:00:00Z 10.81311 0 -2018-10-20T05:00:00Z 10.81548 0 -2018-10-21T05:00:00Z 10.82321 0 -2018-10-22T05:00:00Z 10.82525 0 -2018-10-23T05:00:00Z 10.82568 0 -2018-10-24T05:00:00Z 10.8263 0 -2018-10-25T05:00:00Z 868.1308 0 -2018-10-26T05:00:00Z 990.9943 0 -2018-10-27T05:00:00Z 10.83867 0 -2018-10-28T05:00:00Z 10.83963 0 -2018-10-29T05:00:00Z 10.8401 0 -2018-10-30T05:00:00Z 428.006 0 -2018-10-31T05:00:00Z 987.1632 0 -2018-11-01T05:00:00Z 987.3095 0 -2018-11-02T05:00:00Z 448.7878 0 -2018-11-03T05:00:00Z 10.84542 0 -2018-11-04T05:00:00Z 10.84593 0 -2018-11-05T06:00:00Z 10.84645 0 -2018-11-06T06:00:00Z 10.84662 0 -2018-11-07T06:00:00Z 10.84702 0 -2018-11-08T06:00:00Z 10.8486 0 -2018-11-09T06:00:00Z 10.84935 0 -2018-11-10T06:00:00Z 10.84954 0 -2018-11-11T06:00:00Z 10.84934 0 -2018-11-12T06:00:00Z 10.84919 0 -2018-11-13T06:00:00Z 10.84942 0 -2018-11-14T06:00:00Z 10.8492 0 -2018-11-15T06:00:00Z 10.84879 0 -2018-11-16T06:00:00Z 10.84852 0 -2018-11-17T06:00:00Z 923.4422 0 -2018-11-18T06:00:00Z 1954.663 0 -2018-11-19T06:00:00Z 2201 0 -2018-11-20T06:00:00Z 2201 0 -2018-11-21T06:00:00Z 2201 0 -2018-11-22T06:00:00Z 2201 0 -2018-11-23T06:00:00Z 2201 0 -2018-11-24T06:00:00Z 2201 0 -2018-11-25T06:00:00Z 2201 0 -2018-11-26T06:00:00Z 2201 0 -2018-11-27T06:00:00Z 2201 0 -2018-11-28T06:00:00Z 2201 0 -2018-11-29T06:00:00Z 2201 0 -2018-11-30T06:00:00Z 2201 0 -2018-12-01T06:00:00Z 2201 0 -2018-12-02T06:00:00Z 2201 0 -2018-12-03T06:00:00Z 2201 0 -2018-12-04T06:00:00Z 2201 0 -2018-12-05T06:00:00Z 2201 0 -2018-12-06T06:00:00Z 2201 0 -2018-12-07T06:00:00Z 2201 0 -2018-12-08T06:00:00Z 2201 0 -2018-12-09T06:00:00Z 2201 0 -2018-12-10T06:00:00Z 2201 0 -2018-12-11T06:00:00Z 2201 0 -2018-12-12T06:00:00Z 2201 0 -2018-12-13T06:00:00Z 2201 0 -2018-12-14T06:00:00Z 2201 0 -2018-12-15T06:00:00Z 2201 0 -2018-12-16T06:00:00Z 2201 0 -2018-12-17T06:00:00Z 2201 0 -2018-12-18T06:00:00Z 2201 0 -2018-12-19T06:00:00Z 2201 0 -2018-12-20T06:00:00Z 2886.51 0 -2018-12-21T06:00:00Z 3799.749 0 -2018-12-22T06:00:00Z 3793.664 0 -2018-12-23T06:00:00Z 3787.994 0 -2018-12-24T06:00:00Z 3782.18 0 -2018-12-25T06:00:00Z 3775.83 0 -2018-12-26T06:00:00Z 3770.396 0 -2018-12-27T06:00:00Z 2851.01 0 -2018-12-28T06:00:00Z 1902.076 0 -2018-12-29T06:00:00Z 1903.667 0 -2018-12-30T06:00:00Z 1902.654 0 -2018-12-31T06:00:00Z 1901.441 0 -2019-01-01T06:00:00Z 1901.169 0 -2019-01-02T06:00:00Z 1901.199 0 -2019-01-03T06:00:00Z 1900.327 0 -2019-01-04T06:00:00Z 1900.33 0 -2019-01-05T06:00:00Z 1378.575 0 -2019-01-06T06:00:00Z 962.674 0 -2019-01-07T06:00:00Z 962.5347 0 -2019-01-08T06:00:00Z 962.3807 0 -2019-01-09T06:00:00Z 962.2154 0 -2019-01-10T06:00:00Z 961.9803 0 -2019-01-11T06:00:00Z 961.7458 0 -2019-01-12T06:00:00Z 961.5217 0 -2019-01-13T06:00:00Z 961.6577 0 -2019-01-14T06:00:00Z 961.738 0 -2019-01-15T06:00:00Z 961.5814 0 -2019-01-16T06:00:00Z 1498.59 0 -2019-01-17T06:00:00Z 1897.882 0 -2019-01-18T06:00:00Z 1896.814 0 -2019-01-19T06:00:00Z 1895.597 0 -2019-01-20T06:00:00Z 1894.52 0 -2019-01-21T06:00:00Z 1893.186 0 -2019-01-22T06:00:00Z 1891.592 0 -2019-01-23T06:00:00Z 1126.164 0 -2019-01-24T06:00:00Z 328.3099 0 -2019-01-25T06:00:00Z 328.2792 0 -2019-01-26T06:00:00Z 328.2346 0 -2019-01-27T06:00:00Z 328.19 0 -2019-01-28T06:00:00Z 328.1433 0 -2019-01-29T06:00:00Z 328.094 0 -2019-01-30T06:00:00Z 328.0551 0 -2019-01-31T06:00:00Z 327.9973 0 -2019-02-01T06:00:00Z 189.8128 0 -2019-02-02T06:00:00Z 96.79125 0 -2019-02-03T06:00:00Z 96.79124 0 -2019-02-04T06:00:00Z 96.79125 0 -2019-02-05T06:00:00Z 96.79162 0 -2019-02-06T06:00:00Z 96.79253 0 -2019-02-07T06:00:00Z 96.79517 0 -2019-02-08T06:00:00Z 96.8012 0 -2019-02-09T06:00:00Z 96.80222 0 -2019-02-10T06:00:00Z 96.80185 0 -2019-02-11T06:00:00Z 96.80133 0 -2019-02-12T06:00:00Z 96.8022 0 -2019-02-13T06:00:00Z 96.80222 0 -2019-02-14T06:00:00Z 228.4349 0 -2019-02-15T06:00:00Z 328.1191 0 -2019-02-16T06:00:00Z 328.1153 0 -2019-02-17T06:00:00Z 328.0937 0 -2019-02-18T06:00:00Z 328.065 0 -2019-02-19T06:00:00Z 328.0271 0 -2019-02-20T06:00:00Z 328.0003 0 -2019-02-21T06:00:00Z 328.024 0 -2019-02-22T06:00:00Z 328.0527 0 -2019-02-23T06:00:00Z 328.0767 0 -2019-02-24T06:00:00Z 328.0767 0 -2019-02-25T06:00:00Z 328.0768 0 -2019-02-26T06:00:00Z 531.6678 0 -2019-02-27T06:00:00Z 643.2107 0 -2019-02-28T06:00:00Z 643.088 0 -2019-03-01T06:00:00Z 444.7665 0 -2019-03-02T06:00:00Z 96.78426 0 -2019-03-03T06:00:00Z 96.78379 0 -2019-03-04T06:00:00Z 96.78445 0 -2019-03-05T06:00:00Z 96.7822 0 -2019-03-06T06:00:00Z 67.72804 0 -2019-03-07T06:00:00Z 41 0 -2019-03-08T06:00:00Z 41 0 -2019-03-09T06:00:00Z 41 0 -2019-03-10T06:00:00Z 41 0 -2019-03-11T05:00:00Z 41 0 -2019-03-12T05:00:00Z 232.3058 0 -2019-03-13T05:00:00Z 352.3813 0 -2019-03-14T05:00:00Z 352.8998 0 -2019-03-15T05:00:00Z 810.4133 0 -2019-03-16T05:00:00Z 1181 0 -2019-03-17T05:00:00Z 1181 0 -2019-03-18T05:00:00Z 1181 0 -2019-03-19T05:00:00Z 1181 0 -2019-03-20T05:00:00Z 1181 0 -2019-03-21T05:00:00Z 1181 0 -2019-03-22T05:00:00Z 1181 0 -2019-03-23T05:00:00Z 1181 0 -2019-03-24T05:00:00Z 1181 0 -2019-03-25T05:00:00Z 1181 0 -2019-03-26T05:00:00Z 1181 0 -2019-03-27T05:00:00Z 884.6508 0 -2019-03-28T05:00:00Z 667.1979 0 -2019-03-29T05:00:00Z 267.3404 0 -2019-03-30T05:00:00Z 15.59969 0 -2019-03-31T05:00:00Z 15.60032 0 -2019-04-01T05:00:00Z 15.59965 0 -2019-04-02T05:00:00Z 15.59934 0 -2019-04-03T05:00:00Z 15.59899 0 -2019-04-04T05:00:00Z 15.59886 0 -2019-04-05T05:00:00Z 15.59895 0 -2019-04-06T05:00:00Z 15.59899 0 -2019-04-07T05:00:00Z 15.5991 0 -2019-04-08T05:00:00Z 15.59962 0 -2019-04-09T05:00:00Z 15.59984 0 -2019-04-10T05:00:00Z 15.59977 0 -2019-04-11T05:00:00Z 15.59934 0 -2019-04-12T05:00:00Z 15.59889 0 -2019-04-13T05:00:00Z 15.59879 0 -2019-04-14T05:00:00Z 15.60215 0 -2019-04-15T05:00:00Z 15.61283 0 -2019-04-16T05:00:00Z 359.0665 0 -2019-04-17T05:00:00Z 649.6524 0 -2019-04-18T05:00:00Z 649.6158 0 -2019-04-19T05:00:00Z 1025.083 0 -2019-04-20T05:00:00Z 1281.883 0 -2019-04-21T05:00:00Z 1281.473 0 -2019-04-22T05:00:00Z 1280.777 0 -2019-04-23T05:00:00Z 1280.09 0 -2019-04-24T05:00:00Z 1279.535 0 -2019-04-25T05:00:00Z 1279.49 0 -2019-04-26T05:00:00Z 1279.071 0 -2019-04-27T05:00:00Z 1278.343 0 -2019-04-28T05:00:00Z 1277.628 0 -2019-04-29T05:00:00Z 1276.939 0 -2019-04-30T05:00:00Z 1276.155 0 -2019-05-01T05:00:00Z 1275.682 0 -2019-05-02T05:00:00Z 1277.635 0 -2019-05-03T05:00:00Z 1288.549 0 -2019-05-04T05:00:00Z 1292.751 0 -2019-05-05T05:00:00Z 1293.06 0 -2019-05-06T05:00:00Z 1292.817 0 - - \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml deleted file mode 100755 index 4e8b2f0..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/SWT_AMES.Flow.Inst.1Hour.0.Ccp-Rev.xml +++ /dev/null @@ -1,29880 +0,0 @@ -cpc-ora-db50:S0CWMSZ22019-05-06T16:00:51ZPT######SPT1.088S1900-01-01T00:00:00Z2019-05-06T16:00:51ZXMLSWTAMES.Flow.Inst.1Hour.0.Ccp-RevENNATIVE113100831008SWTAMES.Flow.Inst.1Hour.0.Ccp-RevAE011130.Flow.Inst.1Hour.0.Ccp-RevAMCO2.Flow.Inst.1Hour.0.Ccp-Rev - -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -106.4 0 -104 0 -104 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 - -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -106.4 0 -106.4 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -106.4 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.8439 0 -108.6197 0 -108.3959 0 -108.1726 0 -107.9496 0 -107.727 0 -107.5049 0 -107.2831 0 -107.0617 0 -106.8408 0 -106.6202 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -106.4 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -113.8 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -111.3 0 -113.8 0 -111.3 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -109.3764 0 -111.3 0 -110.7628 0 -108.6197 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -111.3 0 -108.9 0 -106.4 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -113.8 0 -116.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -113.8 0 -116.3 0 -116.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 - -113.8 0 -116.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -113.8 0 -116.3 0 -116.3 0 -113.8 0 -113.8 0 -116.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 - -113.8 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -116.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -116.3 0 -111.3 0 -111.3 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -108.9 0 -111.3 0 -108.9 0 -111.3 0 -111.3 0 -113.8 0 -108.9 0 -111.3 0 -111.3 0 -108.9 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -116.3 0 -118.7 0 -116.3 0 -118.7 0 -118.7 0 -121.2 0 -118.7 0 -121.2 0 -128.5 0 -134.5 0 -149.3 0 -149.3 0 -152.3 0 -158.3 0 -161.3 0 -164.2 0 -149.3 0 -143.4 0 -149.3 0 -167.2 0 -155.3 0 -182.1 0 -147.6127 0 -152.5727 0 -157.5909 0 -162.5655 0 -167.5273 0 -172.5455 0 -177.4637 0 -182.4818 0 -187.42 0 -192.4182 0 -197.4218 0 -203.7455 0 -211.4582 0 -219.1691 0 -232.3 0 -232.3 0 -227.7 0 -236.9 0 -236.9 0 -241.5 0 -241.5 0 -246.2 0 -264.6 0 -292.4 0 -326.1 0 -368.4 0 -404.7 0 -428.9001 0 -412.4792 0 -419.5501 0 -426.6126 0 -433.6501 0 -440.7459 0 -447.7501 0 -454.7792 0 -461.8501 0 -468.9126 0 -475.9501 0 -483.0459 0 -490.0501 0 -495.3001 0 -489.3001 0 -489.3001 0 -483.3001 0 -483.3001 0 -465.1001 0 -465.1001 0 -459.1001 0 -441.0001 0 -428.9001 0 -441.0001 0 -422.8001 0 -428.9001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -416.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -416.8001 0 -410.7 0 -410.7 0 -398.7 0 -404.7 0 -404.7 0 -398.7 0 -404.7 0 -404.7 0 -398.7 0 -404.7 0 -404.7 0 -416.8001 0 -416.8001 0 -422.8001 0 -422.8001 0 -428.9001 0 -441.0001 0 -441.0001 0 -447.0001 0 -465.1001 0 -483.3001 0 -501.4001 0 -495.3001 0 -519.5001 0 -537.6001 0 -555.8001 0 -573.9001 0 -579.9001 0 -579.9001 0 -598.1001 0 -604.1001 0 -598.1001 0 -604.1001 0 -610.2001 0 -592.0001 0 -604.1001 0 -598.1001 0 -592.0001 0 -586.0001 0 -586.0001 0 -573.9001 0 -567.9001 0 -561.8001 0 -555.8001 0 -549.7001 0 -531.6001 0 -519.5001 0 -501.4001 0 -501.4001 0 -477.2001 0 -483.3001 0 -465.1001 0 -453.0001 0 -453.0001 0 -447.0001 0 -434.9001 0 -428.9001 0 -422.8001 0 -410.7 0 -404.7 0 -386.6 0 -398.7 0 -398.7 0 -392.6 0 -380.5 0 -368.4 0 -368.4 0 -368.4 0 -356.3 0 -356.3 0 -344.3 0 -332.2 0 -338.2 0 -320.1 0 -320.1 0 -315.5 0 -315.5 0 -301.6 0 -301.6 0 -297 0 -297 0 -292.4 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -283.1 0 -283.1 0 -283.1 0 -278.5 0 -278.5 0 -278.5 0 -273.9 0 -264.6 0 -264.6 0 -260 0 -232.3 0 -197 0 -209.2 0 -199.9 0 -197 0 -232.3 0 -246.2 0 -246.2 0 -241.5 0 -232.3 0 -199.9 0 -218.4 0 -194 0 -199.9 0 -232.3 0 -227.7 0 -227.7 0 -227.7 0 -213.8 0 -227.7 0 -227.7 0 -199.9 0 -182.1 0 -164.2 0 -182.1 0 -176.1 0 -176.1 0 -167.2 0 -185.1 0 -204.6 0 -204.6 0 -213.8 0 -209.2 0 -204.6 0 -209.2 0 -199.9 0 -204.6 0 -199.9 0 -204.6 0 -199.9 0 -199.9 0 -199.9 0 -209.2 0 -204.6 0 -209.2 0 -204.6 0 -204.6 0 -199.9 0 -199.9 0 -194 0 -191 0 -191 0 -191 0 -191 0 -188 0 -191 0 -191 0 -191 0 -191 0 -191 0 -194 0 -194 0 -194 0 -194 0 -194 0 -194 0 -197 0 -194 0 -194 0 -194 0 -176.1 0 -173.2 0 -188 0 -185.1 0 -185.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -185.1 0 -182.1 0 -185.1 0 -182.1 0 -185.1 0 -182.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -170.2 0 -185.1 0 -182.1 0 -179.1 0 -179.1 0 -176.1 0 -173.2 0 -176.1 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -173.2 0 -176.1 0 -179.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -179.1 0 -176.1 0 -176.1 0 -167.2 0 -152.3 0 -143.4 0 -140.4 0 -167.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -164.2 0 -167.2 0 -149.3 0 -155.3 0 -161.3 0 -146.4 0 -158.3 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -170.2 0 -170.2 0 -170.2 0 -164.2 0 -158.3 0 -164.2 0 -143.4 0 -161.3 0 -164.2 0 -161.3 0 -164.2 0 -161.3 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -152.3 0 -161.3 0 -161.3 0 -161.3 0 -164.2 0 -161.3 0 -140.4 0 -161.3 0 -158.3 0 -140.4 0 -143.4 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -161.3 0 -149.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -134.5 0 -116.3 0 -121.2 0 -121.2 0 -121.2 0 -131.5 0 -137.4 0 -128.5 0 -158.3 0 -155.3 0 -158.3 0 -158.3 0 -155.3 0 -152.3 0 -155.3 0 -164.2 0 -164.2 0 -170.2 0 -173.2 0 -176.1 0 -179.1 0 -158.3 0 -194 0 -204.6 0 -204.6 0 -209.2 0 -209.2 0 -199.9 0 -213.8 0 -227.7 0 -250.8 0 -273.9 0 -292.4 0 -301.6 0 -306.2 0 -306.2 0 -310.8 0 -301.6 0 -297 0 -297 0 -292.4 0 -292.4 0 -292.4 0 -287.7 0 -292.4 0 -297 0 -306.2 0 -320.1 0 -350.3 0 -374.5 0 -398.7 0 -422.8001 0 -441.0001 0 -459.1001 0 -465.1001 0 -483.3001 0 -489.3001 0 -495.3001 0 -501.4001 0 -507.4001 0 -501.4001 0 -507.4001 0 -507.4001 0 -507.4001 0 -507.4001 0 -501.4001 0 -495.3001 0 -495.3001 0 -489.3001 0 -489.3001 0 -477.2001 0 -459.1001 0 -477.2001 0 -453.0001 0 -483.3001 0 -453.0001 0 -501.4001 0 -489.3001 0 -507.4001 0 -495.3001 0 -501.4001 0 -495.3001 0 -495.3001 0 -489.3001 0 -489.3001 0 -495.3001 0 -489.3001 0 -483.3001 0 -483.3001 0 -477.2001 0 -489.3001 0 -465.1001 0 -459.1001 0 -459.1001 0 -447.0001 0 -447.0001 0 -434.9001 0 -422.8001 0 -422.8001 0 -416.8001 0 -404.7 0 -404.7 0 -404.7 0 -404.7 0 -398.7 0 -404.7 0 -404.7 0 -404.7 0 -398.7 0 -398.7 0 -392.6 0 -398.7 0 -398.7 0 -398.7 0 -392.6 0 -398.7 0 -404.7 0 -398.7 0 -398.7 0 -404.7 0 -404.7 0 -410.7 0 -410.7 0 -410.7 0 -416.8001 0 -398.7 0 -404.7 0 -410.7 0 -404.7 0 -404.7 0 -404.7 0 -404.7 0 -410.7 0 -404.7 0 -410.7 0 -404.7 0 -410.7 0 -416.8001 0 -416.8001 0 -416.8001 0 -398.7 0 -392.6 0 -398.7 0 -380.5 0 -362.4 0 -338.2 0 -338.2 0 -386.6 0 -386.6 0 -374.5 0 -368.4 0 -362.4 0 -362.4 0 -362.4 0 -362.4 0 -362.4 0 -356.3 0 -350.3 0 -350.3 0 -356.3 0 -344.3 0 -344.3 0 -344.3 0 -338.2 0 -332.2 0 -315.5 0 -310.8 0 -278.5 0 -260 0 -264.6 0 -273.9 0 -255.4 0 -287.7 0 -320.1 0 -320.1 0 -315.5 0 -315.5 0 -301.6 0 -320.1 0 -310.8 0 -269.3 0 -273.9 0 -264.6 0 -250.8 0 -269.3 0 -264.6 0 -241.5 0 -250.8 0 -246.2 0 -250.8 0 -260 0 -241.5 0 -250.8 0 -260 0 -246.2 0 -264.6 0 -260 0 -278.5 0 -292.4 0 -297 0 -287.7 0 -273.9 0 -292.4 0 -287.7 0 -287.7 0 -292.4 0 -292.4 0 -292.4 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -283.1 0 -278.5 0 -278.5 0 -278.5 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -269.3 0 -273.9 0 -278.5 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -264.6 0 -269.3 0 -273.9 0 -269.3 0 -218.4 0 -209.2 0 -209.2 0 -213.8 0 -260 0 -227.7 0 -218.4 0 -223.1 0 -227.7 0 -236.9 0 -269.3 0 -269.3 0 -260 0 -204.6 0 -264.6 0 -218.4 0 -241.5 0 -260 0 -236.9 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -260 0 -264.6 0 -255.4 0 -255.4 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -255.4 0 -255.4 0 -255.4 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -232.3 0 -250.8 0 -246.2 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -246.2 0 -236.9 0 -241.5 0 -246.2 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -246.2 0 -246.2 0 -246.2 0 -246.2 0 -250.8 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -232.3 0 -236.9 0 -232.3 0 -232.3 0 -232.3 0 -227.7 0 -232.3 0 -232.3 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -223.1 0 -204.6 0 -199.9 0 -232.3 0 -236.9 0 -236.9 0 -204.6 0 -227.7 0 -236.9 0 -236.9 0 -213.8 0 -260 0 -246.2 0 -246.2 0 -269.3 0 -273.9 0 -320.1 0 -350.3 0 -434.9001 0 -495.3001 0 -616.2001 0 -720.7001 0 -772.9001 0 -825.2001 0 -842.6001 0 -886.1001 0 -920.9001 0 -964.5001 0 -999.3001 0 -1052 0 -1107 0 -1084.4 0 -1168 0 -1192 0 -1192 0 -1168 0 -1168 0 -1132 0 -1119 0 -1069 0 -1052 0 -1034 0 -999.3001 0 -999.3001 0 -964.5001 0 -929.6001 0 -886.1001 0 -851.3001 0 -807.7001 0 -790.3001 0 -746.8001 0 -720.7001 0 -668.4001 0 -659.7001 0 -642.3001 0 -616.2001 0 -610.2001 0 -598.1001 0 -573.9001 0 -598.1001 0 -555.8001 0 -579.9001 0 -567.9001 0 -573.9001 0 -561.8001 0 -563.8334 0 -553.2883 0 -543.3413 0 -533.3648 0 -523.4471 0 -513.5001 0 -501.4001 0 -505.4001 0 -495.3001 0 -501.4001 0 -495.3001 0 -495.3001 0 -489.3001 0 -489.3001 0 -483.3001 0 -477.2001 0 -471.2001 0 -465.1001 0 -471.2001 0 -471.2001 0 -468.7601 0 -459.1001 0 -464.3259 0 -461.2291 0 -458.1162 0 -454.9678 0 -451.8388 0 -448.742 0 -445.6452 0 -442.5484 0 -428.9001 0 -434.9001 0 -422.8001 0 -416.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -416.8001 0 -422.8001 0 -411.92 0 -416.8001 0 -416.1223 0 -413.4112 0 -410.7 0 -404.45 0 -403.45 0 -402.45 0 -401.45 0 -400.45 0 -399.45 0 -398.7 0 -398.7 0 -398.7 0 -398.7 0 -392.6 0 -392.6 0 -398.7 0 -404.7 0 -398.7 0 -392.6 0 -392.6 0 -392.6 0 -398.7 0 -398.7 0 -398.7 0 -398.7 0 -404.7 0 -410.7 0 -416.8001 0 -410.7 0 -416.8001 0 -416.8001 0 -410.7 0 -422.8001 0 -422.8001 0 -422.8001 0 -410.7 0 -416.8001 0 -416.8001 0 -416.8001 0 -410.7 0 -416.8001 0 -416.8001 0 -416.8001 0 -416.8001 0 -422.8001 0 -423.119 0 -424.3948 0 -425.6706 0 -426.9465 0 -428.2223 0 -429.4883 0 -430.7432 0 -431.9981 0 -433.253 0 -434.5079 0 -435.7772 0 -437.053 0 -438.3288 0 -439.6046 0 -440.8805 0 -442.1373 0 -443.3922 0 -444.6471 0 -445.902 0 -447.1569 0 -448.4118 0 -449.6667 0 -450.9216 0 -452.1765 0 -453.4386 0 -454.7144 0 -455.9903 0 -457.2661 0 -458.5419 0 -459.8059 0 -461.0608 0 -462.3157 0 -463.5706 0 -464.8255 0 -466.0968 0 -467.3726 0 -468.6484 0 -469.9242 0 -471.2001 0 -471.2001 0 -459.1001 0 -465.1001 0 -465.1001 0 -459.1001 0 -447.0001 0 -453.0001 0 -447.0001 0 -447.0001 0 -441.0001 0 -447.0001 0 -441.0001 0 -434.9001 0 -441.0001 0 -441.0001 0 -441.0001 0 -441.0001 0 -447.0001 0 -447.0001 0 -447.0001 0 -447.0001 0 -447.0001 0 -447.0001 0 -434.9001 0 -434.9001 0 -434.9001 0 -422.8001 0 -434.9001 0 -428.9001 0 -434.9001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -422.8001 0 -428.9001 0 -428.9001 0 -428.9001 0 -428.9001 0 -416.8001 0 -416.8001 0 -416.8001 0 -416.8001 0 -404.7 0 -392.6 0 -326.1 0 -332.2 0 -310.8 0 -368.4 0 -392.6 0 -380.5 0 -386.6 0 -380.5 0 -380.5 0 -380.5 0 -374.5 0 -368.4 0 -374.5 0 -374.5 0 -374.5 0 -368.4 0 -368.4 0 -368.4 0 -368.4 0 -362.4 0 -362.4 0 -362.4 0 -362.4 0 -356.3 0 -356.3 0 -350.3 0 -362.4 0 -362.4 0 -315.5 0 -362.4 0 -356.3 0 -356.3 0 -362.4 0 -362.4 0 -368.4 0 -368.4 0 -362.4 0 -368.4 0 -368.4 0 -368.4 0 -362.4 0 -368.4 0 -368.4 0 -368.4 0 -374.5 0 -374.5 0 -374.5 0 -374.5 0 -368.4 0 -368.4 0 -374.5 0 -374.5 0 -380.5 0 -374.5 0 -380.5 0 -380.5 0 -380.5 0 -380.5 0 -380.5 0 -386.6 0 -386.6 0 -398.7 0 -392.6 0 -398.7 0 -398.7 0 -410.7 0 -410.7 0 -410.7 0 -416.8001 0 -410.7 0 -416.8001 0 -416.8001 0 -416.8001 0 -410.7 0 -410.7 0 -410.7 0 -404.7 0 -416.8001 0 -410.7 0 -404.7 0 -410.7 0 -410.7 0 -410.7 0 -410.7 0 -410.7 0 -410.7 0 -416.8001 0 -422.8001 0 -416.8001 0 -428.9001 0 -428.9001 0 -428.9001 0 -422.8001 0 -428.9001 0 -428.9001 0 -428.9001 0 -422.8001 0 -410.7 0 -422.8001 0 -416.8001 0 -416.8001 0 -422.8001 0 -416.8001 0 -422.8001 0 -416.8001 0 -422.8001 0 -428.9001 0 -428.9001 0 -428.9001 0 -428.9001 0 -428.9001 0 -428.9001 0 -428.9001 0 -422.8001 0 -422.8001 0 -416.8001 0 -416.8001 0 -410.7 0 -404.7 0 -392.6 0 -386.6 0 -392.6 0 -386.6 0 -380.5 0 -380.5 0 -374.5 0 -374.5 0 -374.5 0 -380.5 0 -386.6 0 -380.5 0 -380.5 0 -380.5 0 -380.5 0 -374.5 0 -362.4 0 -362.4 0 -356.3 0 -356.3 0 -356.3 0 -350.3 0 -350.3 0 -356.3 0 -350.3 0 -350.3 0 -350.3 0 -344.3 0 -344.3 0 -338.2 0 -338.2 0 -350.3 0 -344.3 0 -338.2 0 -344.3 0 -344.3 0 -344.3 0 -344.3 0 -338.2 0 -338.2 0 -338.2 0 -332.2 0 -338.2 0 -344.3 0 -344.3 0 -338.2 0 -344.3 0 -332.2 0 -332.2 0 -326.1 0 -326.1 0 -320.1 0 -320.1 0 -315.5 0 -320.1 0 -315.5 0 -315.5 0 -315.5 0 -310.8 0 -306.2 0 -310.8 0 -315.5 0 -310.8 0 -310.8 0 -306.2 0 -310.8 0 -310.8 0 -315.5 0 -315.5 0 -315.5 0 -315.5 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -306.2 0 -306.2 0 -306.2 0 -310.8 0 -310.8 0 -310.8 0 -306.2 0 -310.8 0 -306.2 0 -306.2 0 -306.2 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -306.2 0 -310.8 0 -310.8 0 -301.6 0 -301.6 0 -301.6 0 -246.2 0 -301.6 0 -301.6 0 -301.6 0 -255.4 0 -292.4 0 -297 0 -297 0 -297 0 -301.6 0 -297 0 -297 0 -297 0 -297 0 -297 0 -292.4 0 -292.4 0 -297 0 -292.4 0 -292.4 0 -292.4 0 -297 0 -292.4 0 -292.4 0 -292.4 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -283.1 0 -283.1 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -283.1 0 -283.1 0 -283.1 0 -283.1 0 -283.1 0 -278.5 0 -283.1 0 -278.5 0 -283.1 0 -283.1 0 -283.1 0 -283.1 0 -278.5 0 -283.1 0 -283.1 0 -278.5 0 -278.5 0 -273.9 0 -278.5 0 -273.9 0 -273.9 0 -273.9 0 -278.5 0 -278.5 0 -278.5 0 -273.9 0 -278.5 0 -278.5 0 -278.5 0 -278.5 0 -269.3 0 -278.5 0 -278.5 0 -273.9 0 -269.3 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -269.3 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -264.6 0 -264.6 0 -260 0 -255.4 0 -255.4 0 -264.6 0 -255.4 0 -232.3 0 -250.8 0 -255.4 0 -255.4 0 -260 0 -260 0 -260 0 -260 0 -255.4 0 -255.4 0 -255.4 0 -250.8 0 -255.4 0 -255.4 0 -255.4 0 -264.6 0 -255.4 0 -255.4 0 -255.4 0 -250.8 0 -255.4 0 -255.4 0 -250.8 0 -250.8 0 -246.2 0 -250.8 0 -246.2 0 -246.2 0 -250.8 0 -250.8 0 -250.8 0 -260 0 -260 0 -260 0 -260 0 -260 0 -255.4 0 -255.4 0 -255.4 0 -255.4 0 -255.4 0 -250.8 0 -250.8 0 -246.2 0 -246.2 0 -246.2 0 -246.2 0 -227.7 0 -246.2 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -246.2 0 -246.2 0 -246.2 0 -246.2 0 -246.2 0 -241.5 0 -246.2 0 -246.2 0 -241.5 0 -241.5 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -232.3 0 -236.9 0 -241.5 0 -241.5 0 -236.9 0 -236.9 0 -236.9 0 -236.9 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -246.2 0 -241.5 0 -236.9 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -246.2 0 -246.2 0 -236.9 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -232.3 0 -241.5 0 -236.9 0 -232.3 0 -204.6 0 -176.1 0 -232.3 0 -223.1 0 -236.9 0 -241.5 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -232.3 0 -241.5 0 -236.9 0 -241.5 0 -241.5 0 -246.2 0 -241.5 0 -241.5 0 -236.9 0 -241.5 0 -246.2 0 -227.7 0 -197 0 -236.9 0 -197 0 -185.1 0 -199.9 0 -185.1 0 -241.5 0 -246.2 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -241.5 0 -246.2 0 -241.5 0 -236.9 0 -246.2 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -236.9 0 -236.9 0 -241.5 0 -241.5 0 -246.2 0 -246.2 0 -246.2 0 -250.8 0 -241.5 0 -250.8 0 -250.8 0 -246.2 0 -236.9 0 -236.9 0 -241.5 0 -227.7 0 -227.7 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -232.3 0 -232.3 0 -236.9 0 -232.3 0 -241.5 0 -246.2 0 -246.2 0 -255.4 0 -255.4 0 -241.5 0 -246.2 0 -246.2 0 -250.8 0 -250.8 0 -255.4 0 -232.3 0 -241.5 0 -232.3 0 -236.9 0 -241.5 0 -241.5 0 -241.5 0 -241.5 0 -246.2 0 -241.5 0 -241.5 0 -236.9 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -236.9 0 -236.9 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -236.9 0 -241.5 0 -241.5 0 -241.5 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -227.7 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -227.7 0 -227.7 0 -232.3 0 -232.3 0 -232.3 0 -227.7 0 -232.3 0 -223.1 0 -188 0 -179.1 0 -204.6 0 -188 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -223.1 0 -223.1 0 -223.1 0 -223.1 0 -223.1 0 -218.4 0 -223.1 0 -223.1 0 -223.1 0 -223.1 0 -227.7 0 -223.1 0 -227.7 0 -227.7 0 -223.1 0 -213.8 0 -218.4 0 -188 0 -176.1 0 -185.1 0 -223.1 0 -223.1 0 -223.1 0 -223.1 0 -218.4 0 -213.8 0 -213.8 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -191 0 -218.4 0 -218.4 0 -218.4 0 -213.8 0 -218.4 0 -197 0 -218.4 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -209.2 0 -209.2 0 -209.2 0 -209.2 0 -213.8 0 -213.8 0 -213.8 0 -213.8 0 -204.6 0 -204.6 0 -173.2 0 -204.6 0 -204.6 0 -194 0 -204.6 0 -197 0 -204.6 0 -209.2 0 -204.6 0 -204.6 0 -209.2 0 -209.2 0 -223.1 0 -227.7 0 -227.7 0 -227.7 0 -223.1 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -227.7 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -236.9 0 -236.9 0 -232.3 0 -227.7 0 -227.7 0 -232.3 0 -227.7 0 -232.3 0 -236.9 0 -232.3 0 -232.3 0 -223.1 0 -223.1 0 -223.1 0 -218.4 0 -227.7 0 -227.7 0 -223.1 0 -218.4 0 -223.1 0 -227.7 0 -223.1 0 -223.1 0 -227.7 0 -232.3 0 -241.5 0 -236.9 0 -236.9 0 -236.9 0 -236.9 0 -241.5 0 -236.9 0 -236.9 0 -246.2 0 -246.2 0 -227.7 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -236.9 0 -241.5 0 -232.3 0 -232.3 0 -236.9 0 -241.5 0 -241.5 0 -246.2 0 -250.8 0 -250.8 0 -260 0 -264.6 0 -264.6 0 -273.9 0 -273.9 0 -269.3 0 -273.9 0 -273.9 0 -269.3 0 -260 0 -264.6 0 -204.6 0 -236.9 0 -260 0 -260 0 -250.8 0 -255.4 0 -250.8 0 -255.4 0 -250.8 0 -250.8 0 -241.5 0 -246.2 0 -246.2 0 -241.5 0 -241.5 0 -236.9 0 -236.9 0 -232.3 0 -236.9 0 -241.5 0 -250.8 0 -250.8 0 -236.9 0 -236.9 0 -232.3 0 -241.5 0 -232.3 0 -232.3 0 -227.7 0 -227.7 0 -232.3 0 -232.3 0 -223.1 0 -227.7 0 -232.3 0 -227.7 0 -223.1 0 -227.7 0 -223.1 0 -223.1 0 -227.7 0 -227.7 0 -218.4 0 -227.7 0 -218.4 0 -227.7 0 -223.1 0 -227.7 0 -223.1 0 -213.8 0 -223.1 0 -223.1 0 -227.7 0 -223.1 0 -223.1 0 -218.4 0 -218.4 0 -223.1 0 -218.4 0 -223.1 0 -223.1 0 -223.1 0 -223.1 0 -223.1 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -213.8 0 -213.8 0 -209.2 0 -199.9 0 -179.1 0 -199.9 0 -197 0 -179.1 0 -197 0 -188 0 -204.6 0 -204.6 0 -209.2 0 -209.2 0 -213.8 0 -213.8 0 -218.4 0 -218.4 0 -218.4 0 -213.8 0 -209.2 0 -209.2 0 -204.6 0 -204.6 0 -209.2 0 -204.6 0 -204.6 0 -199.9 0 -209.2 0 -188 0 -204.6 0 -197 0 -199.9 0 -204.6 0 -199.9 0 -204.6 0 -209.2 0 -209.2 0 -204.6 0 -209.2 0 -209.2 0 -209.2 0 -213.8 0 -209.2 0 -209.2 0 -213.8 0 -209.2 0 -209.2 0 -204.6 0 -199.9 0 -199.9 0 -199.9 0 -204.6 0 -199.9 0 -197 0 -204.6 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -197 0 -199.9 0 -197 0 -197 0 -199.9 0 -199.9 0 -199.9 0 -197 0 -197 0 -197 0 -194 0 -194 0 -194 0 -197 0 -197 0 -197 0 -197 0 -199.9 0 -197 0 -197 0 -197 0 -197 0 -197 0 -197 0 -199.9 0 -197 0 -191 0 -191 0 -191 0 -194 0 -191 0 -188 0 -194 0 -194 0 -191 0 -191 0 -191 0 -191 0 -191 0 -188 0 -191 0 -191 0 -191 0 -191 0 -194 0 -194 0 -194 0 -197 0 -197 0 -197 0 -191 0 -179.1 0 -191 0 -188 0 -167.2 0 -185.1 0 -173.2 0 -152.3 0 -152.3 0 -191 0 -191 0 -191 0 -191 0 -191 0 -191 0 -188 0 -188 0 -188 0 -185.1 0 -188 0 -188 0 -188 0 -188 0 -188 0 -191 0 -191 0 -191 0 -194 0 -194 0 -194 0 -197 0 -197 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -199.9 0 -204.6 0 -204.6 0 -199.9 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -204.6 0 -199.9 0 -199.9 0 -197 0 -197 0 -197 0 -194 0 -197 0 -194 0 -194 0 -194 0 -194 0 -194 0 -194 0 -194 0 -191 0 -194 0 -191 0 -191 0 -191 0 -188 0 -188 0 -191 0 -188 0 -191 0 -182.1 0 -188 0 -188 0 -188 0 -188 0 -188 0 -188 0 -188 0 -188 0 -188 0 -188 0 -188 0 -185.1 0 -182.1 0 -182.1 0 -185.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -185.1 0 -182.1 0 -179.1 0 -158.3 0 -164.2 0 -179.1 0 -182.1 0 -164.2 0 -179.1 0 -185.1 0 -185.1 0 -188 0 -185.1 0 -185.1 0 -182.1 0 -182.1 0 -182.1 0 -179.1 0 -182.1 0 -167.2 0 -143.4 0 -143.4 0 -155.3 0 -161.3 0 -152.3 0 -131.5 0 -143.4 0 -140.4 0 -140.4 0 -143.4 0 -146.4 0 -161.3 0 -140.4 0 -152.3 0 -152.3 0 -152.3 0 -143.4 0 -149.3 0 -152.3 0 -158.3 0 -161.3 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -182.1 0 -182.1 0 -185.1 0 -188 0 -185.1 0 -185.1 0 -182.1 0 -182.1 0 -179.1 0 -179.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -179.1 0 -179.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -179.1 0 -179.1 0 -176.1 0 -179.1 0 -179.1 0 -179.1 0 -179.1 0 -179.1 0 -179.1 0 -179.1 0 -176.1 0 -176.1 0 -176.1 0 -179.1 0 -176.1 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -170.2 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -173.2 0 -176.1 0 -173.2 0 -173.2 0 -167.2 0 -173.2 0 -170.2 0 -173.2 0 -170.2 0 -167.2 0 -170.2 0 -167.2 0 -170.2 0 -167.2 0 -167.2 0 -170.2 0 -167.2 0 -167.2 0 -164.2 0 -158.3 0 -170.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -179.1 0 -179.1 0 -179.1 0 -170.2 0 -170.2 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -170.2 0 -170.2 0 -170.2 0 -161.3 0 -170.2 0 -167.2 0 -170.2 0 -167.2 0 -164.2 0 -167.2 0 -170.2 0 -167.2 0 -167.2 0 -167.2 0 -167.2 0 -173.2 0 -176.1 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -152.3 0 -143.4 0 -167.2 0 -146.4 0 -170.2 0 -173.2 0 -173.2 0 -164.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -170.2 0 -170.2 0 -167.2 0 -164.2 0 -164.2 0 -167.2 0 -170.2 0 -173.2 0 -167.2 0 -167.2 0 -164.2 0 -170.2 0 -140.4 0 -161.3 0 -143.4 0 -146.4 0 -143.4 0 -140.4 0 -140.4 0 -161.3 0 -167.2 0 -167.2 0 -167.2 0 -146.4 0 -149.3 0 -146.4 0 -131.5 0 -123.6 0 -128.5 0 -161.3 0 -164.2 0 -164.2 0 -164.2 0 -167.2 0 -167.2 0 -164.2 0 -161.3 0 -167.2 0 -167.2 0 -158.3 0 -167.2 0 -167.2 0 -164.2 0 -167.2 0 -167.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -167.2 0 -167.2 0 -164.2 0 -158.3 0 -128.5 0 -137.4 0 -143.4 0 -146.4 0 -137.4 0 -143.4 0 -146.4 0 -167.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -164.2 0 -161.3 0 -161.3 0 -161.3 0 -164.2 0 -164.2 0 -164.2 0 -161.3 0 -161.3 0 -161.3 0 -161.3 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -167.2 0 -164.2 0 -164.2 0 -164.2 0 -161.3 0 -164.2 0 -161.3 0 -164.2 0 -164.2 0 -164.2 0 -161.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -131.5 0 -131.5 0 -116.3 0 -121.2 0 -116.3 0 -123.6 0 -118.7 0 -123.6 0 -137.4 0 -164.2 0 -161.3 0 -161.3 0 -140.4 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -155.3 0 -158.3 0 -158.3 0 -155.3 0 -155.3 0 -155.3 0 -158.3 0 -155.3 0 -155.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -155.3 0 -155.3 0 -158.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -152.3 0 -152.3 0 -152.3 0 -126.1 0 -104 0 -118.7 0 -121.2 0 -121.2 0 -149.3 0 -128.5 0 -149.3 0 -155.3 0 -152.3 0 -152.3 0 -152.3 0 -149.3 0 -149.3 0 -152.3 0 -149.3 0 -149.3 0 -152.3 0 -152.3 0 -149.3 0 -149.3 0 -149.3 0 -152.3 0 -152.3 0 -152.3 0 -152.3 0 -152.3 0 -131.5 0 -152.3 0 -155.3 0 -152.3 0 -155.3 0 -152.3 0 -152.3 0 -155.3 0 -155.3 0 -155.3 0 -155.3 0 -152.3 0 -152.3 0 -149.3 0 -149.3 0 -149.3 0 -146.4 0 -149.3 0 -149.3 0 -121.2 0 -116.3 0 -113.8 0 -111.3 0 -123.6 0 -108.9 0 -118.7 0 -113.8 0 -113.8 0 -111.3 0 -118.7 0 -121.2 0 -121.2 0 -116.3 0 -118.7 0 -121.2 0 -116.3 0 -123.6 0 -116.3 0 -118.7 0 -111.3 0 -113.8 0 -106.4 0 -140.4 0 -126.1 0 -123.6 0 -116.3 0 -111.3 0 -113.8 0 -99.09001 0 -116.3 0 -121.2 0 -111.3 0 -118.7 0 -123.6 0 -118.7 0 -118.7 0 -123.6 0 -158.3 0 -155.3 0 -146.4 0 -155.3 0 -152.3 0 -152.3 0 -152.3 0 -126.1 0 -121.2 0 -123.6 0 -155.3 0 -158.3 0 -167.2 0 -167.2 0 -164.2 0 -167.2 0 -167.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -170.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -176.1 0 -179.1 0 -185.1 0 -188 0 -199.9 0 -204.6 0 -223.1 0 -236.9 0 -241.5 0 -250.8 0 -250.8 0 -255.4 0 -255.4 0 -250.8 0 -241.5 0 -241.5 0 -236.9 0 -236.9 0 -232.3 0 -227.7 0 -223.1 0 -218.4 0 -213.8 0 -218.4 0 -204.6 0 -209.2 0 -199.9 0 -197 0 -197 0 -194 0 -197 0 -191 0 -194 0 -191 0 -188 0 -188 0 -191 0 -191 0 -188 0 -191 0 -191 0 -188 0 -182.1 0 -182.1 0 -185.1 0 -185.1 0 -185.1 0 -188 0 -185.1 0 -182.1 0 -179.1 0 -182.1 0 -182.1 0 -179.1 0 -170.2 0 -182.1 0 -182.1 0 -179.1 0 -182.1 0 -176.1 0 -176.1 0 -179.1 0 -173.2 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -176.1 0 -170.2 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -170.2 0 -170.2 0 -167.2 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -164.2 0 -146.4 0 -161.3 0 -164.2 0 -170.2 0 -164.2 0 -170.2 0 -176.1 0 -173.2 0 -173.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -170.2 0 -173.2 0 -173.2 0 -173.2 0 -173.2 0 -176.1 0 -167.2 0 -176.1 0 -176.1 0 -182.1 0 -182.1 0 -182.1 0 -185.1 0 -185.1 0 -188 0 -191 0 -188 0 -185.1 0 -188 0 -182.1 0 -188 0 -185.1 0 -182.1 0 -182.1 0 -182.1 0 -179.1 0 -176.1 0 -176.1 0 -179.1 0 -176.1 0 -173.2 0 -176.1 0 -173.2 0 -176.1 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -176.1 0 -176.1 0 -173.2 0 -173.2 0 -173.2 0 -170.2 0 -167.2 0 -167.2 0 -167.2 0 -167.2 0 -167.2 0 -164.2 0 -164.2 0 -167.2 0 -164.2 0 -164.2 0 -164.2 0 -164.2 0 -161.3 0 -152.3 0 -158.3 0 -164.2 0 -161.3 0 -161.3 0 -161.3 0 -161.3 0 -155.3 0 -158.3 0 -155.3 0 -152.3 0 -149.3 0 -152.3 0 -143.4 0 -149.3 0 -146.4 0 -146.4 0 -134.5 0 -131.5 0 -128.5 0 -123.6 0 -131.5 0 -111.3 0 -134.5 0 -137.4 0 -140.4 0 -140.4 0 -143.4 0 -146.4 0 -146.4 0 -143.4 0 -143.4 0 -143.4 0 -140.4 0 -146.4 0 -149.3 0 -146.4 0 -146.4 0 -149.3 0 -149.3 0 -140.4 0 -143.4 0 -143.4 0 -143.4 0 -143.4 0 -140.4 0 -143.4 0 -143.4 0 -143.4 0 -146.4 0 -146.4 0 -143.4 0 -140.4 0 -143.4 0 -143.4 0 -140.4 0 -140.4 0 -143.4 0 -146.4 0 -149.3 0 -146.4 0 -146.4 0 -146.4 0 -143.4 0 -137.4 0 -137.4 0 -137.4 0 -140.4 0 -137.4 0 -137.4 0 -137.4 0 -134.5 0 -134.5 0 -134.5 0 -134.5 0 -134.5 0 -134.5 0 -137.4 0 -137.4 0 -137.4 0 -140.4 0 -140.4 0 -137.4 0 -137.4 0 -137.4 0 -123.6 0 -137.4 0 -134.5 0 -128.5 0 -101.5 0 -111.3 0 -113.8 0 -108.9 0 -96.64001 0 -101.5 0 -106.4 0 -108.9 0 -106.4 0 -113.8 0 -113.8 0 -104 0 -113.8 0 -108.9 0 -104 0 -108.9 0 -116.3 0 -101.5 0 -118.7 0 -106.4 0 -111.3 0 -106.4 0 -104 0 -116.3 0 -113.8 0 -116.3 0 -123.6 0 -108.9 0 -104 0 -111.3 0 -111.3 0 -104 0 -84.38001 0 -101.5 0 -89.29001 0 -81.93001 0 -111.3 0 -91.74001 0 -101.5 0 -96.64001 0 -106.4 0 -99.09001 0 -99.09001 0 -108.9 0 -108.9 0 -126.1 0 -126.1 0 -116.3 0 -101.5 0 -121.2 0 -131.5 0 -126.1 0 -111.3 0 -77.03001 0 -77.03001 0 -111.3 0 -106.4 0 -128.5 0 -131.5 0 -126.1 0 -126.1 0 -123.6 0 -123.6 0 -121.2 0 -123.6 0 -123.6 0 -123.6 0 -121.2 0 -118.7 0 -116.3 0 -116.3 0 -118.7 0 -121.2 0 -118.7 0 -121.2 0 -118.7 0 -118.7 0 -121.2 0 -121.2 0 -118.7 0 -116.3 0 -116.3 0 -116.3 0 -116.3 0 -116.3 0 -116.3 0 -116.3 0 -118.7 0 -116.3 0 -116.3 0 -118.7 0 -121.2 0 -123.6 0 -123.6 0 -121.2 0 -113.8 0 -116.3 0 -91.74001 0 -79.48001 0 -86.84001 0 -79.48001 0 -96.64001 0 -89.29001 0 -89.29001 0 -84.38001 0 -116.3 0 -91.74001 0 -113.8 0 -99.09001 0 -84.38001 0 -111.3 0 -113.8 0 -111.3 0 -113.8 0 -77.03001 0 -77.03001 0 -96.64001 0 -106.4 0 -111.3 0 -116.3 0 -116.3 0 -116.3 0 -113.8 0 -116.3 0 -116.3 0 -116.3 0 -116.3 0 -113.8 0 -86.84001 0 -111.3 0 -108.9 0 -108.9 0 -96.64001 0 -96.64001 0 -101.5 0 -96.64001 0 -113.8 0 -116.3 0 -89.29001 0 -121.2 0 -126.1 0 -128.5 0 -126.1 0 -126.1 0 -126.1 0 -126.1 0 -128.5 0 -128.5 0 -126.1 0 -126.1 0 -123.6 0 -123.6 0 -126.1 0 -126.1 0 -126.1 0 -128.5 0 -128.5 0 -128.5 0 -126.1 0 -128.5 0 -131.5 0 -131.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -113.8 0 -111.3 0 -101.5 0 -96.64001 0 -104 0 -99.09001 0 -96.64001 0 -108.9 0 -106.4 0 -126.1 0 -128.5 0 -126.1 0 -128.5 0 -128.5 0 -121.2 0 -126.1 0 -106.4 0 -108.9 0 -118.7 0 -123.6 0 -99.09001 0 -101.5 0 -101.5 0 -101.5 0 -96.64001 0 -86.84001 0 -81.93001 0 -94.19001 0 -94.19001 0 -99.09001 0 -96.64001 0 -89.29001 0 -94.19001 0 -101.5 0 -101.5 0 -104 0 -104 0 -96.64001 0 -108.9 0 -101.5 0 -104 0 -106.4 0 -111.3 0 -116.3 0 -131.5 0 -128.5 0 -118.7 0 -116.3 0 -134.5 0 -137.4 0 -137.4 0 -137.4 0 -137.4 0 -137.4 0 -137.4 0 -137.4 0 -137.4 0 -137.4 0 -140.4 0 -143.4 0 -143.4 0 -146.4 0 -143.4 0 -143.4 0 -143.4 0 -146.4 0 -143.4 0 -140.4 0 -140.4 0 -140.4 0 -140.4 0 -137.4 0 -137.4 0 -134.5 0 -134.5 0 -134.5 0 -134.5 0 -131.5 0 -128.5 0 -131.5 0 -131.5 0 -131.5 0 -131.5 0 -131.5 0 -131.5 0 -131.5 0 -131.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -128.5 0 -126.1 0 -123.6 0 -123.6 0 -123.6 0 -126.1 0 -123.6 0 -123.6 0 -121.2 0 -121.2 0 -118.7 0 -118.7 0 -118.7 0 -121.2 0 -118.7 0 -118.7 0 -118.7 0 -118.7 0 -118.7 0 -118.7 0 -116.3 0 -116.3 0 -118.7 0 -118.7 0 -116.3 0 -116.3 0 -116.3 0 -116.3 0 -118.7 0 -118.7 0 -116.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -116.3 0 -113.8 0 -116.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -108.9 0 -111.3 0 -86.84001 0 -94.19001 0 -99.09001 0 -104 0 -84.38001 0 -99.09001 0 -104 0 -111.3 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -104 0 -104 0 -106.4 0 -106.4 0 -104 0 -104 0 -101.5 0 -104 0 -104 0 -101.5 0 -101.5 0 -104 0 -104 0 -104 0 -104 0 -104 0 -101.5 0 -104 0 -101.5 0 -101.5 0 -101.5 0 -99.09001 0 -101.5 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -84.38001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -96.64001 0 -77.03001 0 -79.48001 0 -89.29001 0 -91.74001 0 -91.74001 0 -91.74001 0 -89.29001 0 -89.29001 0 -91.74001 0 -91.74001 0 -89.29001 0 -89.29001 0 -94.19001 0 -86.84001 0 -91.74001 0 -91.74001 0 -94.19001 0 -94.19001 0 -91.74001 0 -91.74001 0 -91.74001 0 -89.29001 0 -89.29001 0 -89.29001 0 -89.29001 0 -89.29001 0 -86.84001 0 -86.84001 0 -84.38001 0 -86.84001 0 -89.29001 0 -89.29001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -84.38001 0 -77.03001 0 -77.03001 0 -77.03001 0 -81.93001 0 -84.38001 0 -86.84001 0 -84.38001 0 -84.38001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -84.38001 0 -84.38001 0 -84.38001 0 -81.93001 0 -84.38001 0 -86.84001 0 -86.84001 0 -86.84001 0 -84.38001 0 -84.38001 0 -84.38001 0 -84.38001 0 -84.38001 0 -81.93001 0 -84.38001 0 -84.38001 0 -84.38001 0 -84.38001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -86.84001 0 -84.38001 0 -86.84001 0 -86.84001 0 -86.84001 0 -89.29001 0 -89.29001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -84.38001 0 -77.03001 0 -81.93001 0 -77.03001 0 -86.84001 0 -81.93001 0 -89.29001 0 -91.74001 0 -91.74001 0 -89.29001 0 -89.29001 0 -89.29001 0 -89.29001 0 -86.84001 0 -99.09001 0 -128.5 0 -137.4 0 -128.5 0 -118.7 0 -116.3 0 -113.8 0 -113.8 0 -113.8 0 -113.8 0 -111.3 0 -111.3 0 -111.3 0 -94.19001 0 -77.03001 0 -77.03001 0 -106.4 0 -77.03001 0 -86.84001 0 -81.93001 0 -91.74001 0 -79.48001 0 -84.38001 0 -77.03001 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -111.3 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -104 0 -106.4 0 -106.4 0 -106.4 0 -106.4 0 -104 0 -104 0 -104 0 -104 0 -106.4 0 -104 0 -106.4 0 -106.4 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -108.9 0 -106.4 0 -108.9 0 -108.9 0 -106.4 0 -106.4 0 -108.9 0 -106.4 0 -106.4 0 -106.4 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -101.5 0 -104 0 -104 0 -104 0 -104 0 -104 0 -104 0 -101.5 0 -104 0 -104 0 -101.5 0 -99.09001 0 -101.5 0 -99.09001 0 -101.5 0 -101.5 0 -99.09001 0 -99.09001 0 -101.5 0 -99.09001 0 -101.5 0 -101.5 0 -101.5 0 -101.5 0 -101.5 0 -101.5 0 -101.5 0 -86.84001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -99.09001 0 -77.03001 0 -99.09001 0 -99.09001 0 -94.19001 0 -94.19001 0 -96.64001 0 -99.09001 0 -101.5 0 -101.5 0 -99.09001 0 -101.5 0 -99.09001 0 -99.09001 0 -99.09001 0 -77.03001 0 -89.29001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -77.03001 0 -84.38001 0 -77.03001 0 -77.03001 0 -77.03001 0 -91.74001 0 -77.03001 0 -104 0 -108.9 0 -118.7 0 -123.6 0 -146.4 0 -158.3 0 -176.1 0 -179.1 0 -182.1 0 -191 0 -199.9 0 -194 0 -213.8 0 -218.4 0 -213.8 0 -218.4 0 - -912.2001 0 -920.9001 0 -929.6001 0 -964.5001 0 -999.3001 0 -1060 0 -1156 0 -1265 0 -1362 0 -1496 0 -1569 0 -1630 0 -1691 0 -1703 0 -1739 0 -1739 0 -1739 0 -1739 0 -1727 0 -1727 0 -1715 0 -1715 0 -1703 0 -1691 0 -1679 0 -1654 0 -1642 0 -1630 0 -1606 0 -1606 0 -1569 0 -1533 0 -1484 0 -1435 0 -1387 0 -1350 0 -1314 0 -1277 0 -1265 0 -1241 0 -1253 0 -1265 0 -1290 0 -1314 0 -1314 0 -1302 0 -1290 0 -1253 0 -1217 0 -1168 0 -1132 0 -1107 0 -1086 0 -1078 0 -1060 0 -1043 0 -1034 0 -1017 0 -1025 0 -990.6001 0 -973.2001 0 -955.8001 0 -929.6001 0 -912.2001 0 -894.8001 0 -877.4001 0 -868.7001 0 -868.7001 0 -860.0001 0 -851.3001 0 -851.3001 0 -842.6001 0 -833.9001 0 -842.6001 0 -842.6001 0 -851.3001 0 -842.6001 0 -842.6001 0 -851.3001 0 -851.3001 0 -851.3001 0 -851.3001 0 -851.3001 0 -842.6001 0 -842.6001 0 -833.9001 0 -825.2001 0 -825.2001 0 -816.5001 0 -816.5001 0 -807.7001 0 -790.3001 0 -781.6001 0 -772.9001 0 -755.5001 0 -746.8001 0 -738.1001 0 -729.4001 0 -712.0001 0 -703.3001 0 -694.6001 0 -685.9001 0 -668.4001 0 -659.7001 0 -651.0001 0 -642.3001 0 -633.6001 0 -616.2001 0 -616.2001 0 -610.2001 0 -604.1001 0 -598.1001 0 -598.1001 0 -592.0001 0 -592.0001 0 -586.0001 0 -579.9001 0 -525.6001 0 -501.4001 0 -519.5001 0 -507.4001 0 -495.3001 0 -477.2001 0 -459.1001 0 -477.2001 0 -483.3001 0 -465.1001 0 -501.4001 0 -489.3001 0 -471.2001 0 -459.1001 0 -453.0001 0 -477.2001 0 -471.2001 0 -471.2001 0 -447.0001 0 -459.1001 0 -428.9001 0 -447.0001 0 -428.9001 0 -398.7 0 -380.5 0 -386.6 0 -344.3 0 -356.3 0 -362.4 0 -362.4 0 -374.5 0 -356.3 0 -356.3 0 -356.3 0 -368.4 0 -392.6 0 -386.6 0 -386.6 0 -386.6 0 -386.6 0 -380.5 0 -374.5 0 -380.5 0 -374.5 0 -374.5 0 -368.4 0 -368.4 0 -362.4 0 -356.3 0 -356.3 0 -350.3 0 -344.3 0 -344.3 0 -338.2 0 -332.2 0 -326.1 0 -320.1 0 -320.1 0 -315.5 0 -315.5 0 -315.5 0 -310.8 0 -310.8 0 -306.2 0 -306.2 0 -306.2 0 -306.2 0 -301.6 0 -306.2 0 -306.2 0 -301.6 0 -264.6 0 -297 0 -273.9 0 -269.3 0 -283.1 0 -301.6 0 -301.6 0 -269.3 0 -264.6 0 -236.9 0 -310.8 0 -306.2 0 -310.8 0 -310.8 0 -306.2 0 -306.2 0 -306.2 0 -297 0 -306.2 0 -310.8 0 -310.8 0 -315.5 0 -320.1 0 -326.1 0 -326.1 0 -332.2 0 -338.2 0 -338.2 0 -344.3 0 -350.3 0 -368.4 0 -392.6 0 -404.7 0 -434.9001 0 -453.0001 0 -477.2001 0 -489.3001 0 -501.4001 0 -507.4001 0 -495.3001 0 -501.4001 0 -495.3001 0 -489.3001 0 -489.3001 0 -489.3001 0 -489.3001 0 -501.4001 0 -507.4001 0 -507.4001 0 -519.5001 0 -513.5001 0 -519.5001 0 -507.4001 0 -513.5001 0 -501.4001 0 -495.3001 0 -489.3001 0 -477.2001 0 -471.2001 0 -471.2001 0 -465.1001 0 -459.1001 0 -459.1001 0 -447.0001 0 -434.9001 0 -428.9001 0 -422.8001 0 -416.8001 0 -410.7 0 -410.7 0 -404.7 0 -380.5 0 -386.6 0 -380.5 0 -380.5 0 -386.6 0 -386.6 0 -380.5 0 -386.6 0 -392.6 0 -386.6 0 -374.5 0 -380.5 0 -362.4 0 -380.5 0 -386.6 0 -380.5 0 -416.8001 0 -441.0001 0 -465.1001 0 -489.3001 0 -519.5001 0 -537.6001 0 -561.8001 0 -598.1001 0 -624.9001 0 -677.2001 0 -685.9001 0 -712.0001 0 -729.4001 0 -720.7001 0 -720.7001 0 -703.3001 0 -677.2001 0 -651.0001 0 -604.1001 0 -586.0001 0 -573.9001 0 -555.8001 0 -543.7001 0 -525.6001 0 -513.5001 0 -501.4001 0 -489.3001 0 -483.3001 0 -471.2001 0 -459.1001 0 -459.1001 0 -453.0001 0 -447.0001 0 -447.0001 0 -428.9001 0 -428.9001 0 -428.9001 0 -428.9001 0 -422.8001 0 -422.8001 0 -404.7 0 -416.8001 0 -422.8001 0 -416.8001 0 -422.8001 0 -422.8001 0 -428.9001 0 -447.0001 0 -459.1001 0 -477.2001 0 -483.3001 0 -507.4001 0 -519.5001 0 -525.6001 0 -531.6001 0 -531.6001 0 -531.6001 0 -531.6001 0 -525.6001 0 -519.5001 0 -513.5001 0 -513.5001 0 -501.4001 0 -501.4001 0 -489.3001 0 -489.3001 0 -483.3001 0 -471.2001 0 -465.1001 0 -465.1001 0 -465.1001 0 -465.1001 0 -459.1001 0 -465.1001 0 -465.1001 0 -471.2001 0 -501.4001 0 -513.5001 0 -537.6001 0 -579.9001 0 -624.9001 0 -685.9001 0 -738.1001 0 -764.2001 0 -825.2001 0 -816.5001 0 -851.3001 0 -860.0001 0 -877.4001 0 -868.7001 0 -868.7001 0 -868.7001 0 -860.0001 0 -851.3001 0 -842.6001 0 -842.6001 0 -851.3001 0 -833.9001 0 -816.5001 0 -799.0001 0 -790.3001 0 -772.9001 0 -772.9001 0 -764.2001 0 -755.5001 0 -729.4001 0 -746.8001 0 -720.7001 0 -720.7001 0 -677.2001 0 -668.4001 0 -703.3001 0 -703.3001 0 -694.6001 0 -685.9001 0 -703.3001 0 -694.6001 0 -685.9001 0 -685.9001 0 -685.9001 0 -668.4001 0 -668.4001 0 -668.4001 0 -659.7001 0 -659.7001 0 -651.0001 0 -651.0001 0 -642.3001 0 -624.9001 0 -624.9001 0 -624.9001 0 -616.2001 0 -604.1001 0 -598.1001 0 -610.2001 0 -598.1001 0 -598.1001 0 -592.0001 0 -592.0001 0 -586.0001 0 -579.9001 0 -573.9001 0 -573.9001 0 -567.9001 0 -561.8001 0 -561.8001 0 -561.8001 0 -555.8001 0 -555.8001 0 -549.7001 0 -549.7001 0 -549.7001 0 -537.6001 0 -543.7001 0 -501.4001 0 -519.5001 0 -513.5001 0 -459.1001 0 -519.5001 0 -507.4001 0 -513.5001 0 -459.1001 0 -501.4001 0 -501.4001 0 -501.4001 0 -501.4001 0 -501.4001 0 -501.4001 0 -495.3001 0 -489.3001 0 -489.3001 0 -483.3001 0 -483.3001 0 -483.3001 0 -483.3001 0 -477.2001 0 -477.2001 0 -465.1001 0 -404.7 0 -410.7 0 -404.7 0 -398.7 0 -392.6 0 -380.5 0 -380.5 0 -386.6 0 -356.3 0 -422.8001 0 -392.6 0 -434.9001 0 -441.0001 0 -441.0001 0 -434.9001 0 -428.9001 0 -434.9001 0 -434.9001 0 -416.8001 0 -428.9001 0 -434.9001 0 -422.8001 0 -422.8001 0 -404.7 0 -350.3 0 -368.4 0 -362.4 0 -320.1 0 -392.6 0 -344.3 0 -315.5 0 -350.3 0 -326.1 0 -338.2 0 -350.3 0 -332.2 0 -398.7 0 -404.7 0 -398.7 0 -320.1 0 -332.2 0 -356.3 0 -344.3 0 -350.3 0 -392.6 0 -380.5 0 -374.5 0 -344.3 0 -315.5 0 -326.1 0 -320.1 0 -301.6 0 -306.2 0 -332.2 0 -350.3 0 -368.4 0 -380.5 0 -380.5 0 -374.5 0 -374.5 0 -368.4 0 -368.4 0 -362.4 0 -368.4 0 -368.4 0 -362.4 0 -362.4 0 -362.4 0 -356.3 0 -356.3 0 -356.3 0 -356.3 0 -356.3 0 -356.3 0 -350.3 0 -350.3 0 -344.3 0 -344.3 0 -332.2 0 -338.2 0 -338.2 0 -332.2 0 -326.1 0 -326.1 0 -326.1 0 -297 0 -306.2 0 -269.3 0 -297 0 -297 0 -320.1 0 -320.1 0 -315.5 0 -320.1 0 -320.1 0 -315.5 0 -315.5 0 -315.5 0 -315.5 0 -315.5 0 -320.1 0 -332.2 0 -332.2 0 -332.2 0 -338.2 0 -344.3 0 -344.3 0 -344.3 0 -344.3 0 -338.2 0 -338.2 0 -332.2 0 -332.2 0 -320.1 0 -320.1 0 -315.5 0 -310.8 0 -306.2 0 -306.2 0 -306.2 0 -297 0 -297 0 -292.4 0 -297 0 -292.4 0 -287.7 0 -283.1 0 -283.1 0 -278.5 0 -278.5 0 -278.5 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -269.3 0 -273.9 0 -273.9 0 -241.5 0 -241.5 0 -227.7 0 -241.5 0 -223.1 0 -223.1 0 -223.1 0 -241.5 0 -236.9 0 -255.4 0 -255.4 0 -213.8 0 -246.2 0 -241.5 0 -246.2 0 -246.2 0 -246.2 0 -241.5 0 -241.5 0 -236.9 0 -246.2 0 -241.5 0 -246.2 0 -246.2 0 -241.5 0 -241.5 0 -236.9 0 -232.3 0 -232.3 0 -236.9 0 -209.2 0 -227.7 0 -227.7 0 -232.3 0 -227.7 0 -227.7 0 -227.7 0 -227.7 0 -232.3 0 -232.3 0 -232.3 0 -223.1 0 -227.7 0 -227.7 0 -227.7 0 -223.1 0 -227.7 0 -227.7 0 -227.7 0 -223.1 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -223.1 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -223.1 0 -218.4 0 -223.1 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -223.1 0 -227.7 0 -185.1 0 -236.9 0 -209.2 0 -232.3 0 -236.9 0 -232.3 0 -232.3 0 -232.3 0 -232.3 0 -227.7 0 -227.7 0 -227.7 0 -232.3 0 -232.3 0 -209.2 0 -218.4 0 -264.6 0 -269.3 0 -273.9 0 -269.3 0 -255.4 0 -269.3 0 -283.1 0 -292.4 0 -292.4 0 -301.6 0 -326.1 0 -374.5 0 -441.0001 0 -507.4001 0 -549.7001 0 -604.1001 0 -677.2001 0 -764.2001 0 -851.3001 0 -929.6001 0 -999.3001 0 -1078 0 -1192 0 -1314 0 -1448 0 -1569 0 -1679 0 -1764 0 -1812 0 -1837 0 -1861 0 -1873 0 -1861 0 -1849 0 -1837 0 -1812 0 -1788 0 -1764 0 -1715 0 -1679 0 -1642 0 -1593 0 -1557 0 -1508 0 -1448 0 -1399 0 -1362 0 -1326 0 -1290 0 -1253 0 -1229 0 -1217 0 -1180 0 -1168 0 -1144 0 -1107 0 -1078 0 -1043 0 -1008 0 -981.9001 0 -947.0001 0 -912.2001 0 -894.8001 0 -868.7001 0 -833.9001 0 -807.7001 0 -790.3001 0 -781.6001 0 -764.2001 0 -746.8001 0 -738.1001 0 -720.7001 0 -703.3001 0 -694.6001 0 -677.2001 0 -659.7001 0 -651.0001 0 -633.6001 0 -616.2001 0 -610.2001 0 -604.1001 0 -592.0001 0 -586.0001 0 -579.9001 0 -573.9001 0 -561.8001 0 -561.8001 0 -555.8001 0 -549.7001 0 -543.7001 0 -537.6001 0 -531.6001 0 -531.6001 0 -525.6001 0 -525.6001 0 -519.5001 0 -519.5001 0 -519.5001 0 -513.5001 0 -513.5001 0 -513.5001 0 -513.5001 0 -513.5001 0 -513.5001 0 -453.0001 0 -428.9001 0 -428.9001 0 -447.0001 0 -441.0001 0 -459.1001 0 -483.3001 0 -453.0001 0 -441.0001 0 -513.5001 0 -507.4001 0 -501.4001 0 -501.4001 0 -495.3001 0 -495.3001 0 -489.3001 0 -489.3001 0 -483.3001 0 -477.2001 0 -477.2001 0 -477.2001 0 -471.2001 0 -465.1001 0 -410.7 0 -368.4 0 -350.3 0 -398.7 0 -362.4 0 -344.3 0 -356.3 0 -356.3 0 -332.2 0 -356.3 0 -356.3 0 -422.8001 0 -338.2 0 -386.6 0 -392.6 0 -428.9001 0 -428.9001 0 -338.2 0 -380.5 0 -320.1 0 -416.8001 0 -416.8001 0 -416.8001 0 -410.7 0 -356.3 0 -320.1 0 -306.2 0 -283.1 0 -315.5 0 -315.5 0 -310.8 0 -338.2 0 -287.7 0 -292.4 0 -332.2 0 -315.5 0 -297 0 -301.6 0 -310.8 0 -374.5 0 -368.4 0 -278.5 0 -292.4 0 -368.4 0 -368.4 0 -362.4 0 -368.4 0 -368.4 0 -297 0 -362.4 0 -362.4 0 -362.4 0 -350.3 0 -283.1 0 -283.1 0 -260 0 -246.2 0 -320.1 0 -338.2 0 -227.7 0 -260 0 -260 0 -255.4 0 -338.2 0 -332.2 0 -332.2 0 -301.6 0 -326.1 0 -326.1 0 -332.2 0 -332.2 0 -326.1 0 -297 0 -269.3 0 -301.6 0 -301.6 0 -315.5 0 -283.1 0 -315.5 0 -287.7 0 -260 0 -283.1 0 -306.2 0 -278.5 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -315.5 0 -315.5 0 -315.5 0 -260 0 -297 0 -301.6 0 -264.6 0 -310.8 0 -278.5 0 -236.9 0 -264.6 0 -241.5 0 -246.2 0 -250.8 0 -246.2 0 -232.3 0 -301.6 0 -297 0 -301.6 0 -297 0 -297 0 -297 0 -297 0 -297 0 -297 0 -297 0 -301.6 0 -297 0 -297 0 -301.6 0 -301.6 0 -297 0 -306.2 0 -306.2 0 -306.2 0 -301.6 0 -306.2 0 -306.2 0 -301.6 0 -301.6 0 -301.6 0 -301.6 0 -297 0 -297 0 -297 0 -292.4 0 -297 0 -297 0 -301.6 0 -306.2 0 -310.8 0 -310.8 0 -310.8 0 -310.8 0 -306.2 0 -310.8 0 -306.2 0 -306.2 0 -301.6 0 -297 0 -287.7 0 -287.7 0 -283.1 0 -283.1 0 -278.5 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -264.6 0 -264.6 0 -264.6 0 -260 0 -260 0 -255.4 0 -255.4 0 -255.4 0 -255.4 0 -250.8 0 -246.2 0 -246.2 0 -246.2 0 -250.8 0 -241.5 0 -236.9 0 -306.2 0 -297 0 -278.5 0 -260 0 -255.4 0 -250.8 0 -250.8 0 -250.8 0 -250.8 0 -255.4 0 -250.8 0 -250.8 0 - -260 0 -278.5 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -283.1 0 -287.7 0 -273.9 0 -278.5 0 -269.3 0 -269.3 0 -264.6 0 -264.6 0 -269.3 0 -255.4 0 -269.3 0 -250.8 0 -260 0 - -278.5 0 -269.3 0 -260 0 -250.8 0 -255.4 0 -264.6 0 -246.2 0 -255.4 0 -255.4 0 -260 0 -255.4 0 -241.5 0 -260 0 -250.8 0 -255.4 0 -255.4 0 -227.7 0 -250.8 0 -255.4 0 -260 0 -255.4 0 -260 0 -255.4 0 -264.6 0 -260 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -260 0 -264.6 0 -269.3 0 -269.3 0 -278.5 0 -283.1 0 -287.7 0 -287.7 0 -297 0 -287.7 0 -297 0 -292.4 0 -287.7 0 -287.7 0 -287.7 0 -292.4 0 -292.4 0 -283.1 0 -287.7 0 -287.7 0 -283.1 0 -292.4 0 -306.2 0 -301.6 0 -297 0 -297 0 -301.6 0 -310.8 0 -301.6 0 -306.2 0 -301.6 0 -338.2 0 -350.3 0 -374.5 0 -404.7 0 -422.8001 0 -428.9001 0 -434.9001 0 -441.0001 0 -422.8001 0 -422.8001 0 -416.8001 0 -422.8001 0 -416.8001 0 -410.7 0 -404.7 0 -398.7 0 -404.7 0 -398.7 0 -398.7 0 -398.7 0 -386.6 0 -392.6 0 -386.6 0 -386.6 0 -392.6 0 -392.6 0 -386.6 0 -392.6 0 -392.6 0 -380.5 0 -380.5 0 -386.6 0 -386.6 0 -386.6 0 -386.6 0 -392.6 0 -392.6 0 -386.6 0 -386.6 0 -368.4 0 -350.3 0 -374.5 0 -356.3 0 -362.4 0 -362.4 0 -332.2 0 -344.3 0 -344.3 0 -344.3 0 -344.3 0 -344.3 0 -338.2 0 -332.2 0 -332.2 0 -332.2 0 -326.1 0 -315.5 0 -315.5 0 -310.8 0 -310.8 0 -306.2 0 -306.2 0 -297 0 -301.6 0 -297 0 -297 0 -292.4 0 -287.7 0 -283.1 0 -283.1 0 -273.9 0 -273.9 0 -273.9 0 -269.3 0 -269.3 0 -269.3 0 -269.3 0 -264.6 0 -264.6 0 -264.6 0 -264.6 0 -255.4 0 -260 0 -260 0 -260 0 -255.4 0 -255.4 0 -255.4 0 -246.2 0 -246.2 0 -250.8 0 -250.8 0 -246.2 0 -246.2 0 -241.5 0 -236.9 0 -241.5 0 -241.5 0 -232.3 0 -232.3 0 -236.9 0 -236.9 0 -236.9 0 -232.3 0 -232.3 0 -236.9 0 -227.7 0 -218.4 0 -232.3 0 -227.7 0 -227.7 0 -227.7 0 -223.1 0 -223.1 0 -227.7 0 -227.7 0 -213.8 0 -223.1 0 -223.1 0 -218.4 0 -218.4 0 -218.4 0 -218.4 0 -209.2 0 -213.8 0 -218.4 0 -213.8 0 -213.8 0 -213.8 0 -218.4 0 -213.8 0 -213.8 0 -213.8 0 -199.9 0 -209.2 0 -204.6 0 -197 0 -209.2 0 -179.1 0 -179.1 0 -179.1 0 -158.3 0 -176.1 0 -185.1 0 -185.1 0 -191 0 -197 0 -197 0 -199.9 0 -197 0 -194 0 -197 0 -197 0 -197 0 -197 0 -191 0 -197 0 -179.1 0 -173.2 0 -170.2 0 -176.1 0 -179.1 0 -194 0 -167.2 0 -176.1 0 -185.1 0 -164.2 0 -164.2 0 -164.2 0 -185.1 0 -182.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -188 0 -185.1 0 -182.1 0 -164.2 0 -152.3 0 - -170.2 0 -173.2 0 -164.2 0 -158.3 0 -149.3 0 -140.4 0 -158.3 0 -161.3 0 -164.2 0 -164.2 0 -143.4 0 -155.3 0 -155.3 0 -155.3 0 -161.3 0 -161.3 0 -161.3 0 -161.3 0 -161.3 0 -158.3 0 -161.3 0 -158.3 0 -161.3 0 -161.3 0 -164.2 0 -164.2 0 -146.4 0 -140.4 0 -161.3 0 -167.2 0 -164.2 0 -167.2 0 -164.2 0 -161.3 0 -161.3 0 -161.3 0 -161.3 0 -158.3 0 -158.3 0 -158.3 0 -158.3 0 -164.2 0 -164.2 0 -161.3 0 -155.3 0 -161.3 0 -161.3 0 -161.3 0 -158.3 0 -161.3 0 -161.3 0 -158.3 0 -158.3 0 -134.5 0 -146.4 0 -143.4 0 -155.3 0 -152.3 0 -146.4 0 -152.3 0 -152.3 0 -152.3 0 -149.3 0 -152.3 0 -152.3 0 -152.3 0 -152.3 0 -149.3 0 -149.3 0 -152.3 0 -152.3 0 -152.3 0 -155.3 0 -131.5 0 -131.5 0 -131.5 0 -123.6 0 -134.5 0 -137.4 0 -126.1 0 -104 0 -118.7 0 -113.8 0 -121.2 0 -113.8 0 -126.1 0 -113.8 0 -121.2 0 -118.7 0 -143.4 0 -140.4 0 -140.4 0 -140.4 0 -140.4 0 -140.4 0 -140.4 0 -140.4 0 -121.2 0 -121.2 0 -140.4 0 -140.4 0 -134.5 0 -123.6 0 -113.8 0 -113.8 0 -126.1 0 -111.3 0 -113.8 0 -113.8 0 -113.8 0 -131.5 0 -137.4 0 -140.4 0 -143.4 0 -146.4 0 -149.3 0 -152.3 0 -155.3 0 -155.3 0 -158.3 0 -158.3 0 -140.4 0 -143.4 0 -149.3 0 -155.3 0 -164.2 0 -161.3 0 -152.3 0 -158.3 0 -149.3 0 -158.3 0 -161.3 0 -167.2 0 -164.2 0 -167.2 0 -167.2 0 -164.2 0 -167.2 0 -161.3 0 -164.2 0 -170.2 0 -167.2 0 -191 0 -204.6 0 -209.2 0 -204.6 0 -204.6 0 -204.6 0 -209.2 0 -209.2 0 -209.2 0 -199.9 0 -209.2 0 -209.2 0 -204.6 0 -204.6 0 -209.2 0 -213.8 0 -204.6 0 -204.6 0 -209.2 0 -204.6 0 -209.2 0 -213.8 0 -213.8 0 -209.2 0 -218.4 0 -209.2 0 -213.8 0 -209.2 0 -199.9 0 -199.9 0 -199.9 0 -194 0 -191 0 -188 0 -188 0 -188 0 -185.1 0 -185.1 0 -182.1 0 -182.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -185.1 0 -188 0 -188 0 -191 0 -199.9 0 -310.8 0 -501.4001 0 -610.2001 0 -703.3001 0 -746.8001 0 -781.6001 0 -781.6001 0 -772.9001 0 -764.2001 0 -720.7001 0 -694.6001 0 -651.0001 0 -616.2001 0 - -573.9001 0 -549.7001 0 -543.7001 0 -525.6001 0 -513.5001 0 -501.4001 0 -489.3001 0 -483.3001 0 -471.2001 0 -465.1001 0 -453.0001 0 -447.0001 0 -434.9001 0 -428.9001 0 -416.8001 0 -392.6 0 -386.6 0 -332.2 0 -386.6 0 -344.3 0 -392.6 0 -392.6 0 -392.6 0 -386.6 0 -392.6 0 -386.6 0 -386.6 0 -386.6 0 -380.5 0 -374.5 0 -368.4 0 -374.5 0 -374.5 0 -362.4 0 -368.4 0 -362.4 0 -362.4 0 -338.2 0 -306.2 0 -356.3 0 -315.5 0 -306.2 0 -356.3 0 -301.6 0 -332.2 0 -350.3 0 -344.3 0 -344.3 0 -344.3 0 -338.2 0 -332.2 0 -332.2 0 -320.1 0 -320.1 0 -315.5 0 -315.5 0 -315.5 0 -306.2 0 -301.6 0 -301.6 0 -292.4 0 -287.7 0 -283.1 0 -278.5 0 -273.9 0 -269.3 0 -264.6 0 -264.6 0 -260 0 -260 0 -250.8 0 -246.2 0 -250.8 0 -250.8 0 -246.2 0 -246.2 0 -246.2 0 -241.5 0 -241.5 0 - -232.3 0 -223.1 0 -232.3 0 -227.7 0 -218.4 0 -213.8 0 -227.7 0 -191 0 -194 0 -182.1 0 -179.1 0 -173.2 0 -185.1 0 -182.1 0 -199.9 0 -199.9 0 -204.6 0 -199.9 0 -197 0 -194 0 -194 0 -191 0 -191 0 -191 0 -191 0 -170.2 0 -161.3 0 -185.1 0 -185.1 0 -182.1 0 -164.2 0 -155.3 0 -155.3 0 -158.3 0 -134.5 0 -143.4 0 -134.5 0 -152.3 0 -167.2 0 -158.3 0 -170.2 0 -170.2 0 -170.2 0 -167.2 0 -167.2 0 -167.2 0 -164.2 0 -164.2 0 -164.2 0 -158.3 0 -164.2 0 -161.3 0 -161.3 0 -158.3 0 -158.3 0 -158.3 0 -179.1 0 -197 0 -182.1 0 -173.2 0 -170.2 0 -167.2 0 -164.2 0 -164.2 0 -167.2 0 -167.2 0 -164.2 0 -164.2 0 -164.2 0 -167.2 0 -173.2 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -176.1 0 -173.2 0 -167.2 0 -164.2 0 -164.2 0 -161.3 0 -158.3 0 -161.3 0 -158.3 0 -188 0 -223.1 0 -223.1 0 - -185.1 0 -176.1 0 -179.1 0 -179.1 0 -179.1 0 -182.1 0 -182.1 0 -182.1 0 -182.1 0 -179.1 0 -179.1 0 -179.1 0 -176.1 0 -173.2 0 -170.2 0 -170.2 0 -167.2 0 -158.3 0 -164.2 0 -167.2 0 -149.3 0 -170.2 0 -173.2 0 -176.1 0 -182.1 0 -185.1 0 -197 0 -204.6 0 -223.1 0 -227.7 0 -236.9 0 -236.9 0 -241.5 0 -232.3 0 -227.7 0 -223.1 0 -209.2 0 -204.6 0 -194 0 -197 0 -197 0 -197 0 -199.9 0 -197 0 -199.9 0 -199.9 0 -209.2 0 -250.8 0 -338.2 0 -453.0001 0 -519.5001 0 -561.8001 0 -573.9001 0 -586.0001 0 -598.1001 0 -598.1001 0 -598.1001 0 -592.0001 0 -592.0001 0 -579.9001 0 -567.9001 0 -561.8001 0 -549.7001 0 -531.6001 0 -519.5001 0 -501.4001 0 -495.3001 0 -483.3001 0 -471.2001 0 -459.1001 0 -447.0001 0 -434.9001 0 -422.8001 0 -410.7 0 -404.7 0 -398.7 0 -392.6 0 -380.5 0 -368.4 0 -362.4 0 -368.4 0 -350.3 0 -344.3 0 -332.2 0 -315.5 0 -310.8 0 -306.2 0 -301.6 0 -292.4 0 -283.1 0 -278.5 0 -273.9 0 -273.9 0 -273.9 0 -264.6 0 -260 0 -255.4 0 -255.4 0 -250.8 0 -246.2 0 -241.5 0 -236.9 0 -236.9 0 -232.3 0 -232.3 0 -246.2 0 -301.6 0 -465.1001 0 -624.9001 0 - -816.5001 0 -825.2001 0 -947.0001 0 -929.6001 0 -886.1001 0 -894.8001 0 -903.5001 0 -868.7001 0 -816.5001 0 -772.9001 0 -720.7001 0 -685.9001 0 -633.6001 0 -642.3001 0 -764.2001 0 -816.5001 0 -860.0001 0 -929.6001 0 -999.3001 0 -1043 0 -1052 0 -1060 0 -1043 0 -1017 0 -999.3001 0 -955.8001 0 -929.6001 0 -912.2001 0 -903.5001 0 -894.8001 0 -894.8001 0 -886.1001 0 -894.8001 0 -894.8001 0 -903.5001 0 -903.5001 0 -912.2001 0 -903.5001 0 -912.2001 0 -912.2001 0 -920.9001 0 -947.0001 0 -964.5001 0 -999.3001 0 -1052 0 -1107 0 -1192 0 -1277 0 -1338 0 -1423 0 -1508 0 -1569 0 -1642 0 -1679 0 -1739 0 -1764 0 -1776 0 -1788 0 -1800 0 -1800 0 -1776 0 -1764 0 -1751 0 -1715 0 -1691 0 -1642 0 -1581 0 -1521 0 -1435 0 -1350 0 -1253 0 -1156 0 -1043 0 -999.3001 0 -894.8001 0 -920.9001 0 -868.7001 0 -860.0001 0 -825.2001 0 -833.9001 0 -825.2001 0 -807.7001 0 -807.7001 0 -755.5001 0 -790.3001 0 -790.3001 0 -772.9001 0 -772.9001 0 -755.5001 0 -738.1001 0 -720.7001 0 -703.3001 0 -685.9001 0 -567.9001 0 -586.0001 0 -555.8001 0 -543.7001 0 -567.9001 0 -537.6001 0 -537.6001 0 -555.8001 0 -519.5001 0 -495.3001 0 -531.6001 0 -543.7001 0 -519.5001 0 -507.4001 0 -543.7001 0 -537.6001 0 -537.6001 0 -537.6001 0 -531.6001 0 -531.6001 0 -525.6001 0 -519.5001 0 -453.0001 0 -471.2001 0 -483.3001 0 -513.5001 0 -513.5001 0 -513.5001 0 -477.2001 0 -471.2001 0 -489.3001 0 -428.9001 0 -441.0001 0 -483.3001 0 -447.0001 0 -428.9001 0 -471.2001 0 -465.1001 0 -459.1001 0 -453.0001 0 -447.0001 0 -441.0001 0 -441.0001 0 -434.9001 0 -441.0001 0 -434.9001 0 -422.8001 0 -410.7 0 -416.8001 0 -374.5 0 -398.7 0 -404.7 0 -380.5 0 -398.7 0 -398.7 0 -398.7 0 -392.6 0 -386.6 0 -386.6 0 -386.6 0 -386.6 0 -380.5 0 -380.5 0 -380.5 0 -380.5 0 -374.5 0 -374.5 0 -374.5 0 -368.4 0 -362.4 0 -362.4 0 -356.3 0 -362.4 0 -356.3 0 -350.3 0 -350.3 0 -326.1 0 -320.1 0 -306.2 0 -273.9 0 -273.9 0 -292.4 0 -297 0 -344.3 0 -338.2 0 -344.3 0 -338.2 0 -338.2 0 -344.3 0 -344.3 0 -344.3 0 -338.2 0 -338.2 0 -338.2 0 -332.2 0 -332.2 0 -301.6 0 -292.4 0 -301.6 0 -292.4 0 -283.1 0 -260 0 -278.5 0 -283.1 0 -264.6 0 -287.7 0 -283.1 0 -283.1 0 -292.4 0 -264.6 0 -287.7 0 -283.1 0 -287.7 0 -287.7 0 -287.7 0 -297 0 -310.8 0 -306.2 0 -310.8 0 -287.7 0 -315.5 0 -292.4 0 -273.9 0 -269.3 0 -269.3 0 -278.5 0 -287.7 0 -269.3 0 -287.7 0 -260 0 -260 0 -283.1 0 -269.3 0 -283.1 0 -278.5 0 -283.1 0 -283.1 0 -287.7 0 -287.7 0 -287.7 0 -287.7 0 -301.6 0 -297 0 -292.4 0 -287.7 0 -287.7 0 -269.3 0 -264.6 0 -264.6 0 -269.3 0 -273.9 0 -264.6 0 -260 0 -269.3 0 -269.3 0 -264.6 0 -264.6 0 -264.6 0 -260 0 -260 0 -255.4 0 -255.4 0 -255.4 0 -255.4 0 -255.4 0 -255.4 0 -250.8 0 -250.8 0 -250.8 0 -255.3993 0 -250.7785 0 -246.1577 0 -232.2954 0 -236.9162 0 -236.9162 0 -236.9162 0 -232.2954 0 -232.2954 0 -232.2954 0 -227.6746 0 -232.2954 0 -227.6746 0 - -232.2954 0 -227.6746 0 -223.0539 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -223.0539 0 -218.4331 0 -232.2954 0 -227.6746 0 -223.0539 0 -223.0539 0 -218.4331 0 -223.0539 0 -223.0539 0 -223.0539 0 -218.4331 0 -223.0539 0 -232.2954 0 -223.0539 0 -218.4331 0 -213.8123 0 -218.4331 0 -213.8123 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -204.5708 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -189.8775 0 -189.8775 0 -189.8775 0 -189.8775 0 -186.52 0 -183.1625 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -186.52 0 -183.1625 0 -179.805 0 -179.805 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -173.09 0 -176.4475 0 -173.09 0 -169.7325 0 -156.3025 0 -169.7325 0 -152.945 0 -159.66 0 -159.66 0 -149.5875 0 -136.1575 0 -149.5875 0 -163.0175 0 -159.66 0 -169.7325 0 -169.7325 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -169.7325 0 -169.7325 0 -173.09 0 -173.09 0 -173.09 0 -166.375 0 -166.375 0 -169.7325 0 -169.7325 0 -169.7325 0 -169.7325 0 -166.375 0 -166.375 0 -163.0175 0 -163.0175 0 -166.375 0 -163.0175 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -156.3025 0 -163.0175 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -146.23 0 -149.5875 0 -142.8725 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -142.8725 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -136.1575 0 -136.1575 0 -139.515 0 -129.4425 0 -136.1575 0 -139.515 0 -139.515 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -139.515 0 -136.1575 0 -139.515 0 -139.515 0 -139.515 0 -136.1575 0 -142.8725 0 -136.1575 0 -132.8 0 -132.8 0 -136.1575 0 -132.8 0 -126.085 0 -122.7275 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -122.7275 0 -122.7275 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -129.4425 0 -129.4425 0 -129.4425 0 -132.8 0 -136.1575 0 -136.1575 0 -142.8725 0 -142.8725 0 -142.8725 0 -156.3025 0 -149.5875 0 -152.945 0 -156.3025 0 -156.3025 0 -149.5875 0 -159.66 0 -152.945 0 -152.945 0 -152.945 0 -152.945 0 -146.23 0 -142.8725 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -146.23 0 -142.8725 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -129.4425 0 -132.8 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -119.37 0 -122.7275 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -122.7275 0 -119.37 0 -116.0125 0 -116.0125 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -76.75501 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -95.86751 0 -102.5825 0 -102.5825 0 -105.94 0 -105.94 0 -109.2975 0 -109.2975 0 -112.655 0 -116.0125 0 -112.655 0 -136.1575 0 -149.5875 0 -159.66 0 -156.3025 0 -146.23 0 -146.23 0 -149.5875 0 -139.515 0 -139.515 0 -126.085 0 -136.1575 0 -122.7275 0 -126.085 0 -122.7275 0 -119.37 0 -122.7275 0 -119.37 0 -116.0125 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -116.0125 0 -119.37 0 -119.37 0 -119.37 0 -116.0125 0 -116.0125 0 -116.0125 0 -112.655 0 -116.0125 0 -112.655 0 -116.0125 0 -109.2975 0 -112.655 0 -122.7275 0 -132.8 0 -139.515 0 -139.515 0 -142.8725 0 -139.515 0 -132.8 0 -132.8 0 -136.1575 0 -136.1575 0 -132.8 0 -126.085 0 -132.8 0 -132.8 0 -122.7275 0 -126.085 0 -122.7275 0 -112.655 0 -122.7275 0 -116.0125 0 -105.94 0 -109.2975 0 -105.94 0 -102.5825 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -76.75501 0 -92.51001 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -92.51001 0 -92.51001 0 -95.86751 0 -99.22501 0 -102.5825 0 -109.2975 0 -119.37 0 -116.0125 0 -146.23 0 -149.5875 0 -156.3025 0 -159.66 0 -156.3025 0 -159.66 0 -156.3025 0 -159.66 0 -152.945 0 -149.5875 0 -142.8725 0 -146.23 0 -142.8725 0 -139.515 0 -136.1575 0 -136.1575 0 -126.085 0 -132.8 0 -129.4425 0 -126.085 0 -122.7275 0 -119.37 0 -119.37 0 -116.0125 0 -112.655 0 -112.655 0 -109.2975 0 -105.94 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -102.5825 0 -99.22501 0 -92.51001 0 -61.00001 0 -76.75501 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.14001 0 -59.76001 0 -58.52001 0 -59.14001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -56.04001 0 -59.76001 0 -59.14001 0 -57.90001 0 -59.14001 0 -59.14001 0 -59.76001 0 -61.00001 0 -60.38001 0 -59.76001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.14001 0 -60.38001 0 -59.14001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -58.52001 0 -59.14001 0 -57.90001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.14001 0 -59.76001 0 -60.38001 0 -61.00001 0 -76.75501 0 -95.86751 0 -92.51001 0 -92.51001 0 -95.86751 0 -92.51001 0 -99.22501 0 -99.22501 0 -102.5825 0 -99.22501 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -99.22501 0 -95.86751 0 -92.51001 0 -92.51001 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -112.655 0 -109.2975 0 -102.5825 0 -105.94 0 -109.2975 0 -112.655 0 -109.2975 0 -105.94 0 -102.5825 0 -105.94 0 -105.94 0 -109.2975 0 -116.0125 0 -119.37 0 -126.085 0 -119.37 0 -119.37 0 -116.0125 0 -109.2975 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -109.2975 0 -105.94 0 -109.2975 0 -112.655 0 -119.37 0 -129.4425 0 -152.945 0 -179.805 0 -218.4331 0 -255.3993 0 -283.1239 0 -306.2277 0 -296.9862 0 -301.607 0 -315.4693 0 -320.09 0 -362.3915 0 -362.3915 0 -362.3915 0 -368.4345 0 -362.3915 0 -356.3484 0 -356.3484 0 -350.3053 0 -350.3053 0 -350.3053 0 -350.3053 0 -356.3484 0 -356.3484 0 -362.3915 0 -368.4345 0 -320.09 0 -310.8485 0 -306.2277 0 -306.2277 0 -296.9862 0 -296.9862 0 -287.7447 0 -273.8823 0 -264.6408 0 -269.2616 0 -269.2616 0 -269.2616 0 -301.607 0 -292.3654 0 -287.7447 0 -278.5031 0 -269.2616 0 -260.02 0 -255.3993 0 -250.7785 0 -241.537 0 -236.9162 0 -232.2954 0 -223.0539 0 -204.5708 0 -183.1625 0 -173.09 0 -196.5925 0 -183.1625 0 -142.8725 0 -152.945 0 -142.8725 0 -176.4475 0 -136.1575 0 -126.085 0 -166.375 0 -166.375 0 -163.0175 0 -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -149.5875 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -139.515 0 -136.1575 0 -139.515 0 -136.1575 0 -132.8 0 -132.8 0 -129.4425 0 -126.085 0 -122.7275 0 -119.37 0 -116.0125 0 -116.0125 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -109.2975 0 - -109.2975 0 -105.94 0 -112.655 0 -122.7275 0 -116.0125 0 -109.2975 0 -92.51001 0 -99.22501 0 -92.51001 0 -92.51001 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -57.28001 0 -92.51001 0 -92.51001 0 -61.00001 0 -59.14001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.08001 0 -50.46001 0 -50.46001 0 -51.08001 0 -51.08001 0 -50.46001 0 -50.46001 0 -50.46001 0 -49.84001 0 -49.84001 0 -49.22001 0 -49.22001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.98001 0 -48.60001 0 -47.98001 0 -48.60001 0 -47.98001 0 -48.60001 0 -49.22001 0 -47.98001 0 -47.98001 0 -46.74001 0 -48.60001 0 -41.78001 0 -44.88001 0 -42.40001 0 - -35.58 0 - -47.36001 0 -47.98001 0 -48.60001 0 - -52.94001 0 -54.80001 0 -55.42001 0 -54.18001 0 -52.32001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.70001 0 -51.08001 0 -50.46001 0 -49.22001 0 -48.60001 0 -47.36001 0 - -46.12001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.12001 0 -45.50001 0 -44.88001 0 - -42.40001 0 -43.02001 0 -43.64001 0 -42.40001 0 -43.64001 0 - -41.78001 0 - -43.64001 0 -43.64001 0 -43.02001 0 -43.64001 0 -44.26001 0 -43.64001 0 -44.26001 0 -44.26001 0 -44.26001 0 -44.26001 0 -44.26001 0 -42.40001 0 -19.2 0 -38.68 0 -39.92 0 -32.48 0 -38.06 0 - -35.58 0 -38.06 0 -35.58 0 -35.58 0 -41.16 0 -39.92 0 -43.64001 0 -43.64001 0 -43.64001 0 -31.86 0 -27.6 0 -44.26001 0 -43.64001 0 -43.64001 0 -44.26001 0 -44.26001 0 -44.26001 0 - -43.64001 0 -43.64001 0 -43.64001 0 -43.02001 0 -36.2 0 - -31.86 0 -45.50001 0 - -43.02001 0 -45.50001 0 -43.02001 0 -47.36001 0 -46.12001 0 -43.02001 0 -43.64001 0 -43.64001 0 -43.64001 0 -43.02001 0 -43.02001 0 -43.02001 0 -41.78001 0 -42.40001 0 - -44.26001 0 -46.74001 0 -47.98001 0 -50.46001 0 -54.18001 0 -54.80001 0 -54.80001 0 -53.56001 0 -52.94001 0 -52.32001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.80001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.66001 0 -57.28001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -60.38001 0 -51.2614 0 -121.5236 0 -124.5223 0 -130.7166 0 -124.5223 0 -121.5236 0 -118.589 0 -115.7171 0 -115.7171 0 -112.9069 0 -110.1572 0 -104.8347 0 -102.2597 0 -99.74084 0 -97.27695 0 -94.86702 0 -92.51001 0 -75.14358 0 -60.20362 0 -59.41532 0 -57.86275 0 -57.09837 0 -55.59313 0 -54.85215 0 -53.39319 0 -51.96452 0 - -58.63505 0 -124.5223 0 -121.5236 0 -118.589 0 -115.7171 0 -115.7171 0 -112.9069 0 -115.7171 0 -112.9069 0 -112.9069 0 -112.9069 0 -110.1572 0 -118.589 0 -127.5863 0 -137.1818 0 -154.5973 0 -186.5442 0 -219.4325 0 -253.988 0 -293.1068 0 -338.661 0 -358.1103 0 -358.1103 0 -363.1136 0 -363.1136 0 -353.1638 0 -343.4397 0 -338.661 0 -338.661 0 -343.4397 0 -343.4397 0 -343.4397 0 -343.4397 0 -343.4397 0 -338.661 0 -338.661 0 -338.661 0 -338.661 0 -343.4397 0 -338.661 0 -338.661 0 -333.9371 0 -329.2677 0 -324.6522 0 -314.5294 0 -303.6562 0 -293.1068 0 -292.0694 0 -268.0973 0 -263.3214 0 -249.4287 0 -253.0705 0 -231.8856 0 -223.5183 0 -219.4325 0 -211.4528 0 -203.7232 0 -199.95 0 -190.9217 0 -182.2556 0 -178.0545 0 -169.9081 0 -165.9599 0 -166.743 0 -154.5973 0 -154.5973 0 -158.3059 0 -162.093 0 -169.9081 0 -178.0545 0 -169.9081 0 -190.9217 0 -190.9217 0 -190.9217 0 -190.9217 0 -186.5442 0 -182.2556 0 -173.9391 0 -169.9081 0 -165.9599 0 -169.9081 0 -182.2556 0 -190.9217 0 -219.4325 0 -236.169 0 -227.669 0 -215.411 0 -211.4528 0 -203.7232 0 -199.95 0 -190.9217 0 -231.8856 0 -585.7261 0 -749.3084 0 -806.8843 0 -832.6165 0 -841.3381 0 -841.3381 0 -850.1325 0 -867.9417 0 -895.2133 0 -923.1653 0 -961.5148 0 -991.1038 0 -1001.127 0 -1011.231 0 -1011.231 0 -1001.127 0 -981.1611 0 -951.8103 0 -913.7716 0 -876.9574 0 -823.9673 0 -790.0854 0 -749.3084 0 -710.2306 0 -680.1559 0 -658.2748 0 -623.059 0 -616.2001 0 -593.2256 0 -578.3048 0 -563.6945 0 -563.6945 0 -556.5042 0 -549.3896 0 -549.3896 0 -542.35 0 -542.35 0 -535.385 0 -528.4937 0 -495.1235 0 -521.6757 0 -501.6548 0 -501.6548 0 -495.1235 0 -488.6625 0 -482.271 0 -469.6946 0 -457.3894 0 -451.3372 0 -445.351 0 -439.4304 0 -445.351 0 -427.7836 0 -433.5748 0 -433.5748 0 -427.7836 0 -422.0562 0 -405.2517 0 -410.7909 0 -405.2517 0 -394.358 0 -389.0022 0 -389.0022 0 -378.4703 0 -363.1136 0 -368.1744 0 -329.2677 0 -324.6522 0 -333.9371 0 -329.2677 0 -298.3415 0 -314.5294 0 -293.1068 0 -287.951 0 -293.1068 0 -272.9472 0 -309.0518 0 -293.1068 0 -293.1068 0 -277.8722 0 -277.8722 0 -272.9472 0 -272.9472 0 -263.3214 0 -258.6186 0 -253.988 0 -258.6186 0 -223.5183 0 -231.8856 0 -249.4287 0 -227.669 0 -215.411 0 -223.5183 0 -182.2556 0 -199.95 0 -195.3898 0 -207.5571 0 -203.7232 0 -211.4528 0 -215.411 0 -207.5571 0 -186.5442 0 -195.3898 0 -199.95 0 -182.2556 0 -195.3898 0 -190.9217 0 -190.9217 0 -190.9217 0 -195.3898 0 -190.9217 0 -169.9081 0 -186.5442 0 -162.093 0 -178.0545 0 -169.9081 0 -154.5973 0 -147.4097 0 -143.9279 0 -137.1818 0 -137.1818 0 -165.9599 0 -130.7166 0 -137.1818 0 -165.9599 0 -162.093 0 -165.9599 0 -158.3059 0 -154.5973 0 -143.9279 0 -158.3059 0 -150.9657 0 -147.4097 0 -150.9657 0 -158.3059 0 -143.9279 0 -147.4097 0 -147.4097 0 -115.7171 0 -150.9657 0 -130.7166 0 -121.5236 0 -118.589 0 -133.9147 0 -112.9069 0 -133.9147 0 -137.1818 0 -137.1818 0 -133.9147 0 -133.9147 0 -133.9147 0 -130.7166 0 -127.5863 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -127.5863 0 -124.5223 0 -127.5863 0 -124.5223 0 -121.5236 0 -124.5223 0 -115.7171 0 -115.7171 0 -115.7171 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -115.7171 0 -112.9069 0 -115.7171 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -110.1572 0 -112.9069 0 -110.1572 0 -110.1572 0 -107.4668 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -99.74084 0 -99.74084 0 -102.2597 0 -102.2597 0 -121.5236 0 -150.9657 0 -137.1818 0 -124.5223 0 -121.5236 0 -121.5236 0 -118.589 0 -118.589 0 -118.589 0 -121.5236 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -127.5863 0 -127.5863 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -127.5863 0 -130.7166 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -130.7166 0 -133.9147 0 -130.7166 0 -133.9147 0 -137.1818 0 -137.1818 0 -124.5223 0 -107.4668 0 -112.9069 0 -121.5236 0 -112.9069 0 -107.4668 0 -124.5223 0 -115.7171 0 -118.589 0 -154.5973 0 -219.4325 0 -244.9397 0 -244.9397 0 -263.3214 0 -268.0973 0 -272.9472 0 -272.9472 0 -272.9472 0 -272.9472 0 -272.9472 0 -272.9472 0 -277.8722 0 -268.0973 0 -244.9397 0 -227.669 0 -223.5183 0 -236.169 0 -240.5201 0 -253.988 0 -244.9397 0 -263.3214 0 -268.0973 0 -303.6562 0 -324.6522 0 -329.2677 0 -324.6522 0 -329.2677 0 -329.2677 0 -324.6522 0 -329.2677 0 -324.6522 0 -324.6522 0 -314.5294 0 -320.09 0 -324.6522 0 -324.6522 0 -324.6522 0 -320.09 0 -320.09 0 -309.0518 0 -303.6562 0 -303.6562 0 -287.951 0 -282.8731 0 -277.8722 0 -277.8722 0 -268.0973 0 -272.9472 0 -263.3214 0 -258.6186 0 -253.988 0 -249.4287 0 -244.9397 0 -244.9397 0 -227.669 0 -219.4325 0 -231.8856 0 -227.669 0 -223.5183 0 -219.4325 0 -219.4325 0 -219.4325 0 -211.4528 0 -207.5571 0 -203.7232 0 -199.95 0 -190.9217 0 -195.3898 0 -186.5442 0 -186.5442 0 -182.2556 0 -182.2556 0 -173.9391 0 -173.9391 0 -169.9081 0 -169.9081 0 -165.9599 0 -165.9599 0 -169.9081 0 -165.9599 0 -162.093 0 -162.093 0 -158.3059 0 -158.3059 0 -158.3059 0 -158.3059 0 -150.9657 0 -143.9279 0 -130.7166 0 -133.9147 0 -140.5191 0 -147.4097 0 -143.9279 0 -140.5191 0 -143.9279 0 -143.9279 0 -147.4097 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -140.5191 0 -140.5191 0 -143.9279 0 -140.5191 0 -140.5191 0 -137.1818 0 -140.5191 0 -143.9279 0 -140.5191 0 -143.9279 0 -137.1818 0 -137.1818 0 -140.5191 0 -140.5191 0 -143.9279 0 -143.9279 0 -140.5191 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -140.5191 0 -140.5191 0 -140.5191 0 -137.1818 0 -137.1818 0 -130.7166 0 -130.7166 0 -130.7166 0 -127.5863 0 -130.7166 0 -127.5863 0 -127.5863 0 -127.5863 0 -130.7166 0 -127.5863 0 -127.5863 0 -127.5863 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -127.5863 0 -127.5863 0 -121.5236 0 -99.74084 0 -112.9069 0 -115.7171 0 -118.589 0 -121.5236 0 -112.9069 0 -112.9069 0 -121.5236 0 -124.5223 0 -127.5863 0 -127.5863 0 -127.5863 0 -127.5863 0 -127.5863 0 -127.5863 0 -127.5863 0 -127.5863 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -118.589 0 -112.9069 0 -118.589 0 -118.589 0 -118.589 0 -115.7171 0 -115.7171 0 -112.9069 0 -118.589 0 -115.7171 0 -112.9069 0 -115.7171 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -107.4668 0 -107.4668 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -102.2597 0 -102.2597 0 -104.8347 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -102.2597 0 -102.2597 0 -99.74084 0 -99.74084 0 -99.74084 0 -99.74084 0 -99.74084 0 -99.74084 0 -97.27695 0 -97.27695 0 -99.74084 0 -97.27695 0 -97.27695 0 -97.27695 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -75.14358 0 -75.14358 0 -92.51001 0 -75.14358 0 -61.00001 0 -75.14358 0 -60.20362 0 -61.00001 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -58.63505 0 -58.63505 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -56.34185 0 -56.34185 0 -57.09837 0 -56.34185 0 -57.09837 0 -56.34185 0 -57.09837 0 -56.34185 0 -57.86275 0 -137.1818 0 -178.0545 0 -190.9217 0 -186.5442 0 -178.0545 0 -162.093 0 -150.9657 0 -143.9279 0 -140.5191 0 -140.5191 0 -140.5191 0 -140.5191 0 -143.9279 0 -154.5973 0 -162.093 0 -169.9081 0 -162.093 0 -186.5442 0 -211.4528 0 -223.5183 0 -219.4325 0 -236.169 0 -277.8722 0 -324.6522 0 -358.1103 0 -439.4304 0 -710.2306 0 -1084.262 0 -1430.581 0 -1672.562 0 -1980.76 0 -2184.043 0 -2336.317 0 -2520.939 0 -2642.306 0 -2717.406 0 -2794.255 0 -2872.884 0 -2872.884 0 -2926.308 0 -2953.326 0 -2872.884 0 -2926.308 0 -2899.495 0 -2820.265 0 -2667.147 0 -2568.923 0 -2404.199 0 -2184.043 0 -1870.329 0 -1659.084 0 -1479.105 0 -1314.67 0 -1206.19 0 -1095.03 0 -1001.127 0 -932.636 0 -867.9417 0 -823.9673 0 -773.5672 0 -733.4764 0 -702.6143 0 -672.7986 0 -658.2748 0 -629.9788 0 -608.4619 0 -578.3048 0 -556.5042 0 -542.35 0 -521.6757 0 -495.1235 0 -495.1235 0 -475.9486 0 -463.5084 0 -451.3372 0 -439.4304 0 -427.7836 0 -422.0562 0 -410.7909 0 -405.2517 0 -394.358 0 -394.358 0 -383.7065 0 -378.4703 0 -368.1744 0 -363.1136 0 -358.1103 0 -353.1638 0 -343.4397 0 -333.9371 0 -329.2677 0 -320.09 0 -303.6562 0 -309.0518 0 -298.3415 0 -293.1068 0 -293.1068 0 -282.8731 0 -282.8731 0 -268.0973 0 -272.9472 0 -268.0973 0 -263.3214 0 -258.6186 0 -253.988 0 -253.988 0 -249.4287 0 -244.9397 0 -240.5201 0 -236.169 0 -236.169 0 -236.169 0 -236.169 0 -227.669 0 -227.669 0 -219.4325 0 -219.4325 0 -219.4325 0 -215.411 0 -211.4528 0 -215.411 0 -215.411 0 -207.5571 0 -207.5571 0 -203.7232 0 -199.95 0 -203.7232 0 -199.95 0 -195.3898 0 -195.3898 0 -195.3898 0 -186.5442 0 -190.9217 0 -186.5442 0 -190.9217 0 -182.2556 0 -182.2556 0 -178.0545 0 -182.2556 0 -169.9081 0 -169.9081 0 -173.9391 0 -165.9599 0 -169.9081 0 -169.9081 0 -169.9081 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -162.093 0 -162.093 0 -158.3059 0 -154.5973 0 -154.5973 0 -158.3059 0 -154.5973 0 -150.9657 0 -158.3059 0 -154.5973 0 -150.9657 0 -150.9657 0 -137.1818 0 -150.9657 0 -150.9657 0 -147.4097 0 -143.9279 0 -143.9279 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -140.5191 0 -140.5191 0 -137.1818 0 -140.5191 0 -143.9279 0 -137.1818 0 -137.1818 0 -137.1818 0 -133.9147 0 -124.5223 0 -124.5223 0 -107.4668 0 -121.5236 0 -118.589 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -130.7166 0 -133.9147 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -127.5863 0 -127.5863 0 -130.7166 0 -112.9069 0 -104.8347 0 -60.20362 0 -60.20362 0 -61.00001 0 -57.86275 0 -75.14358 0 -54.11886 0 -57.86275 0 -60.20362 0 -99.74084 0 -75.14358 0 -75.14358 0 -60.20362 0 -59.41532 0 -61.00001 0 -75.14358 0 -61.00001 0 -94.86702 0 -75.14358 0 -59.41532 0 -97.27695 0 -127.5863 0 -130.7166 0 -99.74084 0 -59.41532 0 -57.09837 0 -94.86702 0 -54.85215 0 -61.00001 0 -61.00001 0 -59.41532 0 -61.00001 0 -54.85215 0 -118.589 0 -104.8347 0 -124.5223 0 -127.5863 0 -124.5223 0 -118.589 0 -118.589 0 -112.9069 0 -112.9069 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -112.9069 0 -110.1572 0 -112.9069 0 -110.1572 0 -107.4668 0 -107.4668 0 -107.4668 0 -107.4668 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -104.8347 0 -112.9069 0 -110.1572 0 -127.5863 0 -97.27695 0 -130.7166 0 -133.9147 0 -121.5236 0 -97.27695 0 -59.41532 0 -75.14358 0 -61.00001 0 -92.51001 0 -92.51001 0 -60.20362 0 -57.86275 0 -57.86275 0 -60.20362 0 -59.41532 0 -104.8347 0 -94.86702 0 -102.2597 0 -61.00001 0 -107.4668 0 -99.74084 0 -102.2597 0 -102.2597 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -99.74084 0 -99.74084 0 -99.74084 0 -115.7171 0 -169.9081 0 -173.9391 0 -186.5442 0 -203.7232 0 -207.5571 0 -207.5571 0 -215.411 0 -215.411 0 -211.4528 0 -207.5571 0 -203.7232 0 -199.95 0 -190.9217 0 -186.5442 0 -182.2556 0 -182.2556 0 -182.2556 0 -178.0545 0 -178.0545 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -173.9391 0 -169.9081 0 -162.093 0 -158.3059 0 -154.5973 0 -154.5973 0 -150.9657 0 -150.9657 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -133.9147 0 -133.9147 0 -133.9147 0 -133.9147 0 -130.7166 0 -127.5863 0 -104.8347 0 -110.1572 0 -104.8347 0 -121.5236 0 -112.9069 0 -130.7166 0 -130.7166 0 -133.9147 0 -130.7166 0 -130.7166 0 -130.7166 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -121.5236 0 -118.589 0 -107.4668 0 -102.2597 0 -115.7171 0 -92.51001 0 -97.27695 0 -58.63505 0 -75.14358 0 -56.34185 0 -61.00001 0 -55.59313 0 -56.34185 0 -57.09837 0 -58.63505 0 -61.00001 0 -99.74084 0 -107.4668 0 -104.8347 0 -102.2597 0 -102.2597 0 -102.2597 0 -61.00001 0 -61.00001 0 -92.51001 0 -94.86702 0 -97.27695 0 -97.27695 0 -97.27695 0 -52.6751 0 -54.85215 0 -51.96452 0 -55.59313 0 -55.59313 0 -53.39319 0 -56.34185 0 -53.39319 0 -52.6751 0 -51.2614 0 -57.86275 0 -53.39319 0 -75.14358 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -57.86275 0 -75.14358 0 -61.00001 0 -75.14358 0 -75.14358 0 -59.41532 0 -54.11886 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -55.59313 0 -58.63505 0 -59.41532 0 -58.63505 0 -59.41532 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -57.86275 0 -58.63505 0 -58.63505 0 -57.86275 0 -57.86275 0 -57.86275 0 -58.63505 0 -57.86275 0 -57.09837 0 -57.86275 0 -57.86275 0 -57.09837 0 -57.09837 0 -57.09837 0 -56.34185 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.09837 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -55.59313 0 -55.59313 0 -56.34185 0 -53.39319 0 -55.59313 0 -53.39319 0 -50.56569 0 -47.85577 0 -54.11886 0 -47.19624 0 -47.19624 0 -55.59313 0 -56.34185 0 -56.34185 0 -55.59313 0 -56.34185 0 -53.39319 0 -49.19625 0 -52.6751 0 -49.19625 0 -49.87733 0 -47.85577 0 -52.6751 0 -47.19624 0 -49.87733 0 -51.2614 0 -50.56569 0 -54.11886 0 -47.19624 0 -46.54379 0 -49.19625 0 -47.85577 0 -51.96452 0 -50.56569 0 -49.87733 0 -50.56569 0 -54.85215 0 -55.59313 0 -54.85215 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -49.87733 0 -53.39319 0 -49.19625 0 -49.19625 0 -51.2614 0 -49.87733 0 -46.54379 0 -47.85577 0 -47.85577 0 -45.89836 0 -46.54379 0 -49.19625 0 -45.2599 0 -47.19624 0 -43.38577 0 -47.19624 0 -45.2599 0 -45.89836 0 -46.54379 0 -47.19624 0 -49.87733 0 -50.56569 0 -47.85577 0 -47.85577 0 -47.85577 0 -51.2614 0 -45.89836 0 -48.52242 0 -49.19625 0 -47.19624 0 -46.54379 0 -48.52242 0 -47.19624 0 -49.19625 0 -49.87733 0 -44.00365 0 -44.00365 0 -44.00365 0 -41.57241 0 -43.38577 0 -44.62835 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.2614 0 -49.19625 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.96452 0 -51.2614 0 -50.56569 0 -51.2614 0 -51.2614 0 -50.56569 0 -50.56569 0 -51.2614 0 -50.56569 0 -49.87733 0 -50.56569 0 -50.56569 0 -47.85577 0 -50.56569 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.2614 0 -50.56569 0 -49.87733 0 -51.2614 0 -51.2614 0 -51.2614 0 -50.56569 0 -51.2614 0 -51.2614 0 - -50.56569 0 -49.19625 0 -49.19625 0 -49.87733 0 -50.56569 0 -49.19625 0 -50.56569 0 -50.56569 0 -50.56569 0 -51.2614 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.2614 0 -50.56569 0 -50.56569 0 -48.52242 0 -46.54379 0 -44.00365 0 -45.89836 0 -43.38577 0 -47.85577 0 -49.19625 0 -49.87733 0 -50.56569 0 -51.96452 0 -50.56569 0 -49.87733 0 -51.2614 0 -51.2614 0 -49.87733 0 -50.56569 0 -51.2614 0 -50.56569 0 -50.56569 0 -51.2614 0 -50.56569 0 -49.87733 0 -49.87733 0 -48.52242 0 -46.54379 0 -45.89836 0 -47.19624 0 -44.62835 0 -45.89836 0 -48.52242 0 -49.87733 0 -48.52242 0 -48.52242 0 -50.56569 0 -50.56569 0 -51.2614 0 -49.87733 0 -50.56569 0 -49.87733 0 -51.2614 0 -49.87733 0 -51.2614 0 -51.2614 0 -49.87733 0 -49.87733 0 -49.19625 0 -49.87733 0 -49.19625 0 -49.19625 0 -48.52242 0 -48.52242 0 -48.52242 0 -49.19625 0 -50.56569 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.2614 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -47.19624 0 -49.19625 0 -49.87733 0 -51.2614 0 -50.56569 0 -51.2614 0 -50.56569 0 -51.2614 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.2614 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -49.87733 0 -45.89836 0 -45.2599 0 -45.2599 0 -42.77463 0 -42.1702 0 -44.00365 0 -40.39657 0 -42.77463 0 -41.57241 0 -47.19624 0 -45.89836 0 -49.19625 0 -49.87733 0 -47.19624 0 -48.52242 0 -49.19625 0 -50.56569 0 -49.87733 0 -49.19625 0 -49.87733 0 -49.87733 0 -49.87733 0 -48.52242 0 -49.87733 0 -48.52242 0 -49.87733 0 -49.87733 0 -50.56569 0 -49.87733 0 -49.87733 0 -49.19625 0 -49.87733 0 -54.11886 0 -57.09837 0 -55.59313 0 -54.11886 0 -53.39319 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 - -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -51.2614 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -49.19625 0 -49.87733 0 -49.19625 0 -49.87733 0 -47.85577 0 -49.87733 0 -49.87733 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -50.56569 0 -49.87733 0 -50.56569 0 -50.56569 0 -49.87733 0 -50.56569 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.19625 0 -50.56569 0 -47.19624 0 -47.19624 0 -47.85577 0 -47.19624 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 - -50.56569 0 -50.56569 0 -49.87733 0 -49.87733 0 -50.56569 0 -49.87733 0 -50.56569 0 -49.87733 0 -45.89836 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.19625 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.19625 0 -42.77463 0 -45.89836 0 -44.00365 0 -46.54379 0 -47.85577 0 -48.52242 0 -49.19625 0 -47.85577 0 -49.19625 0 -45.89836 0 -48.52242 0 -49.19625 0 -49.19625 0 -48.52242 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.19624 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.87733 0 -49.19625 0 -48.52242 0 -49.19625 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.85577 0 -48.52242 0 -49.87733 0 -49.87733 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.85577 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.87733 0 -49.19625 0 -49.19625 0 -49.87733 0 -49.19625 0 -49.19625 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 - -49.87733 0 -49.87733 0 -50.56569 0 -50.56569 0 -49.87733 0 -49.87733 0 -50.56569 0 -50.56569 0 -50.56569 0 -49.87733 0 -49.87733 0 -50.56569 0 -49.19625 0 -49.19625 0 -49.87733 0 -51.2614 0 -52.6751 0 -54.85215 0 -58.63505 0 -75.14358 0 -61.00001 0 -92.51001 0 -97.27695 0 -102.2597 0 -102.2597 0 -107.4668 0 -104.8347 0 -107.4668 0 -107.4668 0 -107.4668 0 -107.4668 0 -104.8347 0 -104.8347 0 -104.8347 0 -107.4668 0 -107.4668 0 -104.8347 0 -104.8347 0 -104.8347 0 -107.4668 0 -104.8347 0 -102.2597 0 -104.8347 0 -102.2597 0 -102.2597 0 -102.2597 0 -102.2597 0 -99.74084 0 -99.74084 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -94.86702 0 -92.51001 0 -94.86702 0 -92.51001 0 -92.51001 0 -92.51001 0 - -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -56.34185 0 -56.34185 0 -56.34185 0 -55.59313 0 -55.59313 0 -56.34185 0 -55.59313 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -55.59313 0 -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.11886 0 -54.85215 0 -54.85215 0 -54.85215 0 -55.59313 0 -54.85215 0 -56.34185 0 -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.11886 0 -54.11886 0 -53.39319 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -55.59313 0 -55.59313 0 -56.34185 0 -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.85215 0 -53.39319 0 -54.11886 0 -54.11886 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.11886 0 -54.11886 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.85215 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -54.11886 0 -53.39319 0 -52.6751 0 -53.39319 0 -52.6751 0 -53.39319 0 -52.6751 0 -53.39319 0 -53.39319 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -53.39319 0 -53.39319 0 -54.11886 0 -53.39319 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -52.6751 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -53.39319 0 -54.11886 0 -53.39319 0 -53.39319 0 -53.39319 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -52.6751 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -51.96452 0 -52.6751 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -53.39319 0 -53.39319 0 -54.11886 0 -53.39319 0 -53.39319 0 -53.39319 0 -52.6751 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -52.6751 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.96452 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -52.6751 0 -53.39319 0 -53.39319 0 -53.39319 0 -54.11886 0 -54.85215 0 -54.85215 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.11886 0 -53.39319 0 -54.11886 0 -53.39319 0 -52.6751 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.85215 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.85215 0 -55.59313 0 -56.34185 0 -55.59313 0 -55.59313 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 - -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -76.75501 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -59.76001 0 -61.00001 0 -61.00001 0 -59.76001 0 -57.90001 0 -57.90001 0 -57.90001 0 -60.38001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -61.00001 0 -76.75501 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -92.51001 0 -76.75501 0 -61.00001 0 -76.75501 0 -92.51001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -92.51001 0 -76.75501 0 -92.51001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -76.75501 0 -60.38001 0 -61.00001 0 -57.28001 0 -57.90001 0 -59.76001 0 -58.52001 0 -59.14001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -60.38001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -95.86751 0 -95.86751 0 -61.00001 0 -76.75501 0 -61.00001 0 -59.76001 0 -58.52001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -58.52001 0 -57.90001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -95.86751 0 -61.00001 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -61.00001 0 -60.38001 0 -59.14001 0 -60.38001 0 -76.75501 0 -61.00001 0 -60.38001 0 -59.76001 0 -59.14001 0 -59.14001 0 -60.38001 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -60.38001 0 -59.14001 0 -61.00001 0 -59.14001 0 -61.00001 0 -60.38001 0 -92.51001 0 -56.04001 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -76.75501 0 -92.51001 0 -76.75501 0 -92.51001 0 -76.75501 0 -61.00001 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -58.52001 0 -61.00001 0 -60.38001 0 -57.90001 0 -59.76001 0 -61.00001 0 -60.38001 0 -61.00001 0 -92.51001 0 -99.22501 0 -92.51001 0 -59.14001 0 -59.76001 0 -129.4425 0 -132.8 0 -136.1575 0 -122.7275 0 -102.5825 0 -95.86751 0 -95.86751 0 -102.5825 0 -116.0125 0 -116.0125 0 -112.655 0 -109.2975 0 -109.2975 0 -102.5825 0 -109.2975 0 -105.94 0 -105.94 0 -102.5825 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -76.75501 0 -92.51001 0 -99.22501 0 -95.86751 0 - -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -92.51001 0 -95.86751 0 -92.51001 0 -95.86751 0 -95.86751 0 -99.22501 0 -99.22501 0 -92.51001 0 -92.51001 0 - -92.51001 0 -92.51001 0 -76.75501 0 - -95.86751 0 - -105.94 0 -109.2975 0 -105.94 0 -105.94 0 -105.94 0 -109.2975 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -116.0125 0 -112.655 0 -116.0125 0 -112.655 0 -112.655 0 -112.655 0 - -139.515 0 -142.8725 0 -139.515 0 -139.515 0 -136.1575 0 -139.515 0 -139.515 0 - -139.515 0 -136.1575 0 -136.1575 0 -132.8 0 -129.4425 0 -129.4425 0 -122.7275 0 -122.7275 0 - -126.085 0 -126.085 0 -132.8 0 -142.8725 0 -132.8 0 -126.085 0 -122.7275 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -109.2975 0 -99.22501 0 -92.51001 0 -58.52001 0 -57.28001 0 -57.28001 0 -54.80001 0 -56.66001 0 -57.90001 0 -59.14001 0 -59.14001 0 -59.76001 0 -60.38001 0 -95.86751 0 -116.0125 0 -126.085 0 -119.37 0 -112.655 0 -112.655 0 -122.7275 0 -136.1575 0 -132.8 0 -132.8 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -136.1575 0 -139.515 0 -136.1575 0 -76.75501 0 -95.86751 0 -109.2975 0 -122.7275 0 -129.4425 0 -126.085 0 -122.7275 0 -129.4425 0 -122.7275 0 -126.085 0 -122.7275 0 -122.7275 0 -119.37 0 -119.37 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -116.0125 0 -116.0125 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -99.22501 0 -102.5825 0 -105.94 0 -105.94 0 -102.5825 0 -99.22501 0 -99.22501 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -102.5825 0 -76.75501 0 -59.76001 0 -57.90001 0 -57.28001 0 -56.04001 0 -57.90001 0 -55.42001 0 -59.76001 0 -59.76001 0 -95.86751 0 -61.00001 0 -102.5825 0 -116.0125 0 -122.7275 0 -102.5825 0 -92.51001 0 -95.86751 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -99.22501 0 -99.22501 0 -99.22501 0 -102.5825 0 -102.5825 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -76.75501 0 -76.75501 0 -61.00001 0 -92.51001 0 -76.75501 0 -92.51001 0 -95.86751 0 -95.86751 0 -99.22501 0 -102.5825 0 -99.22501 0 -99.22501 0 -102.5825 0 -99.22501 0 -92.51001 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -76.75501 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -99.22501 0 -92.51001 0 -95.86751 0 -99.22501 0 -102.5825 0 -102.5825 0 -99.22501 0 -99.22501 0 -102.5825 0 -99.22501 0 -99.22501 0 -92.51001 0 -99.22501 0 -95.86751 0 -95.86751 0 -99.22501 0 -95.86751 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -99.22501 0 -99.22501 0 -95.86751 0 -99.22501 0 -95.86751 0 -59.14001 0 -95.86751 0 -99.22501 0 -99.22501 0 -95.86751 0 -92.51001 0 -95.86751 0 -92.51001 0 -95.86751 0 -99.22501 0 -102.5825 0 -105.94 0 -109.2975 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -105.94 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -60.38001 0 -57.90001 0 -92.51001 0 -57.90001 0 -58.52001 0 -92.51001 0 -92.51001 0 -99.22501 0 -60.38001 0 -57.28001 0 -76.75501 0 -57.28001 0 -92.51001 0 -59.14001 0 -92.51001 0 -92.51001 0 -102.5825 0 -95.86751 0 -92.51001 0 -76.75501 0 -92.51001 0 -92.51001 0 -76.75501 0 -57.90001 0 -59.14001 0 -61.00001 0 -59.76001 0 -95.86751 0 -76.75501 0 -95.86751 0 -76.75501 0 -92.51001 0 -76.75501 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -92.51001 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -92.51001 0 -95.86751 0 -95.86751 0 -99.22501 0 -92.51001 0 -92.51001 0 -99.22501 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -92.51001 0 -99.22501 0 -92.51001 0 -92.51001 0 -95.86751 0 -92.51001 0 -95.86751 0 -95.86751 0 -99.22501 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -92.51001 0 -58.52001 0 -60.38001 0 -61.00001 0 -57.28001 0 -60.38001 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -102.5825 0 -105.94 0 -102.5825 0 -102.5825 0 -105.94 0 -102.5825 0 -105.94 0 -105.94 0 -95.86751 0 -95.86751 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -99.22501 0 -95.86751 0 -99.22501 0 -99.22501 0 -95.86751 0 -99.22501 0 -99.22501 0 -102.5825 0 -105.94 0 -109.2975 0 -102.5825 0 -99.22501 0 -102.5825 0 -102.5825 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -102.5825 0 -105.94 0 -105.94 0 -105.94 0 -92.51001 0 -102.5825 0 -95.86751 0 -60.38001 0 -56.04001 0 -54.80001 0 -55.42001 0 -56.66001 0 -55.42001 0 -54.80001 0 -54.18001 0 -53.56001 0 -52.94001 0 -51.08001 0 -50.46001 0 -52.32001 0 -52.94001 0 -53.56001 0 -57.90001 0 -61.00001 0 -92.51001 0 -95.86751 0 -92.51001 0 -76.75501 0 -76.75501 0 -60.38001 0 -58.52001 0 -56.04001 0 -56.04001 0 - -59.76001 0 -95.86751 0 -76.75501 0 -59.76001 0 -59.76001 0 -61.00001 0 -58.52001 0 -60.38001 0 -105.94 0 -99.22501 0 -99.22501 0 -99.22501 0 -109.2975 0 -95.86751 0 -112.655 0 -139.515 0 -149.5875 0 -152.945 0 -152.945 0 -152.945 0 -166.375 0 -241.537 0 -278.5031 0 -255.3993 0 -223.0539 0 -209.1916 0 -223.0539 0 -218.4331 0 -218.4331 0 -223.0539 0 -223.0539 0 -236.9162 0 -223.0539 0 -199.95 0 -186.52 0 -176.4475 0 -149.5875 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -136.1575 0 -142.8725 0 -156.3025 0 -163.0175 0 -173.09 0 -186.52 0 -236.9162 0 -241.537 0 -273.8823 0 -306.2277 0 -332.1762 0 -362.3915 0 -374.4776 0 -386.5637 0 -310.8485 0 -209.1916 0 -105.94 0 -57.90001 0 -76.75501 0 -61.00001 0 -99.22501 0 -116.0125 0 -139.515 0 -136.1575 0 -132.8 0 -136.1575 0 -109.2975 0 -105.94 0 -116.0125 0 -142.8725 0 -132.8 0 -146.23 0 -152.945 0 -152.945 0 -149.5875 0 -142.8725 0 -139.515 0 -139.515 0 -136.1575 0 -132.8 0 -126.085 0 -126.085 0 -119.37 0 -119.37 0 -119.37 0 -122.7275 0 -126.085 0 -126.085 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -116.0125 0 -95.86751 0 -116.0125 0 -95.86751 0 -112.655 0 -57.28001 0 -99.22501 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -112.655 0 -112.655 0 -112.655 0 -116.0125 0 -105.94 0 -105.94 0 -102.5825 0 -76.75501 0 -92.51001 0 -99.22501 0 -76.75501 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -61.00001 0 -92.51001 0 -95.86751 0 -95.86751 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -99.22501 0 -105.94 0 -112.655 0 -119.37 0 -122.7275 0 -122.7275 0 -126.085 0 -126.085 0 -129.4425 0 -132.8 0 -139.515 0 -146.23 0 -149.5875 0 -152.945 0 -159.66 0 -166.375 0 -166.375 0 -169.7325 0 -169.7325 0 -169.7325 0 -176.4475 0 -183.1625 0 -186.52 0 -189.8775 0 - -193.235 0 -196.5925 0 -209.1916 0 -218.4331 0 -232.2954 0 -246.1577 0 -250.7785 0 -260.02 0 -269.2616 0 -278.5031 0 -283.1239 0 -296.9862 0 -306.2277 0 -326.1331 0 -350.3053 0 -386.5637 0 -434.9082 0 -501.3819 0 -555.7695 0 -616.2001 0 -694.5541 0 -781.6141 0 -851.2621 0 -920.9101 0 -981.8521 0 -1042.794 0 -1119.341 0 -1167.962 0 -1216.582 0 -1277.359 0 -1313.824 0 -1313.824 0 -1362.445 0 -1374.6 0 -1362.445 0 -1350.29 0 -1374.6 0 -1362.445 0 -1350.29 0 -1338.135 0 -1313.824 0 -1277.359 0 -1289.514 0 -1240.893 0 -1228.738 0 -1204.427 0 -1167.962 0 -1155.806 0 -1107.185 0 -1086.324 0 -1060.206 0 -1042.794 0 -1007.97 0 -990.5581 0 -964.4401 0 -947.0281 0 -929.6161 0 -920.9101 0 -894.7921 0 -859.9681 0 -833.8501 0 -825.1441 0 -807.7321 0 -772.9081 0 -764.2021 0 -720.6721 0 -703.2601 0 -703.2601 0 -677.1421 0 -677.1421 0 -659.7301 0 -616.2001 0 -616.2001 0 -610.157 0 -598.0709 0 -579.9417 0 -585.9848 0 -567.8556 0 -567.8556 0 -549.7264 0 -555.7695 0 -531.5972 0 -537.6403 0 -525.5541 0 -525.5541 0 -513.468 0 -513.468 0 -489.2958 0 -495.3388 0 -489.2958 0 -465.1235 0 -483.2527 0 -471.1666 0 -453.0374 0 -465.1235 0 -459.0805 0 -459.0805 0 -446.9943 0 -446.9943 0 -446.9943 0 -453.0374 0 -440.9513 0 -434.9082 0 -440.9513 0 -428.8652 0 -422.8221 0 -434.9082 0 -434.9082 0 -428.8652 0 -416.779 0 -416.779 0 -410.736 0 -410.736 0 -410.736 0 -404.6929 0 -410.736 0 -410.736 0 -404.6929 0 -404.6929 0 -404.6929 0 -398.6498 0 -392.6068 0 -398.6498 0 -398.6498 0 -398.6498 0 -398.6498 0 -404.6929 0 -392.6068 0 -392.6068 0 -386.5637 0 -398.6498 0 -404.6929 0 -398.6498 0 -398.6498 0 -392.6068 0 -398.6498 0 -392.6068 0 -392.6068 0 -386.5637 0 -386.5637 0 -392.6068 0 -392.6068 0 -386.5637 0 -386.5637 0 -386.5637 0 -380.5207 0 -380.5207 0 -380.5207 0 -380.5207 0 -374.4776 0 -386.5637 0 -380.5207 0 -374.4776 0 -374.4776 0 -374.4776 0 -368.4345 0 -368.4345 0 -374.4776 0 -368.4345 0 -368.4345 0 -368.4345 0 -368.4345 0 -362.3915 0 -356.3484 0 -356.3484 0 -356.3484 0 -350.3053 0 -344.2623 0 -350.3053 0 - -344.2623 0 -344.2623 0 -338.2192 0 -344.2623 0 -338.2192 0 -338.2192 0 -344.2623 0 -344.2623 0 -338.2192 0 -338.2192 0 -338.2192 0 -338.2192 0 -338.2192 0 -326.1331 0 -332.1762 0 -332.1762 0 -332.1762 0 -296.9862 0 -292.3654 0 -283.1239 0 -246.1577 0 -264.6408 0 -264.6408 0 -287.7447 0 -315.4693 0 -315.4693 0 -315.4693 0 -315.4693 0 -315.4693 0 -310.8485 0 -310.8485 0 -315.4693 0 -310.8485 0 -315.4693 0 -310.8485 0 -310.8485 0 -315.4693 0 -315.4693 0 -315.4693 0 -310.8485 0 -310.8485 0 -310.8485 0 -315.4693 0 -306.2277 0 -306.2277 0 -306.2277 0 -306.2277 0 -301.607 0 -306.2277 0 -306.2277 0 -301.607 0 -306.2277 0 -306.2277 0 -301.607 0 -306.2277 0 -310.8485 0 -310.8485 0 -310.8485 0 -315.4693 0 -310.8485 0 -310.8485 0 -315.4693 0 -315.4693 0 -310.8485 0 -306.2277 0 -310.8485 0 -306.2277 0 -301.607 0 -296.9862 0 -296.9862 0 -296.9862 0 -292.3654 0 -296.9862 0 -292.3654 0 -292.3654 0 -287.7447 0 -292.3654 0 -296.9862 0 -292.3654 0 -296.9862 0 -292.3654 0 -292.3654 0 -296.9862 0 -296.9862 0 -292.3654 0 -292.3654 0 -296.9862 0 -283.1239 0 -283.1239 0 -283.1239 0 -283.1239 0 -278.5031 0 -273.8823 0 -269.2616 0 -269.2616 0 -264.6408 0 -269.2616 0 -264.6408 0 -269.2616 0 -269.2616 0 -273.8823 0 -273.8823 0 -273.8823 0 -278.5031 0 -278.5031 0 -273.8823 0 -269.2616 0 -273.8823 0 -278.5031 0 -278.5031 0 -278.5031 0 -269.2616 0 -273.8823 0 -273.8823 0 -269.2616 0 -273.8823 0 -269.2616 0 -269.2616 0 -264.6408 0 -260.02 0 -255.3993 0 -255.3993 0 -260.02 0 -264.6408 0 - -264.6408 0 -260.02 0 -264.6408 0 -264.6408 0 -264.6408 0 -264.6408 0 -260.02 0 -260.02 0 -260.02 0 -260.02 0 -264.6408 0 -260.02 0 -260.02 0 -255.3993 0 -260.02 0 -255.3993 0 -255.3993 0 -250.7785 0 -246.1577 0 -246.1577 0 -250.7785 0 -250.7785 0 -250.7785 0 -255.3993 0 -250.7785 0 -250.7785 0 -255.3993 0 -250.7785 0 -255.3993 0 -250.7785 0 -250.7785 0 -250.7785 0 -246.1577 0 -250.7785 0 -250.7785 0 -250.7785 0 -250.7785 0 -250.7785 0 -246.1577 0 -246.1577 0 -236.9162 0 -246.1577 0 -236.9162 0 -241.537 0 -241.537 0 -241.537 0 -246.1577 0 -246.1577 0 -241.537 0 -241.537 0 -241.537 0 -241.537 0 -246.1577 0 -241.537 0 -241.537 0 -241.537 0 -241.537 0 -246.1577 0 -241.537 0 -246.1577 0 -246.1577 0 -241.537 0 -241.537 0 -241.537 0 -241.537 0 -236.9162 0 -241.537 0 -241.537 0 -236.9162 0 -241.537 0 -241.537 0 -241.537 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -232.2954 0 -232.2954 0 -236.9162 0 -223.0539 0 -227.6746 0 -232.2954 0 -227.6746 0 -227.6746 0 -227.6746 0 -232.2954 0 -227.6746 0 -232.2954 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -227.6746 0 -223.0539 0 -223.0539 0 -223.0539 0 -223.0539 0 -213.8123 0 -193.235 0 -213.8123 0 -213.8123 0 -199.95 0 -204.5708 0 -179.805 0 -173.09 0 -173.09 0 -199.95 0 -213.8123 0 -213.8123 0 -218.4331 0 -218.4331 0 -213.8123 0 -213.8123 0 -213.8123 0 -193.235 0 -213.8123 0 -213.8123 0 -213.8123 0 -218.4331 0 -218.4331 0 -213.8123 0 -199.95 0 -179.805 0 -156.3025 0 -193.235 0 -209.1916 0 -213.8123 0 -209.1916 0 -209.1916 0 -204.5708 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -213.8123 0 -213.8123 0 -213.8123 0 -218.4331 0 -218.4331 0 -218.4331 0 -218.4331 0 -218.4331 0 -218.4331 0 -204.5708 0 -204.5708 0 -204.5708 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -204.5708 0 -199.95 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -209.1916 0 -199.95 0 -199.95 0 -169.7325 0 -193.235 0 -149.5875 0 -169.7325 0 -173.09 0 -159.66 0 -173.09 0 -196.5925 0 -179.805 0 -176.4475 0 -193.235 0 -193.235 0 -199.95 0 -204.5708 0 -199.95 0 -199.95 0 -209.1916 0 -199.95 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -204.5708 0 -204.5708 0 -209.1916 0 -199.95 0 -189.8775 0 -209.1916 0 -204.5708 0 -199.95 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -199.95 0 -209.1916 0 -204.5708 0 -204.5708 0 -209.1916 0 -204.5708 0 -199.95 0 -204.5708 0 -204.5708 0 -199.95 0 -209.1916 0 -199.95 0 -204.5708 0 -204.5708 0 -179.805 0 -186.52 0 -173.09 0 -183.1625 0 -199.95 0 -204.5708 0 -209.1916 0 -209.1916 0 -213.8123 0 -209.1916 0 -204.5708 0 -209.1916 0 -209.1916 0 -213.8123 0 -204.5708 0 -204.5708 0 -209.1916 0 -209.1916 0 -204.5708 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -199.95 0 -204.5708 0 -204.5708 0 -204.5708 0 -199.95 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -204.5708 0 -199.95 0 -199.95 0 -204.5708 0 -204.5708 0 -204.5708 0 -204.5708 0 -209.1916 0 -199.95 0 -204.5708 0 -189.8775 0 -173.09 0 -204.5708 0 -189.8775 0 -179.805 0 -183.1625 0 -196.5925 0 -196.5925 0 -199.95 0 -199.95 0 -204.5708 0 -204.5708 0 -209.1916 0 -209.1916 0 -209.1916 0 -213.8123 0 -209.1916 0 -213.8123 0 -209.1916 0 -213.8123 0 -209.1916 0 -196.5925 0 -183.1625 0 -193.235 0 -189.8775 0 -169.7325 0 -166.375 0 -152.945 0 -163.0175 0 -156.3025 0 -176.4475 0 -204.5708 0 -204.5708 0 -186.52 0 -189.8775 0 -199.95 0 -186.52 0 -176.4475 0 -163.0175 0 -176.4475 0 -183.1625 0 -169.7325 0 -176.4475 0 -179.805 0 -179.805 0 -166.375 0 -169.7325 0 -183.1625 0 -189.8775 0 -186.52 0 -169.7325 0 -169.7325 0 -152.945 0 -152.945 0 -176.4475 0 -193.235 0 -196.5925 0 -199.95 0 -196.5925 0 -199.95 0 -196.5925 0 -199.95 0 -186.52 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -196.5925 0 -193.235 0 -193.235 0 -189.8775 0 -189.8775 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -183.1625 0 -193.235 0 -193.235 0 -193.235 0 -186.52 0 -189.8775 0 -186.52 0 -183.1625 0 -183.1625 0 -179.805 0 -183.1625 0 -169.7325 0 -149.5875 0 -156.3025 0 -146.23 0 -156.3025 0 -152.945 0 -166.375 0 -149.5875 0 -163.0175 0 -166.375 0 -179.805 0 -176.4475 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -176.4475 0 -179.805 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -179.805 0 -179.805 0 -179.805 0 -183.1625 0 -186.52 0 -189.8775 0 -196.5925 0 -199.95 0 -199.95 0 -204.5708 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -189.8775 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -189.8775 0 -186.52 0 -189.8775 0 -189.8775 0 -189.8775 0 -189.8775 0 -193.235 0 -189.8775 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -189.8775 0 -193.235 0 -189.8775 0 -193.235 0 -176.4475 0 -189.8775 0 -179.805 0 -156.3025 0 -152.945 0 -183.1625 0 -186.52 0 -186.52 0 -189.8775 0 -189.8775 0 -186.52 0 -189.8775 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -189.8775 0 -189.8775 0 -189.8775 0 -189.8775 0 -186.52 0 -173.09 0 -163.0175 0 -173.09 0 -152.945 0 -159.66 0 -156.3025 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -183.1625 0 -183.1625 0 -186.52 0 -183.1625 0 -186.52 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -176.4475 0 -179.805 0 -179.805 0 -183.1625 0 -179.805 0 -179.805 0 -176.4475 0 -173.09 0 -179.805 0 -179.805 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -179.805 0 -179.805 0 -152.945 0 -176.4475 0 -176.4475 0 -166.375 0 -179.805 0 -179.805 0 -179.805 0 -196.5925 0 -223.0539 0 -236.9162 0 -236.9162 0 -250.7785 0 -250.7785 0 -250.7785 0 -250.7785 0 -255.3993 0 -250.7785 0 -246.1577 0 -241.537 0 -241.537 0 -246.1577 0 -255.3993 0 -260.02 0 -273.8823 0 -287.7446 0 -301.607 0 -310.8485 0 -310.8485 0 -310.8485 0 -301.607 0 -296.9862 0 -296.9862 0 -287.7447 0 -273.8823 0 -264.6408 0 -260.02 0 -255.3993 0 -250.7785 0 -246.1577 0 -241.537 0 -236.9162 0 -232.2954 0 -232.2954 0 -232.2954 0 -223.0539 0 -227.6746 0 -227.6746 0 -227.6746 0 -223.0539 0 -218.4331 0 -213.8123 0 -213.8123 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -204.5708 0 - -204.5708 0 -204.5708 0 -204.5708 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -193.235 0 -196.5925 0 -196.5925 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -193.235 0 -189.8775 0 -193.235 0 -189.8775 0 -193.235 0 -189.8775 0 -186.52 0 -189.8775 0 -173.09 0 -183.1625 0 -166.375 0 -166.375 0 -186.52 0 -189.8775 0 -189.8775 0 -189.8775 0 -183.1625 0 -186.52 0 -183.1625 0 -183.1625 0 -179.805 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -169.7325 0 -179.805 0 -173.09 0 -173.09 0 -169.7325 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -176.4475 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -179.805 0 -179.805 0 -176.4475 0 -173.09 0 -169.7325 0 -173.09 0 -169.7325 0 -166.375 0 -159.66 0 -156.3025 0 -139.515 0 -146.23 0 -169.7325 0 -169.7325 0 -169.7325 0 -169.7325 0 -173.09 0 -169.7325 0 -173.09 0 -173.09 0 -173.09 0 -156.3025 0 -173.09 0 -173.09 0 -173.09 0 -169.7325 0 -169.7325 0 -166.375 0 -169.7325 0 -166.375 0 -169.7325 0 -169.7325 0 -169.7325 0 -169.7325 0 -166.375 0 -166.375 0 -166.375 0 -163.0175 0 -166.375 0 -166.375 0 -166.375 0 -169.7325 0 -169.7325 0 -169.7325 0 -169.7325 0 -169.7325 0 -166.375 0 -166.375 0 -166.375 0 -169.7325 0 -166.375 0 -166.375 0 -163.0175 0 -166.375 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -119.37 0 -149.5875 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -129.4425 0 -163.0175 0 -159.66 0 -159.66 0 -163.0175 0 -166.375 0 -163.0175 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -163.0175 0 -163.0175 0 -159.66 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -163.0175 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -156.3025 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -163.0175 0 -159.66 0 -156.3025 0 -156.3025 0 -152.945 0 -156.3025 0 -152.945 0 -156.3025 0 -152.945 0 - -152.945 0 -156.3025 0 -152.945 0 -152.945 0 -156.3025 0 -152.945 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -122.7275 0 -122.7275 0 -109.2975 0 -126.085 0 -152.945 0 -136.1575 0 -136.1575 0 -156.3025 0 -159.66 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -152.945 0 -152.945 0 -152.945 0 -152.945 0 -156.3025 0 -156.3025 0 -129.4425 0 -122.7275 0 -122.7275 0 -109.2975 0 -119.37 0 -126.085 0 -109.2975 0 -99.22501 0 -102.5825 0 -102.5825 0 -99.22501 0 -105.94 0 -112.655 0 -119.37 0 -112.655 0 -122.7275 0 -116.0125 0 -116.0125 0 -126.085 0 -112.655 0 -122.7275 0 -132.8 0 -112.655 0 -109.2975 0 -116.0125 0 -105.94 0 -116.0125 0 -102.5825 0 -116.0125 0 -109.2975 0 -59.76001 0 -102.5825 0 -109.2975 0 -122.7275 0 -105.94 0 -126.085 0 -102.5825 0 -126.085 0 -126.085 0 -112.655 0 -112.655 0 -105.94 0 -109.2975 0 -122.7275 0 -152.945 0 -142.8725 0 -132.8 0 -132.8 0 -109.2975 0 -132.8 0 -122.7275 0 -129.4425 0 -132.8 0 -109.2975 0 -116.0125 0 -116.0125 0 -152.945 0 -156.3025 0 -159.66 0 -152.945 0 -152.945 0 -156.3025 0 -152.945 0 -149.5875 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -152.945 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -146.23 0 -149.5875 0 -146.23 0 -146.23 0 -142.8725 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -146.23 0 -146.23 0 -109.2975 0 -116.0125 0 -109.2975 0 -116.0125 0 -112.655 0 -116.0125 0 -126.085 0 -142.8725 0 -142.8725 0 -139.515 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -142.8725 0 -146.23 0 -149.5875 0 -146.23 0 -149.5875 0 -149.5875 0 -146.23 0 -142.8725 0 -142.8725 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -142.8725 0 -139.515 0 -126.085 0 -129.4425 0 -139.515 0 -136.1575 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -136.1575 0 -136.1575 0 -139.515 0 -139.515 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -136.1575 0 -136.1575 0 -136.1575 0 -139.515 0 -139.515 0 -136.1575 0 -139.515 0 -142.8725 0 -142.8725 0 - -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -146.23 0 -149.5875 0 -152.945 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -152.945 0 -156.3025 0 - -152.945 0 -156.3025 0 -152.945 0 -156.3025 0 -152.945 0 -149.5875 0 -152.945 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -156.3025 0 -159.66 0 - -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -156.3025 0 -152.945 0 -152.945 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -149.5875 0 -149.5875 0 -152.945 0 -146.23 0 -149.5875 0 -146.23 0 -152.945 0 -149.5875 0 -149.5875 0 - -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -146.23 0 -139.515 0 -146.23 0 -149.5875 0 -146.23 0 -142.8725 0 -149.5875 0 -149.5875 0 -149.5875 0 -152.945 0 -152.945 0 -149.5875 0 -149.5875 0 -152.945 0 -152.945 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -116.0125 0 -112.655 0 -119.37 0 -109.2975 0 -99.22501 0 -99.22501 0 -92.51001 0 -105.94 0 -142.8725 0 -142.8725 0 -126.085 0 -146.23 0 -146.23 0 -149.5875 0 -149.5875 0 -146.23 0 -146.23 0 -152.945 0 -146.23 0 -149.5875 0 -152.945 0 -149.5875 0 -146.23 0 -152.945 0 -152.945 0 -149.5875 0 -152.945 0 -146.23 0 -149.5875 0 -142.8725 0 -146.23 0 -142.8725 0 -142.8725 0 -146.23 0 -139.515 0 -142.8725 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -149.5875 0 -142.8725 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -139.515 0 -142.8725 0 -139.515 0 -129.4425 0 -139.515 0 -136.1575 0 -132.8 0 -136.1575 0 -139.515 0 -136.1575 0 -139.515 0 -136.1575 0 -139.515 0 -142.8725 0 -136.1575 0 -139.515 0 -146.23 0 -142.8725 0 -139.515 0 -139.515 0 -142.8725 0 -142.8725 0 -132.8 0 -132.8 0 -126.085 0 -119.37 0 -109.2975 0 -116.0125 0 -92.51001 0 -119.37 0 -122.7275 0 -116.0125 0 -132.8 0 -132.8 0 -136.1575 0 -136.1575 0 -132.8 0 -136.1575 0 -136.1575 0 -132.8 0 -136.1575 0 -136.1575 0 -136.1575 0 -139.515 0 -139.515 0 -132.8 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -129.4425 0 -132.8 0 -129.4425 0 -129.4425 0 -126.085 0 -129.4425 0 -132.8 0 -129.4425 0 -132.8 0 -129.4425 0 -132.8 0 -132.8 0 -136.1575 0 -132.8 0 -129.4425 0 -132.8 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -119.37 0 -109.2975 0 -119.37 0 -119.37 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -119.37 0 -122.7275 0 -122.7275 0 -119.37 0 -122.7275 0 -119.37 0 -122.7275 0 -119.37 0 -119.37 0 -116.0125 0 -119.37 0 -119.37 0 -116.0125 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -116.0125 0 -112.655 0 -105.94 0 -61.00001 0 -116.0125 0 -109.2975 0 -58.52001 0 -112.655 0 -116.0125 0 -109.2975 0 -109.2975 0 -59.14001 0 -99.22501 0 -59.76001 0 -59.76001 0 -58.52001 0 -54.18001 0 -58.52001 0 -55.42001 0 -54.18001 0 -54.80001 0 -57.28001 0 -53.56001 0 -55.42001 0 -55.42001 0 -59.14001 0 -56.66001 0 -57.28001 0 -55.42001 0 -59.14001 0 -55.42001 0 -58.52001 0 -57.90001 0 -57.90001 0 -105.94 0 -116.0125 0 -112.655 0 -112.655 0 -99.22501 0 -61.00001 0 -59.14001 0 -57.90001 0 -58.52001 0 -92.51001 0 -109.2975 0 -95.86751 0 - -105.94 0 -105.94 0 -109.2975 0 -105.94 0 -112.655 0 -105.94 0 -105.94 0 -109.2975 0 -102.5825 0 -99.22501 0 -102.5825 0 -109.2975 0 -102.5825 0 -99.22501 0 -102.5825 0 -105.94 0 -109.2975 0 -109.2975 0 -112.655 0 -112.655 0 -109.2975 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -105.94 0 -95.86751 0 -95.86751 0 -105.94 0 -55.42001 0 -56.66001 0 -54.80001 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -116.0125 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -112.655 0 -112.655 0 -105.94 0 -112.655 0 -112.655 0 -116.0125 0 -116.0125 0 -116.0125 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -112.655 0 -109.2975 0 -109.2975 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -112.655 0 -109.2975 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -109.2975 0 -109.2975 0 -112.655 0 -109.2975 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -159.66 0 -189.8775 0 -218.4331 0 -223.0539 0 -213.8123 0 -241.537 0 -283.1239 0 -292.3654 0 -301.607 0 -332.1762 0 -356.3484 0 - -404.6929 0 -440.9513 0 -525.5541 0 -616.2001 0 -720.6721 0 -816.4381 0 -894.7921 0 -973.1461 0 -1016.676 0 -1060.206 0 -1086.324 0 -1143.651 0 -1228.738 0 -1301.669 0 -1362.445 0 -1411.066 0 -1459.687 0 -1471.842 0 -1496.153 0 -1496.153 0 -1471.842 0 -1435.377 0 -1423.221 0 -1386.756 0 -1325.98 0 -1301.669 0 -1265.203 0 -1216.582 0 -1204.427 0 -1192.272 0 -1180.117 0 -1180.117 0 -1180.117 0 -1167.962 0 -1167.962 0 -1155.806 0 -1167.962 0 -1155.806 0 -1155.806 0 -1155.806 0 -1155.806 0 -1155.806 0 -1155.806 0 -1143.651 0 -1131.496 0 -1119.341 0 -1107.185 0 -1095.03 0 -1068.912 0 -1051.5 0 -1034.088 0 -1025.382 0 -1007.97 0 -990.5581 0 -964.4401 0 -955.7341 0 -947.0281 0 -920.9101 0 -894.7921 0 -868.6741 0 -851.2621 0 -825.1441 0 -799.0261 0 -772.9081 0 -755.4961 0 -738.0841 0 -720.6721 0 -703.2601 0 -685.8481 0 -668.4361 0 -659.7301 0 -642.3181 0 -633.6121 0 -616.2001 0 -610.157 0 -604.114 0 -598.0709 0 -585.9848 0 -573.8986 0 -567.8556 0 -561.8125 0 -549.7264 0 -543.6833 0 -537.6403 0 -531.5972 0 -525.5541 0 -519.5111 0 -513.468 0 - -507.425 0 -501.3819 0 -495.3388 0 -495.3388 0 -489.2958 0 -489.2958 0 -489.2958 0 -483.2527 0 -483.2527 0 -483.2527 0 -477.2096 0 -477.2096 0 -477.2096 0 -477.2096 0 -477.2096 0 -483.2527 0 -477.2096 0 -483.2527 0 -483.2527 0 -489.2958 0 -495.3388 0 -501.3819 0 -507.425 0 -513.468 0 -513.468 0 -519.5111 0 -519.5111 0 -519.5111 0 -513.468 0 -513.468 0 -519.5111 0 -525.5541 0 -525.5541 0 -525.5541 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -519.5111 0 -513.468 0 -513.468 0 -525.5541 0 -537.6403 0 -537.6403 0 -531.5972 0 -531.5972 0 -531.5972 0 -525.5541 0 -525.5541 0 -531.5972 0 -537.6403 0 -549.7264 0 -549.7264 0 -561.8125 0 -573.8986 0 -592.0278 0 -610.157 0 -633.6121 0 -651.0241 0 -668.4361 0 -677.1421 0 -685.8481 0 -677.1421 0 -677.1421 0 -677.1421 0 -668.4361 0 -659.7301 0 -659.7301 0 -651.0241 0 -651.0241 0 -651.0241 0 -642.3181 0 -633.6121 0 -624.9061 0 -610.157 0 -604.114 0 -598.0709 0 -567.8556 0 -579.9417 0 -573.8986 0 -561.8125 0 - -555.7695 0 -555.7695 0 -555.7695 0 -549.7264 0 -549.7264 0 -543.6833 0 -543.6833 0 -537.6403 0 -537.6403 0 -537.6403 0 -531.5972 0 -531.5972 0 -531.5972 0 -531.5972 0 -537.6403 0 -537.6403 0 -543.6833 0 -543.6833 0 -549.7264 0 -555.7695 0 -567.8556 0 -573.8986 0 -579.9417 0 -585.9848 0 -598.0709 0 -604.114 0 -616.2001 0 -624.9061 0 -642.3181 0 -642.3181 0 -651.0241 0 -659.7301 0 -659.7301 0 -651.0241 0 - -642.3181 0 -624.9061 0 -624.9061 0 -604.114 0 -501.3819 0 -525.5541 0 -501.3819 0 -513.468 0 -501.3819 0 -567.8556 0 -543.6833 0 -507.425 0 -549.7264 0 -555.7695 0 -549.7264 0 -537.6403 0 -495.3388 0 -513.468 0 -507.425 0 -525.5541 0 -513.468 0 -519.5111 0 -513.468 0 -507.425 0 -483.2527 0 -507.425 0 -495.3388 0 -501.3819 0 -501.3819 0 -477.2096 0 -495.3388 0 -489.2958 0 -471.1666 0 -495.3388 0 -507.425 0 -519.5111 0 -519.5111 0 -543.6833 0 -555.7695 0 -573.8986 0 -592.0278 0 -604.114 0 -624.9061 0 -651.0241 0 -633.6121 0 -677.1421 0 -685.8481 0 -694.5541 0 -633.6121 0 -677.1421 0 -668.4361 0 -668.4361 0 -668.4361 0 -659.7301 0 -651.0241 0 -651.0241 0 -659.7301 0 -624.9061 0 -642.3181 0 -624.9061 0 -633.6121 0 -624.9061 0 -633.6121 0 -624.9061 0 -633.6121 0 -616.2001 0 -610.157 0 -598.0709 0 -598.0709 0 -592.0278 0 -573.8986 0 -567.8556 0 -573.8986 0 -579.9417 0 -561.8125 0 -567.8556 0 -525.5541 0 -555.7695 0 -549.7264 0 -549.7264 0 -543.6833 0 -531.5972 0 -537.6403 0 -525.5541 0 -537.6403 0 -519.5111 0 -519.5111 0 -513.468 0 -519.5111 0 -513.468 0 -507.425 0 -507.425 0 -501.3819 0 -495.3388 0 -489.2958 0 -489.2958 0 -489.2958 0 -489.2958 0 -489.2958 0 -489.2958 0 -483.2527 0 -459.0805 0 -477.2096 0 -465.1235 0 -471.1666 0 -471.1666 0 -471.1666 0 -465.1235 0 -465.1235 0 -465.1235 0 -459.0805 0 -465.1235 0 -459.0805 0 -453.0374 0 -446.9943 0 -440.9513 0 -459.0805 0 -446.9943 0 -453.0374 0 -440.9513 0 -434.9082 0 -434.9082 0 -434.9082 0 -440.9513 0 -410.736 0 -386.5637 0 -422.8221 0 -350.3053 0 -398.6498 0 -416.779 0 -344.2623 0 -398.6498 0 -404.6929 0 -404.6929 0 -410.736 0 -410.736 0 -404.6929 0 -404.6929 0 -404.6929 0 -398.6498 0 -398.6498 0 -398.6498 0 -398.6498 0 -392.6068 0 -398.6498 0 -392.6068 0 -392.6068 0 -392.6068 0 -386.5637 0 -386.5637 0 -380.5207 0 -386.5637 0 -398.6498 0 -410.736 0 -404.6929 0 -404.6929 0 -398.6498 0 -392.6068 0 -392.6068 0 -398.6498 0 -392.6068 0 -386.5637 0 -386.5637 0 -386.5637 0 -392.6068 0 - -386.5637 0 -392.6068 0 -386.5637 0 -374.4776 0 -380.5207 0 -386.5637 0 -326.1331 0 -326.1331 0 -301.607 0 -315.4693 0 -315.4693 0 -292.3654 0 -315.4693 0 -326.1331 0 -320.09 0 -368.4345 0 -374.4776 0 -374.4776 0 -362.3915 0 -315.4693 0 - -362.3915 0 -356.3484 0 -362.3915 0 -362.3915 0 -374.4776 0 -368.4345 0 -374.4776 0 -326.1331 0 -356.3484 0 -350.3053 0 -344.2623 0 -344.2623 0 -362.3915 0 -332.1762 0 -315.4693 0 -356.3484 0 -356.3484 0 -356.3484 0 -350.3053 0 -356.3484 0 -350.3053 0 -350.3053 0 -356.3484 0 -320.09 0 -350.3053 0 -350.3053 0 -350.3053 0 -350.3053 0 -356.3484 0 -350.3053 0 -315.4693 0 -338.2192 0 -306.2277 0 -287.7446 0 -320.09 0 -344.2623 0 -344.2623 0 -338.2192 0 - -344.2623 0 -344.2623 0 -338.2192 0 -344.2623 0 -338.2192 0 -338.2192 0 -338.2192 0 -338.2192 0 -338.2192 0 - -338.2192 0 -332.1762 0 -332.1762 0 -338.2192 0 -326.1331 0 -326.1331 0 -320.09 0 -332.1762 0 -320.09 0 -326.1331 0 -326.1331 0 -326.1331 0 -320.09 0 -326.1331 0 -326.1331 0 -338.2192 0 -332.1762 0 -344.2623 0 -344.2623 0 -344.2623 0 -344.2623 0 -356.3484 0 -350.3053 0 -344.2623 0 -362.3915 0 -362.3915 0 -368.4345 0 -380.5207 0 -374.4776 0 -338.2192 0 -356.3484 0 -326.1331 0 -362.3915 0 -362.3915 0 -301.607 0 -350.3053 0 -350.3053 0 -362.3915 0 -350.3053 0 -344.2623 0 -350.3053 0 -344.2623 0 -338.2192 0 -332.1762 0 -338.2192 0 -315.4693 0 -310.8485 0 -332.1762 0 -332.1762 0 -326.1331 0 -292.3654 0 -296.9862 0 -283.1239 0 - -278.5031 0 -283.1239 0 -269.2616 0 -269.2616 0 -241.537 0 -264.6408 0 -255.3993 0 -255.3993 0 -246.1577 0 -250.7785 0 -250.7785 0 -278.5031 0 -301.607 0 -306.2277 0 -306.2277 0 -301.607 0 -301.607 0 -301.607 0 -273.8823 0 -296.9862 0 -296.9862 0 -306.2277 0 -283.1239 0 -296.9862 0 -292.3654 0 -296.9862 0 -292.3654 0 -278.5031 0 -283.1239 0 -287.7447 0 -287.7446 0 -292.3654 0 -287.7447 0 -287.7446 0 -287.7446 0 -283.1239 0 -287.7446 0 -292.3654 0 -292.3654 0 -292.3654 0 -306.2277 0 -315.4693 0 -320.09 0 -320.09 0 -350.3053 0 -296.9862 0 -338.2192 0 -356.3484 0 -362.3915 0 -374.4776 0 -392.6068 0 -404.6929 0 -428.8652 0 -440.9513 0 -465.1235 0 -483.2527 0 -501.3819 0 -585.9848 0 -642.3181 0 -729.3781 0 -781.6141 0 -799.0261 0 -790.3201 0 -764.2021 0 -738.0841 0 -703.2601 0 -668.4361 0 -642.3181 0 -624.9061 0 -598.0709 0 -598.0709 0 -592.0278 0 -616.2001 0 -642.3181 0 -677.1421 0 -720.6721 0 -746.7901 0 -790.3201 0 -799.0261 0 -807.7321 0 -799.0261 0 -799.0261 0 -790.3201 0 -799.0261 0 -807.7321 0 -825.1441 0 -842.5561 0 -868.6741 0 -886.0861 0 -903.4981 0 -903.4981 0 -920.9101 0 -929.6161 0 -920.9101 0 -912.2041 0 -903.4981 0 -903.4981 0 -886.0861 0 -868.6741 0 -859.9681 0 -842.5561 0 -833.8501 0 -807.7321 0 -790.3201 0 -764.2021 0 -746.7901 0 -720.6721 0 -694.5541 0 -677.1421 0 -651.0241 0 -642.3181 0 -624.9061 0 -610.157 0 -604.114 0 -598.0709 0 -592.0278 0 -519.5111 0 -459.0805 0 -459.0805 0 -440.9513 0 -446.9943 0 -434.9082 0 -465.1235 0 -459.0805 0 -404.6929 0 -410.736 0 -440.9513 0 -428.8652 0 -422.8221 0 -434.9082 0 -404.6929 0 -440.9513 0 -483.2527 0 -471.1666 0 -471.1666 0 -465.1235 0 -446.9943 0 -446.9943 0 -453.0374 0 -446.9943 0 -404.6929 0 -434.9082 0 -428.8652 0 -422.8221 0 -416.779 0 -410.736 0 -410.736 0 -404.6929 0 -398.6498 0 -398.6498 0 -392.6068 0 -392.6068 0 -392.6068 0 -386.5637 0 -380.5207 0 -380.5207 0 -380.5207 0 -374.4776 0 -374.4776 0 -374.4776 0 -368.4345 0 -368.4345 0 -368.4345 0 -368.4345 0 -368.4345 0 -362.3915 0 -362.3915 0 -356.3484 0 -356.3484 0 -356.3484 0 -350.3053 0 -350.3053 0 -350.3053 0 -338.2192 0 -344.2623 0 - -332.1762 0 -326.1331 0 -332.1762 0 -326.1331 0 -320.09 0 -315.4693 0 -320.09 0 -326.1331 0 -315.4693 0 -315.4693 0 -315.4693 0 -320.09 0 -320.09 0 -320.09 0 -320.09 0 -273.8823 0 -306.2277 0 -255.3993 0 -264.6408 0 -273.8823 0 -260.02 0 -278.5031 0 -306.2277 0 -310.8485 0 -296.9862 0 -296.9862 0 -306.2277 0 -287.7446 0 -283.1239 0 -273.8823 0 -301.607 0 -306.2277 0 -301.607 0 -306.2277 0 -306.2277 0 -296.9862 0 -296.9862 0 -301.607 0 -301.607 0 -292.3654 0 -296.9862 0 -296.9862 0 -292.3654 0 - -287.7447 0 -296.9862 0 -292.3654 0 -296.9862 0 -292.3654 0 -296.9862 0 -287.7446 0 -296.9862 0 -310.8485 0 -332.1762 0 -332.1762 0 -332.1762 0 -338.2192 0 -356.3484 0 -350.3053 0 -350.3053 0 -310.8485 0 -368.4345 0 -374.4776 0 -392.6068 0 -398.6498 0 -410.736 0 -434.9082 0 -453.0374 0 -483.2527 0 -501.3819 0 -537.6403 0 -610.157 0 -799.0261 0 -999.2641 0 -1167.962 0 -1265.203 0 -1325.98 0 -1313.824 0 -1325.98 0 -1301.669 0 -1265.203 0 -1289.514 0 -1265.203 0 -1301.669 0 -1325.98 0 -1350.29 0 -1398.911 0 -1459.687 0 -1496.153 0 -1532.618 0 -1556.929 0 -1593.395 0 -1605.55 0 -1605.55 0 -1654.171 0 -1702.792 0 -1763.568 0 -1824.344 0 -2166.984 0 -2683.735 0 -3106.531 0 -3529.328 0 -4046.078 0 -4233.988 0 -4703.761 0 -4891.671 0 -5032.603 0 -5361.444 0 -5267.489 0 -5455.399 0 -5549.354 0 -5502.376 0 -5502.376 0 -5455.399 0 -5408.422 0 -5314.467 0 -5173.535 0 -5032.603 0 -5032.603 0 -4844.693 0 -4562.829 0 -4515.852 0 -4233.988 0 -3858.169 0 -3529.328 0 -3200.486 0 -3106.531 0 -2777.69 0 -2542.803 0 -2260.939 0 -2026.052 0 -1885.12 0 -1812.189 0 -1739.257 0 -1678.481 0 -1581.239 0 -1532.618 0 -1471.842 0 -1435.377 0 -1386.756 0 -1350.29 0 -1301.669 0 -1289.514 0 -1253.048 0 -1228.738 0 -1180.117 0 -1143.651 0 -1107.185 0 -1068.912 0 -1077.618 0 -1060.206 0 -1060.206 0 -1042.794 0 -1034.088 0 -1025.382 0 -1016.676 0 -999.2641 0 -990.5581 0 -981.8521 0 -973.1461 0 -981.8521 0 -990.5581 0 -1042.794 0 -1095.03 0 -1095.03 0 -1107.185 0 -1119.341 0 -1119.341 0 -1131.496 0 -1180.117 0 -1240.893 0 -1301.669 0 -1483.998 0 -1702.792 0 -2495.826 0 -3623.282 0 -4703.761 0 -5314.467 0 -5925.172 0 -6347.969 0 -6864.719 0 -7099.606 0 -7475.425 0 -7663.334 0 -7992.176 0 -8086.131 0 -8414.972 0 -8696.836 0 -9072.655 0 -9119.632 0 -9260.564 0 -9495.451 0 -9401.496 0 -9448.474 0 -9307.542 0 -9119.632 0 -8884.745 0 -8461.949 0 -7992.176 0 -7381.47 0 -7005.651 0 -6535.878 0 -6019.127 0 -5690.286 0 -5314.467 0 -4938.648 0 -4515.852 0 -4280.965 0 -3952.124 0 -3811.192 0 -3529.328 0 -3388.395 0 -3200.486 0 -2965.599 0 -2918.622 0 -2730.713 0 -2589.78 0 -2448.848 0 -2213.962 0 -2026.052 0 -1885.12 0 -1848.655 0 -1800.034 0 -1763.568 0 -1702.792 0 -1666.326 0 -1617.705 0 -1569.084 0 -1569.084 0 -1544.774 0 -1508.308 0 -1508.308 0 -1483.998 0 -1471.842 0 -1435.377 0 -1447.532 0 -1423.221 0 -1423.221 0 -1423.221 0 -1423.221 0 -1398.911 0 -1398.911 0 -1386.756 0 -1386.756 0 -1386.756 0 -1374.6 0 -1374.6 0 -1362.445 0 -1350.29 0 -1313.824 0 -1313.824 0 -1301.669 0 -1289.514 0 -1265.203 0 -1228.738 0 -1204.427 0 -1204.427 0 -1119.341 0 -1095.03 0 -1119.341 0 -1143.651 0 -1077.618 0 -1107.185 0 -1119.341 0 -1107.185 0 -1107.185 0 -1107.185 0 -1086.324 0 -1068.912 0 -1077.618 0 -1068.912 0 -1060.206 0 -1060.206 0 -1060.206 0 -1042.794 0 -1042.794 0 -1034.088 0 -1016.676 0 -999.2641 0 -1007.97 0 -999.2641 0 -981.8521 0 -981.8521 0 -973.1461 0 -886.0861 0 -868.6741 0 -938.3221 0 -938.3221 0 -929.6161 0 -920.9101 0 -912.2041 0 -903.4981 0 -903.4981 0 -894.7921 0 -886.0861 0 -868.6741 0 -868.6741 0 -859.9681 0 -859.9681 0 -833.8501 0 -842.5561 0 -825.1441 0 -825.1441 0 -816.4381 0 -807.7321 0 -790.3201 0 -790.3201 0 -729.3781 0 -729.3781 0 -772.9081 0 -764.2021 0 -772.9081 0 -764.2021 0 -764.2021 0 -755.4961 0 -755.4961 0 -746.7901 0 -729.3781 0 -738.0841 0 -729.3781 0 -720.6721 0 -720.6721 0 -720.6721 0 -711.9661 0 -711.9661 0 -746.7901 0 -738.0841 0 -720.6721 0 -729.3781 0 -720.6721 0 -711.9661 0 -720.6721 0 -711.9661 0 -729.3781 0 - -720.6721 0 -720.6721 0 -738.0841 0 -738.0841 0 -738.0841 0 -729.3781 0 -738.0841 0 -746.7901 0 -746.7901 0 -746.7901 0 -738.0841 0 -738.0841 0 -746.7901 0 -746.7901 0 -764.2021 0 -772.9081 0 -781.6141 0 -859.9681 0 -1007.97 0 -1277.359 0 -1654.171 0 -2166.984 0 -3059.554 0 -3576.305 0 -3999.101 0 -4280.965 0 -4421.897 0 -4609.807 0 -4703.761 0 -4562.829 0 -4609.807 0 -4656.784 0 -4844.693 0 -4985.625 0 -5079.58 0 -5126.557 0 -5455.399 0 -5831.218 0 -6441.923 0 -7099.606 0 -7804.266 0 -8227.063 0 -8790.791 0 -9307.542 0 -9589.406 0 -9683.36 0 -9777.315 0 -9683.36 0 -9777.315 0 -9636.383 0 -9495.451 0 -8884.745 0 -8367.995 0 -7663.334 0 -7052.629 0 -6441.923 0 -5549.354 0 -4985.625 0 -4187.01 0 -3717.237 0 -3482.35 0 -3153.509 0 -2871.645 0 -2730.713 0 -2495.826 0 -2354.894 0 -2260.939 0 -2166.984 0 -2120.007 0 -2120.007 0 -1979.075 0 -1979.075 0 -1932.098 0 -1848.655 0 -1787.878 0 -1775.723 0 -1775.723 0 -1690.637 0 -1654.171 0 -1605.55 0 -1569.084 0 -1508.308 0 -1508.308 0 -1459.687 0 -1411.066 0 -1411.066 0 -1398.911 0 -1325.98 0 -1325.98 0 -1313.824 0 -1289.514 0 -1216.582 0 -1204.427 0 -1086.324 0 -1155.806 0 -1143.651 0 -1143.651 0 -1119.341 0 -1095.03 0 -1077.618 0 -1060.206 0 -1042.794 0 -1034.088 0 -1016.676 0 -1007.97 0 -990.5581 0 -981.8521 0 -973.1461 0 -964.4401 0 -955.7341 0 -912.2041 0 -842.5561 0 -842.5561 0 -807.7321 0 -825.1441 0 -781.6141 0 -799.0261 0 -772.9081 0 -764.2021 0 -781.6141 0 -790.3201 0 -842.5561 0 -833.8501 0 -833.8501 0 -816.4381 0 -825.1441 0 -799.0261 0 -790.3201 0 -807.7321 0 -790.3201 0 -781.6141 0 -764.2021 0 -772.9081 0 -703.2601 0 -642.3181 0 -651.0241 0 -642.3181 0 -651.0241 0 -604.114 0 -604.114 0 -610.157 0 -604.114 0 -604.114 0 -610.157 0 -604.114 0 -598.0709 0 -651.0241 0 -694.5541 0 -685.8481 0 -694.5541 0 -610.157 0 -592.0278 0 -610.157 0 -592.0278 0 -573.8986 0 -633.6121 0 -598.0709 0 -604.114 0 -604.114 0 -694.5541 0 -738.0841 0 -755.4961 0 -772.9081 0 -764.2021 0 -764.2021 0 -764.2021 0 -755.4961 0 -781.6141 0 -799.0261 0 -1007.97 0 -1228.738 0 -1520.463 0 -1714.947 0 -1860.81 0 -2120.007 0 -2542.803 0 -2636.758 0 -2730.713 0 -2542.803 0 -2448.848 0 -2213.962 0 -1979.075 0 -1629.86 0 -1581.239 0 -1496.153 0 -1411.066 0 -1338.135 0 -1362.445 0 -1313.824 0 -1265.203 0 -1228.738 0 -1192.272 0 -1155.806 0 -1131.496 0 -1119.341 0 -1086.324 0 -1077.618 0 -1068.912 0 -1060.206 0 -1060.206 0 -1051.5 0 -1051.5 0 -1042.794 0 -1034.088 0 -1025.382 0 -1016.676 0 -964.4401 0 -1007.97 0 -999.2641 0 -990.5581 0 -973.1461 0 -938.3221 0 -833.8501 0 -912.2041 0 -894.7921 0 -903.4981 0 -894.7921 0 -894.7921 0 -903.4981 0 -929.6161 0 -973.1461 0 -1016.676 0 -1077.618 0 -1155.806 0 -1240.893 0 -1362.445 0 -1556.929 0 -1848.655 0 -3012.577 0 -4140.033 0 -4938.648 0 -5737.263 0 -6394.946 0 -6864.719 0 -7005.651 0 -7287.516 0 -7240.538 0 -7287.516 0 -7240.538 0 -7099.606 0 -6958.674 0 -6676.81 0 -6254.014 0 -5972.15 0 -5408.422 0 -4844.693 0 -4609.807 0 -4140.033 0 -3670.26 0 -3247.463 0 -2871.645 0 -2683.735 0 -2495.826 0 -2307.916 0 -2120.007 0 -1932.098 0 -1860.81 0 -1800.034 0 -1763.568 0 -1714.947 0 -1702.792 0 -1654.171 0 -1617.705 0 -1556.929 0 -1520.463 0 -1471.842 0 -1423.221 0 -1398.911 0 -1313.824 0 -1289.514 0 -1265.203 0 -1240.893 0 -1204.427 0 -1167.962 0 -1155.806 0 -1155.806 0 -1131.496 0 -1119.341 0 -1095.03 0 -1077.618 0 -1068.912 0 -1051.5 0 -1034.088 0 -1025.382 0 -1016.676 0 -1007.97 0 -990.5581 0 -981.8521 0 -964.4401 0 -947.0281 0 -938.3221 0 -938.3221 0 -929.6161 0 -920.9101 0 -903.4981 0 -903.4981 0 -903.4981 0 -886.0861 0 -886.0861 0 -877.3801 0 -851.2621 0 -859.9681 0 -851.2621 0 -851.2621 0 -825.1441 0 -833.8501 0 -833.8501 0 -833.8501 0 -833.8501 0 -825.1441 0 -816.4381 0 -825.1441 0 -825.1441 0 -825.1441 0 -833.8501 0 -842.5561 0 -851.2621 0 -859.9681 0 -859.9681 0 -868.6741 0 -868.6741 0 -877.3801 0 -868.6741 0 -859.9681 0 -859.9681 0 -859.9681 0 -851.2621 0 -842.5561 0 -833.8501 0 -833.8501 0 -825.1441 0 -816.4381 0 -816.4381 0 -799.0261 0 -790.3201 0 -799.0261 0 -799.0261 0 -790.3201 0 -781.6141 0 -764.2021 0 -781.6141 0 -781.6141 0 -781.6141 0 -781.6141 0 -781.6141 0 -772.9081 0 -764.2021 0 -746.7901 0 -746.7901 0 -633.6121 0 -624.9061 0 -616.2001 0 -616.2001 0 -592.0278 0 -579.9417 0 -592.0278 0 -573.8986 0 -579.9417 0 -567.8556 0 -579.9417 0 -651.0241 0 -651.0241 0 -651.0241 0 -633.6121 0 -624.9061 0 -624.9061 0 -633.6121 0 -624.9061 0 -616.2001 0 -610.157 0 -610.157 0 -616.2001 0 -610.157 0 -610.157 0 -604.114 0 -567.8556 0 -598.0709 0 -592.0278 0 -585.9848 0 -585.9848 0 -585.9848 0 -585.9848 0 -579.9417 0 -573.8986 0 -567.8556 0 -567.8556 0 -567.8556 0 -567.8556 0 -567.8556 0 -561.8125 0 -561.8125 0 -561.8125 0 -555.7695 0 -555.7695 0 -549.7264 0 -543.6833 0 -543.6833 0 -543.6833 0 -537.6403 0 -537.6403 0 -531.5972 0 -525.5541 0 -525.5541 0 -525.5541 0 -519.5111 0 -519.5111 0 -507.425 0 -519.5111 0 -519.5111 0 -513.468 0 -513.468 0 -513.468 0 -495.3388 0 -525.5541 0 -537.6403 0 -531.5972 0 -525.5541 0 -519.5111 0 -519.5111 0 -525.5541 0 -525.5541 0 -513.468 0 -513.468 0 -513.468 0 -507.425 0 -501.3819 0 -495.3388 0 -495.3388 0 -495.3388 0 -495.3388 0 -489.2958 0 -489.2958 0 -483.2527 0 -489.2958 0 -489.2958 0 -489.2958 0 -489.2958 0 -483.2527 0 -483.2527 0 -477.2096 0 -471.1666 0 -477.2096 0 -477.2096 0 -483.2527 0 -483.2527 0 -477.2096 0 -477.2096 0 -477.2096 0 -489.2958 0 -501.3819 0 -501.3819 0 -501.3819 0 -501.3819 0 -501.3819 0 -495.3388 0 -495.3388 0 -495.3388 0 -489.2958 0 -483.2527 0 -483.2527 0 -495.3388 0 -489.2958 0 -495.3388 0 -495.3388 0 -495.3388 0 -501.3819 0 -489.2958 0 -501.3819 0 -501.3819 0 -501.3819 0 -495.3388 0 -483.2527 0 -483.2527 0 -483.2527 0 -477.2096 0 -471.1666 0 -459.0805 0 -453.0374 0 -459.0805 0 -453.0374 0 -446.9943 0 -440.9513 0 -440.9513 0 -440.9513 0 -434.9082 0 -428.8652 0 -422.8221 0 -428.8652 0 -428.8652 0 -422.8221 0 -416.779 0 -416.779 0 -416.779 0 -416.779 0 -398.6498 0 -368.4345 0 -380.5207 0 -332.1762 0 -356.3484 0 -306.2277 0 -326.1331 0 -356.3484 0 -338.2192 0 -386.5637 0 -380.5207 0 -380.5207 0 -380.5207 0 -380.5207 0 -374.4776 0 -368.4345 0 -368.4345 0 -374.4776 0 -368.4345 0 -368.4345 0 -368.4345 0 -368.4345 0 -374.4776 0 -374.4776 0 -350.3053 0 -362.3915 0 -356.3484 0 -310.8485 0 -338.2192 0 -356.3484 0 - -344.2623 0 -344.2623 0 -344.2623 0 -344.2623 0 -344.2623 0 -344.2623 0 -344.2623 0 -344.2623 0 -338.2192 0 -332.1762 0 -332.1762 0 -326.1331 0 -310.8485 0 -332.1762 0 -283.1239 0 -310.8485 0 -315.4693 0 -326.1331 0 -320.09 0 -320.09 0 -326.1331 0 -326.1331 0 -320.09 0 -320.09 0 -315.4693 0 -315.4693 0 -320.09 0 -320.09 0 -315.4693 0 -315.4693 0 -310.8485 0 -310.8485 0 -315.4693 0 -310.8485 0 -310.8485 0 -301.607 0 -306.2277 0 -306.2277 0 -306.2277 0 -301.607 0 -310.8485 0 -315.4693 0 -320.09 0 -326.1331 0 -326.1331 0 -326.1331 0 -326.1331 0 -326.1331 0 -326.1331 0 -326.1331 0 -362.3915 0 -428.8652 0 -489.2958 0 - -519.5111 0 -507.425 0 -489.2958 0 -477.2096 0 -465.1235 0 -446.9943 0 -434.9082 0 -422.8221 0 -416.779 0 -410.736 0 -404.6929 0 -392.6068 0 -392.6068 0 -380.5207 0 -380.5207 0 -374.4776 0 -374.4776 0 -374.4776 0 -380.5207 0 -398.6498 0 -422.8221 0 -465.1235 0 -519.5111 0 -573.8986 0 -610.157 0 -642.3181 0 -659.7301 0 -668.4361 0 -659.7301 0 -633.6121 0 -624.9061 0 -604.114 0 -592.0278 0 -573.8986 0 -561.8125 0 -549.7264 0 -537.6403 0 -531.5972 0 -519.5111 0 -507.425 0 -495.3388 0 -495.3388 0 -489.2958 0 -477.2096 0 -489.2958 0 -489.2958 0 -483.2527 0 -483.2527 0 -483.2527 0 -477.2096 0 -477.2096 0 -477.2096 0 -471.1666 0 -471.1666 0 -477.2096 0 -477.2096 0 -489.2958 0 -501.3819 0 -519.5111 0 -543.6833 0 -579.9417 0 -610.157 0 -642.3181 0 -668.4361 0 -694.5541 0 -711.9661 0 -729.3781 0 -755.4961 0 -772.9081 0 -790.3201 0 -807.7321 0 -816.4381 0 -825.1441 0 -807.7321 0 -790.3201 0 -772.9081 0 -738.0841 0 -729.3781 0 -711.9661 0 -677.1421 0 -659.7301 0 -642.3181 0 -616.2001 0 -585.9848 0 - -579.9417 0 -555.7695 0 -543.6833 0 -537.6403 0 -519.5111 0 -519.5111 0 -507.425 0 -495.3388 0 -495.3388 0 -483.2527 0 -477.2096 0 -483.2527 0 -483.2527 0 -471.1666 0 -483.2527 0 -483.2527 0 -489.2958 0 -489.2958 0 -489.2958 0 -495.3388 0 -507.425 0 -489.2958 0 -501.3819 0 -483.2527 0 -471.1666 0 -489.2958 0 -434.9082 0 -477.2096 0 -471.1666 0 -477.2096 0 -465.1235 0 -459.0805 0 -440.9513 0 -453.0374 0 -440.9513 0 -434.9082 0 -410.736 0 -398.6498 0 -428.8652 0 -380.5207 0 -356.3484 0 -362.3915 0 -338.2192 0 -350.3053 0 -315.4693 0 -296.9862 0 -310.8485 0 -320.09 0 -301.607 0 -287.7446 0 -301.607 0 -332.1762 0 -320.09 0 -315.4693 0 -332.1762 0 -310.8485 0 -315.4693 0 -310.8485 0 -306.2277 0 -296.9862 0 -315.4693 0 -315.4693 0 -301.607 0 -287.7446 0 -269.2616 0 -283.1239 0 -278.5031 0 -278.5031 0 -283.1239 0 -287.7446 0 -283.1239 0 -273.8823 0 -287.7446 0 -250.7785 0 -264.6408 0 -269.2616 0 -269.2616 0 -287.7447 0 -310.8485 0 -278.5031 0 -269.2616 0 -273.8823 0 -287.7446 0 -287.7446 0 -296.9862 0 -273.8823 0 -283.1239 0 -278.5031 0 -269.2616 0 -269.2616 0 -250.7785 0 -283.1239 0 -241.537 0 -264.6408 0 -246.1577 0 -255.3993 0 -232.2954 0 -232.2954 0 -260.02 0 -255.3993 0 -241.537 0 -278.5031 0 -255.3993 0 -264.6408 0 -236.9162 0 -269.2616 0 -255.3993 0 -260.02 0 -283.1239 0 -283.1239 0 -260.02 0 -227.6746 0 -255.3993 0 -250.7785 0 -246.1577 0 -246.1577 0 -241.537 0 -227.6746 0 -218.4331 0 -223.0539 0 -213.8123 0 -227.6746 0 -213.8123 0 -232.2954 0 -232.2954 0 -278.5031 0 -273.8823 0 -278.5031 0 -218.4331 0 -218.4331 0 -227.6746 0 -236.9162 0 -218.4331 0 -227.6746 0 -223.0539 0 -223.0539 0 -223.0539 0 -241.537 0 -236.9162 0 -232.2954 0 -223.0539 0 -241.537 0 -213.8123 0 -199.95 0 -196.5925 0 -223.0539 0 -186.52 0 -213.8123 0 -218.4331 0 -250.7785 0 -250.7785 0 -255.3993 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -250.7785 0 -241.537 0 -246.1577 0 -250.7785 0 -250.7785 0 -250.7785 0 -236.9162 0 -241.537 0 -223.0539 0 -190.9217 0 -195.3898 0 -178.0545 0 -165.9599 0 -178.0545 0 -178.0545 0 -178.0545 0 -240.5201 0 -203.7232 0 -231.8856 0 -231.8856 0 -227.669 0 -231.8856 0 -227.669 0 -227.669 0 -215.411 0 -227.669 0 -227.669 0 -227.669 0 -190.9217 0 -190.9217 0 -199.95 0 -186.5442 0 -182.2556 0 -190.9217 0 -169.9081 0 -173.9391 0 -162.093 0 -173.9391 0 -169.9081 0 -158.3059 0 -195.3898 0 -182.2556 0 -215.411 0 -211.4528 0 -211.4528 0 -211.4528 0 -211.4528 0 -215.411 0 -215.411 0 -215.411 0 -215.411 0 -215.411 0 -215.411 0 -207.5571 0 -207.5571 0 -211.4528 0 -169.9081 0 -178.0545 0 -162.093 0 -169.9081 0 -169.9081 0 -165.9599 0 -169.9081 0 -158.3059 0 -186.5442 0 -203.7232 0 -203.7232 0 -203.7232 0 -199.95 0 -199.95 0 -182.2556 0 -173.9391 0 -195.3898 0 -165.9599 0 -165.9599 0 -178.0545 0 -195.3898 0 -195.3898 0 -165.9599 0 -169.9081 0 -162.093 0 -165.9599 0 -195.3898 0 -195.3898 0 -199.95 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -195.3898 0 -195.3898 0 -195.3898 0 -199.95 0 -199.95 0 -199.95 0 -195.3898 0 -195.3898 0 -190.9217 0 -190.9217 0 -190.9217 0 -143.9279 0 -150.9657 0 -182.2556 0 -165.9599 0 -186.5442 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -173.9391 0 -178.0545 0 -178.0545 0 -169.9081 0 -162.093 0 -165.9599 0 -162.093 0 -169.9081 0 -147.4097 0 -154.5973 0 -158.3059 0 -154.5973 0 -130.7166 0 -162.093 0 -158.3059 0 -162.093 0 -162.093 0 -162.093 0 -162.093 0 -154.5973 0 -158.3059 0 -158.3059 0 -158.3059 0 -158.3059 0 -158.3059 0 -162.093 0 -140.5191 0 -124.5223 0 -118.589 0 -118.589 0 -121.5236 0 -121.5236 0 -115.7171 0 -118.589 0 -115.7171 0 -118.589 0 -115.7171 0 -110.1572 0 -133.9147 0 -140.5191 0 -143.9279 0 -140.5191 0 -143.9279 0 -137.1818 0 -127.5863 0 -140.5191 0 -140.5191 0 -140.5191 0 -143.9279 0 -143.9279 0 -133.9147 0 -115.7171 0 -115.7171 0 -112.9069 0 -137.1818 0 -130.7166 0 -127.5863 0 -112.9069 0 -115.7171 0 -130.7166 0 -118.589 0 -127.5863 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -133.9147 0 -133.9147 0 -137.1818 0 -137.1818 0 -137.1818 0 -140.5191 0 -140.5191 0 -140.5191 0 -107.4668 0 -102.2597 0 -107.4668 0 -97.27695 0 -99.74084 0 -107.4668 0 -124.5223 0 - -127.5863 0 -127.5863 0 -127.5863 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -121.5236 0 -124.5223 0 -124.5223 0 -124.5223 0 -121.5236 0 -121.5236 0 -124.5223 0 -124.5223 0 -124.5223 0 -127.5863 0 -124.5223 0 -110.1572 0 -124.5223 0 -121.5236 0 -115.7171 0 -121.5236 0 -118.589 0 -118.589 0 -118.589 0 -121.5236 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -115.7171 0 -121.5236 0 -118.589 0 -118.589 0 -94.86702 0 -102.2597 0 -97.27695 0 -92.51001 0 -97.27695 0 -75.14358 0 -75.14358 0 -59.41532 0 -59.41532 0 -58.63505 0 -75.14358 0 -94.86702 0 -97.27695 0 -92.51001 0 -94.86702 0 -94.86702 0 -75.14358 0 -57.86275 0 -61.00001 0 -97.27695 0 -99.74084 0 -60.20362 0 -94.86702 0 - -75.14358 0 -59.41532 0 -59.41532 0 -59.41532 0 -57.86275 0 -58.63505 0 -60.20362 0 -54.85215 0 -58.63505 0 -54.85215 0 -57.09837 0 -56.34185 0 -60.20362 0 -59.41532 0 -57.09837 0 -58.63505 0 -61.00001 0 -75.14358 0 -61.00001 0 -59.41532 0 -57.09837 0 -56.34185 0 -56.34185 0 -54.85215 0 -56.34185 0 -59.41532 0 -59.41532 0 -61.00001 0 -59.41532 0 -54.85215 0 -57.86275 0 -55.59313 0 -54.85215 0 -56.34185 0 -57.09837 0 -59.41532 0 -57.86275 0 -60.20362 0 -61.00001 0 -54.85215 0 -75.14358 0 -94.86702 0 -97.27695 0 -57.86275 0 -99.74084 0 -102.2597 0 -102.2597 0 -104.8347 0 -107.4668 0 -110.1572 0 -112.9069 0 -115.7171 0 -121.5236 0 -127.5863 0 -127.5863 0 -124.5223 0 -133.9147 0 -112.9069 0 -124.5223 0 -130.7166 0 -133.9147 0 -133.9147 0 -130.7166 0 -127.5863 0 -127.5863 0 -127.5863 0 -124.5223 0 -121.5236 0 -118.589 0 -118.589 0 -115.7171 0 -115.7171 0 -112.9069 0 -110.1572 0 -110.1572 0 -107.4668 0 -104.8347 0 -102.2597 0 -97.27695 0 -99.74084 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -92.51001 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -94.86702 0 -56.34185 0 -61.00001 0 -61.00001 0 -75.14358 0 -92.51001 0 -75.14358 0 -61.00001 0 -75.14358 0 -61.00001 0 -75.14358 0 -75.14358 0 -75.14358 0 -92.51001 0 -75.14358 0 -61.00001 0 -75.14358 0 -75.14358 0 -61.00001 0 -75.14358 0 -75.14358 0 -75.14358 0 -92.51001 0 -57.86275 0 -61.00001 0 -53.39319 0 -57.86275 0 -56.34185 0 -51.96452 0 -59.41532 0 -57.09837 0 -104.8347 0 -143.9279 0 -154.5973 0 -147.4097 0 -137.1818 0 -130.7166 0 -133.9147 0 -137.1818 0 -137.1818 0 -137.1818 0 -143.9279 0 -190.9217 0 -244.9397 0 -268.0973 0 -268.0973 0 -258.6186 0 -249.4287 0 -236.169 0 -223.5183 0 -215.411 0 -203.7232 0 -199.95 0 -199.95 0 -207.5571 0 -215.411 0 -227.669 0 -231.8856 0 -240.5201 0 -263.3214 0 -320.09 0 -378.4703 0 -427.7836 0 -457.3894 0 -463.5084 0 -463.5084 0 -457.3894 0 -445.351 0 -433.5748 0 -416.3922 0 -399.7743 0 -389.0022 0 -378.4703 0 -368.1744 0 -358.1103 0 -358.1103 0 -363.1136 0 -373.2931 0 -399.7743 0 -451.3372 0 -535.385 0 -608.4619 0 -672.7986 0 -741.3586 0 -790.0854 0 -815.39 0 -841.3381 0 -850.1325 0 -850.1325 0 -823.9673 0 -806.8843 0 -781.7915 0 -749.3084 0 -733.4764 0 -702.6143 0 -687.5773 0 -672.7986 0 -672.7986 0 -665.5051 0 -672.7986 0 -680.1559 0 -672.7986 0 -680.1559 0 -680.1559 0 -680.1559 0 -687.5773 0 -672.7986 0 -651.1075 0 -636.9599 0 -616.2001 0 -578.3048 0 -549.3896 0 -542.35 0 -528.4937 0 -514.9303 0 -501.6548 0 -482.271 0 -469.6946 0 -457.3894 0 -457.3894 0 -439.4304 0 -433.5748 0 -416.3922 0 -416.3922 0 -399.7743 0 -416.3922 0 -394.358 0 -378.4703 0 -378.4703 0 -368.1744 0 -373.2931 0 -368.1744 0 -358.1103 0 -368.1744 0 -363.1136 0 -353.1638 0 -348.2738 0 -338.661 0 -338.661 0 -338.661 0 -338.661 0 -329.2677 0 -320.09 0 -329.2677 0 -320.09 0 -320.09 0 -320.09 0 -320.09 0 -303.6562 0 -309.0518 0 -298.3415 0 -298.3415 0 -293.1068 0 -298.3415 0 -293.1068 0 -293.1068 0 -293.1068 0 -287.951 0 -287.951 0 -282.8731 0 -282.8731 0 -277.8722 0 -287.951 0 -277.8722 0 -277.8722 0 -277.8722 0 -277.8722 0 -282.8731 0 -277.8722 0 -282.8731 0 -282.8731 0 -277.8722 0 -272.9472 0 -249.4287 0 -277.8722 0 -277.8722 0 -249.4287 0 -268.0973 0 -268.0973 0 -272.9472 0 -268.0973 0 -277.8722 0 -293.1068 0 -303.6562 0 -324.6522 0 -338.661 0 -353.1638 0 -378.4703 0 -383.7065 0 -399.7743 0 -405.2517 0 -410.7909 0 -416.3922 0 -410.7909 0 -416.3922 0 -416.3922 0 -416.3922 0 -363.1136 0 -348.2738 0 -348.2738 0 -389.0022 0 -394.358 0 -405.2517 0 -410.7909 0 -405.2517 0 -389.0022 0 -389.0022 0 -378.4703 0 -378.4703 0 -368.1744 0 -363.1136 0 -358.1103 0 -309.0518 0 -343.4397 0 -333.9371 0 -324.6522 0 -309.0518 0 -272.9472 0 -258.6186 0 -263.3214 0 -258.6186 0 -258.6186 0 -258.6186 0 -227.669 0 -223.5183 0 -236.169 0 -227.669 0 -219.4325 0 -244.9397 0 -253.988 0 -249.4287 0 -249.4287 0 -249.4287 0 -253.988 0 -249.4287 0 -236.169 0 -227.669 0 -231.8856 0 -240.5201 0 -231.8856 0 -227.669 0 -186.5442 0 -215.411 0 -207.5571 0 -182.2556 0 -182.2556 0 -178.0545 0 -173.9391 0 -169.9081 0 -173.9391 0 -195.3898 0 -186.5442 0 -207.5571 0 -207.5571 0 -207.5571 0 -203.7232 0 -199.95 0 -199.95 0 -178.0545 0 -199.95 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -173.9391 0 -182.2556 0 -165.9599 0 -150.9657 0 -182.2556 0 -169.9081 0 -133.9147 0 -140.5191 0 -147.4097 0 -154.5973 0 -169.9081 0 -169.9081 0 -158.3059 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -140.5191 0 -147.4097 0 -154.5973 0 -121.5236 0 -127.5863 0 -154.5973 0 -162.093 0 -158.3059 0 -154.5973 0 -158.3059 0 -154.5973 0 -158.3059 0 -158.3059 0 -165.9599 0 -162.093 0 -158.3059 0 -154.5973 0 -150.9657 0 -150.9657 0 -147.4097 0 -147.4097 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -140.5191 0 -137.1818 0 -137.1818 0 -133.9147 0 -130.7166 0 -130.7166 0 -127.5863 0 -124.5223 0 -61.00001 0 -121.5236 0 -127.5863 0 -130.7166 0 -130.7166 0 -133.9147 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -127.5863 0 -127.5863 0 -127.5863 0 -121.5236 0 -112.9069 0 -121.5236 0 -118.589 0 -107.4668 0 -112.9069 0 -115.7171 0 -102.2597 0 -61.00001 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 -112.9069 0 - -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -57.09837 0 -54.11886 0 -57.09837 0 -55.59313 0 -55.59313 0 -61.00001 0 -61.00001 0 -56.34185 0 -61.00001 0 -75.14358 0 -58.63505 0 -54.11886 0 -53.39319 0 -54.85215 0 -53.39319 0 -52.6751 0 -51.2614 0 -55.59313 0 -51.2614 0 -59.41532 0 -54.11886 0 -54.11886 0 -51.2614 0 -54.85215 0 -53.39319 0 -51.2614 0 -56.34185 0 -53.39319 0 -54.85215 0 -57.86275 0 -51.96452 0 -54.11886 0 -54.85215 0 -54.85215 0 -54.11886 0 -51.96452 0 -49.19625 0 -53.39319 0 -55.59313 0 -50.56569 0 -55.59313 0 -50.56569 0 -54.11886 0 -51.96452 0 -49.87733 0 -45.89836 0 -50.56569 0 -50.56569 0 -52.6751 0 -51.96452 0 -49.87733 0 -54.11886 0 -49.19625 0 -52.6751 0 -53.39319 0 -53.39319 0 -51.2614 0 -55.59313 0 -55.59313 0 -53.39319 0 -54.85215 0 -55.59313 0 -51.2614 0 -54.11886 0 -48.52242 0 -51.96452 0 -50.56569 0 -52.6751 0 -45.2599 0 -47.85577 0 -47.85577 0 -47.85577 0 -53.39319 0 -52.6751 0 -51.96452 0 -54.11886 0 -54.11886 0 -54.11886 0 -51.96452 0 -54.11886 0 -52.6751 0 -54.11886 0 -49.87733 0 -53.39319 0 -50.56569 0 - -45.2599 0 -45.89836 0 -44.62835 0 -45.89836 0 -45.2599 0 -45.2599 0 -39.2467 0 -45.2599 0 -46.54379 0 -47.19624 0 -44.00365 0 -45.89836 0 -49.87733 0 -49.19625 0 -45.89836 0 -48.52242 0 -47.19624 0 -45.89836 0 -45.89836 0 -47.85577 0 -44.62835 0 -47.85577 0 -49.87733 0 -44.00365 0 -41.57241 0 -41.57241 0 -45.89836 0 -41.57241 0 -41.57241 0 -42.1702 0 -42.77463 0 -45.89836 0 -41.57241 0 -41.57241 0 -40.98122 0 -45.2599 0 -45.89836 0 -43.38577 0 -50.56569 0 -51.96452 0 -51.96452 0 -51.2614 0 -52.6751 0 -53.39319 0 -54.11886 0 -54.11886 0 -53.39319 0 -53.39319 0 -52.6751 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.2614 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.2614 0 -50.56569 0 -50.56569 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.2614 0 -50.56569 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -49.87733 0 -50.56569 0 -50.56569 0 -50.56569 0 -49.87733 0 -50.56569 0 -49.87733 0 -49.87733 0 -49.19625 0 -49.19625 0 -48.52242 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.19624 0 -47.85577 0 -47.85577 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -47.85577 0 -47.85577 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.19624 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.85577 0 -47.19624 0 -47.19624 0 -47.85577 0 -47.85577 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -48.52242 0 -49.19625 0 -48.52242 0 -48.52242 0 -47.19624 0 -49.87733 0 -49.87733 0 -50.56569 0 -50.56569 0 -51.2614 0 -53.39319 0 -54.85215 0 -55.59313 0 -57.09837 0 -54.85215 0 -53.39319 0 -59.41532 0 -59.41532 0 -59.41532 0 -60.20362 0 -60.20362 0 -60.20362 0 -61.00001 0 -61.00001 0 -75.14358 0 -94.86702 0 -94.86702 0 -97.27695 0 -99.74084 0 -104.8347 0 -107.4668 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -110.1572 0 -107.4668 0 - -99.74084 0 -97.27695 0 -97.27695 0 -97.27695 0 -99.74084 0 -99.74084 0 -102.2597 0 -104.8347 0 -107.4668 0 -110.1572 0 -115.7171 0 -118.589 0 -124.5223 0 -127.5863 0 -133.9147 0 -140.5191 0 -147.4097 0 -154.5973 0 -162.093 0 -165.9599 0 -173.9391 0 -178.0545 0 -182.2556 0 -182.2556 0 -186.5442 0 -186.5442 0 -190.9217 0 -199.95 0 -199.95 0 -190.9217 0 -186.5442 0 -182.2556 0 -182.2556 0 -173.9391 0 -173.9391 0 -169.9081 0 -169.9081 0 -162.093 0 -162.093 0 -154.5973 0 -154.5973 0 -140.5191 0 -147.4097 0 -143.9279 0 -140.5191 0 -133.9147 0 -130.7166 0 -127.5863 0 -118.589 0 -110.1572 0 -118.589 0 -118.589 0 -115.7171 0 -115.7171 0 -112.9069 0 -112.9069 0 -112.9069 0 -110.1572 0 -107.4668 0 -107.4668 0 -107.4668 0 -75.14358 0 -59.41532 0 -59.41532 0 -57.09837 0 -61.00001 0 -59.41532 0 -59.41532 0 -57.09837 0 -55.59313 0 -58.63505 0 -54.85215 0 -51.96452 0 -53.39319 0 -55.59313 0 -54.85215 0 -55.59313 0 -57.09837 0 -55.59313 0 -61.00001 0 -60.20362 0 -58.63505 0 -60.20362 0 -59.41532 0 -59.41532 0 -59.41532 0 -57.09837 0 -57.86275 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -58.63505 0 -57.09837 0 -57.86275 0 -57.86275 0 -55.59313 0 -54.85215 0 -57.09837 0 -56.34185 0 -57.09837 0 -57.09837 0 -57.09837 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -54.11886 0 -55.59313 0 -55.59313 0 -53.39319 0 -54.11886 0 -55.59313 0 -54.11886 0 -54.85215 0 -52.6751 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.11886 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -53.39319 0 -51.96452 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -50.56569 0 -49.19625 0 -51.2614 0 -49.19625 0 -48.52242 0 -47.85577 0 -49.87733 0 -45.2599 0 -49.19625 0 -47.85577 0 -48.52242 0 -47.19624 0 -44.62835 0 -51.2614 0 -54.11886 0 -54.11886 0 -55.59313 0 -59.41532 0 -92.51001 0 -97.27695 0 -99.74084 0 -102.2597 0 -112.9069 0 -112.9069 0 -115.7171 0 -115.7171 0 -118.589 0 -121.5236 0 -121.5236 0 -121.5236 0 -99.74084 0 -127.5863 0 -124.5223 0 -121.5236 0 -124.5223 0 -127.5863 0 -130.7166 0 -133.9147 0 -137.1818 0 -173.9391 0 -195.3898 0 -236.169 0 -236.169 0 -244.9397 0 -258.6186 0 -263.3214 0 -268.0973 0 -277.8722 0 -600.804 0 -981.1611 0 - -383.7065 0 -394.358 0 -463.5084 0 -495.1235 0 -563.6945 0 -765.4122 0 -1011.231 0 -1021.416 0 -951.8103 0 -876.9574 0 -798.4495 0 -773.5672 0 -781.7915 0 -823.9673 0 -876.9574 0 -913.7716 0 -913.7716 0 -876.9574 0 -850.1325 0 -798.4495 0 -749.3084 0 -717.9128 0 -680.1559 0 -651.1075 0 -629.9788 0 -600.804 0 -570.9612 0 -556.5042 0 -535.385 0 -521.6757 0 -508.2568 0 -495.1235 0 -482.271 0 -463.5084 0 -457.3894 0 -439.4304 0 -433.5748 0 -427.7836 0 -422.0562 0 -405.2517 0 -399.7743 0 -389.0022 0 -383.7065 0 -373.2931 0 -368.1744 0 -358.1103 0 - -162.093 0 -150.9657 0 -158.3059 0 -154.5973 0 -207.5571 0 -199.95 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -190.9217 0 -186.5442 0 -186.5442 0 -186.5442 0 -186.5442 0 -182.2556 0 -182.2556 0 -178.0545 0 -178.0545 0 -173.9391 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -154.5973 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -162.093 0 -162.093 0 -158.3059 0 -158.3059 0 -154.5973 0 -150.9657 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -140.5191 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -133.9147 0 -133.9147 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -112.9069 0 -118.589 0 -107.4668 0 -127.5863 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -124.5223 0 -121.5236 0 -124.5223 0 -124.5223 0 -124.5223 0 -121.5236 0 -121.5236 0 -121.5236 0 -121.5236 0 -121.5236 0 -121.5236 0 -75.14358 0 -61.00001 0 -104.8347 0 -121.5236 0 -118.589 0 -115.7171 0 -118.589 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -115.7171 0 -112.9069 0 -112.9069 0 -115.7171 0 -112.9069 0 -112.9069 0 -112.9069 0 -110.1572 0 -112.9069 0 -107.4668 0 -107.4668 0 -107.4668 0 -104.8347 0 -99.74084 0 -104.8347 0 -104.8347 0 -104.8347 0 -104.8347 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -104.8347 0 -102.2597 0 -102.2597 0 -102.2597 0 -102.2597 0 -104.8347 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -102.2597 0 -99.74084 0 -102.2597 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -97.27695 0 -94.86702 0 -94.86702 0 -94.86702 0 -75.14358 0 -92.51001 0 -75.14358 0 -75.14358 0 -75.14358 0 -61.00001 0 -75.14358 0 -61.00001 0 -75.14358 0 -75.14358 0 -75.14358 0 -75.14358 0 -75.14358 0 -75.14358 0 -75.14358 0 -75.14358 0 -75.14358 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.20362 0 -60.20362 0 -59.41532 0 -59.41532 0 -58.63505 0 -59.41532 0 -58.63505 0 -57.86275 0 -58.63505 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -58.63505 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.09837 0 -58.63505 0 -57.86275 0 -57.86275 0 -57.09837 0 -56.34185 0 -56.34185 0 -56.34185 0 -55.59313 0 -55.59313 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -57.09837 0 -57.09837 0 -57.86275 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -56.34185 0 -55.59313 0 -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.85215 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.11886 0 -54.11886 0 -53.39319 0 -53.39319 0 -54.11886 0 -54.11886 0 -54.11886 0 -53.39319 0 -53.39319 0 -54.11886 0 -54.11886 0 -57.09837 0 -92.51001 0 -97.27695 0 -104.8347 0 -104.8347 0 -104.8347 0 -107.4668 0 -110.1572 0 -112.9069 0 -112.9069 0 -115.7171 0 -118.589 0 -115.7171 0 -118.589 0 -115.7171 0 -115.7171 0 -118.589 0 -118.589 0 -121.5236 0 -124.5223 0 -127.5863 0 -124.5223 0 -127.5863 0 -124.5223 0 -121.5236 0 -124.5223 0 -124.5223 0 -124.5223 0 -118.589 0 -118.589 0 -115.7171 0 -112.9069 0 -115.7171 0 -112.9069 0 -115.7171 0 -121.5236 0 -121.5236 0 -121.5236 0 -124.5223 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -130.7166 0 -127.5863 0 -127.5863 0 -127.5863 0 -124.5223 0 -121.5236 0 -118.589 0 -118.589 0 -112.9069 0 -110.1572 0 -107.4668 0 -107.4668 0 -104.8347 0 -102.2597 0 -102.2597 0 -99.74084 0 -92.51001 0 -92.51001 0 -75.14358 0 -92.51001 0 -75.14358 0 -75.14358 0 -75.14358 0 -60.20362 0 -60.20362 0 -54.85215 0 -60.20362 0 -60.20362 0 -60.20362 0 -59.41532 0 -57.86275 0 -57.86275 0 -58.63505 0 -59.41532 0 -59.41532 0 -57.09837 0 -58.63505 0 -57.86275 0 -57.09837 0 -56.34185 0 -56.34185 0 -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -54.85215 0 -54.85215 0 -54.11886 0 -54.85215 0 -54.11886 0 -54.11886 0 -53.39319 0 -53.39319 0 -52.6751 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.2614 0 -51.2614 0 -51.2614 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.96452 0 -52.6751 0 -51.96452 0 -51.96452 0 -51.96452 0 -51.2614 0 -49.19625 0 -51.96452 0 -42.77463 0 -44.62835 0 -42.1702 0 -46.54379 0 -42.77463 0 -40.98122 0 -41.57241 0 -40.39657 0 -46.54379 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.87733 0 -49.87733 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.19625 0 -49.87733 0 -49.19625 0 -51.08001 0 -46.12001 0 -43.02001 0 -41.78001 0 -41.16 0 -41.16001 0 -43.64001 0 -44.88001 0 -42.40001 0 -41.78 0 -44.26001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -43.64001 0 -41.78 0 -41.78 0 -41.16 0 -43.02001 0 -42.40001 0 -41.78001 0 -47.36001 0 -46.12001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -46.12001 0 -46.74001 0 -47.36001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -47.36001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -44.88001 0 -45.50001 0 -45.50001 0 -46.12001 0 -46.12001 0 -46.12001 0 -45.50001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.12001 0 -45.50001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -45.50001 0 -46.12001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -47.36001 0 -46.74001 0 -46.74001 0 -47.36001 0 -46.74001 0 -46.12001 0 -45.50001 0 -44.88001 0 -44.88001 0 -45.50001 0 -44.88001 0 -44.88001 0 -45.50001 0 -46.12001 0 -45.50001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.74001 0 -47.36001 0 -46.74001 0 -47.36001 0 -46.74001 0 -46.74001 0 -46.12001 0 -47.36001 0 -45.50001 0 -46.12001 0 -43.64001 0 -41.78 0 -41.78 0 -42.40001 0 -40.54 0 -44.88001 0 -44.26001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -45.50001 0 -46.12001 0 -46.12001 0 -44.88001 0 -46.12001 0 -45.50001 0 -46.12001 0 -45.50001 0 -46.12001 0 -45.50001 0 -44.88001 0 -45.50001 0 -44.26001 0 -39.92 0 -40.54 0 -42.40001 0 -39.92 0 -43.64001 0 -36.2 0 -39.3 0 -41.16001 0 -44.88001 0 -46.12001 0 -44.26001 0 -46.12001 0 -38.06 0 -39.3 0 -39.92 0 -46.12001 0 -44.88001 0 -45.50001 0 -46.12001 0 -46.12001 0 -44.88001 0 -42.40001 0 -42.40001 0 -38.68 0 -43.02001 0 -45.50001 0 -44.88001 0 -44.88001 0 -45.50001 0 -41.16001 0 -35.58 0 -44.26001 0 -45.50001 0 -44.88001 0 -45.50001 0 -46.12001 0 -45.50001 0 -46.12001 0 -45.50001 0 -46.12001 0 -45.50001 0 -46.12001 0 -46.12001 0 -45.50001 0 -45.50001 0 -44.88001 0 -45.50001 0 -45.50001 0 -44.88001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -45.50001 0 -45.50001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -44.88001 0 -46.12001 0 -43.64001 0 -42.40001 0 -46.12001 0 -43.64001 0 -43.64001 0 -44.88001 0 -46.12001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.12001 0 -43.64001 0 -39.3 0 -40.54 0 -41.78 0 -40.54 0 -38.68 0 -36.2 0 -38.68 0 -41.16 0 -39.3 0 -37.44 0 -36.82 0 -41.78 0 -41.78 0 -41.16001 0 -40.54 0 -40.54 0 -41.16001 0 -43.02001 0 -40.54 0 -40.54 0 -38.68 0 -43.02001 0 -44.26001 0 -44.88001 0 -43.64001 0 -43.64001 0 -44.26001 0 -41.78 0 -43.64001 0 -38.06 0 -43.64001 0 -38.06 0 -38.68 0 -39.3 0 -39.3 0 -43.02001 0 -43.64001 0 -43.64001 0 -42.40001 0 -44.26001 0 -43.64001 0 -44.26001 0 -44.26001 0 -44.26001 0 -44.26001 0 -43.64001 0 -43.64001 0 -38.68 0 -37.44 0 -36.82 0 -36.2 0 -34.34 0 -37.44 0 -35.58 0 -34.34 0 -34.96 0 -35.58 0 -36.82 0 -38.06 0 -39.3 0 -37.44 0 -40.54 0 -41.16 0 -39.92 0 -41.78 0 -43.02001 0 -43.02001 0 -43.02001 0 -42.40001 0 -42.40001 0 -42.40001 0 -41.78001 0 -38.06 0 -34.96 0 -37.44 0 -33.1 0 -33.72 0 -36.82 0 -34.96 0 -34.96 0 -35.58 0 -37.44 0 -38.06 0 -39.92 0 -41.78001 0 -41.78 0 -41.78 0 -42.40001 0 -41.78 0 -41.78 0 -41.78001 0 -42.40001 0 -41.78 0 -42.40001 0 -41.78 0 -41.78 0 -38.06 0 -37.44 0 -35.58 0 -35.58 0 -34.34 0 -35.58 0 -34.96 0 -32.48 0 -36.82 0 -33.1 0 -39.92 0 -41.16 0 -41.16001 0 -41.16 0 -41.16001 0 -41.16 0 -41.16001 0 -41.16001 0 -41.16001 0 -41.16001 0 -41.16001 0 -41.16001 0 -41.16001 0 -41.16 0 -39.3 0 -37.44 0 -36.82 0 -34.34 0 -35.58 0 -34.96 0 -35.58 0 -36.82 0 -37.44 0 -39.92 0 -39.92 0 -40.54 0 -41.16001 0 -41.16001 0 -41.16 0 -40.54 0 -41.16001 0 -40.54 0 -41.16 0 -40.54 0 -41.16001 0 -41.16 0 -41.78001 0 -41.78001 0 -42.40001 0 -41.78 0 -41.78001 0 -39.92 0 -37.44 0 -43.02001 0 -41.78 0 -43.02001 0 -43.02001 0 -44.26001 0 -47.36001 0 -47.36001 0 -47.98001 0 -48.60001 0 -49.84001 0 -51.08001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.70001 0 -52.32001 0 -52.32001 0 -54.80001 0 -49.84001 0 -55.42001 0 -56.04001 0 -55.42001 0 -54.18001 0 -52.32001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.66001 0 -51.08001 0 -57.90001 0 -58.52001 0 -57.28001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.76001 0 -60.38001 0 -76.75501 0 -92.51001 0 -102.5825 0 -105.94 0 -112.655 0 -116.0125 0 -112.9069 0 -107.4668 0 -112.9069 0 -110.1572 0 -115.7171 0 -115.7171 0 -115.7171 0 -118.589 0 -118.589 0 -118.589 0 -118.589 0 -121.5236 0 -121.5236 0 -121.5236 0 -121.5236 0 -124.5223 0 -121.5236 0 -121.5236 0 -121.5236 0 -121.5236 0 -118.589 0 -115.7171 0 -112.9069 0 -112.9069 0 -110.1572 0 -107.4668 0 -104.8347 0 -104.8347 0 -102.2597 0 -102.2597 0 -99.74084 0 -97.27695 0 -97.27695 0 -97.27695 0 -94.86702 0 -92.51001 0 -75.14358 0 -75.14358 0 -75.14358 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.20362 0 -60.20362 0 -59.41532 0 -59.41532 0 -54.85215 0 -52.6751 0 -51.96452 0 -54.11886 0 -56.34185 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.09837 0 -57.86275 0 -56.34185 0 -56.34185 0 -56.34185 0 -55.59313 0 -55.59313 0 -55.59313 0 -55.59313 0 -54.85215 0 -47.85577 0 -47.19624 0 -47.85577 0 -50.56569 0 -48.52242 0 -49.87733 0 -46.54379 0 -47.19624 0 -49.87733 0 -47.19624 0 -43.38577 0 -46.54379 0 -49.87733 0 -47.19624 0 -51.2614 0 -47.19624 0 -49.87733 0 -50.56569 0 -51.2614 0 -51.2614 0 -50.56569 0 -44.00365 0 -43.38577 0 -40.98122 0 -44.62835 0 -46.54379 0 -45.89836 0 -45.89836 0 -46.54379 0 -44.00365 0 -44.62835 0 -42.77463 0 -44.62835 0 -42.77463 0 -42.1702 0 -45.2599 0 -44.00365 0 -43.64001 0 -45.50001 0 -42.40001 0 -43.64001 0 -43.64001 0 -43.02001 0 -44.26001 0 -42.40001 0 -38.68 0 -41.16001 0 -43.64001 0 -42.40001 0 -43.02001 0 -43.02001 0 -44.88001 0 -42.40001 0 -43.64001 0 -43.02001 0 -43.02001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -46.74001 0 -48.60001 0 -49.22001 0 -48.60001 0 -49.22001 0 -49.22001 0 -50.46001 0 -54.18001 0 -57.90001 0 -61.00001 0 -59.76001 0 -57.28001 0 -57.28001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -59.14001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -99.22501 0 -92.51001 0 -57.90001 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -76.75501 0 -92.51001 0 -76.75501 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -76.75501 0 -76.75501 0 -92.51001 0 -92.51001 0 -59.76001 0 -59.14001 0 -57.90001 0 -57.28001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.66001 0 -54.80001 0 -56.04001 0 -57.28001 0 -56.66001 0 -56.04001 0 -56.04001 0 -61.00001 0 -119.37 0 -132.8 0 -132.8 0 -129.4425 0 -129.4425 0 -129.4425 0 -132.8 0 -132.8 0 -139.515 0 -139.515 0 -142.8725 0 -139.515 0 -139.515 0 -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -136.1575 0 -146.23 0 -152.945 0 -166.375 0 -176.4475 0 -183.1625 0 -193.235 0 -204.5708 0 -218.4331 0 -227.6746 0 -236.9162 0 -241.537 0 -246.1577 0 -255.3993 0 -264.6408 0 -269.2616 0 -273.8823 0 -273.8823 0 -246.1577 0 -232.2954 0 -236.9162 0 -223.0539 0 -227.6746 0 -209.1916 0 -223.0539 0 -241.537 0 -232.2954 0 -223.0539 0 -213.8123 0 -209.1916 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -193.235 0 -189.8775 0 -189.8775 0 -186.52 0 -183.1625 0 -183.1625 0 -183.1625 0 -186.52 0 -183.1625 0 -179.805 0 -179.805 0 -159.66 0 -169.7325 0 -173.09 0 -169.7325 0 -146.23 0 -179.805 0 -179.805 0 -179.805 0 -176.4475 0 -169.7325 0 -159.66 0 -139.515 0 -142.8725 0 -142.8725 0 -146.23 0 -149.5875 0 -146.23 0 -139.515 0 -136.1575 0 -139.515 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -119.37 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -109.2975 0 -76.75501 0 -57.90001 0 -59.14001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -59.76001 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -60.38001 0 -76.75501 0 -61.00001 0 -54.80001 0 -52.32001 0 -52.32001 0 -53.56001 0 -52.94001 0 -50.46001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -51.70001 0 -52.32001 0 -57.90001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -49.22001 0 -49.22001 0 -52.94001 0 -49.22001 0 -50.46001 0 -50.46001 0 -51.70001 0 -51.70001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -51.08001 0 -49.84001 0 -51.70001 0 -49.22001 0 -48.60001 0 -48.60001 0 -47.98001 0 -46.12001 0 -46.74001 0 -49.22001 0 -47.36001 0 -47.98001 0 -48.60001 0 -52.94001 0 -56.04001 0 -55.42001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.18001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -55.42001 0 -56.04001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.18001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.70001 0 -51.70001 0 -51.70001 0 -49.84001 0 -51.08001 0 -46.74001 0 -43.64001 0 -43.02001 0 -44.26001 0 -45.50001 0 -45.50001 0 -49.84001 0 -50.46001 0 -50.46001 0 -50.46001 0 -51.08001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -49.84001 0 -50.46001 0 -49.84001 0 -47.98001 0 -47.36001 0 -40.54 0 -46.12001 0 -42.40001 0 -42.40001 0 -44.88001 0 -44.26001 0 -42.40001 0 -45.50001 0 -49.22001 0 -49.84001 0 -49.84001 0 -49.84001 0 -49.84001 0 -49.22001 0 -49.84001 0 -49.84001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.84001 0 -48.60001 0 -49.84001 0 -49.22001 0 -46.12001 0 -46.74001 0 -47.36001 0 -46.12001 0 -46.12001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -46.74001 0 -45.50001 0 -43.64001 0 -41.78001 0 -41.78001 0 -47.98001 0 -47.98001 0 -47.36001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -47.98001 0 -47.98001 0 -48.60001 0 -47.98001 0 -48.60001 0 -47.36001 0 -47.98001 0 -42.40001 0 -41.16001 0 -43.64001 0 -42.40001 0 -41.78 0 -41.16001 0 -42.40001 0 -39.3 0 -43.64001 0 -47.36001 0 -43.64001 0 -44.88001 0 -42.40001 0 -43.02001 0 -38.68 0 -41.78001 0 -44.88001 0 -44.88001 0 -45.50001 0 -44.88001 0 -38.06 0 -39.3 0 -41.16001 0 -40.54 0 -39.3 0 -38.68 0 -39.92 0 -38.06 0 -44.88001 0 -43.64001 0 -44.88001 0 -47.98001 0 -51.70001 0 -53.56001 0 -56.04001 0 -59.14001 0 -92.51001 0 -132.8 0 -166.375 0 -176.4475 0 -199.95 0 -241.537 0 -292.3654 0 -296.9862 0 -273.8823 0 -255.3993 0 -232.2954 0 -223.0539 0 -218.4331 0 -199.95 0 -196.5925 0 -193.235 0 -189.8775 0 -189.8775 0 -186.52 0 -183.1625 0 -179.805 0 -179.805 0 -176.4475 0 -173.09 0 -169.7325 0 -166.375 0 -166.375 0 -159.66 0 -152.945 0 -146.23 0 -139.515 0 -132.8 0 -126.085 0 -119.37 0 -112.655 0 -109.2975 0 -60.38001 0 -57.28001 0 -55.42001 0 -61.00001 0 -54.18001 0 -58.52001 0 -57.28001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.14001 0 -58.52001 0 -57.90001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -47.36001 0 -46.74001 0 -47.98001 0 -53.56001 0 -46.12001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.70001 0 -51.70001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.08001 0 -50.46001 0 -50.46001 0 -49.84001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.84001 0 -49.84001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -51.08001 0 -50.46001 0 -50.46001 0 -49.84001 0 -50.46001 0 -49.84001 0 -48.60001 0 -45.50001 0 -50.46001 0 -47.36001 0 -49.22001 0 -48.60001 0 -47.98001 0 - -40.54 0 - -41.16001 0 -46.12001 0 -48.60001 0 -46.74001 0 -43.64001 0 -41.78001 0 -44.88001 0 -46.12001 0 -46.12001 0 -46.12001 0 -45.50001 0 -46.12001 0 -46.74001 0 -46.74001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.98001 0 -48.60001 0 -47.98001 0 -47.98001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -46.74001 0 -46.74001 0 -46.74001 0 -46.74001 0 -47.36001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.84001 0 -41.16 0 -42.40001 0 -46.74001 0 -46.12001 0 -48.60001 0 -48.60001 0 -48.60001 0 -38.68 0 -38.06 0 -36.82 0 -37.44 0 -40.54 0 -37.44 0 -46.74001 0 -39.3 0 -45.50001 0 -46.74001 0 -46.12001 0 -46.12001 0 -46.74001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -46.74001 0 -46.12001 0 -46.74001 0 -46.74001 0 -46.74001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 - -48.60001 0 -48.60001 0 - -48.60001 0 -47.98001 0 -46.12001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.84001 0 -49.22001 0 -49.84001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -48.60001 0 -47.98001 0 -49.22001 0 -47.98001 0 -48.60001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.36001 0 -47.36001 0 -48.60001 0 -49.22001 0 -48.60001 0 -47.98001 0 -46.12001 0 -47.98001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.84001 0 -49.84001 0 - -49.84001 0 -50.46001 0 -49.84001 0 -49.84001 0 -49.84001 0 -49.84001 0 -50.46001 0 -50.46001 0 -50.46001 0 -49.84001 0 -50.46001 0 -50.46001 0 -49.22001 0 -47.98001 0 -49.22001 0 -49.84001 0 -49.84001 0 -49.22001 0 -49.22001 0 -49.84001 0 -49.84001 0 -49.84001 0 -49.84001 0 -50.46001 0 -50.46001 0 -50.46001 0 -51.08001 0 -51.70001 0 -50.46001 0 -51.08001 0 -50.46001 0 -51.08001 0 -51.08001 0 -50.46001 0 -50.46001 0 -49.84001 0 -50.46001 0 -51.08001 0 -51.08001 0 -50.46001 0 -50.46001 0 -50.46001 0 -51.08001 0 -51.08001 0 -50.46001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -50.46001 0 -52.32001 0 -52.32001 0 -51.08001 0 -51.08001 0 -48.60001 0 -51.08001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.70001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -52.32001 0 -52.94001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -52.32001 0 -51.70001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.94001 0 -53.56001 0 -52.32001 0 -52.32001 0 -51.70001 0 -50.46001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -51.70001 0 -52.94001 0 -46.74001 0 -51.08001 0 -49.84001 0 -49.84001 0 -51.08001 0 -53.56001 0 -50.46001 0 -52.94001 0 -52.94001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -54.80001 0 -54.80001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.80001 0 -54.18001 0 -55.42001 0 -54.18001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -52.94001 0 -54.18001 0 -52.94001 0 -54.80001 0 -54.18001 0 -54.80001 0 -52.94001 0 -51.70001 0 -54.80001 0 -51.08001 0 -52.94001 0 -54.80001 0 -54.18001 0 -54.80001 0 -53.56001 0 -54.80001 0 -52.32001 0 -52.94001 0 -56.66001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -55.42001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -52.32001 0 -51.08001 0 -51.70001 0 -51.08001 0 -49.84001 0 -51.08001 0 -52.94001 0 -52.94001 0 -52.32001 0 -51.70001 0 -51.70001 0 -54.18001 0 -49.84001 0 -52.94001 0 -52.32001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -52.32001 0 -54.18001 0 -54.80001 0 -54.80001 0 -53.56001 0 -53.56001 0 -52.94001 0 -54.18001 0 -52.94001 0 -52.32001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.80001 0 -56.04001 0 -54.80001 0 -55.42001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -51.08001 0 -54.18001 0 -53.56001 0 -53.56001 0 -52.32001 0 -54.80001 0 -52.32001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -52.32001 0 -54.18001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -53.56001 0 -52.94001 0 -53.56001 0 -52.32001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -44.26001 0 -50.46001 0 -51.08001 0 -49.84001 0 -52.94001 0 -51.70001 0 -52.32001 0 -52.94001 0 -54.18001 0 -53.56001 0 -52.94001 0 -53.56001 0 -54.18001 0 -53.56001 0 -52.94001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.94001 0 -54.18001 0 -52.94001 0 -51.70001 0 -51.70001 0 -49.84001 0 -49.22001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -53.56001 0 -52.94001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.80001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -52.94001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 - -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -53.56001 0 -52.94001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.80001 0 -54.80001 0 -52.94001 0 -52.94001 0 -52.94001 0 -51.70001 0 -51.70001 0 -52.32001 0 -49.84001 0 -53.56001 0 -52.94001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -52.94001 0 -52.32001 0 -52.94001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.32001 0 -54.18001 0 -53.56001 0 -52.32001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.94001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.32001 0 -50.46001 0 -51.70001 0 -51.70001 0 -52.32001 0 -52.32001 0 -51.08001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.32001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.32001 0 -51.70001 0 -51.08001 0 -49.22001 0 -48.60001 0 -41.78001 0 -44.88001 0 -43.02001 0 -43.02001 0 -44.26001 0 -49.84001 0 -51.08001 0 -51.08001 0 -51.08001 0 -51.70001 0 -46.12001 0 -48.60001 0 -49.22001 0 -43.64001 0 -47.36001 0 -47.36001 0 -51.70001 0 -52.32001 0 -52.94001 0 -53.56001 0 -52.32001 0 -53.56001 0 -54.18001 0 -53.56001 0 -54.18001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -52.94001 0 -53.56001 0 -54.18001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.18001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -48.60001 0 -46.74001 0 -44.88001 0 -46.74001 0 -48.60001 0 -48.60001 0 -54.18001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.18001 0 -55.42001 0 -56.04001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -55.42001 0 -55.42001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -48.60001 0 -54.18001 0 -49.22001 0 -47.98001 0 -54.18001 0 -54.80001 0 -54.18001 0 -51.08001 0 -52.94001 0 -53.56001 0 -48.60001 0 -49.84001 0 -51.08001 0 -49.22001 0 -46.12001 0 -50.46001 0 -54.18001 0 -51.08001 0 -52.94001 0 -53.56001 0 -55.42001 0 -55.42001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -57.28001 0 -55.42001 0 -55.42001 0 -54.80001 0 -51.70001 0 -53.56001 0 -52.94001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.18001 0 -54.80001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.80001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.66001 0 -55.42001 0 -55.42001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.66001 0 -57.28001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.28001 0 -56.66001 0 -56.04001 0 -57.28001 0 -57.90001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -55.42001 0 -48.60001 0 -50.46001 0 -51.08001 0 -47.98001 0 -51.08001 0 -48.60001 0 -49.22001 0 -50.46001 0 -53.56001 0 -52.94001 0 -49.22001 0 -50.46001 0 -49.84001 0 -51.70001 0 -51.70001 0 -47.98001 0 -54.80001 0 -56.66001 0 -56.04001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -55.42001 0 -56.66001 0 -52.94001 0 -54.80001 0 -55.42001 0 -51.08001 0 -56.66001 0 -56.66001 0 -56.66001 0 -55.42001 0 -51.08001 0 -53.56001 0 -55.42001 0 -54.80001 0 -55.42001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 - -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -52.32001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -59.14001 0 -58.52001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -55.42001 0 -57.90001 0 -57.90001 0 -51.08001 0 -57.28001 0 -56.66001 0 -52.94001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.04001 0 -57.28001 0 -57.90001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -58.52001 0 -57.90001 0 -58.52001 0 -57.90001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.04001 0 -49.84001 0 -55.42001 0 -57.90001 0 -57.90001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -54.80001 0 -53.56001 0 -53.56001 0 -52.32001 0 -51.08001 0 -49.22001 0 -47.36001 0 -44.26001 0 -43.02001 0 -43.02001 0 -45.50001 0 -47.98001 0 -48.60001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.98001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.84001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.94001 0 -53.56001 0 -53.56001 0 -54.18001 0 -55.42001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -55.42001 0 -57.90001 0 -58.52001 0 -59.14001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -76.75501 0 -112.655 0 -126.085 0 -129.4425 0 -116.0125 0 -95.86751 0 -116.0125 0 -105.94 0 -95.86751 0 -76.75501 0 -60.38001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -58.52001 0 -57.90001 0 -58.52001 0 -61.00001 0 -92.51001 0 -95.86751 0 -99.22501 0 -102.5825 0 -112.655 0 -112.655 0 -116.0125 0 -112.655 0 -112.655 0 -126.085 0 -278.5031 0 -241.537 0 -218.4331 0 -213.8123 0 -241.537 0 -241.537 0 -232.2954 0 -232.2954 0 - -199.95 0 -189.8775 0 -196.5925 0 -196.5925 0 -204.5708 0 -196.5925 0 - -37500 0 -189.8775 0 -196.5925 0 -199.95 0 -193.235 0 -183.1625 0 -176.4475 0 -166.375 0 -159.66 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 - -37500 0 -112.655 0 -105.94 0 -102.5825 0 -105.94 0 -112.655 0 -126.085 0 -149.5875 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -37500 0 -102.5825 0 -102.5825 0 -95.86751 0 -92.51001 0 -61.00001 0 -92.51001 0 -95.86751 0 -102.5825 0 -105.94 0 -116.0125 0 -126.085 0 -132.8 0 -146.23 0 -159.66 0 -37500 0 -37500 0 -37500 0 -37500 0 -132.8 0 -126.085 0 -119.37 0 -112.655 0 -109.2975 0 -102.5825 0 -102.5825 0 -37500 0 -99.22501 0 -102.5825 0 -102.5825 0 -102.5825 0 -109.2975 0 -116.0125 0 -122.7275 0 -136.1575 0 -149.5875 0 -166.375 0 -176.4475 0 -183.1625 0 -179.805 0 -176.4475 0 -166.375 0 -159.66 0 -156.3025 0 -149.5875 0 -146.23 0 -142.8725 0 -139.515 0 -132.8 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -122.7275 0 -126.085 0 -132.8 0 -139.515 0 -146.23 0 -159.66 0 -169.7325 0 -176.4475 0 -179.805 0 -176.4475 0 -169.7325 0 -163.0175 0 -156.3025 0 -149.5875 0 -149.5875 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 - -119.37 0 -119.37 0 -132.8 0 -126.085 0 -129.4425 0 -142.8725 0 -156.3025 0 -169.7325 0 -183.1625 0 -193.235 0 -196.5925 0 -186.52 0 -173.09 0 -166.375 0 -166.375 0 -166.375 0 -166.375 0 -163.0175 0 -156.3025 0 -152.945 0 -149.5875 0 -142.8725 0 -139.515 0 -129.4425 0 -116.0125 0 -112.655 0 -129.4425 0 -146.23 0 -139.515 0 -149.5875 0 -166.375 0 -166.375 0 -173.09 0 -173.09 0 -166.375 0 -163.0175 0 -156.3025 0 -166.375 0 -169.7325 0 -176.4475 0 -173.09 0 -173.09 0 -95.86751 0 -92.51001 0 -109.2975 0 -112.655 0 -126.085 0 -152.945 0 -146.23 0 -142.8725 0 -139.515 0 -142.8725 0 -139.515 0 -136.1575 0 -132.8 0 -136.1575 0 -132.8 0 -129.4425 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -116.0125 0 -116.0125 0 -112.655 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -102.5825 0 -102.5825 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -54.80001 0 -49.84001 0 -49.22001 0 -50.46001 0 -49.22001 0 -47.98001 0 -48.60001 0 -49.22001 0 -57.28001 0 -54.80001 0 -54.18001 0 -51.70001 0 -54.80001 0 -55.42001 0 -52.32001 0 -51.70001 0 -49.84001 0 -50.46001 0 -53.56001 0 -55.42001 0 -51.08001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.70001 0 -49.22001 0 -51.70001 0 -51.70001 0 -52.94001 0 -52.32001 0 -47.98001 0 -51.70001 0 -52.32001 0 -51.08001 0 -53.56001 0 -50.46001 0 -50.46001 0 -51.70001 0 -51.70001 0 -59.14001 0 -60.38001 0 -56.66001 0 -57.90001 0 -59.14001 0 -59.76001 0 -56.04001 0 -54.18001 0 -55.42001 0 -59.14001 0 -57.90001 0 -59.14001 0 -56.04001 0 -56.04001 0 -58.52001 0 -56.66001 0 -56.04001 0 -59.76001 0 -59.14001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -58.52001 0 -59.14001 0 -92.51001 0 -61.00001 0 -163.0175 0 -159.66 0 -163.0175 0 -199.95 0 -199.95 0 -126.085 0 - -60.38001 0 -54.80001 0 -52.32001 0 -52.32001 0 -59.14001 0 -102.5825 0 -99.22501 0 -76.75501 0 -59.14001 0 -76.75501 0 -126.085 0 -136.1575 0 -132.8 0 -119.37 0 -119.37 0 -116.0125 0 -112.655 0 -105.94 0 -105.94 0 -102.5825 0 -99.22501 0 -99.22501 0 -102.5825 0 -99.22501 0 -95.86751 0 -92.51001 0 -92.51001 0 -76.75501 0 -92.51001 0 -61.00001 0 -76.75501 0 -61.00001 0 -61.00001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -60.38001 0 -61.00001 0 -76.75501 0 -60.38001 0 -57.28001 0 -61.00001 0 -61.00001 0 -59.76001 0 -61.00001 0 -76.75501 0 -76.75501 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -76.75501 0 -61.00001 0 -59.76001 0 -58.52001 0 -59.76001 0 -56.04001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.04001 0 -59.76001 0 -60.38001 0 -59.76001 0 -57.28001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -92.51001 0 -76.75501 0 -61.00001 0 -59.76001 0 -56.04001 0 -56.66001 0 -99.22501 0 -95.86751 0 -95.86751 0 -99.22501 0 -105.94 0 -92.51001 0 -95.86751 0 -109.2975 0 -105.94 0 -61.00001 0 -61.00001 0 -76.75501 0 -109.2975 0 -139.515 0 - -142.8725 0 -139.515 0 -129.4425 0 -126.085 0 -129.4425 0 -139.515 0 -139.515 0 -129.4425 0 -119.37 0 -105.94 0 -95.86751 0 -92.51001 0 - -105.94 0 -119.37 0 -132.8 0 -139.515 0 -139.515 0 -136.1575 0 -129.4425 0 -122.7275 0 -119.37 0 -116.0125 0 -112.655 0 -116.0125 0 -116.0125 0 -102.5825 0 -102.5825 0 -102.5825 0 -109.2975 0 -102.5825 0 -119.37 0 -92.51001 0 -56.66001 0 -57.28001 0 -56.04001 0 -122.7275 0 -126.085 0 -122.7275 0 -116.0125 0 -109.2975 0 -99.22501 0 - -105.94 0 -119.37 0 -136.1575 0 -152.945 0 -166.375 0 -186.52 0 -196.5925 0 -218.4331 0 -232.2954 0 -264.6408 0 -246.1577 0 -196.5925 0 -129.4425 0 -61.00001 0 -53.56001 0 -58.52001 0 -109.2975 0 -61.00001 0 -76.75501 0 -105.94 0 -122.7275 0 -129.4425 0 -132.8 0 -102.5825 0 -112.655 0 -92.51001 0 -116.0125 0 -116.0125 0 -129.4425 0 -102.5825 0 -116.0125 0 -126.085 0 -126.085 0 -112.655 0 -60.38001 0 -54.80001 0 -59.76001 0 -57.90001 0 -57.90001 0 -57.28001 0 -59.14001 0 -95.86751 0 -109.2975 0 -109.2975 0 -116.0125 0 -109.2975 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -99.22501 0 -59.76001 0 -57.90001 0 -102.5825 0 -56.04001 0 -59.76001 0 -76.75501 0 -99.22501 0 -56.66001 0 -61.00001 0 -105.94 0 -92.51001 0 -102.5825 0 -61.00001 0 -57.28001 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -99.22501 0 -95.86751 0 -99.22501 0 -99.22501 0 -99.22501 0 -102.5825 0 -99.22501 0 -99.22501 0 -102.5825 0 -102.5825 0 -99.22501 0 -95.86751 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -59.14001 0 -92.51001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -76.75501 0 -76.75501 0 -92.51001 0 -76.75501 0 -95.86751 0 -76.75501 0 -95.86751 0 -92.51001 0 -61.00001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -92.51001 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -57.28001 0 -54.18001 0 -57.28001 0 -56.66001 0 -54.18001 0 -56.04001 0 -55.42001 0 -54.80001 0 -55.42001 0 -55.42001 0 -58.52001 0 -61.00001 0 -59.14001 0 -56.66001 0 -54.18001 0 -51.08001 0 -52.32001 0 -52.32001 0 -59.14001 0 -50.46001 0 -52.94001 0 -51.08001 0 -53.56001 0 -52.32001 0 -49.22001 0 -52.32001 0 -56.04001 0 -54.18001 0 -51.70001 0 -55.42001 0 -57.28001 0 -55.42001 0 -76.75501 0 -92.51001 0 -76.75501 0 -61.00001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -61.00001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -76.75501 0 -92.51001 0 -76.75501 0 -92.51001 0 -92.51001 0 -92.51001 0 -60.38001 0 -61.00001 0 -60.38001 0 -59.14001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -92.51001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -61.00001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -59.76001 0 -60.38001 0 -59.76001 0 -55.42001 0 -55.42001 0 -52.32001 0 -51.70001 0 -52.32001 0 -49.84001 0 -51.70001 0 -50.46001 0 -51.08001 0 -54.80001 0 -54.18001 0 -51.70001 0 -53.56001 0 -52.94001 0 -56.04001 0 -59.76001 0 -55.42001 0 -59.76001 0 -52.32001 0 -54.18001 0 -76.75501 0 -59.76001 0 -58.52001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -56.04001 0 -56.04001 0 -59.14001 0 -56.66001 0 -57.28001 0 -58.52001 0 -57.28001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -55.42001 0 -57.28001 0 -53.56001 0 -51.70001 0 -54.18001 0 -56.04001 0 -57.90001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -55.42001 0 -52.32001 0 -51.08001 0 -56.66001 0 -59.76001 0 -51.70001 0 -52.94001 0 -51.70001 0 -60.38001 0 -59.76001 0 -76.75501 0 -59.76001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -58.52001 0 -58.52001 0 -59.14001 0 -51.70001 0 -59.14001 0 -57.28001 0 -58.52001 0 -57.90001 0 -58.52001 0 -59.14001 0 -60.38001 0 -59.76001 0 -60.38001 0 -61.00001 0 -76.75501 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -92.51001 0 -76.75501 0 -76.75501 0 - -60.38001 0 -60.38001 0 -60.38001 0 -52.94001 0 -52.32001 0 -59.76001 0 -58.52001 0 -60.38001 0 -60.38001 0 -76.75501 0 -60.38001 0 -59.76001 0 -57.28001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 - -61.00001 0 -61.00001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -92.51001 0 -95.86751 0 -92.51001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -95.86751 0 -95.86751 0 -61.00001 0 -61.00001 0 -61.00001 0 -54.18001 0 -56.66001 0 -56.04001 0 -56.66001 0 -57.28001 0 -54.80001 0 -53.56001 0 -56.66001 0 -59.76001 0 -60.38001 0 -61.00001 0 -60.38001 0 -59.76001 0 -55.42001 0 -55.42001 0 -52.94001 0 -55.42001 0 -55.42001 0 -56.04001 0 -76.75501 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -61.00001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -92.51001 0 -92.51001 0 -76.75501 0 -92.51001 0 -76.75501 0 -76.75501 0 -92.51001 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -76.75501 0 -61.00001 0 -61.00001 0 -76.75501 0 -92.51001 0 -102.5825 0 -76.75501 0 -56.04001 0 -56.66001 0 -56.66001 0 -43.64001 0 -41.16 0 -40.54 0 -41.16 0 -44.26001 0 -52.32001 0 -57.90001 0 -166.375 0 -156.3025 0 -122.7275 0 -105.94 0 -95.86751 0 -119.37 0 -126.085 0 -122.7275 0 -112.655 0 -99.22501 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -61.00001 0 -59.14001 0 -76.75501 0 -60.38001 0 -60.38001 0 -55.42001 0 -57.28001 0 -122.7275 0 -116.0125 0 -102.5825 0 -76.75501 0 -57.28001 0 -54.80001 0 -61.00001 0 -119.37 0 -119.37 0 -119.37 0 -116.0125 0 -109.2975 0 -102.5825 0 -95.86751 0 -92.51001 0 -76.75501 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -76.75501 0 -56.66001 0 -57.28001 0 -95.86751 0 -61.00001 0 -76.75501 0 -55.42001 0 -95.86751 0 -54.80001 0 -56.04001 0 -57.28001 0 -60.38001 0 -92.51001 0 -61.00001 0 -58.52001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -56.66001 0 -60.38001 0 -60.38001 0 -60.38001 0 -61.00001 0 -60.38001 0 -55.42001 0 -54.80001 0 -76.75501 0 -54.18001 0 -92.51001 0 -56.04001 0 -58.52001 0 -54.80001 0 -54.18001 0 -56.66001 0 -55.42001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -58.52001 0 -58.52001 0 -56.04001 0 -55.42001 0 -56.66001 0 -59.76001 0 -52.94001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.14001 0 -59.14001 0 -58.52001 0 -49.84001 0 - -122.7275 0 -119.37 0 -122.7275 0 -119.37 0 -122.7275 0 -122.7275 0 -122.7275 0 -116.0125 0 -119.37 0 -116.0125 0 -102.5825 0 -116.0125 0 -122.7275 0 -132.8 0 -116.0125 0 -126.085 0 -136.1575 0 -136.1575 0 -136.1575 0 -139.515 0 -142.8725 0 -142.8725 0 - -132.8 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -136.1575 0 -139.515 0 -136.1575 0 -136.1575 0 - -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -129.4425 0 -132.8 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -129.4425 0 -129.4425 0 -132.8 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -76.75501 0 -60.38001 0 -60.38001 0 -126.085 0 -126.085 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -61.00001 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -112.655 0 -99.22501 0 -59.76001 0 -59.76001 0 -58.52001 0 -59.14001 0 -57.90001 0 -57.90001 0 -61.00001 0 -116.0125 0 -116.0125 0 -112.655 0 -76.75501 0 -95.86751 0 -109.2975 0 -109.2975 0 -105.94 0 -109.2975 0 -95.86751 0 -105.94 0 -105.94 0 -109.2975 0 -109.2975 0 -95.86751 0 -92.51001 0 -112.655 0 -57.90001 0 -56.66001 0 -57.90001 0 -57.28001 0 -57.90001 0 -59.14001 0 -61.00001 0 -59.76001 0 -59.14001 0 -92.51001 0 -99.22501 0 -76.75501 0 -119.37 0 -116.0125 0 -109.2975 0 -92.51001 0 -116.0125 0 -116.0125 0 -112.655 0 -58.52001 0 -112.655 0 -112.655 0 -116.0125 0 -116.0125 0 -116.0125 0 -116.0125 0 -112.655 0 -116.0125 0 -112.655 0 -109.2975 0 -109.2975 0 -112.655 0 -59.76001 0 -102.5825 0 -109.2975 0 -105.94 0 -99.22501 0 -102.5825 0 -58.52001 0 -95.86751 0 -61.00001 0 -99.22501 0 -99.22501 0 -99.22501 0 -92.51001 0 -57.90001 0 -92.51001 0 -56.66001 0 -61.00001 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -61.00001 0 -55.42001 0 -56.66001 0 -57.28001 0 -57.90001 0 -52.94001 0 -56.04001 0 -55.42001 0 -55.42001 0 -59.76001 0 -61.00001 0 -76.75501 0 -76.75501 0 -60.38001 0 -61.00001 0 -60.38001 0 -76.75501 0 -61.00001 0 -60.38001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -56.04001 0 -53.56001 0 -54.80001 0 -53.56001 0 -52.94001 0 -54.18001 0 -56.04001 0 -58.52001 0 -56.66001 0 -56.04001 0 -51.70001 0 -57.28001 0 -54.18001 0 -61.00001 0 -59.14001 0 -54.80001 0 -59.14001 0 -56.66001 0 -59.14001 0 -56.04001 0 -57.90001 0 -58.52001 0 -56.66001 0 -58.52001 0 -59.14001 0 -51.08001 0 -51.08001 0 -49.84001 0 -57.90001 0 -51.70001 0 -51.08001 0 -50.46001 0 -52.32001 0 -52.32001 0 -56.04001 0 -53.56001 0 -52.32001 0 -54.18001 0 -49.84001 0 -50.46001 0 -52.94001 0 -49.84001 0 -57.90001 0 -61.00001 0 -59.14001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -61.00001 0 -59.14001 0 -59.76001 0 -59.76001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.14001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.90001 0 -58.52001 0 -59.76001 0 -58.52001 0 -57.90001 0 -57.28001 0 -49.84001 0 -55.42001 0 -50.46001 0 -55.42001 0 -54.18001 0 -55.42001 0 -55.42001 0 -56.04001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.04001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -54.80001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -54.80001 0 -56.04001 0 -56.04001 0 -49.84001 0 -51.08001 0 -52.32001 0 -52.94001 0 -54.80001 0 -54.80001 0 -51.08001 0 -54.18001 0 -54.80001 0 -56.04001 0 -54.80001 0 -57.28001 0 -55.42001 0 -54.18001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.66001 0 -52.32001 0 -55.42001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.18001 0 -56.04001 0 -56.04001 0 -56.66001 0 -55.42001 0 -54.18001 0 -56.04001 0 -55.42001 0 -53.56001 0 -54.18001 0 -56.04001 0 -55.42001 0 -54.80001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -56.04001 0 -51.08001 0 -54.18001 0 -56.04001 0 -56.04001 0 -49.84001 0 -54.80001 0 -56.04001 0 -54.80001 0 -54.80001 0 -51.70001 0 -54.80001 0 -56.04001 0 -56.04001 0 -55.42001 0 -49.22001 0 -55.42001 0 -51.70001 0 -54.18001 0 -54.18001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -55.42001 0 -54.80001 0 -56.04001 0 -55.42001 0 -55.42001 0 -54.80001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -54.80001 0 -54.18001 0 -54.80001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.80001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -54.18001 0 -55.42001 0 -52.94001 0 -52.94001 0 -53.56001 0 -49.84001 0 -52.94001 0 -50.46001 0 -56.04001 0 -54.80001 0 -52.32001 0 -54.18001 0 -56.04001 0 -53.56001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -54.18001 0 -47.98001 0 -54.18001 0 -46.74001 0 -50.46001 0 -48.60001 0 -51.08001 0 -51.70001 0 -47.98001 0 -44.26001 0 -48.60001 0 -49.22001 0 -47.36001 0 -50.46001 0 -50.46001 0 -51.08001 0 -52.94001 0 -51.70001 0 -47.36001 0 -43.64001 0 -49.22001 0 -49.84001 0 -49.22001 0 -52.32001 0 -54.80001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -55.42001 0 -55.42001 0 -56.04001 0 -55.42001 0 -56.04001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.80001 0 -55.42001 0 -54.80001 0 -55.42001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.32001 0 -53.56001 0 -52.94001 0 -52.94001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -53.56001 0 -52.94001 0 -54.18001 0 -53.56001 0 -54.80001 0 -54.18001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -51.70001 0 -56.66001 0 -57.90001 0 -56.66001 0 -56.04001 0 -56.66001 0 -56.66001 0 -57.28001 0 -56.66001 0 -58.52001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -76.75501 0 -92.51001 0 -76.75501 0 -59.14001 0 -95.86751 0 -95.86751 0 -95.86751 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -102.5825 0 -102.5825 0 -99.22501 0 -99.22501 0 -92.51001 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -56.66001 0 -57.28001 0 -57.28001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -57.28001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.28001 0 -57.90001 0 -58.52001 0 -57.90001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -59.14001 0 -59.76001 0 -92.51001 0 -105.94 0 -116.0125 0 -76.75501 0 -99.22501 0 -99.22501 0 -109.2975 0 -126.085 0 -136.1575 0 -109.2975 0 -126.085 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -136.1575 0 -136.1575 0 -132.8 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -122.7275 0 -119.37 0 -112.655 0 -92.51001 0 -105.94 0 -58.52001 0 -95.86751 0 -92.51001 0 -76.75501 0 -58.52001 0 -105.94 0 -95.86751 0 -76.75501 0 -59.76001 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -95.86751 0 -102.5825 0 -99.22501 0 -95.86751 0 -92.51001 0 -95.86751 0 -92.51001 0 -95.86751 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -76.75501 0 -61.00001 0 -61.00001 0 -60.38001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -60.38001 0 -57.28001 0 -55.42001 0 -54.80001 0 -51.08001 0 -58.52001 0 -57.90001 0 -57.90001 0 -56.04001 0 -57.28001 0 -58.52001 0 -58.52001 0 -57.90001 0 -58.52001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -50.46001 0 -54.18001 0 -52.94001 0 -56.66001 0 -52.94001 0 -52.94001 0 -54.18001 0 -54.18001 0 -56.04001 0 -58.52001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.28001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.28001 0 -49.84001 0 -56.66001 0 -59.14001 0 -57.28001 0 -58.52001 0 -59.14001 0 -58.52001 0 -59.76001 0 -57.90001 0 -57.90001 0 -57.90001 0 -59.14001 0 -58.52001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -60.38001 0 -58.52001 0 -59.76001 0 -60.38001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -61.00001 0 -76.75501 0 -61.00001 0 -76.75501 0 -76.75501 0 -92.51001 0 -61.00001 0 -60.38001 0 -56.66001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -51.08001 0 -55.42001 0 -55.42001 0 -56.66001 0 -60.38001 0 -59.76001 0 -60.38001 0 -57.90001 0 -56.66001 0 -56.04001 0 -55.42001 0 -54.18001 0 -52.94001 0 -55.42001 0 -54.80001 0 -56.04001 0 -95.86751 0 -109.2975 0 -119.37 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -122.7275 0 -122.7275 0 -119.37 0 -109.2975 0 -59.14001 0 -76.75501 0 -99.22501 0 -119.37 0 -119.37 0 -76.75501 0 -99.22501 0 -61.00001 0 -61.00001 0 -60.38001 0 -61.00001 0 -59.14001 0 -60.38001 0 -59.14001 0 -61.00001 0 -57.90001 0 -60.38001 0 -57.28001 0 -60.38001 0 -56.66001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.76001 0 -59.14001 0 -59.76001 0 -59.76001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -57.90001 0 -54.18001 0 -55.42001 0 -56.04001 0 -54.80001 0 -54.18001 0 -50.46001 0 -52.94001 0 -50.46001 0 -53.56001 0 -51.70001 0 -56.04001 0 -56.04001 0 -56.66001 0 -57.90001 0 -59.76001 0 -57.90001 0 -55.42001 0 -56.04001 0 -60.38001 0 -61.00001 0 -56.04001 0 -56.66001 0 -61.00001 0 -51.08001 0 -53.56001 0 -58.52001 0 -52.94001 0 -49.84001 0 -53.56001 0 -50.46001 0 -52.94001 0 -55.42001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -57.90001 0 -58.52001 0 -58.52001 0 -59.14001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.04001 0 -52.32001 0 -55.42001 0 -47.98001 0 -44.88001 0 -49.22001 0 -47.36001 0 -49.22001 0 -53.56001 0 -54.80001 0 -55.42001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -53.56001 0 -52.94001 0 -54.80001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.70001 0 -52.32001 0 -53.56001 0 -55.42001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.80001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -47.36001 0 -48.60001 0 -48.60001 0 -49.22001 0 -48.60001 0 -46.74001 0 -49.84001 0 -50.46001 0 -50.46001 0 -52.32001 0 -52.32001 0 -51.08001 0 -51.08001 0 -52.32001 0 -51.08001 0 -51.70001 0 -52.32001 0 -54.18001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -52.32001 0 -52.32001 0 -53.56001 0 -53.56001 0 -52.94001 0 -51.70001 0 -53.56001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.94001 0 -52.94001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -52.94001 0 -54.18001 0 -54.18001 0 -53.56001 0 -51.08001 0 -53.56001 0 -53.56001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -52.94001 0 -51.70001 0 -50.46001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -53.56001 0 -52.94001 0 -53.56001 0 -53.56001 0 -53.56001 0 -52.94001 0 -53.56001 0 -53.56001 0 -52.94001 0 -53.56001 0 -52.32001 0 -52.32001 0 -52.94001 0 -52.94001 0 -51.70001 0 -52.94001 0 -52.32001 0 -51.70001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -54.18001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -53.56001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.18001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.18001 0 -50.46001 0 -47.98001 0 -51.70001 0 -51.70001 0 -49.22001 0 -49.84001 0 -47.98001 0 -47.36001 0 -50.46001 0 -51.70001 0 -52.32001 0 -51.70001 0 -52.94001 0 -52.94001 0 -52.94001 0 -53.56001 0 -47.98001 0 -51.08001 0 -52.32001 0 -51.70001 0 -51.08001 0 -51.70001 0 -49.84001 0 -52.32001 0 -46.74001 0 -48.60001 0 -48.60001 0 -46.12001 0 -47.98001 0 -47.36001 0 -45.50001 0 -46.12001 0 -44.88001 0 -48.60001 0 -50.46001 0 -47.98001 0 -50.46001 0 -49.22001 0 -47.36001 0 -50.46001 0 -47.36001 0 -48.60001 0 -46.74001 0 -50.46001 0 -44.88001 0 -47.98001 0 -47.36001 0 -47.36001 0 -44.88001 0 -47.98001 0 -46.74001 0 -41.78001 0 -45.50001 0 -43.64001 0 -42.40001 0 -44.88001 0 -43.02001 0 -43.02001 0 -43.02001 0 -46.74001 0 -44.26001 0 -41.78001 0 -45.50001 0 -46.12001 0 -45.50001 0 -42.40001 0 -41.16 0 -46.74001 0 -43.02001 0 -44.88001 0 -45.50001 0 -49.22001 0 -50.46001 0 -51.08001 0 -51.08001 0 -49.22001 0 -46.74001 0 -49.84001 0 -49.84001 0 -50.46001 0 -49.84001 0 -49.84001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -51.08001 0 -51.08001 0 -51.08001 0 -50.46001 0 -50.46001 0 -50.46001 0 -51.08001 0 -50.46001 0 -51.08001 0 -50.46001 0 -51.08001 0 -50.46001 0 -49.84001 0 -51.08001 0 -49.84001 0 -48.60001 0 -47.98001 0 -49.22001 0 -47.98001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.98001 0 -49.22001 0 -50.46001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -50.46001 0 -49.84001 0 -49.22001 0 -50.46001 0 -50.46001 0 -49.84001 0 -49.84001 0 -49.22001 0 -48.60001 0 -49.22001 0 -46.74001 0 -48.60001 0 -47.98001 0 -47.36001 0 -48.60001 0 -47.98001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -46.12001 0 -46.74001 0 -44.26001 0 -46.74001 0 -43.02001 0 -46.12001 0 -47.36001 0 -47.98001 0 -49.22001 0 -48.60001 0 -47.98001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -49.22001 0 -46.12001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.36001 0 -46.74001 0 -47.98001 0 -44.88001 0 -41.16 0 -41.78001 0 -43.02001 0 -43.02001 0 -46.74001 0 -46.74001 0 -47.36001 0 -49.22001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.98001 0 -47.36001 0 -46.74001 0 -46.12001 0 -46.12001 0 -47.36001 0 -46.74001 0 -45.50001 0 -46.12001 0 -46.12001 0 -46.12001 0 -46.12001 0 -44.88001 0 -46.12001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -45.50001 0 -45.50001 0 -44.26001 0 -45.50001 0 -44.88001 0 -46.12001 0 -45.50001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -45.50001 0 -44.26001 0 -45.50001 0 -45.50001 0 -46.12001 0 -44.88001 0 -44.88001 0 -45.50001 0 -45.50001 0 -44.88001 0 -43.02001 0 -43.02001 0 -40.54 0 -40.54 0 -41.78001 0 -43.02001 0 -40.54 0 -41.78001 0 -40.54 0 -43.64001 0 -44.26001 0 -43.64001 0 -44.26001 0 -44.26001 0 -45.50001 0 -47.36001 0 -47.98001 0 -49.84001 0 -50.46001 0 -51.70001 0 -54.18001 0 -55.42001 0 -54.80001 0 -56.66001 0 -57.28001 0 -58.52001 0 -59.14001 0 -59.14001 0 -59.76001 0 -60.38001 0 -59.76001 0 -61.00001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.76001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -56.66001 0 -55.42001 0 -57.90001 0 -57.90001 0 -57.28001 0 -55.42001 0 -56.66001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.90001 0 -58.52001 0 -57.90001 0 -57.90001 0 -57.90001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.66001 0 -57.28001 0 -57.90001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -57.90001 0 -58.52001 0 -58.52001 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.76001 0 -60.38001 0 -76.75501 0 -95.86751 0 -102.5825 0 -112.655 0 -116.0125 0 -119.37 0 -122.7275 0 -112.655 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -119.37 0 -122.7275 0 -116.0125 0 -109.2975 0 -116.0125 0 -116.0125 0 -122.7275 0 -126.085 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -126.085 0 -122.7275 0 -119.37 0 -122.7275 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -119.37 0 -116.0125 0 -116.0125 0 -112.655 0 -112.655 0 -116.0125 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -105.94 0 -109.2975 0 -109.2975 0 -105.94 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -99.22501 0 -95.86751 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -99.22501 0 -102.5825 0 -102.5825 0 -102.5825 0 -105.94 0 -102.5825 0 -102.5825 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -105.94 0 -105.94 0 -116.0125 0 -129.4425 0 -139.515 0 -149.5875 0 -156.3025 0 -163.0175 0 -163.0175 0 -163.0175 0 -166.375 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -156.3025 0 -156.3025 0 -152.945 0 -149.5875 0 -146.23 0 -142.8725 0 -142.8725 0 -139.515 0 -136.1575 0 -136.1575 0 -136.1575 0 -139.515 0 -136.1575 0 -136.1575 0 -122.7275 0 -116.0125 0 -76.75501 0 -60.38001 0 -60.38001 0 -60.38001 0 -55.42001 0 -55.42001 0 -58.52001 0 -58.52001 0 -57.90001 0 -60.38001 0 -58.52001 0 -56.66001 0 -59.14001 0 -56.66001 0 -54.18001 0 -58.52001 0 -56.04001 0 -57.28001 0 -61.00001 0 -60.38001 0 -54.80001 0 -54.80001 0 -51.70001 0 -51.70001 0 -51.08001 0 -47.98001 0 -50.46001 0 -52.94001 0 -51.08001 0 -51.08001 0 -51.08001 0 -52.94001 0 -51.70001 0 -51.70001 0 -54.18001 0 -53.56001 0 -56.04001 0 -56.04001 0 -54.80001 0 -54.18001 0 -55.42001 0 -56.04001 0 -52.32001 0 -53.56001 0 -50.46001 0 -52.94001 0 -54.18001 0 -52.32001 0 -51.70001 0 -50.46001 0 -51.08001 0 -51.08001 0 -49.22001 0 -50.46001 0 -48.60001 0 -47.98001 0 -49.22001 0 -53.56001 0 -50.46001 0 -53.56001 0 -47.98001 0 -44.88001 0 -50.46001 0 -46.74001 0 -49.84001 0 -49.84001 0 -54.80001 0 -52.32001 0 -52.94001 0 -49.84001 0 -52.94001 0 -47.98001 0 -49.84001 0 -49.22001 0 -47.36001 0 -49.22001 0 -50.46001 0 -52.94001 0 -61.00001 0 -59.76001 0 -52.94001 0 -51.70001 0 -49.22001 0 -55.42001 0 -56.04001 0 -57.28001 0 -57.90001 0 -52.32001 0 -57.28001 0 -57.90001 0 -57.28001 0 -57.90001 0 -55.42001 0 -53.56001 0 -54.80001 0 -49.22001 0 -53.56001 0 -56.66001 0 -56.04001 0 -52.32001 0 -56.04001 0 -55.42001 0 -53.56001 0 -56.04001 0 -56.04001 0 -55.42001 0 -54.80001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.18001 0 -54.80001 0 -54.18001 0 -50.46001 0 -52.32001 0 -52.94001 0 -52.94001 0 -52.94001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -52.32001 0 -51.08001 0 -51.08001 0 -51.70001 0 -51.70001 0 -51.70001 0 -51.08001 0 -51.08001 0 -50.46001 0 -46.74001 0 -50.46001 0 -49.84001 0 -49.22001 0 -49.84001 0 -49.84001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -50.46001 0 -49.84001 0 -50.46001 0 -49.22001 0 -49.22001 0 -49.84001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.22001 0 -47.98001 0 -44.88001 0 -48.60001 0 -47.36001 0 -46.74001 0 -44.88001 0 -41.78001 0 -44.26001 0 -46.74001 0 -46.74001 0 -47.36001 0 -47.36001 0 -47.98001 0 -48.60001 0 -49.22001 0 -49.22001 0 -49.84001 0 -48.60001 0 -49.22001 0 -47.98001 0 -48.60001 0 -47.98001 0 -49.22001 0 -47.98001 0 -47.36001 0 -48.60001 0 -47.98001 0 -48.60001 0 -41.78001 0 -38.68 0 -46.12001 0 -46.74001 0 -47.36001 0 -46.74001 0 -47.36001 0 -47.36001 0 -46.74001 0 -47.36001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -46.74001 0 -47.36001 0 -46.74001 0 -47.36001 0 -46.74001 0 -46.74001 0 -46.12001 0 -46.12001 0 -44.26001 0 -41.78001 0 -41.78001 0 -44.26001 0 -43.64001 0 -44.26001 0 -44.26001 0 -44.26001 0 -44.88001 0 -44.26001 0 -45.50001 0 -45.50001 0 -45.50001 0 -46.12001 0 -46.12001 0 -42.40001 0 -46.74001 0 -42.40001 0 -41.78001 0 -42.40001 0 -39.3 0 -41.16 0 -43.02001 0 -41.78001 0 -41.16 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -41.16 0 -43.02001 0 -43.02001 0 -43.64001 0 -42.40001 0 -43.02001 0 -43.02001 0 -42.40001 0 -42.40001 0 -43.02001 0 -41.78001 0 -41.78001 0 -42.40001 0 -41.78001 0 -41.16 0 -42.40001 0 -42.40001 0 -41.78001 0 -41.16 0 -41.16 0 -41.16 0 -41.78001 0 -41.16 0 -41.16 0 -40.54 0 -41.16 0 -39.92 0 -40.54 0 -41.16 0 -40.54 0 -40.54 0 -41.16 0 -41.16 0 -41.78001 0 -41.16 0 -41.16 0 -41.16 0 -40.54 0 -41.78001 0 -41.78001 0 -41.16 0 -40.54 0 -40.54 0 -39.92 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.92 0 -39.92 0 -40.54 0 -39.92 0 -40.54 0 -39.92 0 -39.92 0 -39.92 0 -39.92 0 -39.92 0 -39.92 0 -39.92 0 -39.3 0 -39.3 0 -39.92 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -38.68 0 -38.68 0 -38.68 0 -38.06 0 -39.3 0 -38.68 0 -38.68 0 -39.3 0 -38.68 0 -38.68 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -38.68 0 -39.3 0 -39.3 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.06 0 -38.68 0 -38.68 0 -39.3 0 -38.06 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.92 0 -39.92 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.92 0 -40.54 0 -40.54 0 -40.54 0 -39.92 0 -39.92 0 -39.92 0 -39.92 0 -39.3 0 -39.3 0 -39.3 0 -38.68 0 -38.68 0 -38.06 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -38.68 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.3 0 -39.92 0 -39.92 0 -40.54 0 -40.54 0 -40.54 0 -40.54 0 -41.16 0 -41.16 0 -40.54 0 -41.16 0 -41.78001 0 -41.78001 0 -42.40001 0 -43.02001 0 -44.26001 0 -44.26001 0 -44.88001 0 -46.12001 0 -45.50001 0 -45.50001 0 -45.50001 0 -44.88001 0 -44.88001 0 -44.88001 0 -44.88001 0 -44.88001 0 -44.88001 0 -44.26001 0 -44.26001 0 -43.64001 0 -43.64001 0 -43.02001 0 -43.02001 0 -42.40001 0 -43.02001 0 - -43.02001 0 -42.40001 0 -43.02001 0 -41.16 0 -41.16 0 -41.78001 0 -41.78001 0 -42.40001 0 -41.78001 0 -40.54 0 -40.54 0 -40.54 0 -40.54 0 -39.92 0 -39.92 0 -39.92 0 -40.54 0 -39.92 0 -43.02001 0 -43.02001 0 -42.40001 0 -42.40001 0 -41.78001 0 -41.78001 0 -41.78001 0 -41.78001 0 -41.78001 0 -41.78001 0 -42.40001 0 -42.40001 0 -44.88001 0 -50.46001 0 -47.98001 0 -46.12001 0 -44.26001 0 -43.64001 0 -43.02001 0 -43.02001 0 -43.64001 0 -43.64001 0 -43.64001 0 -44.26001 0 -44.26001 0 -43.64001 0 -43.64001 0 -43.64001 0 -43.64001 0 -42.40001 0 -43.02001 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -42.40001 0 -43.02001 0 -43.02001 0 -44.26001 0 -44.88001 0 -46.12001 0 -47.98001 0 -49.84001 0 -51.70001 0 -52.94001 0 -54.18001 0 -54.80001 0 -56.04001 0 -56.04001 0 -55.42001 0 -55.42001 0 -55.42001 0 -54.80001 0 -54.18001 0 -54.18001 0 -52.94001 0 -52.32001 0 -51.70001 0 -51.08001 0 -51.08001 0 -50.46001 0 -50.46001 0 -49.84001 0 -47.36001 0 -46.12001 0 -49.84001 0 -49.22001 0 -47.98001 0 -46.74001 0 -47.98001 0 -46.12001 0 -49.22001 0 -54.80001 0 -56.04001 0 -57.90001 0 -59.14001 0 -59.76001 0 -59.76001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -57.90001 0 -55.42001 0 -57.28001 0 -57.90001 0 -56.66001 0 -53.56001 0 -56.66001 0 -50.46001 0 -49.84001 0 -51.08001 0 -52.32001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -54.18001 0 -55.42001 0 -56.04001 0 -57.28001 0 -57.90001 0 -57.90001 0 -57.28001 0 -56.04001 0 -50.46001 0 -50.46001 0 -48.60001 0 -49.84001 0 -50.46001 0 -52.32001 0 -47.36001 0 -50.46001 0 -47.36001 0 -50.46001 0 -52.94001 0 -53.56001 0 -54.18001 0 -54.18001 0 -54.80001 0 -55.42001 0 -56.04001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -54.80001 0 -56.04001 0 -56.04001 0 -56.04001 0 -567.8556 0 -677.1421 0 -859.9681 0 -955.7341 0 -1007.97 0 -1068.912 0 -1095.03 0 -1095.03 0 -1086.324 0 -1077.618 0 -1042.794 0 -981.8521 0 -920.9101 0 -877.3801 0 -833.8501 0 -790.3201 0 -746.7901 0 -703.2601 0 -677.1421 0 -659.7301 0 -651.0241 0 -703.2601 0 -764.2021 0 -842.5561 0 -938.3221 0 -1025.382 0 -1060.206 0 -1119.341 0 -1131.496 0 -1131.496 0 -1095.03 0 -1060.206 0 -1016.676 0 -955.7341 0 -903.4981 0 -868.6741 0 -833.8501 0 -799.0261 0 -772.9081 0 -746.7901 0 -729.3781 0 -703.2601 0 -677.1421 0 -659.7301 0 -642.3181 0 -616.2001 0 -604.114 0 -592.0278 0 -579.9417 0 -561.8125 0 -543.6833 0 -525.5541 0 -501.3819 0 -483.2527 0 -471.1666 0 -453.0374 0 -434.9082 0 -428.8652 0 -422.8221 0 -410.736 0 -398.6498 0 -392.6068 0 -380.5207 0 -368.4345 0 -362.3915 0 -356.3484 0 -350.3053 0 -338.2192 0 -332.1762 0 -320.09 0 -315.4693 0 -287.7447 0 -269.2616 0 -246.1577 0 -227.6746 0 -227.6746 0 -232.2954 0 -204.5708 0 -246.1577 0 -204.5708 0 -176.4475 0 -163.0175 0 -213.8123 0 -218.4331 0 -218.4331 0 -209.1916 0 -209.1916 0 -204.5708 0 -179.805 0 -189.8775 0 -183.1625 0 -193.235 0 -186.52 0 -183.1625 0 -183.1625 0 -173.09 0 -159.66 0 -146.23 0 -142.8725 0 -139.515 0 -132.8 0 -122.7275 0 -109.2975 0 -129.4425 0 -112.655 0 -116.0125 0 -109.2975 0 -166.375 0 -166.375 0 -163.0175 0 -166.375 0 -163.0175 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -159.66 0 -169.7325 0 -183.1625 0 -189.8775 0 -179.805 0 -179.805 0 -169.7325 0 -166.375 0 -142.8725 0 -159.66 0 -156.3025 0 -152.945 0 -152.945 0 -136.1575 0 -112.655 0 -410.736 0 -1007.97 0 -1362.445 0 -1581.239 0 -1751.413 0 -1860.81 0 -2166.984 0 -2354.894 0 -2542.803 0 -2730.713 0 -2777.69 0 -2824.667 0 -2683.735 0 -2683.735 0 -2730.713 0 -3153.509 0 -3435.373 0 -4093.056 0 -4609.807 0 -5032.603 0 -5361.444 0 -5784.24 0 -5972.15 0 -6207.036 0 -6394.946 0 -6535.878 0 -6488.901 0 -6441.923 0 -6441.923 0 -6160.059 0 -6113.082 0 -5878.195 0 -5596.331 0 -5267.489 0 -4938.648 0 -4515.852 0 -4093.056 0 -3576.305 0 -3012.577 0 -2260.939 0 -2073.03 0 -1872.965 0 -1824.344 0 -1714.947 0 -1714.947 0 -1654.171 0 -1605.55 0 -1544.774 0 -1459.687 0 -1386.756 0 -1301.669 0 -1240.893 0 -1180.117 0 -1131.496 0 -1077.618 0 -1051.5 0 -1007.97 0 -973.1461 0 -877.3801 0 -886.0861 0 -807.7321 0 -851.2621 0 -816.4381 0 -799.0261 0 -799.0261 0 -772.9081 0 -746.7901 0 -720.6721 0 -703.2601 0 -685.8481 0 -659.7301 0 -651.0241 0 -624.9061 0 -604.114 0 -598.0709 0 -585.9848 0 -579.9417 0 -567.8556 0 -555.7695 0 -549.7264 0 -537.6403 0 -525.5541 0 -513.468 0 -507.425 0 -495.3388 0 -489.2958 0 -477.2096 0 -471.1666 0 -459.0805 0 -446.9943 0 -440.9513 0 -434.9082 0 -422.8221 0 -416.779 0 -410.736 0 -404.6929 0 -398.6498 0 -392.6068 0 -386.5637 0 -380.5207 0 -374.4776 0 -368.4345 0 -362.3915 0 -356.3484 0 -350.3053 0 -344.2623 0 -264.6408 0 -332.1762 0 -320.09 0 -273.8823 0 -292.3654 0 -278.5031 0 -283.1239 0 -269.2616 0 -273.8823 0 -236.9162 0 -236.9162 0 -241.537 0 -241.537 0 -260.02 0 -273.8823 0 -269.2616 0 -269.2616 0 -264.6408 0 -264.6408 0 -260.02 0 -255.3993 0 -255.3993 0 -246.1577 0 -209.1916 0 -218.4331 0 -227.6746 0 -213.8123 0 -227.6746 0 -232.2954 0 -218.4331 0 -223.0539 0 -218.4331 0 -218.4331 0 -213.8123 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -193.235 0 -189.8775 0 -189.8775 0 -186.52 0 -183.1625 0 -179.805 0 -163.0175 0 -163.0175 0 -169.7325 0 -149.5875 0 -156.3025 0 -139.515 0 -166.375 0 -159.66 0 -166.375 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -152.945 0 -173.09 0 -166.375 0 -126.085 0 -152.945 0 -159.66 0 -152.945 0 -129.4425 0 -126.085 0 -129.4425 0 -119.37 0 -126.085 0 -122.7275 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -136.1575 0 -136.1575 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -129.4425 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -122.7275 0 -119.37 0 -116.0125 0 -119.37 0 -116.0125 0 -112.655 0 -116.0125 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -109.2975 0 -105.94 0 -59.76001 0 -102.5825 0 -99.22501 0 -61.00001 0 -54.18001 0 -54.18001 0 -52.94001 0 -51.70001 0 -51.70001 0 -52.32001 0 -55.42001 0 -60.38001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.76001 0 -58.52001 0 -59.14001 0 -55.42001 0 -59.76001 0 -53.56001 0 -59.14001 0 -58.52001 0 -51.08001 0 -50.46001 0 -57.28001 0 -51.70001 0 -50.46001 0 -53.56001 0 -56.66001 0 -56.04001 0 -56.66001 0 -57.28001 0 -56.66001 0 -56.66001 0 -56.66001 0 -56.04001 0 -56.04001 0 -56.04001 0 -55.42001 0 -56.04001 0 -54.18001 0 -55.42001 0 -54.80001 0 -54.80001 0 -54.80001 0 -54.18001 0 -52.94001 0 -51.08001 0 -49.84001 0 -50.46001 0 -51.70001 0 -49.22001 0 -51.70001 0 -51.70001 0 -51.70001 0 -52.32001 0 -52.32001 0 -52.32001 0 -52.32001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.70001 0 -51.08001 0 -51.08001 0 -51.08001 0 -49.84001 0 -49.84001 0 -49.22001 0 -48.60001 0 -46.12001 0 -49.84001 0 -49.84001 0 -50.46001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -49.22001 0 -48.60001 0 -48.60001 0 -47.98001 0 -49.22001 0 -48.60001 0 -49.22001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.98001 0 -46.74001 0 -44.88001 0 -47.98001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.98001 0 -48.60001 0 -48.60001 0 -47.98001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -46.12001 0 -45.50001 0 -44.88001 0 -43.02001 0 -41.16 0 -42.40001 0 -42.40001 0 -41.16 0 -41.16 0 -42.40001 0 -43.02001 0 -43.02001 0 -41.78001 0 -44.88001 0 -44.26001 0 -44.26001 0 -44.88001 0 -44.26001 0 -43.64001 0 -44.26001 0 -44.26001 0 -43.64001 0 -43.02001 0 -44.26001 0 -42.40001 0 -42.40001 0 -43.02001 0 -39.92 0 -39.3 0 -38.06 0 -39.92 0 -39.92 0 -39.3 0 -33.1 0 -33.72 0 -36.2 0 -36.2 0 -35.58 0 -36.2 0 -36.2 0 -34.96 0 -34.96 0 -35.58 0 -35.58 0 -34.34 0 -35.58 0 -38.06 0 -35.58 0 -36.2 0 -38.06 0 -36.2 0 -38.68 0 -37.44 0 -38.06 0 -34.96 0 -34.96 0 -38.68 0 -39.3 0 -39.92 0 -41.16 0 -38.06 0 -40.54 0 -41.16 0 -41.16 0 -41.16 0 -41.16 0 -41.16 0 -41.16 0 -41.16 0 -39.92 0 -39.3 0 -40.54 0 -36.82 0 -39.3 0 -37.44 0 -36.82 0 -37.44 0 -36.82 0 -36.82 0 -32.48 0 -34.96 0 -33.72 0 -35.58 0 -36.2 0 -38.06 0 -38.68 0 -37.44 0 -35.58 0 -33.72 0 - -32.48 0 -32.48 0 -32.48 0 -34.34 0 -30 0 -28.8 0 -29.4 0 -30.62 0 -28.8 0 -30 0 -29.4 0 -35.58 0 -34.34 0 -34.34 0 -28.2 0 -29.4 0 -32.48 0 -30.62 0 -31.24 0 -31.86 0 -31.24 0 -30.62 0 -30 0 -30.62 0 - -31.86 0 -31.86 0 -30.62 0 -31.24 0 -28.8 0 -33.1 0 -33.1 0 -34.34 0 -37.44 0 -36.82 0 -34.96 0 -35.58 0 -33.72 0 -35.58 0 -36.82 0 -36.2 0 -37.44 0 -33.72 0 -30.62 0 -32.48 0 -36.2 0 -35.58 0 -33.72 0 -31.86 0 -33.72 0 -39.92 0 -39.92 0 -40.54 0 -40.54 0 -40.54 0 -39.92 0 -37.44 0 -34.34 0 -32.48 0 -32.48 0 -31.24 0 -33.1 0 -34.34 0 -36.2 0 -36.82 0 -36.82 0 -36.82 0 -37.44 0 -38.68 0 -39.3 0 -38.06 0 -38.06 0 -37.44 0 -36.82 0 -36.2 0 -34.96 0 -33.72 0 -32.48 0 -32.48 0 -31.24 0 -30.62 0 -31.86 0 -35.58 0 -36.82 0 -37.44 0 -37.44 0 -37.44 0 -37.44 0 -37.44 0 -36.82 0 -35.58 0 -35.58 0 -36.2 0 -35.58 0 -35.58 0 -35.58 0 -36.2 0 -36.2 0 -35.58 0 -37.44 0 -37.44 0 -37.44 0 -38.06 0 -37.44 0 -35.58 0 -36.2 0 -36.2 0 -36.82 0 -36.82 0 -36.82 0 -37.44 0 -37.44 0 -31.86 0 -39.3 0 -37.44 0 -38.68 0 -41.16 0 -43.64001 0 -41.78001 0 -38.06 0 -43.64001 0 -43.64001 0 -44.26001 0 -43.64001 0 -43.02001 0 -43.02001 0 -44.88001 0 -46.12001 0 -46.74001 0 -46.74001 0 -47.98001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.36001 0 -47.98001 0 -47.98001 0 -47.98001 0 -49.22001 0 -59.76001 0 -95.86751 0 -99.22501 0 -102.5825 0 -56.66001 0 -132.8 0 -189.8775 0 -241.537 0 -296.9862 0 -332.1762 0 -471.1666 0 -694.5541 0 -868.6741 0 -1095.03 0 -1763.568 0 -6347.969 0 -9307.542 0 -11656.41 0 -13552.34 0 -15442.94 0 -16843.39 0 -17613.64 0 -19014.09 0 -19434.22 0 -19644.29 0 -19364.2 0 -19434.22 0 -17893.73 0 -17543.62 0 -16283.21 0 -14462.63 0 -13482.32 0 -13062.18 0 -13062.18 0 -12572.02 0 -12992.16 0 -12572.02 0 -13622.36 0 -13972.47 0 -14392.61 0 -15162.85 0 -15022.81 0 -16213.19 0 -16563.3 0 -17123.48 0 -17263.53 0 -17473.59 0 -17263.53 0 -17193.5 0 -16563.3 0 -16773.37 0 -15793.06 0 -15863.08 0 -15863.08 0 -15372.92 0 -14952.79 0 -14532.65 0 -15302.9 0 -15092.83 0 -15232.88 0 -15092.83 0 -15512.97 0 -15512.97 0 -15582.99 0 -16003.12 0 -16283.21 0 -16213.19 0 -16073.14 0 -16073.14 0 -15933.1 0 -15582.99 0 -15302.9 0 -13762.41 0 -12126.18 0 -10810.82 0 -9448.474 0 -8743.813 0 -7945.198 0 -7475.425 0 -7005.651 0 -6770.765 0 -6441.923 0 -6394.946 0 -6113.082 0 -5737.263 0 -5643.308 0 -5408.422 0 -5126.557 0 -4938.648 0 -4750.739 0 -4515.852 0 -4421.897 0 -4187.01 0 -3952.124 0 -3764.214 0 -3670.26 0 -3576.305 0 -3482.35 0 -3482.35 0 -3388.395 0 -3247.463 0 -3294.441 0 -3200.486 0 -3153.509 0 -2965.599 0 -2824.667 0 -2589.78 0 -2307.916 0 -2307.916 0 -1979.075 0 -1848.655 0 -1848.655 0 -1872.965 0 -1860.81 0 -1824.344 0 -1787.878 0 -1751.413 0 -1739.257 0 -1690.637 0 -1654.171 0 -1629.86 0 -1617.705 0 -1581.239 0 -1544.774 0 -1532.618 0 -1374.6 0 -1350.29 0 -1362.445 0 -1362.445 0 -1301.669 0 -1265.203 0 -1228.738 0 -1167.962 0 -1204.427 0 -1155.806 0 -1119.341 0 -1155.806 0 -1265.203 0 -1240.893 0 -1228.738 0 -1228.738 0 -1216.582 0 -1107.185 0 -1180.117 0 -1180.117 0 -1180.117 0 -1155.806 0 -1143.651 0 -1131.496 0 -981.8521 0 -981.8521 0 -955.7341 0 -990.5581 0 -981.8521 0 -973.1461 0 -990.5581 0 -955.7341 0 -938.3221 0 -1060.206 0 -1077.618 0 -1077.618 0 -1095.03 0 -1131.496 0 -1131.496 0 -1107.185 0 -1107.185 0 -1068.912 0 -1060.206 0 -1051.5 0 -1051.5 0 -1042.794 0 -1034.088 0 -1025.382 0 -1016.676 0 -1007.97 0 -999.2641 0 -990.5581 0 -973.1461 0 -964.4401 0 -938.3221 0 -929.6161 0 -920.9101 0 -903.4981 0 -894.7921 0 -886.0861 0 -886.0861 0 -877.3801 0 -877.3801 0 -868.6741 0 -851.2621 0 -859.9681 0 -842.5561 0 -825.1441 0 -825.1441 0 -825.1441 0 -816.4381 0 -799.0261 0 -799.0261 0 -790.3201 0 -781.6141 0 -764.2021 0 -755.4961 0 -755.4961 0 -755.4961 0 -738.0841 0 -720.6721 0 -711.9661 0 -703.2601 0 -703.2601 0 -703.2601 0 -694.5541 0 -694.5541 0 -677.1421 0 -668.4361 0 -668.4361 0 -659.7301 0 -659.7301 0 -651.0241 0 -642.3181 0 -633.6121 0 -642.3181 0 -633.6121 0 -624.9061 0 -585.9848 0 -525.5541 0 -585.9848 0 -579.9417 0 -585.9848 0 -537.6403 0 -549.7264 0 -543.6833 0 -537.6403 0 -573.8986 0 -567.8556 0 -567.8556 0 -567.8556 0 -561.8125 0 -561.8125 0 -561.8125 0 -561.8125 0 -549.7264 0 -549.7264 0 -549.7264 0 -543.6833 0 -543.6833 0 -531.5972 0 -519.5111 0 -519.5111 0 -519.5111 0 -513.468 0 -513.468 0 -507.425 0 -501.3819 0 -465.1235 0 -489.2958 0 -489.2958 0 -489.2958 0 -483.2527 0 -483.2527 0 -477.2096 0 -477.2096 0 -471.1666 0 -471.1666 0 -465.1235 0 -465.1235 0 -471.1666 0 -465.1235 0 -465.1235 0 -459.0805 0 -459.0805 0 -453.0374 0 -453.0374 0 -440.9513 0 -440.9513 0 -440.9513 0 -434.9082 0 -434.9082 0 -428.8652 0 -422.8221 0 -422.8221 0 -416.779 0 -416.779 0 -416.779 0 -410.736 0 -416.779 0 -410.736 0 -410.736 0 -404.6929 0 -404.6929 0 -404.6929 0 -398.6498 0 -398.6498 0 -398.6498 0 -398.6498 0 - -392.6068 0 -386.5637 0 -386.5637 0 -380.5207 0 -380.5207 0 -368.4345 0 -368.4345 0 -374.4776 0 -362.3915 0 -440.9513 0 -446.9943 0 -428.8652 0 -416.779 0 -398.6498 0 -392.6068 0 -386.5637 0 -380.5207 0 -374.4776 0 -368.4345 0 -368.4345 0 -362.3915 0 -356.3484 0 -356.3484 0 -350.3053 0 -350.3053 0 -344.2623 0 -344.2623 0 -344.2623 0 -338.2192 0 -338.2192 0 -332.1762 0 -332.1762 0 -326.1331 0 -320.09 0 -315.4693 0 -315.4693 0 -315.4693 0 -315.4693 0 -315.4693 0 -320.09 0 -315.4693 0 -315.4693 0 -310.8485 0 -306.2277 0 -310.8485 0 -310.8485 0 -310.8485 0 -310.8485 0 -306.2277 0 -306.2277 0 -306.2277 0 -306.2277 0 -306.2277 0 -301.607 0 -296.9862 0 -296.9862 0 -296.9862 0 -301.607 0 -301.607 0 -296.9862 0 -301.607 0 -301.607 0 -301.607 0 -301.607 0 -301.607 0 -301.607 0 -306.2277 0 -306.2277 0 -306.2277 0 -310.8485 0 -332.1762 0 -356.3484 0 -392.6068 0 -428.8652 0 -471.1666 0 -495.3388 0 -501.3819 0 -507.425 0 -513.468 0 -495.3388 0 -489.2958 0 -477.2096 0 -471.1666 0 -459.0805 0 -453.0374 0 -440.9513 0 -428.8652 0 -422.8221 0 -416.779 0 -404.6929 0 -398.6498 0 -392.6068 0 -392.6068 0 -380.5207 0 -374.4776 0 -368.4345 0 -356.3484 0 -356.3484 0 -350.3053 0 -338.2192 0 -338.2192 0 -332.1762 0 -320.09 0 -315.4693 0 -310.8485 0 -306.2277 0 -301.607 0 -301.607 0 -296.9862 0 -296.9862 0 -292.3654 0 -287.7447 0 -283.1239 0 -283.1239 0 -283.1239 0 -283.1239 0 -278.5031 0 -278.5031 0 -273.8823 0 -273.8823 0 -269.2616 0 -269.2616 0 -264.6408 0 -260.02 0 -260.02 0 -255.3993 0 -250.7785 0 -250.7785 0 -250.7785 0 -250.7785 0 -246.1577 0 -246.1577 0 -241.537 0 -241.537 0 -241.537 0 -241.537 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -232.2954 0 -236.9162 0 -232.2954 0 -232.2954 0 -232.2954 0 -223.0539 0 -227.6746 0 -227.6746 0 -223.0539 0 -218.4331 0 -218.4331 0 -218.4331 0 -227.6746 0 -223.0539 0 -204.5708 0 -246.1577 0 -250.7785 0 -246.1577 0 -241.537 0 - -227.6746 0 -218.4331 0 -218.4331 0 -213.8123 0 -218.4331 0 -213.8123 0 -213.8123 0 -196.5925 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -204.5708 0 -196.5925 0 -186.52 0 - -176.4475 0 -193.235 0 -193.235 0 -173.09 0 -169.7325 0 -173.09 0 -193.235 0 -193.235 0 -166.375 0 -189.8775 0 -189.8775 0 -193.235 0 -196.5925 0 -193.235 0 -193.235 0 -189.8775 0 -193.235 0 -193.235 0 -193.235 0 -189.8775 0 -189.8775 0 -186.52 0 -186.52 0 -186.52 0 -186.52 0 -183.1625 0 -183.1625 0 -186.52 0 -186.52 0 -186.52 0 -193.235 0 -196.5925 0 -199.95 0 -199.95 0 -204.5708 0 -204.5708 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -189.8775 0 -179.805 0 -169.7325 0 -173.09 0 -166.375 0 -183.1625 0 -179.805 0 -179.805 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -186.52 0 -196.5925 0 -204.5708 0 -209.1916 0 -209.1916 0 -213.8123 0 -218.4331 0 -218.4331 0 -223.0539 0 -213.8123 0 -213.8123 0 -209.1916 0 -199.95 0 -199.95 0 -196.5925 0 -189.8775 0 -189.8775 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -183.1625 0 -183.1625 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -173.09 0 -173.09 0 -173.09 0 -166.375 0 -169.7325 0 -169.7325 0 -169.7325 0 -156.3025 0 -166.375 0 -166.375 0 -169.7325 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -176.4475 0 -179.805 0 -183.1625 0 -186.52 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -179.805 0 -183.1625 0 -183.1625 0 -186.52 0 -179.805 0 -183.1625 0 -186.52 0 -189.8775 0 -209.1916 0 -227.6746 0 -260.02 0 -283.1239 0 -310.8485 0 -320.09 0 -332.1762 0 -344.2623 0 -338.2192 0 -344.2623 0 -344.2623 0 -338.2192 0 -332.1762 0 -326.1331 0 -326.1331 0 -320.09 0 -310.8485 0 -306.2277 0 -306.2277 0 -301.607 0 -296.9862 0 -287.7447 0 -283.1239 0 -278.5031 0 -269.2616 0 -269.2616 0 -260.02 0 -260.02 0 -255.3993 0 -255.3993 0 -264.6408 0 -273.8823 0 -296.9862 0 -332.1762 0 -380.5207 0 -434.9082 0 -471.1666 0 -495.3388 0 -519.5111 0 -525.5541 0 -531.5972 0 -525.5541 0 -513.468 0 -513.468 0 -513.468 0 -525.5541 0 -549.7264 0 -573.8986 0 -592.0278 0 -598.0709 0 -598.0709 0 -598.0709 0 -585.9848 0 -579.9417 0 -561.8125 0 -543.6833 0 -531.5972 0 -525.5541 0 -519.5111 0 -501.3819 0 -495.3388 0 -483.2527 0 -477.2096 0 -471.1666 0 -453.0374 0 -446.9943 0 -440.9513 0 -428.8652 0 -416.779 0 -410.736 0 -404.6929 0 -392.6068 0 -386.5637 0 -374.4776 0 -362.3915 0 -356.3484 0 -356.3484 0 -350.3053 0 -344.2623 0 -338.2192 0 -332.1762 0 -326.1331 0 -320.09 0 -315.4693 0 -315.4693 0 -310.8485 0 -310.8485 0 -306.2277 0 -301.607 0 -296.9862 0 -296.9862 0 -287.7447 0 -283.1239 0 -283.1239 0 -283.1239 0 -278.5031 0 -273.8823 0 -273.8823 0 -273.8823 0 -264.6408 0 -264.6408 0 -264.6408 0 -260.02 0 -260.02 0 -260.02 0 -260.02 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -246.1577 0 -241.537 0 -241.537 0 -236.9162 0 -213.8123 0 -223.0539 0 -223.0539 0 -223.0539 0 -223.0539 0 -223.0539 0 -218.4331 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -209.1916 0 -209.1916 0 -204.5708 0 -204.5708 0 -199.95 0 -204.5708 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -193.235 0 -193.235 0 -189.8775 0 -189.8775 0 -186.52 0 -183.1625 0 -183.1625 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -176.4475 0 -176.4475 0 -179.805 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -173.09 0 -173.09 0 -169.7325 0 -169.7325 0 -166.375 0 -163.0175 0 -166.375 0 -163.0175 0 -136.1575 0 -159.66 0 -159.66 0 -159.66 0 -149.5875 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -156.3025 0 -159.66 0 -156.3025 0 -156.3025 0 -156.3025 0 -159.66 0 -156.3025 0 -159.66 0 -156.3025 0 -156.3025 0 -152.945 0 -152.945 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -149.5875 0 -146.23 0 -149.5875 0 -146.23 0 -149.5875 0 -149.5875 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -136.1575 0 -136.1575 0 -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -136.1575 0 -132.8 0 -132.8 0 -132.8 0 -132.8 0 -129.4425 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -126.085 0 -122.7275 0 -126.085 0 -126.085 0 -122.7275 0 -92.51001 0 -112.655 0 -126.085 0 -122.7275 0 -119.37 0 -129.4425 0 -136.1575 0 -139.515 0 -136.1575 0 -142.8725 0 -112.655 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -149.5875 0 -149.5875 0 -152.945 0 -152.945 0 -152.945 0 -166.375 0 -176.4475 0 -189.8775 0 -196.5925 0 -199.95 0 -204.5708 0 -209.1916 0 -218.4331 0 -236.9162 0 -250.7785 0 -273.8823 0 -296.9862 0 -315.4693 0 -338.2192 0 -362.3915 0 -398.6498 0 -446.9943 0 -465.1235 0 -471.1666 0 -471.1666 0 -471.1666 0 -465.1235 0 -453.0374 0 -440.9513 0 -428.8652 0 -422.8221 0 -416.779 0 -422.8221 0 -422.8221 0 -440.9513 0 -446.9943 0 -453.0374 0 -459.0805 0 -453.0374 0 -465.1235 0 -465.1235 0 - -471.1666 0 -477.2096 0 -465.1235 0 -465.1235 0 -453.0374 0 -440.9513 0 -434.9082 0 -410.736 0 -404.6929 0 -392.6068 0 -374.4776 0 -368.4345 0 -356.3484 0 -344.2623 0 -332.1762 0 -332.1762 0 -320.09 0 -315.4693 0 -310.8485 0 -301.607 0 -301.607 0 -292.3654 0 -287.7447 0 -283.1239 0 -278.5031 0 -273.8823 0 -273.8823 0 -269.2616 0 -264.6408 0 -269.2616 0 -264.6408 0 -264.6408 0 -264.6408 0 -264.6408 0 -260.02 0 -260.02 0 -260.02 0 -255.3993 0 -255.3993 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -246.1577 0 -241.537 0 -223.0539 0 -232.2954 0 -236.9162 0 -227.6746 0 -227.6746 0 -189.8775 0 -218.4331 0 -209.1916 0 -209.1916 0 -209.1916 0 -204.5708 0 -209.1916 0 -209.1916 0 -209.1916 0 -218.4331 0 -218.4331 0 -227.6746 0 -227.6746 0 -232.2954 0 -236.9162 0 -241.537 0 -246.1577 0 -236.9162 0 -199.95 0 -183.1625 0 -183.1625 0 -179.805 0 -189.8775 0 -173.09 0 -179.805 0 -169.7325 0 -176.4475 0 -159.66 0 -176.4475 0 -209.1916 0 -193.235 0 -169.7325 0 -183.1625 0 -169.7325 0 -163.0175 0 -179.805 0 -189.8775 0 -189.8775 0 -189.8775 0 -186.52 0 -166.375 0 -166.375 0 -166.375 0 -149.5875 0 -152.945 0 -166.375 0 -163.0175 0 -142.8725 0 -136.1575 0 -122.7275 0 -136.1575 0 -136.1575 0 -132.8 0 -139.515 0 -132.8 0 -159.66 0 -159.66 0 -159.66 0 -156.3025 0 -159.66 0 -159.66 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -119.37 0 -126.085 0 -119.37 0 -122.7275 0 -119.37 0 -119.37 0 -122.7275 0 -122.7275 0 -122.7275 0 -109.2975 0 -105.94 0 -132.8 0 -126.085 0 -116.0125 0 -119.37 0 -99.22501 0 -105.94 0 -109.2975 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -122.7275 0 -109.2975 0 -119.37 0 -119.37 0 -116.0125 0 -95.86751 0 -102.5825 0 -58.52001 0 -59.76001 0 -60.38001 0 -61.00001 0 -60.38001 0 -57.90001 0 -105.94 0 -105.94 0 -105.94 0 -102.5825 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -102.5825 0 -102.5825 0 -102.5825 0 -105.94 0 -102.5825 0 -99.22501 0 -99.22501 0 -61.00001 0 -95.86751 0 -92.51001 0 -92.51001 0 -92.51001 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -76.75501 0 -136.1575 0 -139.515 0 -173.09 0 -223.0539 0 -209.1916 0 -193.235 0 -189.8775 0 -193.235 0 -186.52 0 -166.375 0 -176.4475 0 -179.805 0 -176.4475 0 -179.805 0 -176.4475 0 -173.09 0 -173.09 0 -173.09 0 -169.7325 0 -169.7325 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -173.09 0 -169.7325 0 -169.7325 0 -166.375 0 -166.375 0 -163.0175 0 -163.0175 0 -159.66 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -152.945 0 -152.945 0 -159.66 0 -163.0175 0 -176.4475 0 -209.1916 0 -260.02 0 -320.09 0 -380.5207 0 -416.779 0 -453.0374 0 -471.1666 0 -483.2527 0 -483.2527 0 -489.2958 0 -489.2958 0 -489.2958 0 -495.3388 0 -501.3819 0 -519.5111 0 -537.6403 0 -567.8556 0 -598.0709 0 -610.157 0 -616.2001 0 -616.2001 0 -610.157 0 -592.0278 0 -579.9417 0 -561.8125 0 -549.7264 0 -531.5972 0 -519.5111 0 -507.425 0 -501.3819 0 -489.2958 0 -477.2096 0 -471.1666 0 -471.1666 0 -459.0805 0 -453.0374 0 -446.9943 0 -440.9513 0 -440.9513 0 -428.8652 0 -422.8221 0 -416.779 0 -410.736 0 -404.6929 0 -404.6929 0 -398.6498 0 -392.6068 0 -386.5637 0 -386.5637 0 -380.5207 0 -380.5207 0 -368.4345 0 -368.4345 0 -362.3915 0 -356.3484 0 -350.3053 0 -344.2623 0 -338.2192 0 -338.2192 0 -326.1331 0 -310.8485 0 -301.607 0 -296.9862 0 -306.2277 0 -306.2277 0 -306.2277 0 -296.9862 0 -301.607 0 -301.607 0 -296.9862 0 -292.3654 0 -292.3654 0 -292.3654 0 -292.3654 0 -287.7447 0 -287.7447 0 -287.7447 0 -287.7447 0 -283.1239 0 -283.1239 0 -278.5031 0 -269.2616 0 -283.1239 0 -296.9862 0 -296.9862 0 -292.3654 0 -269.2616 0 -269.2616 0 -287.7447 0 -283.1239 0 -283.1239 0 -278.5031 0 -278.5031 0 -273.8823 0 -269.2616 0 -269.2616 0 -264.6408 0 -264.6408 0 -264.6408 0 -260.02 0 -260.02 0 -255.3993 0 -255.3993 0 -236.9162 0 -273.8823 0 -283.1239 0 -292.3654 0 -296.9862 0 -296.9862 0 -296.9862 0 -296.9862 0 -310.8485 0 -356.3484 0 -525.5541 0 -677.1421 0 -755.4961 0 -842.5561 0 -842.5561 0 -851.2621 0 -842.5561 0 -807.7321 0 -772.9081 0 -738.0841 0 -703.2601 0 -659.7301 0 -616.2001 0 -598.0709 0 -573.8986 0 -549.7264 0 -531.5972 0 -513.468 0 -495.3388 0 -477.2096 0 -465.1235 0 -453.0374 0 -434.9082 0 -422.8221 0 -410.736 0 -392.6068 0 -386.5637 0 -380.5207 0 -368.4345 0 -356.3484 0 -350.3053 0 -344.2623 0 -332.1762 0 -326.1331 0 -320.09 0 -315.4693 0 -306.2277 0 -306.2277 0 -301.607 0 -296.9862 0 -292.3654 0 -287.7447 0 -287.7447 0 -283.1239 0 -283.1239 0 -278.5031 0 -278.5031 0 -278.5031 0 -264.6408 0 -227.6746 0 -260.02 0 -260.02 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -246.1577 0 -246.1577 0 -246.1577 0 -241.537 0 -246.1577 0 -246.1577 0 -250.7785 0 -255.3993 0 -255.3993 0 -260.02 0 -264.6408 0 -264.6408 0 -250.7785 0 -264.6408 0 -264.6408 0 -255.3993 0 -260.02 0 -255.3993 0 -250.7785 0 -250.7785 0 -246.1577 0 -246.1577 0 -241.537 0 -241.537 0 -246.1577 0 -246.1577 0 -250.7785 0 -250.7785 0 -250.7785 0 -250.7785 0 -246.1577 0 -246.1577 0 -241.537 0 -236.9162 0 -232.2954 0 -227.6746 0 -223.0539 0 -223.0539 0 -218.4331 0 -218.4331 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -213.8123 0 -209.1916 0 -213.8123 0 -213.8123 0 -213.8123 0 -264.6408 0 -278.5031 0 -283.1239 0 -292.3654 0 -296.9862 0 -296.9862 0 -292.3654 0 -287.7447 0 -283.1239 0 -283.1239 0 -283.1239 0 -283.1239 0 -292.3654 0 -296.9862 0 -301.607 0 -306.2277 0 -315.4693 0 -320.09 0 -332.1762 0 -344.2623 0 -362.3915 0 -374.4776 0 -386.5637 0 -392.6068 0 -398.6498 0 -404.6929 0 -416.779 0 -422.8221 0 -434.9082 0 -440.9513 0 -453.0374 0 -465.1235 0 -477.2096 0 -495.3388 0 -501.3819 0 -525.5541 0 -537.6403 0 -537.6403 0 -537.6403 0 -537.6403 0 -537.6403 0 -537.6403 0 -531.5972 0 -531.5972 0 -525.5541 0 -525.5541 0 -525.5541 0 -519.5111 0 -525.5541 0 -525.5541 0 -531.5972 0 -537.6403 0 -543.6833 0 -549.7264 0 -555.7695 0 -561.8125 0 -561.8125 0 -561.8125 0 -561.8125 0 -561.8125 0 -561.8125 0 -561.8125 0 -549.7264 0 -543.6833 0 -543.6833 0 -537.6403 0 -525.5541 0 -513.468 0 -501.3819 0 -489.2958 0 -483.2527 0 -471.1666 0 -459.0805 0 -446.9943 0 -446.9943 0 -434.9082 0 -422.8221 0 -422.8221 0 -416.779 0 -410.736 0 -404.6929 0 -392.6068 0 -386.5637 0 -386.5637 0 -380.5207 0 -374.4776 0 -368.4345 0 -362.3915 0 -356.3484 0 -350.3053 0 -344.2623 0 -344.2623 0 -338.2192 0 -338.2192 0 -338.2192 0 -332.1762 0 -332.1762 0 -326.1331 0 -326.1331 0 -320.09 0 -326.1331 0 -315.4693 0 -315.4693 0 -292.3654 0 -306.2277 0 -287.7447 0 -296.9862 0 -269.2616 0 -287.7447 0 -269.2616 0 -292.3654 0 -326.1331 0 -315.4693 0 -278.5031 0 -264.6408 0 -283.1239 0 -296.9862 0 -332.1762 0 -332.1762 0 -332.1762 0 -332.1762 0 -301.607 0 -332.1762 0 -326.1331 0 -296.9862 0 -278.5031 0 -283.1239 0 -301.607 0 -380.5207 0 -350.3053 0 -404.6929 0 -410.736 0 -362.3915 0 -380.5207 0 -380.5207 0 -416.779 0 -416.779 0 -416.779 0 -416.779 0 -416.779 0 -416.779 0 -416.779 0 -422.8221 0 -422.8221 0 -428.8652 0 -422.8221 0 -422.8221 0 -422.8221 0 -416.779 0 -410.736 0 -404.6929 0 -398.6498 0 -374.4776 0 -326.1331 0 -310.8485 0 -320.09 0 -326.1331 0 -296.9862 0 -315.4693 0 -306.2277 0 -292.3654 0 -269.2616 0 -255.3993 0 -278.5031 0 -306.2277 0 -306.2277 0 -310.8485 0 -310.8485 0 -306.2277 0 -310.8485 0 -301.607 0 -250.7785 0 -278.5031 0 -241.537 0 -227.6746 0 -232.2954 0 -236.9162 0 -223.0539 0 -227.6746 0 -209.1916 0 -232.2954 0 -209.1916 0 -196.5925 0 -209.1916 0 -196.5925 0 -189.8775 0 -193.235 0 -183.1625 0 -193.235 0 -179.805 0 -179.805 0 -186.52 0 -186.52 0 -189.8775 0 -176.4475 0 -183.1625 0 -186.52 0 -169.7325 0 -179.805 0 -163.0175 0 -176.4475 0 -163.0175 0 -166.375 0 -156.3025 0 -176.4475 0 -159.66 0 -149.5875 0 -136.1575 0 -152.945 0 -156.3025 0 -166.375 0 -159.66 0 -146.23 0 -156.3025 0 -183.1625 0 -183.1625 0 -183.1625 0 -149.5875 0 -146.23 0 -152.945 0 -149.5875 0 -159.66 0 -152.945 0 -149.5875 0 -142.8725 0 -146.23 0 -152.945 0 -142.8725 0 -146.23 0 -142.8725 0 -146.23 0 -152.945 0 -159.66 0 -156.3025 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -156.3025 0 -159.66 0 -163.0175 0 -159.66 0 -156.3025 0 -159.66 0 -156.3025 0 -152.945 0 -152.945 0 -152.945 0 -149.5875 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -122.7275 0 -126.085 0 -136.1575 0 -136.1575 0 -129.4425 0 -129.4425 0 -129.4425 0 -105.94 0 -105.94 0 -116.0125 0 -119.37 0 -122.7275 0 -112.655 0 -99.22501 0 -116.0125 0 -112.655 0 -116.0125 0 -119.37 0 -119.37 0 -116.0125 0 -119.37 0 -116.0125 0 -116.0125 0 -116.0125 0 -95.86751 0 -105.94 0 -99.22501 0 -95.86751 0 -95.86751 0 -92.51001 0 -76.75501 0 -60.38001 0 -61.00001 0 -58.52001 0 -99.22501 0 -92.51001 0 -76.75501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -95.86751 0 -95.86751 0 -59.14001 0 -58.52001 0 -59.76001 0 -60.38001 0 - -57.90001 0 -61.00001 0 -60.38001 0 -60.38001 0 -61.00001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -60.38001 0 -56.66001 0 -59.14001 0 -57.28001 0 -57.90001 0 -59.76001 0 -58.52001 0 -59.14001 0 -92.51001 0 -99.22501 0 -95.86751 0 -76.75501 0 -76.75501 0 -76.75501 0 -61.00001 0 -60.38001 0 -59.76001 0 -59.14001 0 -58.52001 0 -59.14001 0 -58.52001 0 -58.52001 0 -59.14001 0 -58.52001 0 -58.52001 0 -59.76001 0 -60.38001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.38001 0 -59.76001 0 -56.04001 0 -59.14001 0 -59.76001 0 -60.38001 0 -59.76001 0 -59.76001 0 -59.14001 0 -59.14001 0 -59.14001 0 -59.14001 0 -105.94 0 -122.7275 0 -122.7275 0 -116.0125 0 -483.2527 0 -772.9081 0 -920.9101 0 -981.8521 0 -1034.088 0 -1016.676 0 -1034.088 0 -990.5581 0 -1007.97 0 -964.4401 0 -920.9101 0 -859.9681 0 -799.0261 0 -764.2021 0 -711.9661 0 -677.1421 0 -651.0241 0 -604.114 0 -585.9848 0 -567.8556 0 -549.7264 0 -531.5972 0 -507.425 0 -495.3388 0 -477.2096 0 -465.1235 0 -446.9943 0 -440.9513 0 -428.8652 0 -416.779 0 -398.6498 0 -386.5637 0 -380.5207 0 -380.5207 0 -380.5207 0 -374.4776 0 -374.4776 0 -392.6068 0 -434.9082 0 -483.2527 0 -555.7695 0 -624.9061 0 -703.2601 0 -764.2021 0 -799.0261 0 -833.8501 0 -842.5561 0 -825.1441 0 -825.1441 0 -799.0261 0 -755.4961 0 -711.9661 0 -677.1421 0 -642.3181 0 -604.114 0 -585.9848 0 -555.7695 0 -543.6833 0 -519.5111 0 -501.3819 0 -489.2958 0 -471.1666 0 -459.0805 0 -434.9082 0 -416.779 0 -404.6929 0 -392.6068 0 -386.5637 0 -380.5207 0 -362.3915 0 -368.4345 0 -374.4776 0 -398.6498 0 -410.736 0 -440.9513 0 -483.2527 0 -531.5972 0 -598.0709 0 -694.5541 0 -781.6141 0 -833.8501 0 -886.0861 0 -929.6161 0 -973.1461 0 -990.5581 0 -999.2641 0 -1007.97 0 -990.5581 0 -999.2641 0 -990.5581 0 -964.4401 0 -947.0281 0 -938.3221 0 -920.9101 0 -912.2041 0 -912.2041 0 -920.9101 0 -955.7341 0 -999.2641 0 -1077.618 0 -1155.806 0 -1253.048 0 -1325.98 0 -1386.756 0 -1447.532 0 -1483.998 0 -1569.084 0 -1617.705 0 -1666.326 0 -1739.257 0 -1812.189 0 -1860.81 0 -2026.052 0 -2307.916 0 -2495.826 0 -2589.78 0 -2683.735 0 -2683.735 0 -2636.758 0 -2354.894 0 -2307.916 0 -2026.052 0 -1848.655 0 -1775.723 0 -1690.637 0 -1593.395 0 -1508.308 0 -1471.842 0 -1386.756 0 -1350.29 0 -1301.669 0 -1277.359 0 -1240.893 0 -1204.427 0 -1180.117 0 -1143.651 0 -1107.185 0 -1086.324 0 -1068.912 0 -1060.206 0 -1034.088 0 -1016.676 0 -1007.97 0 -981.8521 0 -964.4401 0 -947.0281 0 -938.3221 0 -920.9101 0 -886.0861 0 -877.3801 0 -877.3801 0 -851.2621 0 -833.8501 0 -816.4381 0 -816.4381 0 -790.3201 0 -781.6141 0 -772.9081 0 -755.4961 0 -755.4961 0 -729.3781 0 -720.6721 0 -720.6721 0 -703.2601 0 -703.2601 0 -685.8481 0 -668.4361 0 -659.7301 0 -659.7301 0 -642.3181 0 -633.6121 0 -624.9061 0 -604.114 0 -598.0709 0 -598.0709 0 -573.8986 0 -579.9417 0 -579.9417 0 -573.8986 0 -573.8986 0 -561.8125 0 -555.7695 0 -543.6833 0 -537.6403 0 -537.6403 0 -531.5972 0 -525.5541 0 -519.5111 0 -519.5111 0 -513.468 0 -501.3819 0 -495.3388 0 -501.3819 0 -489.2958 0 -471.1666 0 -459.0805 0 -477.2096 0 -434.9082 0 -465.1235 0 -453.0374 0 -416.779 0 -422.8221 0 -446.9943 0 -440.9513 0 -434.9082 0 -434.9082 0 -434.9082 0 -428.8652 0 -428.8652 0 -422.8221 0 -422.8221 0 -416.779 0 -422.8221 0 -416.779 0 -404.6929 0 -404.6929 0 -410.736 0 -404.6929 0 -380.5207 0 -320.09 0 -326.1331 0 -315.4693 0 -315.4693 0 -315.4693 0 -306.2277 0 -306.2277 0 -315.4693 0 -362.3915 0 -362.3915 0 -350.3053 0 -350.3053 0 -350.3053 0 -350.3053 0 -350.3053 0 -344.2623 0 -344.2623 0 -344.2623 0 -338.2192 0 -332.1762 0 -332.1762 0 -332.1762 0 -326.1331 0 -269.2616 0 -269.2616 0 -278.5031 0 -278.5031 0 -292.3654 0 -255.3993 0 -264.6408 0 -287.7447 0 -306.2277 0 -301.607 0 -301.607 0 -296.9862 0 -292.3654 0 -292.3654 0 -287.7447 0 -287.7447 0 -287.7447 0 -287.7447 0 -283.1239 0 -283.1239 0 -283.1239 0 -283.1239 0 -278.5031 0 -278.5031 0 -278.5031 0 -278.5031 0 -278.5031 0 -273.8823 0 -273.8823 0 -269.2616 0 -269.2616 0 -269.2616 0 -264.6408 0 -264.6408 0 -260.02 0 -260.02 0 -260.02 0 -255.3993 0 -260.02 0 -255.3993 0 -255.3993 0 -255.3993 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -250.7785 0 -246.1577 0 -246.1577 0 -246.1577 0 -246.1577 0 -246.1577 0 -250.7785 0 -250.7785 0 -250.7785 0 -250.7785 0 -255.3993 0 -255.3993 0 -250.7785 0 -250.7785 0 -246.1577 0 -241.537 0 -241.537 0 -241.537 0 -241.537 0 -236.9162 0 -236.9162 0 -236.9162 0 -236.9162 0 -241.537 0 -241.537 0 -236.9162 0 -236.9162 0 -232.2954 0 -232.2954 0 -189.8775 0 -183.1625 0 -193.235 0 -209.1916 0 -183.1625 0 -204.5708 0 -213.8123 0 -213.8123 0 -209.1916 0 -209.1916 0 -209.1916 0 -209.1916 0 -204.5708 0 -209.1916 0 -204.5708 0 -199.95 0 -199.95 0 -199.95 0 -196.5925 0 -196.5925 0 -196.5925 0 -199.95 0 -196.5925 0 -196.5925 0 -169.7325 0 -156.3025 0 -169.7325 0 -166.375 0 -163.0175 0 -142.8725 0 -183.1625 0 -186.52 0 -183.1625 0 - -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -183.1625 0 -179.805 0 -179.805 0 -179.805 0 -183.1625 0 -179.805 0 -179.805 0 -176.4475 0 -152.945 0 -142.8725 0 -142.8725 0 -139.515 0 -136.1575 0 -126.085 0 -129.4425 0 -136.1575 0 -166.375 0 -163.0175 0 -166.375 0 -166.375 0 -166.375 0 -166.375 0 -163.0175 0 -166.375 0 -163.0175 0 -163.0175 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -152.945 0 -149.5875 0 -132.8 0 -119.37 0 -126.085 0 -119.37 0 -112.655 0 -116.0125 0 -116.0125 0 -112.655 0 -109.2975 0 -146.23 0 -136.1575 0 -146.23 0 -146.23 0 -142.8725 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -146.23 0 -146.23 0 -142.8725 0 - -149.5875 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -159.66 0 -159.66 0 -163.0175 0 -163.0175 0 -163.0175 0 -163.0175 0 -166.375 0 -166.375 0 -169.7325 0 -173.09 0 -173.09 0 -176.4475 0 -176.4475 0 -173.09 0 -169.7325 0 -166.375 0 -166.375 0 -163.0175 0 -159.66 0 -159.66 0 -159.66 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -149.5875 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -146.23 0 -142.8725 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 -152.945 0 -156.3025 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -159.66 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -156.3025 0 -152.945 0 -159.66 0 -142.8725 0 -146.23 0 -146.23 0 -129.4425 0 -166.375 0 -166.375 0 -169.7325 0 -173.09 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -176.4475 0 -173.09 0 -173.09 0 -176.4475 0 -173.09 0 -142.8725 0 -156.3025 0 -166.375 0 -169.7325 0 -166.375 0 -159.66 0 -156.3025 0 -146.23 0 -152.945 0 -142.8725 0 -142.8725 0 -149.5875 0 -149.5875 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -139.515 0 -136.1575 0 -136.1575 0 -136.1575 0 -132.8 0 -129.4425 0 -126.085 0 -126.085 0 -122.7275 0 -126.085 0 -122.7275 0 -122.7275 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -126.085 0 -122.7275 0 -126.085 0 -126.085 0 -122.7275 0 -126.085 0 -126.085 0 -122.7275 0 -105.94 0 -119.37 0 -112.655 0 -102.5825 0 -92.51001 0 -57.90001 0 -76.75501 0 -61.00001 0 -112.655 0 -112.655 0 -116.0125 0 -116.0125 0 -112.655 0 -116.0125 0 -116.0125 0 -112.655 0 -116.0125 0 -116.0125 0 -112.655 0 -116.0125 0 -116.0125 0 -116.0125 0 -95.86751 0 -99.22501 0 -61.00001 0 -105.94 0 -58.52001 0 -57.90001 0 -57.90001 0 -95.86751 0 -57.90001 0 -57.90001 0 -99.22501 0 -102.5825 0 -105.94 0 -105.94 0 -105.94 0 -102.5825 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -105.94 0 -109.2975 0 -109.2975 0 -109.2975 0 -112.655 0 -112.655 0 -112.655 0 -112.655 0 -109.2975 0 -109.2975 0 -105.94 0 -102.5825 0 -102.5825 0 -60.38001 0 -59.14001 0 -60.38001 0 -60.38001 0 -59.14001 0 -57.90001 0 -58.52001 0 -57.90001 0 -57.90001 0 -59.76001 0 -59.14001 0 -60.38001 0 -59.14001 0 -102.5825 0 -61.00001 0 -57.28001 0 -59.14001 0 -56.66001 0 -55.42001 0 -56.66001 0 -57.28001 0 -56.04001 0 -55.42001 0 -57.28001 0 -59.14001 0 -99.22501 0 -59.76001 0 -102.5825 0 -99.22501 0 -99.22501 0 -99.22501 0 -95.86751 0 -102.5825 0 -102.5825 0 -102.5825 0 -102.5825 0 -99.22501 0 -102.5825 0 -102.5825 0 -58.52001 0 -58.52001 0 -59.14001 0 -59.76001 0 -59.14001 0 -56.66001 0 -56.66001 0 -58.52001 0 -57.28001 0 -59.76001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -95.86751 0 -60.38001 0 -59.14001 0 -59.76001 0 -56.66001 0 -55.42001 0 -54.80001 0 -54.18001 0 -54.18001 0 -54.18001 0 -57.90001 0 -56.04001 0 -58.52001 0 -56.66001 0 -57.90001 0 -60.38001 0 -60.38001 0 -54.18001 0 -61.00001 0 -57.90001 0 -56.04001 0 -59.76001 0 -61.00001 0 -56.66001 0 -52.32001 0 -57.28001 0 -54.18001 0 -51.70001 0 -55.59313 0 -56.34185 0 -53.39319 0 -48.52242 0 -51.96452 0 -49.87733 0 -54.11886 0 -59.41532 0 -54.85215 0 -52.6751 0 -54.85215 0 -57.86275 0 -56.34185 0 -60.20362 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -58.63505 0 -59.41532 0 -60.20362 0 -59.41532 0 -59.41532 0 -60.20362 0 -59.41532 0 -59.41532 0 -58.63505 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -58.63505 0 -58.63505 0 -58.63505 0 -58.63505 0 -57.86275 0 -54.11886 0 -48.52242 0 -50.56569 0 -51.96452 0 -51.2614 0 -47.85577 0 -49.87733 0 -50.56569 0 -51.96452 0 -51.96452 0 -51.96452 0 -49.87733 0 -51.2614 0 -49.19625 0 -51.2614 0 -49.19625 0 -48.52242 0 -57.09837 0 -57.86275 0 -57.86275 0 -57.86275 0 -57.09837 0 -57.86275 0 -57.86275 0 -57.86275 0 -58.63505 0 -58.63505 0 -59.41532 0 -61.00001 0 -75.14358 0 -75.14358 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.20362 0 -60.20362 0 -60.20362 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -59.41532 0 -58.63505 0 -59.41532 0 -59.41532 0 -60.20362 0 -61.00001 0 -75.14358 0 -92.51001 0 -92.51001 0 -92.51001 0 -97.27695 0 -112.9069 0 -112.9069 0 -121.5236 0 -127.5863 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -190.9217 0 -244.9397 0 -249.4287 0 -244.9397 0 -253.988 0 -309.0518 0 -338.661 0 -405.2517 0 -495.1235 0 -593.2256 0 -623.059 0 -563.6945 0 -616.2001 0 -651.1075 0 -680.1559 0 -710.2306 0 -717.9128 0 -710.2306 0 -733.4764 0 -717.9128 0 -725.6613 0 -765.4122 0 -1011.231 0 -1554.277 0 -2450.349 0 -3898.783 0 -5656.63 0 -6916.182 0 -8923.971 0 -10434.87 0 -12325.13 0 -13456.6 0 -14509.61 0 -15615.81 0 -16495.12 0 -17290.89 0 -17992.88 0 -18713.5 0 -19766.72 0 -20468.7 0 -21719.76 0 -22881.16 0 -24371.7 0 -25699.35 0 -26457.2 0 -27700.32 0 -27621.51 0 -29719.14 0 -31316.95 0 -31231.47 0 -33326 0 -35418.63 0 -36829.2 0 - -36354.95 0 -34134.81 0 -32793.91 0 -31316.95 0 -30134.25 0 -29144.37 0 -27858.37 0 -26533.79 0 -25774.48 0 -24589.74 0 -24011.15 0 -22811.73 0 -21121.03 0 -19452.98 0 -17522.83 0 -15347.54 0 -13702.56 0 -12413.31 0 -10511.76 0 -9266.226 0 -8592.191 0 -7837.152 0 -7364.823 0 -6970.999 0 -6542.31 0 -6285.579 0 -5988.508 0 -5796.958 0 -5473.888 0 -5252.321 0 -4954.577 0 -4831.3 0 -4553.445 0 - -4215.662 0 -4107.765 0 -4002.151 0 -3831.099 0 -3764.387 0 -3601.777 0 -3475.894 0 -3383.877 0 -3293.875 0 -3148.255 0 -3091.511 0 -3007.976 0 -2926.308 0 -2872.884 0 -2820.265 0 -2742.827 0 -2667.147 0 -2593.195 0 -2544.838 0 -2520.939 0 -2427.183 0 -2381.394 0 -2336.317 0 -2336.317 0 -2205.282 0 -2162.973 0 -2121.335 0 -2060.116 0 -2040.036 0 -2040.036 0 -1980.76 0 -1942.036 0 -1922.909 0 -1903.937 0 -1870.329 0 -1841.018 0 -1812.065 0 -1812.065 0 -1783.467 0 -1755.221 0 -1741.229 0 -1741.229 0 -1686.124 0 -1686.124 0 -1592.958 0 -1659.084 0 -1554.277 0 -1554.277 0 -1541.547 0 -1554.277 0 -1503.841 0 -1554.277 0 -1541.547 0 -1442.594 0 -1442.594 0 -1406.788 0 -1442.594 0 -1442.594 0 -1418.645 0 -1418.645 0 -1418.645 0 -1395.007 0 -1371.675 0 -1360.123 0 -1348.647 0 -1314.67 0 -1248.713 0 -1281.362 0 -1281.362 0 -1270.406 0 -1270.406 0 -1270.406 0 -1270.406 0 -1259.523 0 -1237.975 0 -1216.713 0 -1206.19 0 -1216.713 0 -1206.19 0 -1195.737 0 -1185.355 0 -1164.8 0 -1164.8 0 -1144.523 0 -1144.523 0 -1134.489 0 -1134.489 0 -1124.522 0 -1114.624 0 -1114.624 0 -1104.793 0 -1104.793 0 -1073.579 0 -1062.979 0 -1052.464 0 - -1042.032 0 -1031.683 0 -1021.416 0 -1011.231 0 -1011.231 0 -991.1038 0 -1001.127 0 -981.1611 0 -971.2983 0 -971.2983 0 -942.1842 0 -942.1842 0 -932.636 0 -942.1842 0 -932.636 0 -913.7716 0 -904.4544 0 -895.2133 0 -895.2133 0 -886.0478 0 -876.9574 0 -876.9574 0 -859.0002 0 -867.9417 0 -859.0002 0 -859.0002 0 -850.1325 0 -850.1325 0 -841.3381 0 -841.3381 0 -832.6165 0 -823.9673 0 -815.39 0 -815.39 0 -798.4495 0 -790.0854 0 -790.0854 0 -781.7915 0 -773.5672 0 -773.5672 0 -765.4122 0 -765.4122 0 -765.4122 0 -757.3261 0 -757.3261 0 -749.3084 0 -717.9128 0 -733.4764 0 -741.3586 0 -741.3586 0 -733.4764 0 -733.4764 0 -733.4764 0 -733.4764 0 -733.4764 0 -725.6613 0 -725.6613 0 -725.6613 0 -725.6613 0 -717.9128 0 -725.6613 0 -717.9128 0 -710.2306 0 -702.6143 0 -695.0633 0 -702.6143 0 -702.6143 0 -702.6143 0 -695.0633 0 -687.5773 0 -687.5773 0 -687.5773 0 -672.7986 0 -665.5051 0 -665.5051 0 -665.5051 0 -665.5051 0 -658.2748 0 -658.2748 0 -651.1075 0 -644.0027 0 -644.0027 0 -636.9599 0 -629.9788 0 -629.9788 0 -629.9788 0 -623.059 0 -623.059 0 -623.059 0 -623.059 0 -616.2001 0 -616.2001 0 -616.2001 0 -608.4619 0 -608.4619 0 -600.804 0 -600.804 0 -593.2256 0 -593.2256 0 -593.2256 0 -593.2256 0 -593.2256 0 -600.804 0 -593.2256 0 -593.2256 0 -600.804 0 -593.2256 0 -593.2256 0 -593.2256 0 -585.7261 0 -578.3048 0 -578.3048 0 -585.7261 0 -578.3048 0 -570.9612 0 -563.6945 0 -521.6757 0 -501.6548 0 -556.5042 0 -556.5042 0 -549.3896 0 -542.35 0 -556.5042 0 -549.3896 0 -549.3896 0 -542.35 0 -535.385 0 -528.4937 0 -535.385 0 -528.4937 0 -528.4937 0 -521.6757 0 -514.9303 0 -508.2568 0 -508.2568 0 -501.6548 0 -501.6548 0 -469.6946 0 -422.0562 0 -469.6946 0 -451.3372 0 -416.3922 0 -439.4304 0 -469.6946 0 -433.5748 0 -469.6946 0 -475.9486 0 -469.6946 0 -469.6946 0 -469.6946 0 -463.5084 0 -457.3894 0 -457.3894 0 -457.3894 0 -457.3894 0 -451.3372 0 -445.351 0 -445.351 0 -439.4304 0 -439.4304 0 -439.4304 0 -439.4304 0 -433.5748 0 -433.5748 0 -427.7836 0 - -422.0562 0 -422.0562 0 -416.3922 0 -416.3922 0 -416.3922 0 -422.0562 0 -422.0562 0 -422.0562 0 -416.3922 0 -416.3922 0 -416.3922 0 -410.7909 0 -405.2517 0 -405.2517 0 -399.7743 0 -399.7743 0 -399.7743 0 -394.358 0 -394.358 0 -399.7743 0 -394.358 0 -394.358 0 -389.0022 0 -394.358 0 -394.358 0 -394.358 0 -389.0022 0 -389.0022 0 -389.0022 0 -389.0022 0 -394.358 0 -394.358 0 -394.358 0 -399.7743 0 -399.7743 0 -399.7743 0 -399.7743 0 -399.7743 0 -399.7743 0 -399.7743 0 -394.358 0 -389.0022 0 -394.358 0 -389.0022 0 -394.358 0 -394.358 0 -394.358 0 -394.358 0 -394.358 0 -394.358 0 -394.358 0 -394.358 0 -389.0022 0 -389.0022 0 -383.7065 0 -383.7065 0 -383.7065 0 -383.7065 0 -378.4703 0 -378.4703 0 -383.7065 0 -378.4703 0 -378.4703 0 -383.7065 0 -378.4703 0 -383.7065 0 -383.7065 0 -389.0022 0 -383.7065 0 -389.0022 0 -383.7065 0 -383.7065 0 -389.0022 0 -389.0022 0 -394.358 0 -394.358 0 -399.7743 0 -399.7743 0 -399.7743 0 -405.2517 0 -405.2517 0 -410.7909 0 -410.7909 0 -410.7909 0 -410.7909 0 -416.3922 0 -422.0562 0 -422.0562 0 -433.5748 0 -433.5748 0 -433.5748 0 -439.4304 0 -439.4304 0 -445.351 0 -439.4304 0 -439.4304 0 -439.4304 0 -439.4304 0 -439.4304 0 -439.4304 0 -439.4304 0 -433.5748 0 -433.5748 0 -427.7836 0 -422.0562 0 -422.0562 0 -416.3922 0 -416.3922 0 -410.7909 0 -405.2517 0 -405.2517 0 -405.2517 0 -405.2517 0 -399.7743 0 -399.7743 0 -394.358 0 -394.358 0 -394.358 0 -389.0022 0 -389.0022 0 -383.7065 0 -378.4703 0 -378.4703 0 -378.4703 0 -373.2931 0 -373.2931 0 -378.4703 0 -373.2931 0 -373.2931 0 -368.1744 0 -363.1136 0 -368.1744 0 -363.1136 0 -363.1136 0 -353.1638 0 -348.2738 0 -353.1638 0 -353.1638 0 -353.1638 0 -353.1638 0 -348.2738 0 -353.1638 0 -353.1638 0 -348.2738 0 -333.9371 0 -287.951 0 -303.6562 0 -338.661 0 -348.2738 0 -348.2738 0 -343.4397 0 -343.4397 0 -343.4397 0 -338.661 0 -343.4397 0 -338.661 0 -338.661 0 -338.661 0 -338.661 0 -343.4397 0 -333.9371 0 -338.661 0 -338.661 0 -338.661 0 -333.9371 0 -333.9371 0 -333.9371 0 -333.9371 0 -324.6522 0 -324.6522 0 -320.09 0 -320.09 0 -324.6522 0 -320.09 0 -324.6522 0 -324.6522 0 -324.6522 0 -320.09 0 -314.5294 0 -314.5294 0 -309.0518 0 -314.5294 0 -314.5294 0 -314.5294 0 -303.6562 0 -298.3415 0 -303.6562 0 -309.0518 0 -314.5294 0 -309.0518 0 -314.5294 0 -309.0518 0 -314.5294 0 -303.6562 0 -303.6562 0 -303.6562 0 -309.0518 0 -298.3415 0 -293.1068 0 -303.6562 0 -303.6562 0 -309.0518 0 -303.6562 0 -303.6562 0 -298.3415 0 -298.3415 0 -303.6562 0 -298.3415 0 -298.3415 0 -303.6562 0 -298.3415 0 -303.6562 0 -298.3415 0 -298.3415 0 -298.3415 0 -293.1068 0 -282.8731 0 -287.951 0 -293.1068 0 -282.8731 0 -287.951 0 -287.951 0 -287.951 0 -287.951 0 -282.8731 0 -282.8731 0 -282.8731 0 -282.8731 0 -277.8722 0 -282.8731 0 -282.8731 0 -277.8722 0 -277.8722 0 -277.8722 0 -277.8722 0 -277.8722 0 -282.8731 0 -277.8722 0 -277.8722 0 -277.8722 0 -277.8722 0 -277.8722 0 -268.0973 0 -268.0973 0 -268.0973 0 -272.9472 0 -268.0973 0 -268.0973 0 -272.9472 0 -268.0973 0 -268.0973 0 -263.3214 0 -268.0973 0 -268.0973 0 -268.0973 0 -263.3214 0 -263.3214 0 -263.3214 0 -263.3214 0 -268.0973 0 -268.0973 0 -263.3214 0 -263.3214 0 -263.3214 0 -263.3214 0 -263.3214 0 -258.6186 0 -263.3214 0 -263.3214 0 -263.3214 0 -263.3214 0 -263.3214 0 -258.6186 0 -263.3214 0 -258.6186 0 - -253.988 0 -253.988 0 -253.988 0 -253.988 0 -258.6186 0 -253.988 0 -249.4287 0 -258.6186 0 -258.6186 0 -253.988 0 -253.988 0 -249.4287 0 -249.4287 0 -244.9397 0 -253.988 0 -253.988 0 -249.4287 0 -253.988 0 -249.4287 0 -249.4287 0 -253.988 0 -244.9397 0 -244.9397 0 -249.4287 0 -207.5571 0 -219.4325 0 -203.7232 0 -249.4287 0 -253.988 0 -258.6186 0 -253.988 0 -249.4287 0 -249.4287 0 -258.6186 0 -253.988 0 -249.4287 0 -240.5201 0 -244.9397 0 -244.9397 0 -244.9397 0 -249.4287 0 -253.988 0 -249.4287 0 -244.9397 0 -244.9397 0 -249.4287 0 -240.5201 0 -244.9397 0 -244.9397 0 -240.5201 0 -236.169 0 -236.169 0 -244.9397 0 -236.169 0 -231.8856 0 -240.5201 0 -240.5201 0 -240.5201 0 -240.5201 0 -240.5201 0 -240.5201 0 -236.169 0 -240.5201 0 -236.169 0 -231.8856 0 -236.169 0 -231.8856 0 -236.169 0 -236.169 0 -236.169 0 -236.169 0 -231.8856 0 -231.8856 0 -236.169 0 -231.8856 0 -227.669 0 -231.8856 0 -231.8856 0 -227.669 0 -231.8856 0 -231.8856 0 -227.669 0 -227.669 0 -227.669 0 -227.669 0 -231.8856 0 -231.8856 0 -227.669 0 -227.669 0 -231.8856 0 -231.8856 0 -231.8856 0 -231.8856 0 -227.669 0 -231.8856 0 -219.4325 0 -227.669 0 -223.5183 0 -227.669 0 -227.669 0 -223.5183 0 -223.5183 0 -223.5183 0 -227.669 0 -227.669 0 -223.5183 0 -219.4325 0 -223.5183 0 -227.669 0 -223.5183 0 -231.8856 0 -219.4325 0 -227.669 0 -231.8856 0 -227.669 0 -223.5183 0 -227.669 0 -231.8856 0 -227.669 0 -223.5183 0 -227.669 0 -227.669 0 -219.4325 0 -227.669 0 -227.669 0 -223.5183 0 -227.669 0 -223.5183 0 -231.8856 0 -227.669 0 -227.669 0 -215.411 0 -215.411 0 -219.4325 0 -215.411 0 -219.4325 0 -223.5183 0 -223.5183 0 -227.669 0 -227.669 0 -227.669 0 -227.669 0 -223.5183 0 -227.669 0 -231.8856 0 -231.8856 0 -236.169 0 -236.169 0 -236.169 0 -236.169 0 -227.669 0 -231.8856 0 -223.5183 0 -207.5571 0 -215.411 0 -165.9599 0 -186.5442 0 -195.3898 0 -203.7232 0 -199.95 0 -215.411 0 -249.4287 0 -253.988 0 -244.9397 0 -253.988 0 -240.5201 0 -249.4287 0 -249.4287 0 -244.9397 0 -253.988 0 -253.988 0 -249.4287 0 -253.988 0 -244.9397 0 -244.9397 0 -249.4287 0 -249.4287 0 -244.9397 0 -244.9397 0 -244.9397 0 -240.5201 0 -244.9397 0 -244.9397 0 -240.5201 0 -240.5201 0 -240.5201 0 -231.8856 0 -236.169 0 -236.169 0 -227.669 0 -223.5183 0 -223.5183 0 -227.669 0 -236.169 0 -231.8856 0 -215.411 0 -186.5442 0 -223.5183 0 -231.8856 0 -219.4325 0 -203.7232 0 -219.4325 0 -223.5183 0 -231.8856 0 -215.411 0 -223.5183 0 -231.8856 0 -227.669 0 -223.5183 0 -227.669 0 -227.669 0 -227.669 0 -227.669 0 -223.5183 0 -227.669 0 -231.8856 0 -236.169 0 -236.169 0 -231.8856 0 -227.669 0 -231.8856 0 -231.8856 0 -231.8856 0 -223.5183 0 -223.5183 0 -223.5183 0 -219.4325 0 -219.4325 0 -219.4325 0 -223.5183 0 -223.5183 0 -219.4325 0 -227.669 0 -223.5183 0 -219.4325 0 -219.4325 0 -219.4325 0 -215.411 0 -219.4325 0 -215.411 0 -219.4325 0 -223.5183 0 -219.4325 0 -219.4325 0 -223.5183 0 -227.669 0 -223.5183 0 -223.5183 0 -227.669 0 -223.5183 0 -227.669 0 -231.8856 0 -227.669 0 -231.8856 0 -231.8856 0 -231.8856 0 -236.169 0 -231.8856 0 -236.169 0 -231.8856 0 -231.8856 0 -231.8856 0 -227.669 0 -227.669 0 -223.5183 0 -223.5183 0 -223.5183 0 -227.669 0 -223.5183 0 -223.5183 0 -219.4325 0 -219.4325 0 -219.4325 0 -215.411 0 -215.411 0 -215.411 0 -215.411 0 -211.4528 0 -211.4528 0 -207.5571 0 -211.4528 0 -207.5571 0 -207.5571 0 -203.7232 0 -203.7232 0 -207.5571 0 -207.5571 0 -207.5571 0 -207.5571 0 -207.5571 0 -211.4528 0 -211.4528 0 -207.5571 0 -207.5571 0 -211.4528 0 -207.5571 0 -211.4528 0 -207.5571 0 -207.5571 0 -203.7232 0 -207.5571 0 -199.95 0 -207.5571 0 -203.7232 0 -207.5571 0 -211.4528 0 -211.4528 0 -211.4528 0 -207.5571 0 -207.5571 0 -207.5571 0 -207.5571 0 -207.5571 0 -207.5571 0 -203.7232 0 -207.5571 0 -211.4528 0 -207.5571 0 -207.5571 0 -207.5571 0 -203.7232 0 -195.3898 0 -199.95 0 -203.7232 0 -207.5571 0 -199.95 0 -203.7232 0 -203.7232 0 -203.7232 0 -203.7232 0 -207.5571 0 -199.95 0 -203.7232 0 -199.95 0 -203.7232 0 -199.95 0 -195.3898 0 -195.3898 0 -190.9217 0 -190.9217 0 -190.9217 0 -195.3898 0 -195.3898 0 -195.3898 0 -190.9217 0 -190.9217 0 -195.3898 0 -199.95 0 -199.95 0 -199.95 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -195.3898 0 -190.9217 0 -190.9217 0 -190.9217 0 -190.9217 0 -195.3898 0 -195.3898 0 -195.3898 0 -190.9217 0 -186.5442 0 -186.5442 0 -186.5442 0 -190.9217 0 -186.5442 0 -186.5442 0 -186.5442 0 -186.5442 0 -186.5442 0 -186.5442 0 -186.5442 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -178.0545 0 -182.2556 0 -182.2556 0 -182.2556 0 -182.2556 0 -178.0545 0 -178.0545 0 -173.9391 0 -173.9391 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -178.0545 0 -173.9391 0 -173.9391 0 -173.9391 0 -178.0545 0 -178.0545 0 -173.9391 0 -173.9391 0 -173.9391 0 -173.9391 0 -173.9391 0 -150.9657 0 -173.9391 0 -162.093 0 -158.3059 0 -133.9147 0 -140.5191 0 -169.9081 0 -178.0545 0 -178.0545 0 -173.9391 0 -173.9391 0 -173.9391 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -169.9081 0 -165.9599 0 -169.9081 0 -169.9081 0 -173.9391 0 -169.9081 0 -169.9081 0 -169.9081 0 -165.9599 0 -143.9279 0 -140.5191 0 -127.5863 0 -124.5223 0 -121.5236 0 -140.5191 0 -154.5973 0 -165.9599 0 -169.9081 0 -165.9599 0 -165.9599 0 -154.5973 0 -115.7171 0 -143.9279 0 -137.1818 0 -124.5223 0 -115.7171 0 -127.5863 0 -127.5863 0 -165.9599 0 -169.9081 0 -173.9391 0 -162.093 0 -169.9081 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -165.9599 0 -162.093 0 -162.093 0 -169.9081 0 -165.9599 0 -165.9599 0 -162.093 0 -162.093 0 -162.093 0 -162.093 0 -165.9599 0 -158.3059 0 -158.3059 0 -158.3059 0 -162.093 0 -162.093 0 -162.093 0 -162.093 0 -154.5973 0 -140.5191 0 -124.5223 0 -140.5191 0 -165.9599 0 -158.3059 0 -162.093 0 -162.093 0 -162.093 0 -158.3059 0 -154.5973 0 -154.5973 0 -158.3059 0 -162.093 0 -162.093 0 -165.9599 0 -158.3059 0 -158.3059 0 -158.3059 0 -154.5973 0 -158.3059 0 -150.9657 0 -154.5973 0 -130.7166 0 -130.7166 0 -150.9657 0 -147.4097 0 -150.9657 0 -154.5973 0 -150.9657 0 -158.3059 0 -154.5973 0 -154.5973 0 -150.9657 0 -150.9657 0 -150.9657 0 -150.9657 0 -150.9657 0 -150.9657 0 -150.9657 0 -150.9657 0 -154.5973 0 -154.5973 0 -150.9657 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -147.4097 0 -143.9279 0 -147.4097 0 -150.9657 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -147.4097 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -143.9279 0 -140.5191 0 -140.5191 0 -143.9279 0 -140.5191 0 -140.5191 0 -140.5191 0 -140.5191 0 -140.5191 0 -140.5191 0 -140.5191 0 -137.1818 0 -140.5191 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -133.9147 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -137.1818 0 -133.9147 0 -137.1818 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -139.6166 0 -136.3003 0 -139.6166 0 -139.6166 0 -136.3003 0 -139.6166 0 -139.6166 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -139.6166 0 -136.3003 0 -136.3003 0 -139.6166 0 -139.6166 0 -139.6166 0 -136.3003 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -149.5875 0 -149.5875 0 -149.5875 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -146.23 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -142.8725 0 -139.515 0 -139.515 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -139.515 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -142.8725 0 -146.23 0 -146.23 0 -149.5875 0 -142.9846 0 -142.9846 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -142.9846 0 -139.6166 0 -139.6166 0 -142.9846 0 -139.6166 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -133.0353 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -129.8213 0 -123.5446 0 -123.5446 0 -123.5446 0 -120.4813 0 -61.00001 0 -95.09482 0 -59.75121 0 -75.19812 0 -75.19812 0 -114.5027 0 -114.5027 0 -103.1279 0 -117.4674 0 -117.4674 0 -117.4674 0 -114.5027 0 -117.4674 0 -114.5027 0 -114.5027 0 -114.5027 0 -114.5027 0 -117.4674 0 -120.4813 0 -120.4813 0 -117.4674 0 -117.4674 0 -103.1279 0 -114.5027 0 -114.5027 0 -103.1279 0 -111.5868 0 -111.5868 0 -114.5027 0 -114.5027 0 -114.5027 0 -114.5027 0 -111.5868 0 -114.5027 0 -114.5027 0 -114.5027 0 -114.5027 0 -114.5027 0 -114.5027 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -114.5027 0 -111.5868 0 -114.5027 0 -111.5868 0 -108.7192 0 -108.7192 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -111.5868 0 -108.7192 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -108.7192 0 -105.8997 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -105.8997 0 -108.7192 0 -114.5027 0 -114.5027 0 -111.5868 0 -111.5868 0 -111.5868 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -103.1279 0 -103.1279 0 -103.1279 0 -105.8997 0 -103.1279 0 -105.8997 0 -105.8997 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -108.7192 0 -105.8997 0 -103.1279 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -103.1279 0 -103.1279 0 -103.1279 0 -105.8997 0 -105.8997 0 -105.8997 0 -103.1279 0 -57.87917 0 -55.3853 0 -54.76224 0 -57.87917 0 -56.63192 0 -57.87917 0 -59.75121 0 -92.51001 0 -97.72583 0 -105.8997 0 -105.8997 0 -105.8997 0 -103.1279 0 -103.1279 0 -103.1279 0 -100.4034 0 -100.4034 0 -103.1279 0 -103.1279 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -105.8997 0 -103.1279 0 -105.8997 0 -103.1279 0 -103.1279 0 -103.1279 0 -105.8997 0 -105.8997 0 -103.1279 0 -105.8997 0 -105.8997 0 -105.8997 0 -103.1279 0 -103.1279 0 -103.1279 0 -100.4034 0 -103.1279 0 -103.1279 0 -105.8997 0 -97.72583 0 -60.37554 0 -57.87917 0 -57.25546 0 -59.75121 0 -59.12704 0 -58.50303 0 -56.63192 0 -55.3853 0 -55.3853 0 -55.3853 0 -100.4034 0 -95.09482 0 -57.25546 0 -75.19812 0 -103.1279 0 -59.75121 0 -92.51001 0 -61.00001 0 -59.12704 0 -57.87917 0 -58.50303 0 -95.09482 0 -97.72583 0 -97.72583 0 -100.4034 0 -100.4034 0 -60.37554 0 -97.72583 0 -59.12704 0 -54.13935 0 -57.25546 0 -59.12704 0 -97.72583 0 -97.72583 0 -100.4034 0 -97.72583 0 -100.4034 0 -103.1279 0 -100.4034 0 -100.4034 0 -103.1279 0 -100.4034 0 -100.4034 0 -100.4034 0 -100.4034 0 -100.4034 0 -100.4034 0 -103.1279 0 -103.1279 0 -100.4034 0 -100.4034 0 -100.4034 0 -97.72583 0 -100.4034 0 -97.72583 0 -97.72583 0 -97.72583 0 -100.4034 0 -100.4034 0 -100.4034 0 -100.4034 0 -100.4034 0 -100.4034 0 -97.72583 0 -100.4034 0 -97.72583 0 -97.72583 0 -97.72583 0 -95.09482 0 -97.72583 0 -97.72583 0 -97.72583 0 -95.09482 0 -97.72583 0 -97.72583 0 -97.72583 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -97.72583 0 -97.72583 0 -95.09482 0 -97.72583 0 -95.09482 0 -95.09482 0 -95.09482 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.09482 0 -92.51001 0 -92.51001 0 -95.09482 0 -95.09482 0 -95.09482 0 -92.51001 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -92.51001 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -92.51001 0 -92.51001 0 -95.09482 0 -92.51001 0 -92.51001 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -92.51001 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -97.72583 0 -95.09482 0 -97.72583 0 -97.72583 0 -97.72583 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -95.09482 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.09482 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -75.19812 0 -92.51001 0 -92.51001 0 -75.19812 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -92.51001 0 -75.19812 0 -92.51001 0 -92.51001 0 -92.51001 0 -61.00001 0 -75.19812 0 -92.51001 0 -75.19812 0 -61.00001 0 -61.00001 0 -92.51001 0 -59.75121 0 -57.87917 0 -75.19812 0 -59.12704 0 -57.87917 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -75.19812 0 -92.51001 0 -92.51001 0 -60.37554 0 -61.00001 0 -75.19812 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -75.19812 0 -61.00001 0 -92.51001 0 -75.19812 0 -59.12704 0 -56.00853 0 -56.63192 0 -75.19812 0 -92.51001 0 -95.09482 0 -92.51001 0 -92.51001 0 -92.51001 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -61.00001 0 -75.19812 0 -75.19812 0 -75.19812 0 -61.00001 0 -61.00001 0 -75.19812 0 -75.19812 0 -75.19812 0 -92.51001 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -75.19812 0 -61.00001 0 -75.19812 0 -61.00001 0 -75.19812 0 -61.00001 0 -60.37554 0 -60.37554 0 -61.00001 0 -60.37554 0 -61.00001 0 -61.00001 0 -60.37554 0 -60.37554 0 -60.37554 0 -60.37554 0 -60.37554 0 -60.37554 0 -59.75121 0 -60.37554 0 -61.00001 0 -61.00001 0 -60.37554 0 -60.37554 0 -60.37554 0 -60.37554 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.37554 0 -61.00001 0 -61.00001 0 -59.75121 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.37554 0 -59.75121 0 -60.37554 0 -52.89406 0 -52.27167 0 -53.51662 0 -49.16234 0 -53.51662 0 -75.19812 0 -75.19812 0 - -75.19812 0 -75.19812 0 -61.00001 0 -61.00001 0 -61.00001 0 -75.19812 0 -61.00001 0 -61.00001 0 -75.19812 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -60.37554 0 -60.37554 0 -61.00001 0 -60.37554 0 -61.00001 0 -60.37554 0 -61.00001 0 -75.19812 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -61.00001 0 -92.51001 0 -92.51001 0 -75.19812 0 -92.51001 0 -92.51001 0 -92.51001 0 -95.09482 0 -100.4034 0 -108.7192 0 -111.5868 0 -120.4813 0 -126.6578 0 -136.3003 0 -133.0353 0 -142.9846 0 -153.4022 0 -160.6123 0 -168.0378 0 -133.0353 0 -175.6814 0 -191.6347 0 -199.95 0 -203.9338 0 -220.362 0 -242.0249 0 -264.9679 0 -309.5829 0 -360.7611 0 -481.5319 0 -608.9971 0 -730.8145 0 -830.9733 0 -967.0572 0 -976.5672 0 -1054.647 0 -1146.926 0 -1266.168 0 -1693.291 0 -2309.715 0 -3145.153 0 -3822.773 0 -4482.72 0 -4841.879 0 -5308.593 0 -5622.024 0 -5853.951 0 -6044.416 0 -6288.755 0 -6338.467 0 -6288.755 0 -6642.731 0 -6489.309 0 -6591.302 0 -6591.302 0 -6438.743 0 -6190.178 0 -5948.632 0 -5486.102 0 -5008.005 0 -4482.72 0 -4106.711 0 -3586.226 0 -3205.618 0 -2940.014 0 -2611.123 0 -2407.222 0 -2215.098 0 -1990.853 0 -1871.011 0 -1787.675 0 -1680.056 0 -1640.719 0 -1551.081 0 -1476.621 0 -1416.228 0 -1368.99 0 -1299.912 0 -1255.038 0 -1211.098 0 -1146.926 0 -1105.295 0 -1074.726 0 -1034.792 0 -995.7533 0 -957.6023 0 -929.568 0 -902.0267 0 -874.9759 0 -848.4126 0 -822.3341 0 -805.2164 0 -779.9395 0 -763.3536 0 -738.8705 0 -722.811 0 -714.8597 0 -706.9606 0 -683.5751 0 -668.2436 0 -645.6324 0 -630.8143 0 -608.9971 0 -594.7412 0 -594.7412 0 -539.7039 0 -553.1671 0 -475.3097 0 -469.1354 0 -450.8984 0 -456.9299 0 -475.3097 0 -506.9015 0 -506.9015 0 -506.9015 0 -494.1203 0 -487.802 0 -481.5319 0 -481.5319 0 -469.1354 0 -475.3097 0 -463.0088 0 -463.0088 0 -450.8984 0 -438.9776 0 - -433.088 0 -427.2455 0 -433.088 0 -433.088 0 -427.2455 0 -421.4498 0 -421.4498 0 -415.701 0 -398.7342 0 -382.1845 0 -387.6549 0 - -299.2934 0 -299.2934 0 -299.2934 0 -304.4111 0 -299.2934 0 -294.2297 0 -289.2198 0 -289.2198 0 -289.2198 0 -284.2633 0 -284.2633 0 -279.3601 0 -279.3601 0 -279.3601 0 -274.5099 0 -274.5099 0 -269.7126 0 -264.9679 0 -269.7126 0 -264.9679 0 -264.9679 0 -264.9679 0 -260.2755 0 -264.9679 0 -255.6352 0 -255.6352 0 -255.6352 0 -255.6352 0 -251.0469 0 -251.0469 0 -246.5102 0 -251.0469 0 -260.2755 0 -260.2755 0 -264.9679 0 -260.2755 0 -260.2755 0 -264.9679 0 -264.9679 0 -269.7126 0 -264.9679 0 -269.7126 0 -264.9679 0 -264.9679 0 -269.7126 0 -269.7126 0 -264.9679 0 -269.7126 0 -269.7126 0 -269.7126 0 -269.7126 0 -264.9679 0 -264.9679 0 -264.9679 0 -260.2755 0 -264.9679 0 -264.9679 0 -264.9679 0 -264.9679 0 -269.7126 0 -269.7126 0 -274.5099 0 -279.3601 0 -279.3601 0 -279.3601 0 -284.2633 0 -289.2198 0 -294.2297 0 -299.2934 0 -299.2934 0 -294.2297 0 -294.2297 0 -294.2297 0 -304.4111 0 -304.4111 0 -299.2934 0 -299.2934 0 -299.2934 0 -294.2297 0 -294.2297 0 -294.2297 0 -294.2297 0 -294.2297 0 -294.2297 0 -289.2198 0 -294.2297 0 -294.2297 0 -294.2297 0 -289.2198 0 -294.2297 0 -294.2297 0 -294.2297 0 -294.2297 0 -299.2934 0 -299.2934 0 - -279.3601 0 -289.2198 0 -294.2297 0 -294.2297 0 -255.6352 0 -269.7126 0 -246.5102 0 -274.5099 0 -233.2078 0 -269.7126 0 -279.3601 0 - -224.5936 0 -212.0488 0 -220.362 0 -233.2078 0 -228.8754 0 -279.3601 0 -279.3601 0 -284.2633 0 -279.3601 0 -279.3601 0 -279.3601 0 -284.2633 0 - -284.2633 0 -279.3601 0 -279.3601 0 -279.3601 0 -279.3601 0 -274.5099 0 -269.7126 0 -274.5099 0 -274.5099 0 -274.5099 0 -269.7126 0 -269.7126 0 -269.7126 0 -269.7126 0 -269.7126 0 -264.9679 0 -260.2755 0 -260.2755 0 -255.6352 0 -260.2755 0 -255.6352 0 -255.6352 0 -251.0469 0 -251.0469 0 -255.6352 0 -251.0469 0 -251.0469 0 -255.6352 0 -255.6352 0 -251.0469 0 -251.0469 0 -251.0469 0 -251.0469 0 -246.5102 0 -246.5102 0 -251.0469 0 -246.5102 0 -246.5102 0 -251.0469 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -242.0249 0 -242.0249 0 -242.0249 0 -237.5909 0 -237.5909 0 -237.5909 0 -237.5909 0 -237.5909 0 -233.2078 0 -233.2078 0 -233.2078 0 -233.2078 0 -233.2078 0 -233.2078 0 -228.8754 0 -228.8754 0 -224.5936 0 -224.5936 0 -224.5936 0 -228.8754 0 -224.5936 0 -224.5936 0 -224.5936 0 -224.5936 0 -220.362 0 -224.5936 0 -220.362 0 -220.362 0 -199.95 0 -160.6123 0 -171.8321 0 -183.5461 0 -175.6814 0 -168.0378 0 -171.8321 0 -175.6814 0 -195.7638 0 -207.9666 0 -216.1805 0 -212.0488 0 -216.1805 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -212.0488 0 -216.1805 0 -216.1805 0 -212.0488 0 -212.0488 0 -216.1805 0 -216.1805 0 -216.1805 0 -220.362 0 -224.5936 0 -220.362 0 -220.362 0 -220.362 0 -220.362 0 -224.5936 0 -228.8754 0 -228.8754 0 -233.2078 0 -233.2078 0 -233.2078 0 -237.5909 0 -233.2078 0 -237.5909 0 -237.5909 0 -237.5909 0 -233.2078 0 -237.5909 0 -237.5909 0 -237.5909 0 -237.5909 0 -242.0249 0 -242.0249 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -251.0469 0 -251.0469 0 -251.0469 0 -255.6352 0 -251.0469 0 -251.0469 0 -255.6352 0 -260.2755 0 -260.2755 0 -260.2755 0 -260.2755 0 -264.9679 0 -264.9679 0 -269.7126 0 -279.3601 0 -279.3601 0 -284.2633 0 -294.2297 0 -299.2934 0 -309.5829 0 -320.09 0 -325.0169 0 -335.0045 0 -345.1717 0 -355.5193 0 -366.0484 0 -371.3813 0 -376.76 0 -382.1845 0 -382.1845 0 -382.1845 0 -382.1845 0 -376.76 0 -382.1845 0 -376.76 0 -371.3813 0 -376.76 0 -376.76 0 -371.3813 0 -360.7611 0 -360.7611 0 -371.3813 0 -360.7611 0 -366.0484 0 -360.7611 0 -350.3229 0 -350.3229 0 -345.1717 0 -350.3229 0 -350.3229 0 -340.0656 0 -335.0045 0 -335.0045 0 -335.0045 0 -325.0169 0 -320.09 0 -320.09 0 -320.09 0 -314.8092 0 -320.09 0 -309.5829 0 -304.4111 0 -309.5829 0 -299.2934 0 -299.2934 0 -299.2934 0 -289.2198 0 -251.0469 0 -274.5099 0 -299.2934 0 -294.2297 0 -294.2297 0 -294.2297 0 -294.2297 0 -284.2633 0 -284.2633 0 -284.2633 0 -284.2633 0 -284.2633 0 -279.3601 0 -284.2633 0 -284.2633 0 -274.5099 0 -279.3601 0 -279.3601 0 -274.5099 0 -279.3601 0 -269.7126 0 -279.3601 0 -264.9679 0 -269.7126 0 -274.5099 0 -274.5099 0 -279.3601 0 -279.3601 0 -274.5099 0 -274.5099 0 -274.5099 0 -274.5099 0 -264.9679 0 -269.7126 0 -274.5099 0 -264.9679 0 -264.9679 0 -269.7126 0 -264.9679 0 -264.9679 0 -269.7126 0 -264.9679 0 -269.7126 0 -264.9679 0 -264.9679 0 -264.9679 0 - -199.95 0 -203.9338 0 -199.95 0 -203.9338 0 -260.2755 0 -260.2755 0 -264.9679 0 -246.5102 0 -246.5102 0 -199.95 0 -224.5936 0 -212.0488 0 -228.8754 0 -228.8754 0 -212.0488 0 -237.5909 0 -216.1805 0 -216.1805 0 -195.7638 0 -233.2078 0 -233.2078 0 -228.8754 0 -203.9338 0 -233.2078 0 -203.9338 0 -228.8754 0 -228.8754 0 -233.2078 0 -233.2078 0 -242.0249 0 -237.5909 0 -237.5909 0 -237.5909 0 -237.5909 0 -242.0249 0 -242.0249 0 -242.0249 0 -237.5909 0 -233.2078 0 -237.5909 0 -237.5909 0 -233.2078 0 -228.8754 0 -228.8754 0 -233.2078 0 -224.5936 0 -216.1805 0 -187.5622 0 -207.9666 0 -179.5859 0 -175.6814 0 -149.877 0 -168.0378 0 -224.5936 0 -228.8754 0 -228.8754 0 -220.362 0 -220.362 0 -224.5936 0 -224.5936 0 -224.5936 0 -220.362 0 -220.362 0 -220.362 0 -224.5936 0 -216.1805 0 -220.362 0 -179.5859 0 -191.6347 0 -220.362 0 -164.2979 0 -171.8321 0 -156.9805 0 -171.8321 0 -149.877 0 -160.6123 0 -164.2979 0 -164.2979 0 -175.6814 0 -179.5859 0 -149.877 0 -156.9805 0 -171.8321 0 -164.2979 0 -171.8321 0 -199.95 0 -160.6123 0 -171.8321 0 -164.2979 0 -175.6814 0 -212.0488 0 -187.5622 0 -224.5936 0 -224.5936 0 -220.362 0 -220.362 0 -216.1805 0 -216.1805 0 -212.0488 0 -212.0488 0 -203.9338 0 -203.9338 0 -199.95 0 -207.9666 0 -203.9338 0 -203.9338 0 -203.9338 0 -199.95 0 -199.95 0 -203.9338 0 -195.7638 0 -203.9338 0 -203.9338 0 -207.9666 0 -199.95 0 -207.9666 0 -203.9338 0 -203.9338 0 -199.95 0 -199.95 0 -203.9338 0 -199.95 0 -203.9338 0 -199.95 0 -199.95 0 -203.9338 0 -203.9338 0 -203.9338 0 -203.9338 0 -207.9666 0 -203.9338 0 -207.9666 0 -207.9666 0 -203.9338 0 -207.9666 0 -203.9338 0 -195.7638 0 -203.9338 0 -203.9338 0 -199.95 0 -207.9666 0 -203.9338 0 -203.9338 0 -199.95 0 -195.7638 0 -191.6347 0 -199.95 0 -199.95 0 -203.9338 0 -203.9338 0 -195.7638 0 -203.9338 0 -199.95 0 -195.7638 0 -195.7638 0 -199.95 0 -195.7638 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -191.6347 0 -195.7638 0 -191.6347 0 -183.5461 0 -191.6347 0 -187.5622 0 -183.5461 0 -183.5461 0 -187.5622 0 -183.5461 0 -187.5622 0 -179.5859 0 -179.5859 0 -183.5461 0 -183.5461 0 -179.5859 0 -179.5859 0 -183.5461 0 -179.5859 0 -187.5622 0 -187.5622 0 -179.5859 0 -187.5622 0 -195.7638 0 -199.95 0 -203.9338 0 -199.95 0 -199.95 0 -207.9666 0 -203.9338 0 -203.9338 0 -195.7638 0 -199.95 0 -195.7638 0 -195.7638 0 -199.95 0 -195.7638 0 -187.5622 0 -187.5622 0 -191.6347 0 -191.6347 0 -187.5622 0 -191.6347 0 -191.6347 0 -187.5622 0 -183.5461 0 -187.5622 0 -187.5622 0 -191.6347 0 -187.5622 0 -183.5461 0 -183.5461 0 -187.5622 0 -191.6347 0 -191.6347 0 -187.5622 0 -183.5461 0 -187.5622 0 -183.5461 0 -183.5461 0 -179.5859 0 -179.5859 0 -187.5622 0 -183.5461 0 -183.5461 0 -179.5859 0 -179.5859 0 -183.5461 0 -187.5622 0 -183.5461 0 -183.5461 0 -179.5859 0 -175.6814 0 -183.5461 0 -183.5461 0 -179.5859 0 -171.8321 0 -164.2979 0 -171.8321 0 -179.5859 0 -160.6123 0 -179.5859 0 -171.8321 0 -171.8321 0 -179.5859 0 -171.8321 0 -179.5859 0 -175.6814 0 -179.5859 0 -171.8321 0 -175.6814 0 -175.6814 0 -179.5859 0 -179.5859 0 -179.5859 0 -179.5859 0 -175.6814 0 -179.5859 0 -179.5859 0 -168.0378 0 -175.6814 0 -175.6814 0 -171.8321 0 -171.8321 0 -171.8321 0 -168.0378 0 -171.8321 0 -164.2979 0 -168.0378 0 -171.8321 0 -171.8321 0 -175.6814 0 -171.8321 0 -168.0378 0 -168.0378 0 -168.0378 0 -156.9805 0 -168.0378 0 -164.2979 0 -171.8321 0 -175.6814 0 -175.6814 0 -168.0378 0 -164.2979 0 -168.0378 0 -168.0378 0 -164.2979 0 -153.4022 0 -160.6123 0 -160.6123 0 -160.6123 0 -156.9805 0 -156.9805 0 -156.9805 0 -156.9805 0 -160.6123 0 -153.4022 0 -164.2979 0 -160.6123 0 -160.6123 0 -160.6123 0 -164.2979 0 -164.2979 0 -168.0378 0 -164.2979 0 -168.0378 0 -164.2979 0 -156.9805 0 -153.4022 0 -156.9805 0 -153.4022 0 -156.9805 0 -153.4022 0 -156.9805 0 -153.4022 0 -156.9805 0 -156.9805 0 -153.4022 0 -153.4022 0 -160.6123 0 -156.9805 0 -153.4022 0 -153.4022 0 -156.9805 0 -156.9805 0 -156.9805 0 -156.9805 0 -153.4022 0 -156.9805 0 -156.9805 0 -156.9805 0 -153.4022 0 -153.4022 0 -153.4022 0 - -153.4022 0 -153.4022 0 -149.877 0 -149.877 0 -149.877 0 -156.9805 0 -153.4022 0 -153.4022 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -146.4046 0 -149.877 0 -146.4046 0 -142.9846 0 -139.6166 0 -146.4046 0 -133.0353 0 -129.8213 0 -123.5446 0 -120.4813 0 -123.5446 0 -103.1279 0 -120.4813 0 -123.5446 0 -114.5027 0 -126.6578 0 -111.5868 0 -139.6166 0 -126.6578 0 -111.5868 0 -108.7192 0 -105.8997 0 -97.72583 0 -114.5027 0 -117.4674 0 -120.4813 0 -142.9846 0 -114.5027 0 -136.3003 0 -142.9846 0 -149.877 0 -120.4813 0 -120.4813 0 -117.4674 0 -111.5868 0 -117.4674 0 -114.5027 0 -120.4813 0 -123.5446 0 -126.6578 0 -136.3003 0 -142.9846 0 -123.5446 0 -139.6166 0 -129.8213 0 -142.9846 0 -149.877 0 -153.4022 0 -149.877 0 -153.4022 0 -153.4022 0 -156.9805 0 -156.9805 0 -153.4022 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -149.877 0 -146.4046 0 -153.4022 0 -153.4022 0 -153.4022 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -142.9846 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -142.9846 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -136.3003 0 -139.6166 0 -139.6166 0 -139.6166 0 -136.3003 0 -136.3003 0 -123.5446 0 -139.6166 0 -136.3003 0 -133.0353 0 -139.6166 0 -139.6166 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -136.3003 0 -136.3003 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 - -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -142.9846 0 -139.6166 0 -139.6166 0 -139.6166 0 -133.0353 0 -129.8213 0 -120.4813 0 -123.5446 0 -136.3003 0 -126.6578 0 -129.8213 0 -129.8213 0 -126.6578 0 -133.0353 0 -133.0353 0 -133.0353 0 -136.3003 0 -136.3003 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -129.8213 0 -126.6578 0 -126.6578 0 -123.5446 0 -126.6578 0 -126.6578 0 -129.8213 0 -129.8213 0 -108.7192 0 -108.7192 0 -105.8997 0 -100.4034 0 -97.72583 0 -126.6578 0 -120.4813 0 -123.5446 0 -123.5446 0 -114.5027 0 -111.5868 0 -95.09482 0 -97.72583 0 -100.4034 0 -97.72583 0 -100.4034 0 -61.00001 0 -103.1279 0 -105.8997 0 -97.72583 0 -103.1279 0 -95.09482 0 -117.4674 0 -117.4674 0 -114.5027 0 -95.09482 0 -111.5868 0 -117.4674 0 -114.5027 0 -114.5027 0 -114.5027 0 -111.5868 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -111.5868 0 -111.5868 0 -108.7192 0 -108.7192 0 -108.7192 0 -108.7192 0 -111.5868 0 -108.7192 0 -103.1279 0 -105.8997 0 -103.1279 0 -114.5027 0 -114.5027 0 -111.5868 0 -114.5027 0 -120.4813 0 -117.4674 0 -120.4813 0 -120.4813 0 -123.5446 0 -129.8213 0 -129.8213 0 -136.3003 0 -136.3003 0 -142.9846 0 -139.6166 0 -142.9846 0 -133.0353 0 -136.3003 0 -133.0353 0 -136.3003 0 -129.8213 0 -133.0353 0 -136.3003 0 -133.0353 0 -136.3003 0 -133.0353 0 -136.3003 0 -136.3003 0 -133.0353 0 -139.6166 0 -139.6166 0 -136.3003 0 -139.6166 0 -142.9846 0 -149.877 0 -149.877 0 -146.4046 0 -156.9805 0 -156.9805 0 -156.9805 0 -160.6123 0 -156.9805 0 -164.2979 0 -160.6123 0 -164.2979 0 -149.877 0 -142.9846 0 -142.9846 0 -142.9846 0 -168.0378 0 -156.9805 0 -142.9846 0 -139.6166 0 -120.4813 0 -164.2979 0 -160.6123 0 -164.2979 0 -168.0378 0 -160.6123 0 -120.4813 0 -164.2979 0 -160.6123 0 -142.9846 0 -146.4046 0 -156.9805 0 -160.6123 0 -164.2979 0 -160.6123 0 -153.4022 0 -160.6123 0 -156.9805 0 -160.6123 0 -153.4022 0 -160.6123 0 -160.6123 0 -160.6123 0 -153.4022 0 -156.9805 0 -156.9805 0 -156.9805 0 -156.9805 0 -153.4022 0 -146.4046 0 -146.4046 0 -149.877 0 -136.3003 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -146.4046 0 -149.877 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -153.4022 0 -149.877 0 -153.4022 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -142.9846 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -142.9846 0 -142.9846 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -153.4022 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -133.0353 0 -136.3003 0 -139.6166 0 -142.9846 0 -142.9846 0 -146.4046 0 -142.9846 0 -146.4046 0 -142.9846 0 -146.4046 0 -142.9846 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -149.877 0 -146.4046 0 -142.9846 0 -142.9846 0 -146.4046 0 -146.4046 0 -139.6166 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -146.4046 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -139.6166 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -142.9846 0 -146.4046 0 -146.4046 0 -139.6166 0 -142.9846 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -142.9846 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -153.4022 0 -156.9805 0 -160.6123 0 -153.4022 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -146.4046 0 -146.4046 0 -142.9846 0 -146.4046 0 -149.877 0 -142.9846 0 -142.9846 0 -142.9846 0 -108.7192 0 -105.8997 0 -100.4034 0 -108.7192 0 -129.8213 0 -117.4674 0 -149.877 0 -146.4046 0 -149.877 0 -146.4046 0 -146.4046 0 -142.9846 0 -149.877 0 -146.4046 0 -153.4022 0 -149.877 0 -153.4022 0 -153.4022 0 -160.6123 0 -153.4022 0 -160.6123 0 -164.2979 0 -168.0378 0 -168.0378 0 -164.2979 0 -164.2979 0 -164.2979 0 -168.0378 0 -168.0378 0 -171.8321 0 -175.6814 0 -175.6814 0 -171.8321 0 -175.6814 0 -175.6814 0 -179.5859 0 -171.8321 0 -175.6814 0 -179.5859 0 -179.5859 0 -175.6814 0 -175.6814 0 -179.5859 0 -187.5622 0 -183.5461 0 -171.8321 0 -142.9846 0 -187.5622 0 -183.5461 0 -187.5622 0 -187.5622 0 -191.6347 0 -187.5622 0 -191.6347 0 -187.5622 0 -187.5622 0 -187.5622 0 -187.5622 0 -191.6347 0 -195.7638 0 -191.6347 0 -191.6347 0 -195.7638 0 -195.7638 0 -191.6347 0 -195.7638 0 -195.7638 0 -195.7638 0 -195.7638 0 -187.5622 0 -187.5622 0 -191.6347 0 -195.7638 0 -191.6347 0 -187.5622 0 -187.5622 0 -187.5622 0 -175.6814 0 -187.5622 0 -187.5622 0 -183.5461 0 -187.5622 0 -191.6347 0 -187.5622 0 -187.5622 0 -191.6347 0 -191.6347 0 -187.5622 0 -195.7638 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -195.7638 0 -164.2979 0 -136.3003 0 -142.9846 0 -136.3003 0 -153.4022 0 -156.9805 0 -153.4022 0 -156.9805 0 -168.0378 0 -207.9666 0 -207.9666 0 -207.9666 0 -212.0488 0 -207.9666 0 -212.0488 0 -220.362 0 -220.362 0 -224.5936 0 -224.5936 0 -224.5936 0 -220.362 0 -220.362 0 -220.362 0 -216.1805 0 -212.0488 0 -212.0488 0 -212.0488 0 -207.9666 0 -203.9338 0 -207.9666 0 -199.95 0 -199.95 0 -199.95 0 -203.9338 0 -195.7638 0 -199.95 0 -199.95 0 -191.6347 0 -191.6347 0 -191.6347 0 -187.5622 0 -187.5622 0 -187.5622 0 -191.6347 0 -187.5622 0 -187.5622 0 -187.5622 0 -187.5622 0 -191.6347 0 -187.5622 0 -183.5461 0 -179.5859 0 -175.6814 0 -179.5859 0 -171.8321 0 -175.6814 0 -175.6814 0 -175.6814 0 -171.8321 0 -179.5859 0 -179.5859 0 -179.5859 0 -183.5461 0 -183.5461 0 -183.5461 0 -183.5461 0 -179.5859 0 -179.5859 0 -171.8321 0 -175.6814 0 -175.6814 0 -168.0378 0 -168.0378 0 -164.2979 0 -160.6123 0 -164.2979 0 -164.2979 0 -168.0378 0 -160.6123 0 -168.0378 0 -168.0378 0 -156.9805 0 -164.2979 0 -168.0378 0 -164.2979 0 -168.0378 0 -164.2979 0 -164.2979 0 -164.2979 0 -160.6123 0 -160.6123 0 -164.2979 0 -160.6123 0 -160.6123 0 -160.6123 0 -156.9805 0 -156.9805 0 -156.9805 0 -160.6123 0 -156.9805 0 -156.9805 0 -156.9805 0 -153.4022 0 -153.4022 0 -160.6123 0 -153.4022 0 -156.9805 0 -153.4022 0 -153.4022 0 -153.4022 0 -153.4022 0 -156.9805 0 -156.9805 0 -153.4022 0 -153.4022 0 -153.4022 0 -156.9805 0 -153.4022 0 -156.9805 0 -156.9805 0 -156.9805 0 -156.9805 0 -156.9805 0 -146.4046 0 -153.4022 0 -153.4022 0 -153.4022 0 -149.877 0 -153.4022 0 -149.877 0 -146.4046 0 -146.4046 0 -153.4022 0 -153.4022 0 -153.4022 0 -149.877 0 -153.4022 0 -153.4022 0 -156.9805 0 -149.877 0 -164.2979 0 -160.6123 0 -156.9805 0 -168.0378 0 -168.0378 0 -156.9805 0 -164.2979 0 -160.6123 0 -136.3003 0 -164.2979 0 -156.9805 0 -160.6123 0 -168.0378 0 -168.0378 0 -168.0378 0 -171.8321 0 -164.2979 0 -168.0378 0 -164.2979 0 -164.2979 0 -160.6123 0 -160.6123 0 -153.4022 0 -153.4022 0 -153.4022 0 -153.4022 0 -153.4022 0 -146.4046 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -153.4022 0 -153.4022 0 -160.6123 0 -160.6123 0 -160.6123 0 -164.2979 0 -164.2979 0 -164.2979 0 -160.6123 0 -156.9805 0 -156.9805 0 -156.9805 0 -156.9805 0 -160.6123 0 -156.9805 0 -149.877 0 -142.9846 0 -139.6166 0 -139.6166 0 -139.6166 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -146.4046 0 -142.9846 0 -142.9846 0 -146.4046 0 -142.9846 0 -146.4046 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -105.8997 0 -108.7192 0 -105.8997 0 -97.72583 0 -92.51001 0 -92.51001 0 -95.09482 0 -100.4034 0 -105.8997 0 -129.8213 0 -126.6578 0 -129.8213 0 -114.5027 0 -103.1279 0 -117.4674 0 -126.6578 0 -111.5868 0 -114.5027 0 -126.6578 0 -126.6578 0 -136.3003 0 -139.6166 0 -139.6166 0 -139.6166 0 -111.5868 0 -142.9846 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -133.0353 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -139.6166 0 -139.6166 0 -142.9846 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -153.4022 0 -153.4022 0 -153.4022 0 -153.4022 0 -156.9805 0 -149.877 0 -153.4022 0 -153.4022 0 -149.877 0 -149.877 0 -146.4046 0 -100.4034 0 -108.7192 0 -120.4813 0 -153.4022 0 -153.4022 0 -146.4046 0 -146.4046 0 -149.877 0 -153.4022 0 -149.877 0 -149.877 0 -142.9846 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -142.9846 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -146.4046 0 -142.9846 0 -139.6166 0 -139.6166 0 -136.3003 0 -139.6166 0 -142.9846 0 -139.6166 0 -139.6166 0 -136.3003 0 -142.9846 0 -136.3003 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -139.6166 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -146.4046 0 -142.9846 0 -142.9846 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -142.9846 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -149.877 0 -146.4046 0 -139.6166 0 -146.4046 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -139.6166 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -139.6166 0 -136.3003 0 -146.4046 0 -153.4022 0 -164.2979 0 -160.6123 0 -160.6123 0 -168.0378 0 -171.8321 0 -164.2979 0 -160.6123 0 -160.6123 0 -142.9846 0 -160.6123 0 -146.4046 0 -183.5461 0 -164.2979 0 -212.0488 0 -203.9338 0 -216.1805 0 -183.5461 0 -191.6347 0 -199.95 0 -237.5909 0 -220.362 0 -246.5102 0 -269.7126 0 -340.0656 0 -409.9989 0 -481.5319 0 -594.7412 0 -706.9606 0 -857.213 0 -957.6023 0 -1095.03 0 -1334.185 0 -1601.936 0 -1926.913 0 -2262.049 0 -2717.626 0 -2997.606 0 -3236.164 0 -3455.915 0 -3553.32 0 -3720.056 0 -3822.773 0 -3822.773 0 -3754.071 0 -3822.773 0 -3686.266 0 -3520.634 0 -3455.915 0 -3205.618 0 -3056.01 0 -2911.52 0 -2663.989 0 -2611.123 0 -2507.673 0 -2333.818 0 -2262.049 0 -2168.857 0 -2123.319 0 -2056.314 0 -1926.913 0 -1885.12 0 -1842.981 0 -1774.005 0 -1693.291 0 -1640.719 0 -1538.519 0 -1488.879 0 -1428.186 0 -1345.727 0 -1266.168 0 -1211.098 0 -1168.086 0 -1125.996 0 -1074.726 0 -1024.949 0 -986.1326 0 -938.8578 0 -929.568 0 -902.0267 0 -874.9759 0 -848.4126 0 -813.7485 0 -805.2164 0 -788.312 0 -763.3536 0 -746.9789 0 -730.8145 0 -722.811 0 -699.1135 0 -683.5751 0 -675.8836 0 -660.6552 0 -653.1182 0 -638.1978 0 -623.4818 0 -616.2001 0 -594.7412 0 -594.7412 0 -580.6848 0 -573.7312 0 -566.8271 0 -559.9724 0 -553.1671 0 -539.7039 0 -539.7039 0 -533.0459 0 -533.0459 0 -526.4368 0 -519.8764 0 -513.3647 0 -513.3647 0 -506.9015 0 -506.9015 0 -500.4867 0 -494.1203 0 -487.802 0 -487.802 0 -487.802 0 -481.5319 0 -469.1354 0 -450.8984 0 -463.0088 0 -456.9299 0 -444.9144 0 -438.9776 0 -438.9776 0 -433.088 0 -427.2455 0 -427.2455 0 -421.4498 0 -415.701 0 -415.701 0 -404.3433 0 -398.7342 0 -393.1715 0 -393.1715 0 -387.6549 0 -387.6549 0 -387.6549 0 -387.6549 0 -382.1845 0 -382.1845 0 -376.76 0 -376.76 0 -371.3813 0 -371.3813 0 -366.0484 0 -366.0484 0 -360.7611 0 -360.7611 0 -355.5193 0 -350.3229 0 -345.1717 0 -345.1717 0 -340.0656 0 -335.0045 0 -335.0045 0 -329.9883 0 -325.0169 0 -329.9883 0 -329.9883 0 -289.2198 0 -274.5099 0 -294.2297 0 -242.0249 0 -274.5099 0 -284.2633 0 -304.4111 0 -314.8092 0 -314.8092 0 -309.5829 0 -309.5829 0 -304.4111 0 -309.5829 0 -309.5829 0 -304.4111 0 -299.2934 0 -294.2297 0 -289.2198 0 -294.2297 0 -284.2633 0 -284.2633 0 -289.2198 0 -284.2633 0 -284.2633 0 -284.2633 0 -279.3601 0 -274.5099 0 -274.5099 0 -269.7126 0 -269.7126 0 -269.7126 0 -269.7126 0 -274.5099 0 -269.7126 0 -269.7126 0 -269.7126 0 -269.7126 0 -264.9679 0 -264.9679 0 -260.2755 0 -260.2755 0 -255.6352 0 -260.2755 0 -260.2755 0 -255.6352 0 -251.0469 0 -251.0469 0 -251.0469 0 -251.0469 0 -246.5102 0 -242.0249 0 -246.5102 0 -246.5102 0 -242.0249 0 -242.0249 0 -242.0249 0 -242.0249 0 -246.5102 0 -246.5102 0 -246.5102 0 -242.0249 0 -242.0249 0 -242.0249 0 -242.0249 0 -242.0249 0 -237.5909 0 -233.2078 0 -233.2078 0 -233.2078 0 -237.5909 0 -233.2078 0 -233.2078 0 -233.2078 0 -228.8754 0 -228.8754 0 -216.1805 0 -220.362 0 -212.0488 0 -207.9666 0 -207.9666 0 -224.5936 0 -220.362 0 -220.362 0 -224.5936 0 -199.95 0 -212.0488 0 -224.5936 0 -224.5936 0 -233.2078 0 -237.5909 0 -233.2078 0 -237.5909 0 -228.8754 0 -237.5909 0 -242.0249 0 -242.0249 0 -242.0249 0 -233.2078 0 -191.6347 0 -199.95 0 -207.9666 0 -237.5909 0 -246.5102 0 -246.5102 0 -251.0469 0 -251.0469 0 -255.6352 0 -255.6352 0 -251.0469 0 -251.0469 0 -255.6352 0 -260.2755 0 -255.6352 0 -264.9679 0 -264.9679 0 -264.9679 0 -269.7126 0 -274.5099 0 -279.3601 0 -289.2198 0 -294.2297 0 -304.4111 0 -314.8092 0 -329.9883 0 -335.0045 0 -345.1717 0 -355.5193 0 -366.0484 0 -371.3813 0 -382.1845 0 -398.7342 0 -409.9989 0 -421.4498 0 -433.088 0 -450.8984 0 -475.3097 0 -487.802 0 -513.3647 0 -526.4368 0 -546.411 0 -566.8271 0 -580.6848 0 -594.7412 0 -608.9971 0 -601.8441 0 -601.8441 0 -594.7412 0 -587.6881 0 -573.7312 0 -546.411 0 -553.1671 0 -539.7039 0 -533.0459 0 -519.8764 0 -506.9015 0 -494.1203 0 -487.802 0 -475.3097 0 -469.1354 0 -463.0088 0 -450.8984 0 -444.9144 0 -433.088 0 -427.2455 0 -415.701 0 -409.9989 0 -398.7342 0 -393.1715 0 -398.7342 0 -387.6549 0 -382.1845 0 -376.76 0 -376.76 0 -371.3813 0 -371.3813 0 -366.0484 0 -360.7611 0 -360.7611 0 -355.5193 0 -355.5193 0 -350.3229 0 -345.1717 0 -345.1717 0 -345.1717 0 -340.0656 0 -340.0656 0 -335.0045 0 -329.9883 0 -329.9883 0 -325.0169 0 -329.9883 0 -325.0169 0 -255.6352 0 -264.9679 0 -251.0469 0 -255.6352 0 -255.6352 0 -284.2633 0 -233.2078 0 -264.9679 0 -269.7126 0 -335.0045 0 -335.0045 0 -314.8092 0 -299.2934 0 -309.5829 0 -320.09 0 -309.5829 0 -309.5829 0 -294.2297 0 -314.8092 0 -314.8092 0 -320.09 0 -314.8092 0 -309.5829 0 -246.5102 0 -255.6352 0 -260.2755 0 -284.2633 0 -260.2755 0 -228.8754 0 -251.0469 0 -246.5102 0 -255.6352 0 -242.0249 0 -294.2297 0 -294.2297 0 -304.4111 0 -314.8092 0 -304.4111 0 -294.2297 0 -304.4111 0 -299.2934 0 -309.5829 0 -304.4111 0 -299.2934 0 -309.5829 0 -309.5829 0 -304.4111 0 -274.5099 0 -251.0469 0 -260.2755 0 -299.2934 0 -325.0169 0 -329.9883 0 -340.0656 0 -335.0045 0 -340.0656 0 -345.1717 0 -340.0656 0 -340.0656 0 -335.0045 0 -335.0045 0 -340.0656 0 -329.9883 0 -335.0045 0 -335.0045 0 -309.5829 0 -314.8092 0 -314.8092 0 -314.8092 0 -309.5829 0 -299.2934 0 -284.2633 0 -284.2633 0 -251.0469 0 -284.2633 0 -269.7126 0 -274.5099 0 -255.6352 0 -269.7126 0 -289.2198 0 -284.2633 0 -294.2297 0 -294.2297 0 -289.2198 0 -289.2198 0 -284.2633 0 -284.2633 0 -279.3601 0 -274.5099 0 -274.5099 0 -279.3601 0 -269.7126 0 -264.9679 0 -269.7126 0 -269.7126 0 -264.9679 0 -260.2755 0 -264.9679 0 -260.2755 0 -260.2755 0 -260.2755 0 -260.2755 0 -260.2755 0 -260.2755 0 -264.9679 0 -260.2755 0 -260.2755 0 -255.6352 0 -264.9679 0 -260.2755 0 -255.6352 0 -251.0469 0 -255.6352 0 -251.0469 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -242.0249 0 -246.5102 0 -242.0249 0 -242.0249 0 -233.2078 0 -233.2078 0 -237.5909 0 -216.1805 0 -237.5909 0 -237.5909 0 -233.2078 0 -237.5909 0 -233.2078 0 -233.2078 0 -233.2078 0 -233.2078 0 -228.8754 0 -224.5936 0 -224.5936 0 -228.8754 0 -224.5936 0 -228.8754 0 -228.8754 0 -220.362 0 -224.5936 0 -228.8754 0 -220.362 0 -220.362 0 -220.362 0 -220.362 0 -220.362 0 -207.9666 0 -216.1805 0 -224.5936 0 -224.5936 0 -220.362 0 -203.9338 0 -203.9338 0 -216.1805 0 -216.1805 0 -216.1805 0 -216.1805 0 -207.9666 0 -220.362 0 -207.9666 0 -212.0488 0 -179.5859 0 -179.5859 0 -149.877 0 -153.4022 0 -168.0378 0 - -203.9338 0 -207.9666 0 -203.9338 0 -195.7638 0 -199.95 0 -195.7638 0 -191.6347 0 -156.9805 0 -179.5859 0 -146.4046 0 -175.6814 0 -191.6347 0 -183.5461 0 -203.9338 0 -203.9338 0 -207.9666 0 -207.9666 0 -203.9338 0 -199.95 0 -199.95 0 -199.95 0 -199.95 0 -203.9338 0 -203.9338 0 -203.9338 0 -203.9338 0 -203.9338 0 -199.95 0 -160.6123 0 -183.5461 0 -191.6347 0 -199.95 0 -203.9338 0 -199.95 0 -203.9338 0 -207.9666 0 -220.362 0 -220.362 0 -216.1805 0 -216.1805 0 -216.1805 0 -216.1805 0 -216.1805 0 -216.1805 0 -212.0488 0 -212.0488 0 -207.9666 0 -207.9666 0 -203.9338 0 -207.9666 0 -207.9666 0 -203.9338 0 -207.9666 0 -203.9338 0 -203.9338 0 - -149.877 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -146.4046 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -136.3003 0 -139.6166 0 -139.6166 0 -139.6166 0 -139.6166 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -133.0353 0 -129.8213 0 -129.8213 0 -129.8213 0 -126.6578 0 -123.5446 0 -123.5446 0 -123.5446 0 -117.4674 0 -120.4813 0 -117.4674 0 -117.4674 0 -120.4813 0 -105.8997 0 -117.4674 0 -114.5027 0 -117.4674 0 -117.4674 0 -117.4674 0 -114.5027 0 -111.5868 0 -108.7192 0 -114.5027 0 -114.5027 0 -114.5027 0 -114.5027 0 -120.4813 0 -117.4674 0 -114.5027 0 -111.5868 0 -114.5027 0 -108.7192 0 -108.7192 0 -114.5027 0 -117.4674 0 -117.4674 0 -111.5868 0 -117.4674 0 -117.4674 0 -120.4813 0 -114.5027 0 -120.4813 0 -123.5446 0 -120.4813 0 -117.4674 0 -117.4674 0 -120.4813 0 -117.4674 0 -123.5446 0 -126.6578 0 -120.4813 0 -114.5027 0 -108.7192 0 -95.09482 0 -92.51001 0 -75.19812 0 -117.4674 0 -60.37554 0 -95.09482 0 -75.19812 0 -95.09482 0 -120.4813 0 -114.5027 0 -97.72583 0 -111.5868 0 -117.4674 0 -123.5446 0 -120.4813 0 -120.4813 0 -117.4674 0 -117.4674 0 -114.5027 0 -97.72583 0 -126.6578 0 -95.09482 0 -123.5446 0 -117.4674 0 -92.51001 0 -61.00001 0 -59.75121 0 -95.09482 0 -95.09482 0 -117.4674 0 -108.7192 0 -100.4034 0 -97.72583 0 -120.4813 0 -123.5446 0 -120.4813 0 -111.5868 0 -117.4674 0 -126.6578 0 -123.5446 0 -100.4034 0 -95.09482 0 -123.5446 0 -129.8213 0 -126.6578 0 -123.5446 0 -117.4674 0 -126.6578 0 -126.6578 0 -117.4674 0 -126.6578 0 -108.7192 0 -120.4813 0 -120.4813 0 -126.6578 0 -120.4813 0 -123.5446 0 -136.3003 0 -133.0353 0 -129.8213 0 -129.8213 0 -129.8213 0 -123.5446 0 -123.5446 0 -126.6578 0 -133.0353 0 -129.8213 0 -126.6578 0 -126.6578 0 -129.8213 0 -133.0353 0 -133.0353 0 -133.0353 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -136.3003 0 -139.6166 0 -139.6166 0 -142.9846 0 -142.9846 0 -146.4046 0 -149.877 0 -153.4022 0 -160.6123 0 -175.6814 0 -183.5461 0 -203.9338 0 -228.8754 0 -246.5102 0 -264.9679 0 -279.3601 0 -289.2198 0 -294.2297 0 -289.2198 0 -284.2633 0 -279.3601 0 -289.2198 0 -309.5829 0 -376.76 0 -526.4368 0 -746.9789 0 -938.8578 0 -1095.03 0 -1168.086 0 -1277.358 0 -1334.185 0 -1322.702 0 -1357.329 0 -1357.329 0 -1345.727 0 -1299.912 0 -1288.605 0 -1255.038 0 -1221.995 0 -1211.098 0 -1178.752 0 -1136.433 0 -1084.85 0 -1095.03 0 -1084.85 0 -995.7533 0 -1024.949 0 -967.0572 0 -995.7533 0 -957.6023 0 -948.2026 0 -1024.949 0 -1005.43 0 -967.0572 0 -948.2026 0 -874.9759 0 -839.6661 0 -805.2164 0 -771.6201 0 -738.8705 0 -668.2436 0 -683.5751 0 -668.2436 0 -638.1978 0 -519.8764 0 -526.4368 0 -500.4867 0 -481.5319 0 -463.0088 0 -506.9015 0 -404.3433 0 -444.9144 0 -415.701 0 -409.9989 0 -398.7342 0 -433.088 0 -450.8984 0 -444.9144 0 -450.8984 0 -433.088 0 -421.4498 0 -421.4498 0 -415.701 0 -409.9989 0 -409.9989 0 -398.7342 0 -393.1715 0 -382.1845 0 -376.76 0 -371.3813 0 -360.7611 0 -360.7611 0 -355.5193 0 -345.1717 0 -345.1717 0 -345.1717 0 -340.0656 0 -335.0045 0 -329.9883 0 -325.0169 0 -320.09 0 -320.09 0 -314.8092 0 -309.5829 0 -304.4111 0 -304.4111 0 -304.4111 0 -304.4111 0 -309.5829 0 -314.8092 0 -320.09 0 -329.9883 0 -329.9883 0 -329.9883 0 -325.0169 0 -325.0169 0 -325.0169 0 -320.09 0 -325.0169 0 -320.09 0 -320.09 0 -320.09 0 -314.8092 0 -320.09 0 -320.09 0 -320.09 0 -320.09 0 -320.09 0 -314.8092 0 -309.5829 0 -304.4111 0 -299.2934 0 -294.2297 0 -289.2198 0 -284.2633 0 -284.2633 0 -284.2633 0 -289.2198 0 -279.3601 0 -284.2633 0 -284.2633 0 -284.2633 0 -289.2198 0 -294.2297 0 -289.2198 0 -294.2297 0 -289.2198 0 -299.2934 0 -304.4111 0 -304.4111 0 -294.2297 0 -294.2297 0 -289.2198 0 -289.2198 0 -294.2297 0 -289.2198 0 -284.2633 0 -284.2633 0 -279.3601 0 -274.5099 0 -274.5099 0 -269.7126 0 -260.2755 0 -260.2755 0 -260.2755 0 -255.6352 0 -255.6352 0 -255.6352 0 -251.0469 0 -251.0469 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -246.5102 0 -251.0469 0 -246.5102 0 -246.5102 0 -242.0249 0 -242.0249 0 -237.5909 0 -242.0249 0 -237.5909 0 -237.5909 0 -233.2078 0 -228.8754 0 -224.5936 0 -224.5936 0 -224.5936 0 -224.5936 0 -224.5936 0 -195.7638 0 -212.0488 0 -164.2979 0 -195.7638 0 -207.9666 0 -212.0488 0 -212.0488 0 -216.1805 0 -207.9666 0 -207.9666 0 -203.9338 0 -199.95 0 -199.95 0 -195.7638 0 -195.7638 0 -195.7638 0 -195.7638 0 -199.95 0 -187.5622 0 -191.6347 0 -187.5622 0 -187.5622 0 -179.5859 0 -179.5859 0 -175.6814 0 -175.6814 0 -175.6814 0 -175.6814 0 -175.6814 0 -171.8321 0 -171.8321 0 -171.8321 0 -175.6814 0 -171.8321 0 -156.9805 0 -164.2979 0 -164.2979 0 -168.0378 0 -156.9805 0 -156.9805 0 -160.6123 0 -160.6123 0 -156.9805 0 -156.9805 0 -153.4022 0 -156.9805 0 -149.877 0 -120.4813 0 -111.5868 0 -133.0353 0 -139.6166 0 -126.6578 0 -139.6166 0 -136.3003 0 -136.3003 0 -114.5027 0 -136.3003 0 -129.8213 0 -129.8213 0 -123.5446 0 -142.9846 0 -149.877 0 -146.4046 0 -146.4046 0 -149.877 0 -149.877 0 -146.4046 0 -142.9846 0 -142.9846 0 -139.6166 0 -142.9846 0 -146.4046 0 -146.4046 0 -142.9846 0 -146.4046 0 -149.877 0 -149.877 0 -149.877 0 -146.4046 0 -149.877 0 -146.4046 0 -153.4022 0 -156.9805 0 -220.362 0 -284.2633 0 -274.5099 0 -246.5102 0 -242.0249 0 -260.2755 0 -279.3601 0 -309.5829 0 -309.5829 0 -304.4111 0 -299.2934 0 -289.2198 0 -294.2297 0 -309.5829 0 -320.09 0 -320.09 0 -329.9883 0 -325.0169 0 -329.9883 0 -340.0656 0 -350.3229 0 -360.7611 0 -376.76 0 -409.9989 0 -463.0088 0 -559.9724 0 -722.811 0 -883.9385 0 -1095.03 0 -1404.329 0 -1829.061 0 -2482.281 0 -3026.706 0 -3619.351 0 -4070.41 0 -4444.041 0 -4600.218 0 -4719.93 0 -4719.93 0 -4924.435 0 -4560.807 0 -4444.041 0 -4143.245 0 -3998.507 0 -3652.698 0 -3455.915 0 -3175.282 0 -2940.014 0 -2690.711 0 -2457.076 0 -2215.098 0 -2012.503 0 -1969.371 0 -1856.965 0 -1774.005 0 -1680.056 0 -1601.936 0 -1538.519 0 -1513.578 0 -1464.422 0 -1440.205 0 -1368.99 0 -1357.329 0 -1311.277 0 -1288.605 0 -1255.038 0 -1221.995 0 -1168.086 0 -1125.996 0 -1095.03 0 -1084.85 0 -1034.792 0 -1005.43 0 -957.6023 0 -929.568 0 -902.0267 0 -874.9759 0 -848.4126 0 -822.3341 0 -813.7485 0 -830.9733 0 -839.6661 0 -830.9733 0 -830.9733 0 -830.9733 0 -830.9733 0 -857.213 0 -866.0674 0 -874.9759 0 -892.9554 0 -929.568 0 -967.0572 0 -1054.647 0 -1105.295 0 -1255.038 0 -1380.71 0 -1551.081 0 -1774.005 0 -1990.853 0 -2432.056 0 -2883.227 0 -3175.282 0 -3423.88 0 -3488.166 0 -3652.698 0 -3652.698 0 -3619.351 0 -3488.166 0 -3488.166 0 -3266.919 0 -3115.233 0 -3026.706 0 -2883.227 0 -2744.736 0 -2637.46 0 -2432.056 0 -2309.715 0 -2191.89 0 -2012.503 0 -1948.058 0 -1885.12 0 -1815.203 0 -1733.369 0 -1706.588 0 -1653.77 0 -1601.936 0 -1576.386 0 -1551.081 0 -1476.621 0 -1452.283 0 -1440.205 0 -1428.186 0 -1392.49 0 -1345.727 0 -1299.912 0 -1255.038 0 -1232.951 0 -1200.258 0 -1157.477 0 -1105.295 0 -1084.85 0 -1095.03 0 -1034.792 0 -1005.43 0 -986.1326 0 -967.0572 0 -957.6023 0 -938.8578 0 -920.3329 0 -920.3329 0 -957.6023 0 -1084.85 0 - - \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/01122500.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/01122500.xml deleted file mode 100755 index 1e3649e..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/01122500.xml +++ /dev/null @@ -1 +0,0 @@ -USGS.01122500Timeseries collected at SHETUCKET RIVER NEAR WILLIMANTIC, CT2024-06-12T18:53:25.608-04:002024-06-12T13:00:00-04:002024-06-12T18:30:00-04:002024-06-12T18:30:00-04:000000041.70037644 -72.1820223P2024-06-12T13:00:00-04:003182024-06-12T13:15:00-04:003182024-06-12T13:30:00-04:003182024-06-12T13:45:00-04:003182024-06-12T14:00:00-04:003182024-06-12T14:15:00-04:003182024-06-12T14:30:00-04:003182024-06-12T14:45:00-04:003182024-06-12T15:00:00-04:003182024-06-12T15:15:00-04:003182024-06-12T15:30:00-04:003182024-06-12T15:45:00-04:003182024-06-12T16:00:00-04:003182024-06-12T16:15:00-04:003182024-06-12T16:30:00-04:003182024-06-12T16:45:00-04:003182024-06-12T17:00:00-04:003222024-06-12T17:15:00-04:003222024-06-12T17:30:00-04:003222024-06-12T17:45:00-04:003222024-06-12T18:00:00-04:003222024-06-12T18:15:00-04:003222024-06-12T18:30:00-04:00322 \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/0208111310.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/0208111310.xml deleted file mode 100755 index 868f721..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/0208111310.xml +++ /dev/null @@ -1 +0,0 @@ -USGS.0208111310Timeseries collected at CASHIE RIVER AT SR1257 NEAR WINDSOR, NC2024-06-14T14:30:56.186-04:002024-06-14T08:45:00-04:002024-06-14T14:15:00-04:002024-06-14T14:15:00-04:000000036.04777778 -76.9841667P2024-06-14T08:45:00-04:000.642024-06-14T09:00:00-04:000.642024-06-14T09:15:00-04:000.642024-06-14T09:30:00-04:000.642024-06-14T09:45:00-04:000.642024-06-14T10:00:00-04:000.642024-06-14T10:15:00-04:000.642024-06-14T10:30:00-04:000.642024-06-14T10:45:00-04:000.642024-06-14T11:00:00-04:000.642024-06-14T11:15:00-04:000.642024-06-14T11:30:00-04:000.642024-06-14T11:45:00-04:000.642024-06-14T12:00:00-04:000.642024-06-14T12:15:00-04:000.642024-06-14T12:30:00-04:000.642024-06-14T12:45:00-04:000.642024-06-14T13:00:00-04:000.642024-06-14T13:15:00-04:000.642024-06-14T13:30:00-04:000.642024-06-14T13:45:00-04:000.642024-06-14T14:00:00-04:000.642024-06-14T14:15:00-04:000.64 \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02186645.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02186645.xml deleted file mode 100755 index 0cc7a3e..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02186645.xml +++ /dev/null @@ -1 +0,0 @@ -USGS.02186645Timeseries collected at CONEROSS CK NR SENECA, SC2024-06-13T15:35:04.744-04:002024-06-13T09:45:00-04:002024-06-13T15:15:00-04:002024-06-13T15:15:00-04:000000034.64926575 -82.9915382P2024-06-13T09:45:00-04:0055.92024-06-13T10:00:00-04:0055.92024-06-13T10:15:00-04:0056.92024-06-13T10:30:00-04:0055.92024-06-13T10:45:00-04:0056.92024-06-13T11:00:00-04:0056.92024-06-13T11:15:00-04:0056.92024-06-13T11:30:00-04:0056.92024-06-13T11:45:00-04:0056.92024-06-13T12:00:00-04:0057.92024-06-13T12:15:00-04:0056.92024-06-13T12:30:00-04:0056.92024-06-13T12:45:00-04:0056.92024-06-13T13:00:00-04:0057.92024-06-13T13:15:00-04:0056.92024-06-13T13:30:00-04:0056.92024-06-13T13:45:00-04:0056.92024-06-13T14:00:00-04:0055.92024-06-13T14:15:00-04:0056.92024-06-13T14:30:00-04:0055.92024-06-13T14:45:00-04:0056.92024-06-13T15:00:00-04:0055.92024-06-13T15:15:00-04:0055.9 \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02289060.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02289060.xml deleted file mode 100755 index f79def8..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/02289060.xml +++ /dev/null @@ -1 +0,0 @@ -USGS.02289060Timeseries collected at TAMIAMI CANAL OUTLETS L-30 TO L-67A NR MIAMI, FL2024-06-12T20:30:11.315-04:002024-06-12T14:45:00-04:002024-06-12T19:45:00-04:002024-06-12T19:45:00-04:000000025.76114167 -80.5617056P2024-06-12T14:45:00-04:00Rat2024-06-12T15:00:00-04:00Rat2024-06-12T15:15:00-04:00Rat2024-06-12T15:30:00-04:00Rat2024-06-12T15:45:00-04:00Rat2024-06-12T16:00:00-04:00Rat2024-06-12T16:15:00-04:00Rat2024-06-12T16:30:00-04:00Rat2024-06-12T16:45:00-04:00Rat2024-06-12T17:00:00-04:00Rat2024-06-12T17:15:00-04:00Rat2024-06-12T17:30:00-04:00Rat2024-06-12T17:45:00-04:00Rat2024-06-12T18:00:00-04:00Rat2024-06-12T18:15:00-04:00Rat2024-06-12T18:30:00-04:00Rat2024-06-12T18:45:00-04:00Rat2024-06-12T19:00:00-04:00Rat2024-06-12T19:15:00-04:00Rat2024-06-12T19:30:00-04:00Rat2024-06-12T19:45:00-04:00Rat \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/07027005.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/07027005.xml deleted file mode 100755 index 74ac77f..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/07027005.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/08329918.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/08329918.xml deleted file mode 100755 index 480442f..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/08329918.xml +++ /dev/null @@ -1 +0,0 @@ -USGS.08329918Timeseries collected at RIO GRANDE AT ALAMEDA BRIDGE AT ALAMEDA, NM2024-06-12T16:55:32.485-04:002024-06-12T09:00:00-06:002024-06-12T14:30:00-06:002024-06-12T14:30:00-06:000000035.1977222 -106.6427778P2024-06-12T09:00:00-06:001470e2024-06-12T09:15:00-06:001470e2024-06-12T09:30:00-06:001450e2024-06-12T09:45:00-06:001450e2024-06-12T10:00:00-06:001470e2024-06-12T10:15:00-06:001470e2024-06-12T10:30:00-06:001470e2024-06-12T10:45:00-06:001470e2024-06-12T11:00:00-06:001470e2024-06-12T11:15:00-06:001470e2024-06-12T11:30:00-06:001450e2024-06-12T11:45:00-06:001450e2024-06-12T12:00:00-06:001450e2024-06-12T12:15:00-06:001470e2024-06-12T12:30:00-06:001450e2024-06-12T12:45:00-06:001470e2024-06-12T13:00:00-06:001470e2024-06-12T13:15:00-06:001470e2024-06-12T13:30:00-06:001450e2024-06-12T13:45:00-06:001450e2024-06-12T14:00:00-06:001430e2024-06-12T14:15:00-06:001450e2024-06-12T14:30:00-06:001430e \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/09423000.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/09423000.xml deleted file mode 100755 index aca96e5..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/09423000.xml +++ /dev/null @@ -1 +0,0 @@ -USGS.09423000Timeseries collected at COLORADO RIVER BELOW DAVIS DAM, AZ-NV2024-06-12T18:59:51.605-04:002024-06-12T10:00:00-07:002024-06-12T15:30:00-07:002024-06-12T15:30:00-07:000000035.19166556 -114.5721876P2024-06-12T10:00:00-07:00Dis2024-06-12T10:15:00-07:00Dis2024-06-12T10:30:00-07:00Dis2024-06-12T10:45:00-07:00Dis2024-06-12T11:00:00-07:00Dis2024-06-12T11:15:00-07:00Dis2024-06-12T11:30:00-07:00Dis2024-06-12T11:45:00-07:00Dis2024-06-12T12:00:00-07:00Dis2024-06-12T12:15:00-07:00Dis2024-06-12T12:30:00-07:00Dis2024-06-12T12:45:00-07:00Dis2024-06-12T13:00:00-07:00Dis2024-06-12T13:15:00-07:00Dis2024-06-12T13:30:00-07:00Dis2024-06-12T13:45:00-07:00Dis2024-06-12T14:00:00-07:00Dis2024-06-12T14:15:00-07:00Dis2024-06-12T14:30:00-07:00Dis2024-06-12T14:45:00-07:00Dis2024-06-12T15:00:00-07:00Dis2024-06-12T15:15:00-07:00Dis2024-06-12T15:30:00-07:00Dis \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/16296500.xml b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/16296500.xml deleted file mode 100755 index 99d3fe6..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/XML/16296500.xml +++ /dev/null @@ -1 +0,0 @@ -USGS.16296500Timeseries collected at Kahana Str at alt 30 ft nr Kahana, Oahu, HI2024-06-12T16:58:53.968-04:002024-06-12T05:00:00-10:002024-06-12T10:45:00-10:002024-06-12T10:45:00-10:000000021.5406111 -157.8825556P2024-06-12T05:00:00-10:0021.5e2024-06-12T05:05:00-10:0021.5e2024-06-12T05:10:00-10:0021.5e2024-06-12T05:15:00-10:0021.7e2024-06-12T05:20:00-10:0021.7e2024-06-12T05:25:00-10:0021.9e2024-06-12T05:30:00-10:0021.9e2024-06-12T05:35:00-10:0021.9e2024-06-12T05:40:00-10:0021.9e2024-06-12T05:45:00-10:0022.1e2024-06-12T05:50:00-10:0022.1e2024-06-12T05:55:00-10:0022.1e2024-06-12T06:00:00-10:0022.3e2024-06-12T06:05:00-10:0022.1e2024-06-12T06:10:00-10:0022.3e2024-06-12T06:15:00-10:0022.3e2024-06-12T06:20:00-10:0022.3e2024-06-12T06:25:00-10:0022.3e2024-06-12T06:30:00-10:0022.3e2024-06-12T06:35:00-10:0022.3e2024-06-12T06:40:00-10:0022.3e2024-06-12T06:45:00-10:0022.3e2024-06-12T06:50:00-10:0022.5e2024-06-12T06:55:00-10:0022.3e2024-06-12T07:00:00-10:0022.5e2024-06-12T07:05:00-10:0022.3e2024-06-12T07:10:00-10:0022.3e2024-06-12T07:15:00-10:0022.3e2024-06-12T07:20:00-10:0022.3e2024-06-12T07:25:00-10:0022.3e2024-06-12T07:30:00-10:0022.3e2024-06-12T07:35:00-10:0022.3e2024-06-12T07:40:00-10:0022.3e2024-06-12T07:45:00-10:0022.1e2024-06-12T07:50:00-10:0022.1e2024-06-12T07:55:00-10:0022.1e2024-06-12T08:00:00-10:0022.1e2024-06-12T08:05:00-10:0022.1e2024-06-12T08:10:00-10:0022.1e2024-06-12T08:15:00-10:0022.1e2024-06-12T08:20:00-10:0022.1e2024-06-12T08:25:00-10:0021.9e2024-06-12T08:30:00-10:0021.9e2024-06-12T08:35:00-10:0021.9e2024-06-12T08:40:00-10:0021.9e2024-06-12T08:45:00-10:0021.9e2024-06-12T08:50:00-10:0021.7e2024-06-12T08:55:00-10:0021.7e2024-06-12T09:00:00-10:0021.7e2024-06-12T09:05:00-10:0021.7e2024-06-12T09:10:00-10:0021.7e2024-06-12T09:15:00-10:0021.5e2024-06-12T09:20:00-10:0021.5e2024-06-12T09:25:00-10:0021.5e2024-06-12T09:30:00-10:0021.5e2024-06-12T09:35:00-10:0021.5e2024-06-12T09:40:00-10:0021.5e2024-06-12T09:45:00-10:0021.5e2024-06-12T09:50:00-10:0021.3e2024-06-12T09:55:00-10:0021.3e2024-06-12T10:00:00-10:0021.3e2024-06-12T10:05:00-10:0021.3e2024-06-12T10:10:00-10:0021.3e2024-06-12T10:15:00-10:0021.3e2024-06-12T10:20:00-10:0021.3e2024-06-12T10:25:00-10:0021.3e2024-06-12T10:30:00-10:0021.3e2024-06-12T10:35:00-10:0021.3e2024-06-12T10:40:00-10:0021.3e2024-06-12T10:45:00-10:0021.1e \ No newline at end of file diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/diffDischargeQuality.sh b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/diffDischargeQuality.sh deleted file mode 100755 index 89008bd..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/test_data/diffDischargeQuality.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -module load nco -module load cdo -fullO=$1 -splitO=$2 -rm -f diff.txt $fullO.txt $splitO.txt - -#ncdump -b f $fullO > $fullO.txt -#ncdump -b f $splitO > $splitO.txt - -ncdump -v discharge,discharge_quality -p 4 $fullO > $fullO.txt -ncdump -v discharge,discharge_quality -p 4 $splitO > $splitO.txt - -diff $fullO.txt $splitO.txt > diff.txt -filesize=$(stat -c%s diff.txt) -if [[ $filesize -ne 0 ]]; then - echo "Diff found" - more diff.txt -else - echo "Diff not found." -fi diff --git a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/time_slice_job_cray.bsub b/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/time_slice_job_cray.bsub deleted file mode 100755 index ec1659d..0000000 --- a/data_assimilation_engine/Streamflow_Scripts/usgs_download/analysis/time_slice_job_cray.bsub +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -############################################################################### -# File name: timeslice_job_cray.bash # -# # -# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # -# # -# Initial version date: # -# # -# Last modification date: 7/12/2017 # -# # -# Description: Submit the USGS time slice job to the WCOSS Cray machines # -# # -############################################################################### - -#BSUB -J time_slice_for_da # Job name -#BSUB -o time_slice_for_da.out # output filename -#BSUB -e time_slice_for_da.err # error filename -#BSUB -L /bin/sh # shell script -#BSUB -q "dev_shared" # queue -#BSUB -W 00:30 # wallclock time - timing require to complete run -#BSUB -P "OHD-T2O" # Project name -#BSUB -R 'span[ptile=10]' -#BSUB -M 2048 where ## is memory in MB - -source $HOME/.bashrc - -find /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices -mtime +5 -exec rm {} \; - -/gpfs/hps/nwc/save/Zhengtao.Cui/chps-wrf-hydro/usgs_download/analysis/make_time_slice_from_usgs_waterml.py -i /gpfs/hps/nwc/noscrub/Zhengtao.Cui/usgs_flow -o /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices > /gpfs/hps/nwc/noscrub/Zhengtao.Cui/time_slices.log diff --git a/data_assimilation_engine/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py b/data_assimilation_engine/rfc_ingestion/EmptyDirOrFileException.py similarity index 93% rename from data_assimilation_engine/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py rename to data_assimilation_engine/rfc_ingestion/EmptyDirOrFileException.py index 82f182b..dbc5ea2 100644 --- a/data_assimilation_engine/Streamflow_Scripts/canada_download/EmptyDirOrFileException.py +++ b/data_assimilation_engine/rfc_ingestion/EmptyDirOrFileException.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python class EmptyDirOrFileException( Exception ): """Exception raised for empty input files or directories. Attributes: diff --git a/data_assimilation_engine/rfc_ingestion/PI_XML.py b/data_assimilation_engine/rfc_ingestion/PI_XML.py new file mode 100644 index 0000000..b5ab05d --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/PI_XML.py @@ -0,0 +1,620 @@ +############################################################################### +# Module name: PI_XML +# # +# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # +# # +# Initial version date: # +# # +# Last modification date: 07/02/2019 # +# # +# Description: manage data in a RFC FEWS PI xml file # +# # +############################################################################### + +import os, sys, time, csv, re +import logging +from string import * +from collections import OrderedDict +from datetime import datetime, timedelta +import dateutil.parser +import math +import pytz +#import iso8601 +import xml.etree.ElementTree as etree +import copy +from RFC_Forecast import RFC_Forecast +from RFC_Sites import RFC_Sites +class PI_XML: + """ + Store one RFC forecast data + """ + + @property + def timeZone(self): + return self._timeZone + + @timeZone.setter + def timeZone(self, t): + self._timeZone = t + + @property + def series(self): + return self._series + + @series.setter + def series(self, s): + self._series = s + + @property + def rfcsites(self): + return self._rfcsites + + @rfcsites.setter + def rfcsites(self, r): + self._rfcsites = r + + def __init__(self, pixmlfilename, sites ): + """ + Initialize the RFC_Forecast object with a given + filename + """ + self.source = pixmlfilename + self.series = [] + self.rfcsites = sites + + self.loadPIxml( pixmlfilename ) + + def loadPIxml( self, pixmlfilename ): + try: + fstwml = etree.parse( pixmlfilename ) + root= fstwml.getroot() + self.timeZone = root.find( '{http://www.wldelft.nl/fews/PI}timeZone' ).text + for series in \ + root.iter('{http://www.wldelft.nl/fews/PI}series'): + self.series.append( series ) +# for series in self.series: +# print(series.tag, series.attrib ) +# print ( 'timeZone = ', self.timeZone ) + + except Exception as e: + raise RuntimeError( "WARNING: parsing PI XML error: " + str( e )\ + + ": " + pixmlfilename + " skipping ..." ) + + def toRFCForecast(self): + +# print("to rfcforecast") + rfc_series = [] + for s in self.series: +# print(s.tag, s.attrib ) + rfc_series.append( RFC_Forecast( s, self.rfcsites )) + + return rfc_series + + def getFlowTimeseries( self ): + return list( filter( lambda s: s.parameterId in \ + [ "RQOT", "QINE", "SQIN" ] and \ + s.rfcname is not None and \ + not s.isEmpty(), self.toRFCForecast() ) ) + + def getAllStationIDs( self ): + return set( map( lambda s: s.get5CharStationID(), \ + self.getFlowTimeseries() ) ) + + + def getObservedAndForecastForID( self, id ): + fst = next( ( s for s in self.getFlowTimeseries() \ + if s.isForecast() and \ + s.get5CharStationID() == id ), None ) + obv = next( ( s for s in self.getFlowTimeseries() \ + if s.isObserved() and \ + s.get5CharStationID() == id ), None ) + # + # Some RFCs already combined observed and forecast series + # + if fst is not None and obv is None: + # + # Split the forecast series into observed and forecast + # + obv = copy.deepcopy( fst ) + T0 = fst.getT0() + dt = timedelta( seconds = obv.getTimeStepInSeconds() ) + t = obv.getTimePeriod()[1] + while t >=T0: + if obv.timeValueQuality: + obv.timeValueQuality.popitem() + t = t - dt + + obv.resetTimePeriod() + obv.qualifierId = "observed" + + t = fst.getTimePeriod()[0] + while t < T0: + fst.timeValueQuality.popitem(last=False) + t = t + dt + fst.resetTimePeriod() + + return( fst, obv ) + + #Some RFCs such as NE have observed and forecast in separate + #time series + def getReserviorForecastWithT0(self): + series = self.toRFCForecast() + observed = [] + forecast = [] + parameterset = set( ["RQOT", "QINE", "SQIN" ] ) + for s in series: + if s.parameterId in parameterset and not s.isEmpty(): + if s.isObserved(): + observed.append( s ) + else: + if s.isForecast(): + forecast.append( s ) + else: + # + # CNRFC doesn't have the tag + # + if s.rfcname == "CNRFC": + forecast.append( s ) +# # NCRFC observed doesn't have the qualifierId tag +# if s.rfcname == "NCRFC": +# observed.append( s ) + + + + if observed: + for o in observed: + for s in forecast: + if o.stationID == s.stationID: + if s.startDate == s.getT0(): +# #NERFC +# if s.stationID == "SWRN6" or \ +# s.stationID == "STDM1" or \ +# s.stationID == "RKWM1": +# +# s.timeValueQuality.update( {s.startDate :\ +# o.timeValueQuality[ next(reversed( \ +# o.timeValueQuality.keys() ) ) ] } ) +# +# else: + if s.startDate in o.timeValueQuality.keys(): + if not math.isclose( \ + o.timeValueQuality[ s.startDate ][ 0 ], + float( o.missVal ), abs_tol=0.0001 ): + + s.timeValueQuality.update( {s.startDate :\ + o.timeValueQuality.get( s.startDate, \ + (float( s.missVal ), 0) ) } ) + + elif s.startDate < s.getT0(): + tvq = OrderedDict() + for k in s.timeValueQuality: + if k >= s.getT0(): + tvq[ k ] = s.timeValueQuality[ k ] + s.timeValueQuality=tvq + if s.timeValueQuality.has_key( s.getT0() ): + s.timeValueQuality.update( {s.getT0(): \ + o.timeValueQuality.get( s.getT0()) } ) + s.timeValueQuality.move_to_end( s.getT0(), \ + last=False ) + + s.startDate = s.getT0() + + s.fstPeriod = \ + list( s.timeValueQuality.keys() )[0], \ + list( s.timeValueQuality.keys() )[-1] + else: + t = s.startDate - timedelta( \ + seconds = s.getTimeStepInSeconds()) + while t > s.getT0(): + s.timeValueQuality.update({t : \ + ( float( s.missVal ), 0 ) } ) + s.timeValueQuality.move_to_end( t, \ + last=False ) + t = t - timedelta( \ + seconds = s.getTimeStepInSeconds()) + + s.timeValueQuality.update({t: \ + o.timeValueQuality.get( t, \ + (float( s.missVal) , 0)) } ) + s.timeValueQuality.move_to_end( t, \ + last=False ) + s.startDate = s.getT0() + + s.fstPeriod = \ + list( s.timeValueQuality.keys() )[0], \ + list( s.timeValueQuality.keys() )[-1] + break + forcast_without_observed = [] + for s in forecast: + found = False + for o in observed: + if o.stationID == s.stationID: + found = True + break + if not found: + forcast_without_observed.append( s ) + + for f in forcast_without_observed: + if f.startDate < f.getT0(): + tvq = OrderedDict() + for k in f.timeValueQuality: + if k >= f.getT0(): + tvq[ k ] = f.timeValueQuality[ k ] + f.timeValueQuality=tvq + else: + t = f.startDate - timedelta( \ + seconds = f.getTimeStepInSeconds()) + while t >= f.getT0(): + f.timeValueQuality.update({t : \ + ( float( f.missVal ), 0 ) } ) + f.timeValueQuality.move_to_end( t, \ + last=False ) + t = t - timedelta( \ + seconds = f.getTimeStepInSeconds()) + +# print( "getReserviorForecastWithT0:" + f.stationID) + f.startDate = f.getT0() + f.fstPeriod = list( f.timeValueQuality.keys() )[0], \ + list( f.timeValueQuality.keys() )[-1] + + else: + for f in forecast: + if f.startDate < f.getT0(): + tvq = OrderedDict() + for k in f.timeValueQuality: + if k >= f.getT0(): + tvq[ k ] = f.timeValueQuality[ k ] + f.timeValueQuality=tvq + else: + t = f.startDate - timedelta( \ + seconds = f.getTimeStepInSeconds()) + while t >= f.getT0(): + f.timeValueQuality.update({t : \ + ( float( f.missVal ), 0 ) } ) + f.timeValueQuality.move_to_end( t, \ + last=False ) + t = t - timedelta( \ + seconds = f.getTimeStepInSeconds()) + +# print( "getReserviorForecastWithT0:" + f.stationID) + f.startDate = f.getT0() + f.fstPeriod = list( f.timeValueQuality.keys() )[0], \ + list( f.timeValueQuality.keys() )[-1] + return forecast + + def getRFCName( self ): + YYYYMMDDHH = '[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])(2[0-3]|[01][0-9])' + YYYYMMDD = '[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])' + YYYYMMDDHHMMSS = YYYYMMDDHH + '(0[0-9]|[1-5][0-9]){2}' + CBRFCPattern = '^(.*/)?CBRFC_Reservoirs_' + YYYYMMDDHH + '.xml' + NERFCPattern = '^(.*/)?NERFC_Reservoir_Export.xml' + LMRFCPattern = '^(.*/)?LMRFC_RESERVOIR_FORECAST\.' + YYYYMMDD + + ABRFCPattern = '^(.*/)?' + YYYYMMDDHH + '_RES_NWM_pixml_export.' + YYYYMMDDHHMMSS + NWRFCPattern = '^(.*/)?' + YYYYMMDDHH + '_QINE_NWM_Res_export.' + YYYYMMDDHHMMSS + MBRFCPattern = '^(.*/)?' + YYYYMMDDHHMMSS + '_RQOT_Forecast_.+_xml_' + YYYYMMDDHH + RFCName = None + result = re.match(CBRFCPattern, self.source) + if result: + RFCName = 'CBRFC' + else: + result = re.match(NERFCPattern, self.source) + if result: + RFCName = 'NERFC' + else: + result = re.match(ABRFCPattern, self.source) + if result: + RFCName = 'ABRFC' + else: + result = re.match(NWRFCPattern, self.source) + if result: + RFCName = 'NWRFC' + else: + result = re.match(LMRFCPattern, self.source) + if result: + RFCName = 'LMRFC' + else: + result = re.match(MBRFCPattern, self.source) + if result: + RFCName = 'MBRFC' + + return RFCName + + + def allStations( self ): + stations = set() + series = self.toRFCForecast() + for s in series: + stations.add( s.get5CharStationID() ) + return stations + + def getRFCNameBySitelist( self, gages ): + sta = self.allStations() + for rfc in gages.RFC: + rfcgages = gages.getSitesByRFC( rfc ) + if not sta.isdisjoint( set( rfcgages ) ): + return rfc + + # + # Apply the persistence and linear interplation algorithm + # + # For observed, persist both forward and backward up to 24 hours, + # linear interpolate between observed values. However, the maximum gap + # between interplation is 48 hours. That is if the gap between is + # more than 48 hours, fill the gap with -999 (missing) values. + # + # For forecast, persist only in the forward direction up to 24 hours. + # Linear interpolate between values. If the gap is more than 48 hours, + # fill with missing values. + # + # see email thread "rfc obs" Nov 13, 2019 + # + def combineObvFstAndApplyPresistenceLinearInterpolation( self, \ + obvfst): + obv = copy.deepcopy( obvfst[1] ) + fst = copy.deepcopy( obvfst[0] ) + obv.linearInterpolate(timedelta( hours = 1 ) ) + fst.interForwardPersist(timedelta( hours = 1 ) ) + combined = copy.deepcopy( obv ) + obvperiod = obv.getTimePeriod() + fstperiod = fst.getTimePeriod() + if obvperiod[1] >= fstperiod[ 0 ]: + for k, v in fst.timeValueQuality.items(): + if k not in combined.timeValueQuality: + combined.timeValueQuality[ k ] = v + elif obvperiod[1] + timedelta( days = 1 ) < fstperiod[ 0 ]: + combined.persistForward( obvperiod[1] + timedelta( days = 1 ) ) + t = obvperiod[1] + timedelta( days = 1 ) + while t < fstperiod[ 0 ]: + combined.timeValueQuality[ t ] = \ + ( float( combined.missVal ), 0.0, True ) + t = t + \ + timedelta( seconds = combined.getTimeStepInSeconds() ) + for k, v in fst.timeValueQuality.items(): + combined.timeValueQuality[ k ] = v + else: + combined.persistForward( fstperiod[ 0 ] ) + for k, v in fst.timeValueQuality.items(): + combined.timeValueQuality[ k ] = v + + combined.resetTimePeriod() + combined.qualifierId = fst.qualifierId + combined.forecastDate = fst.forecastDate + + combined_period = combined.getTimePeriod() + T0 = combined.getT0() + + if T0 - timedelta( days = 2 ) < combined_period[0]: + combined.persistBackward( T0 - timedelta( days = 2 ),\ + timedelta( days = 1 ) ) + + if T0 + timedelta( days = 10 ) > combined_period[ 1 ]: + combined.persistForward( T0 + timedelta( days = 10, + seconds = combined.getTimeStepInSeconds() ) ) + + return combined + + # + # See the comment below for the presist and interpolate algorithms + # + def linearInterpolateObservedPresisForecastAndCombine( self, o, f): + + f.interForwardPersist( timedelta( hours = 1 ) ) + fstperiod = f.getTimePeriod() + o.linearInterpolate( timedelta( hours = 1 ) ) + obvperiod = o.getTimePeriod() + # + # If the observation period and the forecast period + # overlap. + if obvperiod[1] >= fstperiod[ 0 ]: + t = fstperiod[ 0 ] - \ + timedelta( seconds = f.getTimeStepInSeconds() ) + while t >= obvperiod[ 0 ]: + f.timeValueQuality.update( {t: \ + o.timeValueQuality[ t ] } ) + f.timeValueQuality.move_to_end( t, last=False ) + t = t - timedelta( \ + seconds = f.getTimeStepInSeconds() ) + # + # If the last observation is less than 2 days from the + # T0 value. + elif obvperiod[1] + timedelta( days = 2 ) >= fstperiod[ 0 ]: + t0 = f.getT0() + #interpolate between t0 and obvperiod[1] + if t0 == fstperiod[0]: + t1 = obvperiod[ 1 ] + t = t0 - timedelta( hours = 1 ) + while t > t1: + f.timeValueQuality.update( {t: \ + ( ( f.timeValueQuality[ t0 ][0] - \ + o.timeValueQuality[ t1 ][ 0 ] ) *\ + ( ( t - t1 ).total_seconds() / \ + ( t0 - t1 ).total_seconds() ) + \ + o.timeValueQuality[ t1 ][ 0 ] , + ( f.timeValueQuality[ t0 ][1] - \ + o.timeValueQuality[ t1 ][ 1 ] ) *\ + ( ( t - t1 ).total_seconds() / \ + ( t0 - t1 ).total_seconds() ) + \ + o.timeValueQuality[ t1 ][ 1 ] , + True ) } ) + f.timeValueQuality.move_to_end( t, last=False ) + t = t - timedelta( hours = 1 ) + t = t1 + while t >= obvperiod[0]: + f.timeValueQuality.update( {t: \ + o.timeValueQuality[ t ] } ) + f.timeValueQuality.move_to_end( t, last=False ) + t = t - timedelta( hours = 1 ) + + #persist obvperiod[1] up to 1 day + else: #t0 < fstperiod[0] or t0 > fstperiod[0]: + t1 = obvperiod[ 1 ] + t = fstperiod[0] - timedelta( hours = 1 ) + while t > t1 + timedelta( days = 1 ): + f.timeValueQuality.update( {t: \ + ( float( s.missVal ), 0.0, True ) } ) + f.timeValueQuality.move_to_end( t, \ + last=False ) + t = t - timedelta( hours = 1 ) + while t > t1: + f.timeValueQuality.update( {t: \ + o.timeValueQuality[ t1 ] } ) + f.timeValueQuality.move_to_end( t, last=False ) + t = t - timedelta( hours = 1 ) + while t >= obvperiod[0]: + f.timeValueQuality.update( {t: \ + o.timeValueQuality[ t ] } ) + f.timeValueQuality.move_to_end( t, last=False ) + t = t - timedelta( hours = 1 ) + + # + # If the last observation is more than 2 days from the + # T0 value. + else: #persist obvperiod[1] up to 1 day + t1 = obvperiod[ 1 ] + t = fstperiod[0] - timedelta( hours = 1 ) + while t > t1 + timedelta( days = 1 ): + f.timeValueQuality.update( {t: \ + ( float( s.missVal ), 0.0, True ) } ) + f.timeValueQuality.move_to_end( t, \ + last=False ) + t = t - timedelta( hours = 1 ) + while t > t1: + f.timeValueQuality.update( {t: \ + o.timeValueQuality[ t1 ] } ) + f.timeValueQuality.move_to_end( t, last=False ) + t = t - timedelta( hours = 1 ) + while t >= obvperiod[0]: + f.timeValueQuality.update( {t: \ + o.timeValueQuality[ t ] } ) + f.timeValueQuality.move_to_end( t, last=False ) + t = t - timedelta( hours = 1 ) + + +# 1) No interpolation for forecast values. +# 2) Interpolate observed values if the gap is less or equal to 48 +# hours. Otherwise, fill the gap with missing values such as -999. +# 3) Persist forecast values if there is a gap between the values. +# The maximum gap is 10 days (this is also the total length of our +# forecast values). +# 4) When it is necessary, persist observed values backward and +# forward for up to 1 day at the first and last values respectively. +# 5) Persist the last forecast value to 10 days from T0. +# 4*) I think any observed value could be persisted forward/backward up +# to 1 day. For example, if there are observations at T-6 through T-1 +# and nothing before, then the value at T-6 could be persisted +# backwards to T-30. +# 5) If there is a T0 value and nothing beyond that, then the T0 value is +# persisted through day 10. If the last available forecast value is at +# T36, then that value is persisted through day 10. +# 6) If no observation (including T0 value) is provided, fill the +# observation including T0 with missing value (-999). +# 7) When RFC provides observations longer than 2 days before T0 , +# keep the values. That means the time silce will have observation +# longer than 2 dyas +# 8) If RFC provides forecast longer than 10 days, keep the values even +# the time slices will have forecast values longer than 10 days from +# T0. +# +# NOTE: * Later it is changed to persisted backward up to 2 days, in this +# example, the value at T-6 could persisted backwards to T-54. + + def getReserviorObservedForecastCombinedWithT0(self): + + series = self.toRFCForecast() + obs = [] + fst = [] + # + # get only then non-empty timeseries + # + for s in series: + if s.parameterId in [ "RQOT", "QINE", "SQIN" ] and \ + s.rfcname is not None and not s.isEmpty(): + # if s.parameterId in [ "RQOT", "QINE", "SQIN" ]: + if s.isForecast(): + fst.append( s ) + else: + obs.append( s ) + + + for f in fst: + obv = None + t0 = f.getT0() + + # + # APRFC linear interpolate 6 hourly data to hourly data + # Here is the Google Doc about the APRFC forecast data + # https://docs.google.com/document/d/1vMvBvi-aBbXkq6goYBGjentlUxt4HhxHfygGs01l9xE/edit + # + # Section: + # + # Data Preprocessing on APRFC pixml files for the GDL release + # 1) Check with APRFC and ensure: + # They follow one of the naming conventions provided to them by Zhengtao (WGRFC_02.24.2021.06.00.xml or 202102230102_LMRFC_Reservoir_export.xml) (confirmed) + # They send data in a regular time resolution (6-hourly) (confirmed) + # They are fine with us utilizing linear interpolation for in-between values of a time series to convert 6-hr data to hourly data (confirmed) + # 2) Implement a zero-value filling for expansion of time series to 12-day, instead of persisting on the last value in the time series. + # + # Email from john.mattern@noaa.gov on 4/13/2021 + # Summary: + # 1) Interpolate 6 hourly data to hourly + # 2) Extend forecast data to 10 days from T0 with 0s + # 3) If there is no observed, fill observed period, T0 - 2 days to + # T0, with 0s, + # 4) If there is observed, but shorter than 2 days, then extend + # backward with 0s. + # + # Email thread with subject "Glacial lake damming/outflow for NWM V3.0" + # on June 15, 2021. + # After discussions with Dave Streubel, David Mattern, Brain Cosgrove, + # and Mehdei Rezaeianzadeh, we will interpolate the values between + # zero and the first non-zero values, and between the last non-zero + # and zero. That is if the first value provided is non-zero, we + # interpolate from the preceding zero (valid at an earlier 6 hour time) + # to the first (non-zero) value you provide in the timeseries. Likewise, + # we apply linear interpolation for the timestep after the last value. + # + if f.rfcname == 'APRFC': + f.addLeadingAndTrailingZeros() + f.linearInterpolate( timedelta( hours = 1 ) ) + f.persistBackward( t0 - timedelta( days=2 ), \ + timedelta( days = 2 ), 0.0 ) + f.persistForward( t0 + timedelta( days=10 ), 0.0 ) + + else: + for o in obs: + if o.stationID == f.stationID: + obv = o + break + # + #For RFCs have separate observation and forecast sections + # + if obv and not obv.isEmpty(): + + self.linearInterpolateObservedPresisForecastAndCombine( \ + obv, f ) + # + #For RFCs have combined observation and forecast into one + # section. + # + else: + f.linearInterpolateAndInterForwardPersist(\ + timedelta( hours = 1 ) ) + + f.persistBackward( t0 - timedelta( days=2 ), \ + timedelta( days = 2 ) ) + f.persistForward( t0 + timedelta( days=10 ) ) + + f.resetTimePeriod() + + # + # get the time series even it is empty + # + fst.clear() + for s in series: + if s.parameterId in [ "RQOT", "QINE", "SQIN" ]: + if s.isForecast(): + fst.append( s ) + return fst + + diff --git a/data_assimilation_engine/rfc_ingestion/PI_XML_test.py b/data_assimilation_engine/rfc_ingestion/PI_XML_test.py new file mode 100644 index 0000000..67a79d7 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/PI_XML_test.py @@ -0,0 +1,283 @@ +import unittest +from datetime import datetime, timedelta +from PI_XML import PI_XML +from RFC_Sites import RFC_Sites + +class PI_XML_test(unittest.TestCase): + def test(self): + self.assertTrue(True) + + def testInit(self): + pixml = PI_XML('./NERFC_Reservoir_Export.xml') + self.assertEqual('NERFC', pixml.getRFCName()) + self.assertEqual(pixml.timeZone, '0.0') + + def test_toRFCForecast(self): + pixml = PI_XML('./NERFC_Reservoir_Export.xml') + + print("test_toRFCForecast", pixml.source) + +# for s in pixml.series: +# print(s.tag) + + rfc_series = pixml.toRFCForecast() + + for s in rfc_series: + print( s.stationID ) + print( s.missVal ) + if len(s.timeValueQuality) > 0: + for k, v in s.timeValueQuality.items(): + if abs(float( v[0] ) - float( s.missVal )) > 0.0001: + print(k, v) + + self.assertEqual( len( rfc_series ), 5 ) + self.assertEqual( rfc_series[ 0 ].stationID, 'INRN6' ) + self.assertEqual( rfc_series[ 1 ].stationID, 'SWRN6' ) + self.assertEqual( rfc_series[ 2 ].stationID, 'INRN6' ) + self.assertEqual( rfc_series[ 3 ].stationID, 'SWRN6' ) + self.assertEqual( rfc_series[ 4 ].stationID, 'INDN6HUD' ) + + def test_2nd_RFC(self): + pixml = PI_XML('./2019052412_QINE_NWM_Res_export.20190702202800') + self.assertEqual('NWRFC', pixml.getRFCName()) + self.assertEqual( len( pixml.series ), 2 ) + + def test_2nd_RFC_toRFCForecast(self): + print( 'test_2nd_RFC_toRFCForecast:') + pixml = PI_XML('./2019052812_QINE_NWM_Res_export.20190702202832') + rfc_series = pixml.toRFCForecast() + self.assertEqual( len( rfc_series ), len(pixml.series) ) + self.assertAlmostEqual( rfc_series[0].getTimeValueAt( \ + datetime( 2019, 5, 28, 12, 0, 0) )[1][0], \ + 1.59751 ) + + def test_2nd_RFC_QPF(self): + print( 'test_2nd_RFC_QPF:') + pixml = PI_XML('./2019052812_QPF_chps_pixml_export.20190702202832') + rfc_series = pixml.toRFCForecast() + self.assertEqual( len( rfc_series ), len(pixml.series) ) + self.assertAlmostEqual( rfc_series[3].getTimeValueAt( \ + datetime( 2019, 6, 1, 0, 0, 0) )[1][0], \ + 0.011811 ) + + + def test_ABRFC(self): + pixml = PI_XML('./2019052112_RES_NWM_pixml_export.20190705164143') + self.assertEqual('ABRFC', pixml.getRFCName()) + self.assertEqual( len( pixml.series ), 108 ) + + + def test_ABRFC_toRFCForecast(self): + print( 'test_ABRFC_toRFCForecast:') + pixml = PI_XML('./2019052112_RES_NWM_pixml_export.20190705164143') + rfc_series = pixml.toRFCForecast() + + for s in rfc_series: + print( s.stationID ) + if len(s.timeValueQuality) > 0: + for k, v in s.timeValueQuality.items(): + print(k, v) + + self.assertEqual( len( rfc_series ), len(pixml.series) ) + self.assertEqual( rfc_series[8].stationID, 'CHNK1' ) + self.assertAlmostEqual( rfc_series[8].getTimeValueAt( \ + datetime( 2019, 5, 19, 6, 0, 0) )[1][0], \ + 1534.9979 ) + def test_CBRFC(self): + pixml = PI_XML('./CBRFC_Reservoirs_2019070612.xml') + self.assertEqual('CBRFC', pixml.getRFCName()) + self.assertEqual( len( pixml.series ), 2 ) + + def test_CBRFC_toRFCForecast(self): + print( 'test_CBRFC_toRFCForecast:') + pixml = PI_XML('./CBRFC_Reservoirs_2019070712.xml') + rfc_series = pixml.toRFCForecast() + + for s in rfc_series: + print( s.stationID ) + if len(s.timeValueQuality) > 0: + for k, v in s.timeValueQuality.items(): + print(k, v) + + self.assertEqual( len( rfc_series ), len(pixml.series) ) + self.assertEqual( rfc_series[1].stationID, 'GRZU1OSF' ) + self.assertAlmostEqual( rfc_series[1].getTimeValueAt( \ + datetime( 2019, 7, 16, 17, 0, 0) )[1][0], \ + 1487.9976 ) + + def test_LMRFC(self): + pixml = PI_XML('./LMRFC_RESERVOIR_FORECAST.20190819') + self.assertEqual('LMRFC', pixml.getRFCName()) + self.assertEqual( len( pixml.series ), 180 ) + print( "LMRFC length: ", len( pixml.series ) ) + + def test_LMRFC_toRFCForecast(self): + print( 'test_LMRFC_toRFCForecast:') + pixml = PI_XML('./LMRFC_RESERVOIR_FORECAST.20190819') + rfc_series = pixml.toRFCForecast() + sites = RFC_Sites( './RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv') + lmsites = sites.getSitesByRFC( 'LMRFC' ) + + for lms in lmsites: + print( lms + ':') + for s in rfc_series: + if s.stationID[:5] == lms: + if len(s.timeValueQuality) > 0: + print( ' found: ', s.stationID[:5], "OK", s.getTimePeriod()[0].strftime("%m/%d/%Y %H:%M") + ' - ' + s.getTimePeriod()[1].strftime("%m/%d/%Y %H:%M") ) + else: + print( ' found: ', s.stationID[:5], "missing data" ) +# if len(s.timeValueQuality) > 0: +# for k, v in s.timeValueQuality.items(): +# print(k, v) +# else: +# print( 'not found: ', s.stationID ) + + def test_MBRFC_Hourly(self): + pixml = PI_XML('./20190819182258_RQOT_Forecast_1hr_missings_xml_2019080512') + sites = RFC_Sites( './RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv') + self.assertEqual('MBRFC', pixml.getRFCNameBySitelist(sites)) + self.assertEqual( len( pixml.series ), 1 ) + print( "MBRFC length: ", len( pixml.series ) ) + + def test_MBRFC_Hourly_toRFCForecast(self): + print( 'test_MBRFC_Hourly_toRFCForecast:') + pixml = PI_XML('./20190819182258_RQOT_Forecast_1hr_missings_xml_2019080512') + rfc_series = pixml.toRFCForecast() + + for s in rfc_series: + print( s.stationID ) + if len(s.timeValueQuality) > 0: + for k, v in s.timeValueQuality.items(): + print(' ', k, v) + print( 'missVal = ', s.missVal ) + + def test_MBRFC_6Hourly(self): + pixml = PI_XML('./20190819182258_RQOT_Forecast_6hr_missings_xml_2019080512') + self.assertEqual('MBRFC', pixml.getRFCName()) + self.assertEqual( len( pixml.series ), 1 ) + print( "MBRFC 6 hourly length: ", len( pixml.series ) ) + + def test_MBRFC_6Hourly_toRFCForecast(self): + print( 'test_MBRFC_6Hourly_toRFCForecast:') + pixml = PI_XML('./20190819182258_RQOT_Forecast_6hr_missings_xml_2019080512') + rfc_series = pixml.toRFCForecast() + + for s in rfc_series: + print( s.stationID ) + if len(s.timeValueQuality) > 0: + for k, v in s.timeValueQuality.items(): + print(' 6 hourly: ', k, v) + print( '6 hourly missVal = ', s.missVal ) + + def test_MBRFC(self): + pixml = PI_XML('./MBRFC_RQOT_Forecast.xml') +# self.assertEqual('MBRFC', pixml.getRFCName()) + self.assertEqual( len( pixml.series ), 19 ) + print( "MBRFC length: ", len( pixml.series ) ) + + def test_MBRFC_toRFCForecast(self): + print( 'test_MBRFC_toRFCForecast:') + pixml = PI_XML('./MBRFC_RQOT_Forecast.xml') + rfc_series = pixml.toRFCForecast() + + for s in rfc_series: + print( s.stationID ) + if len(s.timeValueQuality) > 0: + for k, v in s.timeValueQuality.items(): + if abs( v[0] - float( s.missVal ) ) > 0.0001: + print(' : ', k, v) + print( 'missVal = ', s.missVal ) + + def test_MBRFC_Monday_toRFCForecast(self): + print( 'test_MBRFC_Monday_toRFCForecast:') + pixml = PI_XML('./MBRFC_RQOT_Forecast_Monday.xml') + sites = RFC_Sites( './RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv') + lmsites = sites.getSitesByRFC( 'MBRFC' ) + rfc_series = pixml.toRFCForecast() + self.assertEqual( len( pixml.series ), 19 ) + + self.assertAlmostEqual( rfc_series[1].getTimeValueAt( \ + datetime( 2019, 8, 30, 13, 0, 0) )[1][0], \ + 2635.29 ) + for lms in lmsites: + for s in rfc_series: + if s.stationID[:5] == lms: + if len(s.timeValueQuality) > 0: + print( ' found: ', s.stationID[:5], "OK", s.getTimePeriod()[0].strftime("%m/%d/%Y %H:%M") + ' - ' + s.getTimePeriod()[1].strftime("%m/%d/%Y %H:%M") ) + else: + print( ' found: ', s.stationID[:5], "missing data" ) + + for s in rfc_series: + if len(s.timeValueQuality) > 0: + for k, v in s.timeValueQuality.items(): + if abs( v[0] - float( s.missVal ) ) > 0.0001: + print(' : ', k, v) + + def test_NERFC_toRFCForecast(self): + print( 'test_NERFC_toRFCForecast:') + pixml = PI_XML('./20190822_12z_NERFC_Reservoir_Export.xml') + sites = RFC_Sites( './RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv') + lmsites = sites.getSitesByRFC( 'NERFC' ) + rfc_series = pixml.toRFCForecast() + print( len( rfc_series ) ) + self.assertEqual( len( rfc_series ), 18 ) + self.assertAlmostEqual( rfc_series[1].getTimeValueAt( \ + datetime( 2019, 8, 23, 18, 0, 0) )[1][0], \ + 300.0332 ) + for lms in lmsites: + for s in rfc_series: + if s.stationID[:5] == lms: + if len(s.timeValueQuality) > 0: + print( ' found: ', s.stationID[:5], "OK", s.getTimePeriod()[0].strftime("%m/%d/%Y %H:%M") + ' - ' + s.getTimePeriod()[1].strftime("%m/%d/%Y %H:%M") ) + else: + print( ' found: ', s.stationID[:5], "missing data" ) + + for s in rfc_series: + if len(s.timeValueQuality) > 0: + for k, v in s.timeValueQuality.items(): + if abs( v[0] - float( s.missVal ) ) > 0.0001: + print(' : ', k, v) + + def test_NERFC_1_toRFCForecast(self): + print( 'test_NERFC_1_toRFCForecast:') + pixml = PI_XML('./20190820_12z_NERFC_Reservoir_Export.xml') + sites = RFC_Sites( './RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv') + lmsites = sites.getSitesByRFC( 'NERFC' ) + rfc_series = pixml.toRFCForecast() + print( len( rfc_series ) ) +# self.assertEqual( len( rfc_series ), 18 ) +# self.assertAlmostEqual( rfc_series[1].getTimeValueAt( \ +# datetime( 2019, 8, 23, 18, 0, 0) )[1][0], \ +# 300.0332 ) + for lms in lmsites: + for s in rfc_series: + if s.stationID[:5] == lms: + if len(s.timeValueQuality) > 0: + print( ' found: ', s.stationID[:5], "OK", s.getTimePeriod()[0].strftime("%m/%d/%Y %H:%M") + ' - ' + s.getTimePeriod()[1].strftime("%m/%d/%Y %H:%M") ) + else: + print( ' found: ', s.stationID[:5], "missing data" ) + + for s in rfc_series: + if len(s.timeValueQuality) > 0: + for k, v in s.timeValueQuality.items(): + if abs( v[0] - float( s.missVal ) ) > 0.0001: + print(' : ', k, v) + def test_MARFC_toRFCForecast(self): + print( 'test_MARFC_toRFCForecast:') + sites = RFC_Sites( './RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv') + for stn in ["BCHP1BEC", "JCKV2JCK", "DWNN6DEL", "CNNN6DEL" ]: + pixml = PI_XML('./20190824_' + stn + '.xml') + rfc_series = pixml.toRFCForecast() + print( stn + ":" ) + self.assertEqual( len( rfc_series ), 1 ) + self.assertEqual('MARFC', pixml.getRFCNameBySitelist(sites)) + for s in rfc_series: + print(" " + s.stationID[:5], "OK", s.getTimePeriod()[0].strftime("%m/%d/%Y %H:%M") + ' - ' + s.getTimePeriod()[1].strftime("%m/%d/%Y %H:%M") ) + if len(s.timeValueQuality) > 0: + for k, v in s.timeValueQuality.items(): + if abs( v[0] - float( s.missVal ) ) > 0.0001: + print(' : ', k, v) + + +if __name__ == '__main__': + unittest.main() diff --git a/data_assimilation_engine/rfc_ingestion/RFCHelper.py b/data_assimilation_engine/rfc_ingestion/RFCHelper.py new file mode 100644 index 0000000..4bbe26e --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/RFCHelper.py @@ -0,0 +1,150 @@ +############################################################################### +# Module name: RFCHelper +# # +# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # +# # +# Initial version date: 7/31/2019 # +# # +# Last modification date: +# # +# Description: Abstract the RFC forecast to time series +# # +############################################################################### + +import os, logging +from string import * +from datetime import datetime, timedelta +import dateutil.parser +from shutil import copyfile +#import pytz +#import iso8601 +#import Tracer +#from abc import ABCMeta, abstractmethod, abstractproperty +from RFCTimeSeries import RFCTimeSeries + + +class RFCHelper: + "Store all RFC data" + def __init__(self, rfcdata ): + """ + Initialize the RFCHelper object for a given + RFC forecasts + + Input: list of forecast object + """ + self.logger = logging.getLogger(__name__) + self.rfcForecasts = rfcdata + + if not self.rfcForecasts: + raise RuntimeError( "FATAL ERROR: rfcForecasts has no data") + + self.index = -1 + + self.timePeriod = ( self.rfcForecasts[0].fstPeriod[0], \ + self.rfcForecasts[0].fstPeriod[0] ) + for fst in self.rfcForecasts: + #print( "RFCHelper inti:" + fst.stationID, fst.fstPeriod, fst.getT0() ) + if self.timePeriod[0] > fst.fstPeriod[ 0 ]: + self.timePeriod = ( fst.fstPeriod[ 0 ], \ + self.timePeriod[1] ) + + if self.timePeriod[1] < fst.fstPeriod[ 0 ]: + self.timePeriod = ( self.timePeriod[ 0 ],\ + fst.fstPeriod[ 0 ] ) + + def __iter__(self ): + """ + The iterator + """ + return self + + def __next__( self ): + """ + The next RFC_Forecast object + """ + if self.index == len( self.rfcForecasts ) - 1: + self.index = -1 + raise StopIteration + self.index = self.index + 1 + return self.rfcForecasts[ self.index ] + + def timePeriodForAll( self ): + """ + Get the earlist and latest time for all observations + + Return: Tuple of start time and end time + """ + return self.timePeriod + + def makeTimeSeries( self ): + """ + Create time series from forecast data + + Return: list of time series objects + """ + timeseries = [] + for fst in self: + if not fst.isEmpty(): + timestamp = fst.getT0() + synthetics = list(map(int, fst.getSyntheticValues() ) ) + timeSeries = RFCTimeSeries( fst.get5CharStationID(), \ + [ timestamp ], \ + timedelta( seconds = fst.getTimeStepInSeconds()), \ + fst.getStartTime(), \ + [ fst.getValuesInCMS() ], \ + [ fst.getQuality() ], \ + [ synthetics ], \ + [ fst.getTimeStepInSeconds() ],\ + [ fst.getQueryTime() ], \ + fst.missVal) + timeseries.append(timeSeries) + + return timeseries + + def makeAllTimeSeries( self, outdir, suffix='RFCTimeSeries.ncdf' ): + """ + Create the time series NetCDF files for all USGS observations + + Input: outdir - the output directory + suffix - suffix of the filename + + Return: Total number of time series files created + """ + + # the time resultions must divide 60 minutes with no remainder + series = self.makeTimeSeries() + count = 0 + if series: + for s in series: +# s.print_station_offsettime_value() + self.logger.info( "Making time series: " + \ + outdir + '/' + s.getSeriesNCFileName( suffix ) ) + seriesfilename = outdir + '/' +s.getSeriesNCFileName( suffix ) + if os.path.isfile( seriesfilename ): + oldseries = RFCTimeSeries.fromNetCDF( seriesfilename ) + if s.compare( oldseries ): + self.logger.info( s.getSeriesNCFileName( suffix )+ \ + " has no change!" ) + else: + self.logger.info( s.getSeriesNCFileName( suffix ) + \ + " updated!" ) +# copyfile( seriesfilename, seriesfilename + '.bak' ) + ismerged = s.mergeOld( oldseries ) + if not ismerged: + self.logger.info( "RFCHelper :" + \ + s.getSeriesNCFileName( suffix )+ " is not merged" ) + + s.toNetCDF( outdir, suffix ) + count = count + 1 + else: +# s.print_station_offsettime_value() + s.toNetCDF( outdir, suffix ) + self.logger.info( s.getSeriesNCFileName( suffix )+\ + " created!" ) + count = count + 1 + + else: + self.logger.info( "Skip making time series for " + \ + startTime.isoformat() + ' - no data' ) + + return count diff --git a/data_assimilation_engine/rfc_ingestion/RFCTimeSeries.py b/data_assimilation_engine/rfc_ingestion/RFCTimeSeries.py new file mode 100644 index 0000000..7726200 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/RFCTimeSeries.py @@ -0,0 +1,495 @@ +############################################################################### +# Module name: RFCTimeSeries # +# # +# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # +# # +# Initial version date: # +# # +# Last modification date: 7/10/2019 # +# # +# Description: manage a RFC time series file that contains forecast stream # +# flow data a given time stamp # +# # +############################################################################### +import os, sys, time, math +from string import * +from datetime import datetime, timedelta +import calendar +#import xml.utils.iso8601 +#from netCDF4 import Dataset +import netCDF4 +import numpy as np +import random + +class RFCTimeSeries: + """ + Description: Store one RFC time series data + Author: Zhengtao Cui (Zhengtao.Cui@noaa.gov) + Date: July. 10, 2019 + Date modified: + """ + + stationIdStrLen = 5 + stationIdLong_name = "RFC station identifer of length 5" + timeStrLen = 19 + timeUnit = "UTC" + timeLong_name = "YYYY-MM-DD_HH:mm:ss UTC" + qualifierStrLen = 15 + dischargeUnit = "m^3/s" + dischargeLong_name = "Obsverved and forecasted discharges. There are 48 hours of observed values before issue time (T0), that is the start time is T0 - 48 hours. Values after T0 (including T0) are forecasts that genenrally extend to 10 days, that is T0 + 240 hours. The total length of dischargs is 12 days in general except in cases where forecasts or observations that are longer than 10 days or 2 days respectively are available." + syntheticsUnit = "-" + syntheticsLong_name = "Whether the discharge value is synthetic or orginal, 1 - synthetic, 0 - original" + dischargeQualityUnit = "-" + dischargeQualaityLong_name = \ + "Discharge quality 0 to 100 to be scaled by 100." + +# offsetTimeUnit = "seconds since T0" +# offsetTimeLong_name = "Offset time from T0" + + totalCountsUnit = "-" + totalCountsLong_name = "Total count of all observation and forecast values" + + observedCountsUnit = "-" + observedCountsLong_name = "Total observed values before T0." + + forecastCountsUnit = "-" + forecastCountsLong_name = "Total forecasted values including and after T0." + + timeStepsUnit = "seconds" + timeStepsLong_name = "Frequency/temporal resolution of forecast values" + + queryTimeUnit = "seconds since 1970-01-01 00:00:00 local TZ" + queryTimeLong_name = "Query time at RFC" + + @property + def issueTimeStamps(self): + return self._issueTimeStamps + @issueTimeStamps.setter + def issueTimeStamps(self, its): + self._issueTimeStamps = its + + @property + def startTimeStamp(self): + return self._startTimeStamp + @startTimeStamp.setter + def startTimeStamp(self, sts): + self._startTimeStamp = sts + + def __init__(self, staID, time_stamp, resolution, starttime, \ + dis, quality, synthetics, timestep, querytime, missVal ): + """ + Initialize a RFC TimeSeries object + Input: time_stamp - a time stamp + resolution - time resolution of the time series + station_time_value - Tuple of (station, time, flow, + quality) + """ + self.issueTimeStamps = time_stamp + self.seriesTimeResolution = resolution + self.stationID = staID + self.startTimeStamp = starttime + self.discharges = dis + self.discharge_qualities = quality + self.synthetics = synthetics + self.timeSteps = timestep + self.querytime = querytime + self.missingValue = missVal + + def isEmpty( self ): + """ + Test if the time series is empty + Return: boolean + """ + return not self.discharges + + def print_station_offsettime_value( self ): + """ + Print the time series data + """ + print( "Series: start time: " + \ + self.startTimeStamp.isoformat() ) + print( self.issueTimeStamps ) + print( self.discharges ) + print( self.stationID ) + print( self.querytime ) + for issuetime, dis in \ + zip( self.issueTimeStamps,\ + self.discharges): + print( " issue time: " + issuetime.isoformat() + \ + " " + self.stationID ) + for v in dis: + print( " ", v ) + + def get_total_counts(self): + counts = [] + for dis in self.discharges: + counts.append( len( dis ) ) + + return counts + + def get_observed_counts(self): + counts = [] + for t, s in zip( self.issueTimeStamps, self.timeSteps): + counts.append( \ + ( t - self.startTimeStamp ).total_seconds() / s ) + + return counts + + def get_forecast_counts(self): + counts = [] + obvcounts = self.get_observed_counts() + for oc, dis in zip(obvcounts, self.discharges): + counts.append( len( dis ) - oc ) + + return counts + def getStationID( self ): + """ + Get all station ids of the time series + Return: list of station ids + """ + station = list( self.stationID ) + if len(station) < self.stationIdStrLen: + for i in range( len(station), self.stationIdStrLen ): + station.insert(0, ' ' ) + elif len(station) > self.stationIdStrLen: + station = station[0:self.stationIdStrLen - 1] + + return station + + def getDischargeValues( self ): + """ + Get all stream flow values of the time series + Return: list of flow values + """ + return self.discharges + +# def getOffsetTimeInSeconds( self ): +# """ +# Get all observation times of the time series +# Return: list of observation times +# """ +# return int( self.offsettime.total_seconds() ) + + def getSeriesNCFileName( self, suffix='RFCTimeSeries.ncdf' ): + """ + Get NetCDF file for this time series + Return: A NetCDF filename + """ + filename = \ + self.issueTimeStamps[-1].strftime( "%Y-%m-%d_%H." ) + \ + str( int( self.seriesTimeResolution.days * 24 * 60 + \ + self.seriesTimeResolution.seconds // 60 ) ).zfill(2) + \ + "min." + self.stationID + "." + suffix + return filename + + def getDischargeQualities( self ): + """ + Get discharge quality for this time series + Return: A list of discharge quality + """ + return self.discharge_qualities + + + def toNetCDF( self, outputdir = './', suffix='RFCTimeSeries.ncdf' ): + """ + Write the time series to a NetCDF file + Input: outputdir - the directory where to write the NetCDF + """ + nc_fid = netCDF4.Dataset( \ + outputdir + '/' + self.getSeriesNCFileName( suffix ), \ + 'w', format='NETCDF4' ) + nc_fid.createDimension( 'stationIdStrLen', self.stationIdStrLen ) + nc_fid.createDimension( 'timeStrLen', self.timeStrLen ) + nc_fid.createDimension( 'forecastInd', None ) + nc_fid.createDimension( 'nseries', len( self.discharges ) ) + nc_fid.createDimension( 'zero', 0 ) + + + stationId = nc_fid.createVariable( 'stationId', 'S1',\ + ('stationIdStrLen',) ) + + stationId.setncatts( {'long_name' : \ + self.stationIdLong_name, \ + 'units' : '-'} ) + + issuetime = nc_fid.createVariable( 'issueTimeUTC', 'S1', \ + ('nseries', 'timeStrLen', ) ) + + issuetime.setncatts( {'long_name' : self.timeLong_name, \ + 'unts' : self.timeUnit } ) + + discharges = nc_fid.createVariable( 'discharges', 'f4',\ + ('nseries', 'forecastInd', ) ) + + discharges.setncatts( {'long_name' : \ + self.dischargeLong_name, \ + 'units' : self.dischargeUnit} ) + +# offsettime = nc_fid.createVariable( 'offsetTime', 'i4', ('zero')) +# offsettime.setncatts( {'long_name' : self.offsetTimeLong_name, \ +# 'units' : self.offsetTimeUnit} ) + synthetics = nc_fid.createVariable( 'synthetic_values', 'i1',\ + ('nseries', 'forecastInd', ) ) + + synthetics.setncatts( {'long_name' : \ + self.syntheticsLong_name, \ + 'units' : self.syntheticsUnit} ) + + totalcounts = nc_fid.createVariable( 'totalCounts', 'i2',\ + ('nseries',)) + + totalcounts.setncatts( {'long_name' : \ + self.totalCountsLong_name, \ + 'units' : self.totalCountsUnit} ) + + obvcounts = nc_fid.createVariable( 'observedCounts', 'i2',\ + ('nseries',)) + + obvcounts.setncatts( {'long_name' : \ + self.observedCountsLong_name, \ + 'units' : self.observedCountsUnit} ) + + fstcounts = nc_fid.createVariable( 'forecastCounts', 'i2',\ + ('nseries',)) + + fstcounts.setncatts( {'long_name' : \ + self.forecastCountsLong_name, \ + 'units' : self.forecastCountsUnit} ) + + timeSteps = nc_fid.createVariable( 'timeSteps', 'i4',\ + ('nseries',)) + + timeSteps.setncatts( {'long_name' : \ + self.timeStepsLong_name, \ + 'units' : self.timeStepsUnit} ) + + discharge_qualities = \ + nc_fid.createVariable( 'discharge_qualities', 'i2',\ + ('nseries',)) + + discharge_qualities.setncatts( {'long_name' : \ + self.dischargeQualaityLong_name, \ + 'units' : self.dischargeQualityUnit, \ + 'multfactor' : '0.01' } ) + + queryTime = nc_fid.createVariable( 'queryTime', 'i8',\ + ('nseries',)) + + queryTime.setncatts( { 'units' : \ + 'seconds since 1970-01-01 00:00:00 local TZ' \ + } ) + + nc_fid.setncatts( { 'fileUpdateTimeUTC': \ + datetime.utcnow().strftime( "%Y-%m-%d_%H:%M:00" ), \ + 'sliceStartTimeUTC' : \ + self.startTimeStamp.strftime( "%Y-%m-%d_%H:%M:00" ),\ + 'sliceTimeResolutionMinutes' : \ + str( int( self.seriesTimeResolution.days * 24 * 60 + \ + self.seriesTimeResolution.seconds // 60 ) ).zfill(2), \ + 'missingValue' : self.missingValue, \ + 'newest_forecast' : str( len( self.discharges ) - 1 ), \ + 'NWM_version_number' : 'v2.1' } ) + + discharges[:,:] = np.asarray( self.discharges ) + synthetics[:,:] = np.asarray( self.synthetics ) +# issuetime = netCDF4.stringtochar( [ ''.join('2019-08-18_00:00:00' ) ] ) +# chars = '1234567890aabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + timestrings = [] + timestrings = np.empty((len(self.issueTimeStamps),),\ + 'S'+repr(self.timeStrLen)) + for n in range(len(self.issueTimeStamps)): + timestrings[ n ] = \ + self.issueTimeStamps[n].strftime( "%Y-%m-%d_%H:%M:00" ) + issuetime[:,:] = netCDF4.stringtochar( timestrings ) +# issuetime = netCDF4.stringtochar( \ +# [ ''.join( t.strftime( "%Y-%m-%d_%H:%M:00" ) \ +# for t in self.issueTimeStamps ] ) ] ) + + queryTime[:] = self.querytime + totalcounts[:] = self.get_total_counts() + obvcounts[:] = self.get_observed_counts() + fstcounts[:] = self.get_forecast_counts() + +# offsettime[:] = self.getOffsetTimeInSeconds() + timeSteps[:] = self.timeSteps + + stationId[:] = self.getStationID() + + discharge_qualities[:] = self.discharge_qualities + + nc_fid.close() + + @classmethod + def fromNetCDF( self, ncfilename ): + """ + Read the time series from a NetCDF file + Input: ncfilename - the NetCDF filename + """ + nc_fid = netCDF4.Dataset( ncfilename, 'r' ) + startTimeStamp = datetime.strptime( \ + nc_fid.getncattr( 'sliceStartTimeUTC' ), \ + "%Y-%m-%d_%H:%M:00" ) + + time_resol = timedelta( minutes = \ + int( nc_fid.getncattr( 'sliceTimeResolutionMinutes' ) ) ) + + missVal = nc_fid.getncattr( 'missingValue' ) + + newest_series = nc_fid.getncattr( 'newest_forecast' ) + + station = netCDF4.chartostring( \ + nc_fid.variables[ 'stationId'][ : ] ) + + discharges = nc_fid.variables[ 'discharges'][ :, : ].tolist() + synthetics = nc_fid.variables[ 'synthetic_values'][ :, : ].tolist() + + #queryTime = int( nc_fid.variables[ 'queryTime'][0] ) + queryTime = [ int( x ) for x in \ + nc_fid.variables[ 'queryTime'][:] ] +# queryTime = nc_fid.variables[ 'queryTime'][:].tolist() + + qualities = [ int( x ) for x in \ + nc_fid.variables[ 'discharge_qualities'][:] ] + + timeSteps = [ int( x ) for x in \ + nc_fid.variables[ 'timeSteps' ][:] ] + # offsettime = nc_fid.variables[ 'offsetTime' ][0] + # print( "offsetitme:", int( offsettime)) + + issueTimes = [ datetime.strptime( t, "%Y-%m-%d_%H:%M:00") \ + for t in netCDF4.chartostring ( \ + nc_fid.variables[ 'issueTimeUTC' ][:] ) ] + + nc_fid.close() + +# d = timedelta( seconds = int( offsettime ) ) +# print(d) +# + return self( str( station ), issueTimes, time_resol, \ + startTimeStamp ,\ + discharges,\ + qualities, synthetics, timeSteps, queryTime, missVal ) + + def mergeOld( self, oldTimeSeries ): + """ + Merge data in an existing NetCDF time series file with this one + Input: oldTimeSeries - the NetCDF filename of the existing time + series + """ + + return False + if self.startTimeStamp != oldTimeSeries.startTimeStamp or \ + self.seriesTimeResolution != oldTimeSeries.seriesTimeResolution \ + or self.stationID != oldTimeSeries.stationID or \ + self.missingValue != oldTimeSeries.missingValue: + #raise RuntimeError( "FATAL ERROR: the two time series "\ + # " have different time stamps, temporal resolutions, "\ + # "or station IDs, not merging ..." ) + print ( "The two time series "\ + " have different start time, temporal resolutions, "\ + "or station IDs, not merging ..." ) + return False + else: + extraIssueTimes = [] + for n in range( len(self.issueTimeStamps ) ): + for m in range( len( oldTimeSeries.issueTimeStamps ) ): + if self.issueTimeStamps[n] == \ + oldTimeSeries.issueTimeStamps[ m ]: + self.discharges[ n ] = oldTimeSeries.discharges[ m ] + self.synthetics[ n ] = oldTimeSeries.synthetics[ m ] + break + + for m in range( len( oldTimeSeries.issueTimeStamps ) ): + found = False + for n in range( len(self.issueTimeStamps ) ): + if self.issueTimeStamps[n] == \ + oldTimeSeries.issueTimeStamps[ m ]: + found = True + break + if not found: + extraIssueTimes.append( m ) + + if extraIssueTimes: + for i in extraIssueTimes: + + if len( self.discharges[ -1 ] ) == \ + len( oldTimeSeries.discharges[ i ] ): + pass + elif len( self.discharges[ -1 ] ) < \ + len( oldTimeSeries.discharges[ i ] ): + for d in self.discharges: + for j in range( len(self.discharges[ -1 ] ),\ + len( oldTimeSeries.discharges[ i ] ) ): + d.append( self.missingValue ) + for s in self.synthetics: + for j in range( len(self.synthetics[ -1 ] ),\ + len( oldTimeSeries.synthetics[ i ] ) ): + s.append( 1 ) + + else: + for j in range( \ + len(oldTimeSeries.discharges[ i ] ),\ + len( self.discharges[ -1 ] ) ): + oldTimeSeries.discharges[ i ].append( \ + self.missingValue ) + oldTimeSeries.synthetics[ i ].append( 1 ) + + self.discharges.append( oldTimeSeries.discharges[ i ] ) + self.synthetics.append( oldTimeSeries.synthetics[ i ] ) + self.issueTimeStamps.append( \ + oldTimeSeries.issueTimeStamps[ i ] ) + self.timeSteps.append( oldTimeSeries.timeSteps[ i ] ) + self.discharge_qualities.append( \ + oldTimeSeries.discharge_qualities[ i ] ) + self.querytime.append( oldTimeSeries.querytime[ i ] ) + return True + + + def compare( self, otherTimeSeries ): + + if self.stationID != otherTimeSeries.stationID: + return False + + if self.seriesTimeResolution != \ + otherTimeSeries.seriesTimeResolution: + return False + + if self.startTimeStamp != otherTimeSeries.startTimeStamp: + return False + + if len(self.discharges) != len( otherTimeSeries.discharges): + return False + + if len(self.synthetics) != len( otherTimeSeries.synthetics): + return False + + if self.issueTimeStamps != otherTimeSeries.issueTimeStamps: + return False + + if self.timeSteps != otherTimeSeries.timeSteps: + return False + + if self.missingValue != otherTimeSeries.missingValue: + return False + + if self.discharge_qualities != \ + otherTimeSeries.discharge_qualities: + return False + + for x, y in zip( self.discharges, otherTimeSeries.discharges): + if len(x) != len(y): + return False + for a, b in zip( x, y): + if not math.isclose( a, b, abs_tol=0.001 ): +# print("value diff", a, b) + return False + + for x, y in zip( self.synthetics, otherTimeSeries.synthetics): + if len(x) != len(y): + return False + for a, b in zip( x, y): + if a != b: +# print("synthetics diff", a, b) + return False + + return True diff --git a/data_assimilation_engine/rfc_ingestion/RFCTimeSeries_test.py b/data_assimilation_engine/rfc_ingestion/RFCTimeSeries_test.py new file mode 100644 index 0000000..10ac42d --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/RFCTimeSeries_test.py @@ -0,0 +1,166 @@ +import unittest +import time, os +import numpy as np +from datetime import datetime, timedelta +from RFCTimeSeries import RFCTimeSeries +from PI_XML import PI_XML +from RFC_Forecast import RFC_Forecast + +class RFCTimeSeries_test(unittest.TestCase): + def test(self): + self.assertTrue(True) + + def testInit(self): + timestamp = datetime(2019, 5, 19, 12, 0, 0) + starttime = datetime(2019, 5, 19, 12, 0, 0) + timeresolution = timedelta( minutes = 180 ) + stations = [ "CHNK1", "CNGK1" ] + discharges = [ [ 1218.9941, 1218.9941, 1217.003, 1228.0027, \ + 1221.9971, 1221.9971 ], \ + [ 15936.987, 16065.989, 16035.982, 15959.986, \ + 15950.99, 15937.987, 15858.99, \ + 1218.9941, 1217.003, 1228.0027, \ + 1221.9971, 1221.9971 ] ] + quality = [ 100, 50 ] + + timesteps = [ 21600, 21600 ] + + querytime = [ int( time.mktime( \ + datetime( 2019, 5, 26, 7, 12, 45).timetuple()) ), \ + int( time.mktime( \ + datetime( 2019, 5, 26, 7, 12, 45).timetuple()) ) ] + + for ( sta, dis, qual, dt, queryt) in \ + zip( stations, discharges, quality, timesteps,\ + querytime ): + + print( sta, qual, dt, queryt) + timeseries = RFCTimeSeries( sta, [ timestamp ], timeresolution, \ + starttime, \ + [ dis ], [ qual ], [ dt ], [ queryt ], '-999.0' ) + + timeseries.toNetCDF() + + def test_fromNetCDF(self): + + timeseries = RFCTimeSeries.fromNetCDF( "./2019-05-19_12.180min.CHNK1.RFCTimeSeries.ncdf" ) + print( "from Netcdf:" ) + timeseries.print_station_offsettime_value() + self.assertEqual( timeseries.startTimeStamp, \ + datetime(2019, 5, 19, 12, 0, 0) ) + + self.assertAlmostEqual( \ + timeseries.getDischargeValues()[0][3], \ + 1228.003, 3 ) + + def test_compare_equal(self): + timeseries = RFCTimeSeries.fromNetCDF( "./2019-05-19_12.180min.CHNK1.RFCTimeSeries.ncdf" ) + timeseries1 = RFCTimeSeries.fromNetCDF( "./2019-05-19_12.180min.CHNK1.RFCTimeSeries.ncdf.bak" ) + + self.assertTrue( timeseries.compare( timeseries1 ) ) + + def test_compare_nonequal(self): + timeseries = RFCTimeSeries.fromNetCDF( "./2019-05-19_12.180min.CHNK1.RFCTimeSeries.ncdf" ) + + timestamp = datetime(2019, 5, 19, 12, 0, 0) + starttime = datetime(2019, 5, 19, 12, 0, 0) + timeresolution = timedelta( minutes = 180 ) + station = "CHNK1" + discharges = [ [ 1218.9941, 1218.9941, 1217.003, 1228.0027, \ + 1221.9971, 1221.9981 ] ] + quality = [ 100] + + timesteps = [ 21600 ] + + querytime = [ int( time.mktime( \ + datetime( 2019, 5, 26, 7, 12, 45).timetuple()) ) ] + + timeseries1 = RFCTimeSeries( station, [ timestamp ], timeresolution, \ + starttime, discharges, quality, \ + timesteps, querytime, '-999.0' ) + + + self.assertFalse( timeseries.compare( timeseries1 ) ) + + def test_mergeOld(self): + + timestamp = datetime(2019, 5, 19, 12, 0, 0) + starttime = datetime(2019, 5, 19, 12, 0, 0) + timeresolution = timedelta( minutes = 180 ) + station = "CHNK1" + newdischarges = [ [ 1218.9941, 1218.9941, 1217.003, 1228.0027, \ + 1221.9971, 1221.9981 ] ] + quality = [ 100] + + timesteps = [ 21600 ] + + querytime = [ int( time.mktime( \ + datetime( 2019, 5, 26, 7, 12, 45).timetuple()) ) ] + + tsnew = RFCTimeSeries( station, [ timestamp ], timeresolution, \ + starttime, newdischarges, quality, \ + timesteps, querytime, '-999.0' ) + + olddischarges = [ [ 1218.9941, 1218.9941, 1217.003, 1228.0027, \ + 1223.9971, 1221.9981 ] ] + + tsold = RFCTimeSeries( station, [ timestamp ], timeresolution, \ + starttime, olddischarges, quality, \ + timesteps, querytime, '-999.0' ) + + tsnew.mergeOld( tsold ) + + tsnew.toNetCDF( suffix='RFCTimeSeries.ncdf.merged' ) + + self.assertTrue( os.path.exists(\ + './2019-05-19_12.180min.CHNK1.RFCTimeSeries.ncdf.merged' ) ) + +# def test_NERFC_to_Timeseries(self): +# pixml = PI_XML('./NERFC_Reservoir_Export.xml') +# rfc_series = pixml.toRFCForecast() +# +# timeresolution = timedelta( minutes = 180 ) +# +# for s in rfc_series: +# print( "ParameterID = ", s.parameterId ) +# print( "stationID = ", s.stationID ) +# print( "size = ", len(s.timeValueQuality)) +# if s.parameterId == 'RQOT': +# print( "qualifierID = ", s.qualifierId ) +# print( "timeStep = ", s.timeStep ) +# print( "forecastDate = ", s.forecastDate ) +# print( "unit = ", s.unit ) +# print( "period = ", s.fstPeriod ) +# if s.creationDateTime is not None: +# querytime = time.mktime( s.creationDateTime.timetuple() ) +# elif s.forecastDate is not None: +# querytime = time.mktime( s.forecastDate.timetuple() ) +# else: +# querytime = time.mktime( datetime.now().timetuple() ) +# +# values = [] +# +# for k, v in s.timeValueQuality.items(): +# print("{0} ===> {1}".format( k, v ) ) +# if s.unit == 'CFS': +# values.append( v[0] * 0.028316846592 ) +# else: +# values.append( v[0] ) +# +# timeseries = RFCTimeSeries( s.get5CharStationID(),\ +# s.getT0(), \ +# timeresolution, \ +# timedelta( seconds = 0 ),\ +# values,\ +# 100,\ +# s.getTimeStepInSeconds(),\ +# querytime, '-999.0') +# +# +# timeseries.toNetCDF() + + + +if __name__ == '__main__': + unittest.main() + diff --git a/data_assimilation_engine/rfc_ingestion/RFC_Forecast.py b/data_assimilation_engine/rfc_ingestion/RFC_Forecast.py new file mode 100644 index 0000000..b7798be --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/RFC_Forecast.py @@ -0,0 +1,775 @@ +############################################################################### +# Module name: RFC_Intestion +# # +# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # +# # +# Initial version date: # +# # +# Last modification date: 08/06/2019 # +# # +# Description: manage data in a RFC FEWS PI xml file # +# # +############################################################################### + +import os, sys, time, csv, re +sys.path.append( os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))\ + + '/usgs_download/analysis/') +import logging +import math +from string import * +from collections import OrderedDict +from datetime import datetime, timedelta +import dateutil.parser +import pytz +#import iso8601 +import xml.etree.ElementTree as etree +#import Tracer +from Observation import Observation +from RFC_Sites import RFC_Sites + +class RFC_Forecast(Observation): + """ + Store one RFC forecast data + """ + @property + def type(self): + return self._type + + @type.setter + def type(self, t): + self._type = t + + @property + def parameterId(self): + return self._parameterId + + @parameterId.setter + def parameterId(self, p): + self._parameterId = p + + @property + def qualifierId(self): + return self._qualifierId + + @qualifierId.setter + def qualifierId(self, q): + self._qualifierId = q + + @property + def timeStep(self): + return self._timeStep + + @timeStep.setter + def timeStep(self, t): + self._timeStep = t + + @property + def forecastDate(self): + return self._forecastDate + + @forecastDate.setter + def forecastDate(self,f): + self._forecastDate = f + + @property + def creationDateTime(self): + return self._creationDateTime + + @creationDateTime.setter + def creationDateTime(self, c): + self._creationDateTime = c + + @property + def missVal(self): + return self._missVal + + @missVal.setter + def missVal(self, m): + self._missVal = m + + @property + def lat(self): + return self._lat + + @lat.setter + def lat(self, l): + self._lat = l + + @property + def lon(self): + return self._lon + + @lon.setter + def lon(self, l): + self._lon = l + + @property + def x(self): + return self._x + + @x.setter + def x(self, l): + self._x = l + + @property + def y(self): + return self._y + + @y.setter + def y(self, l): + self._y = l + + @property + def z(self): + return self._z + + @z.setter + def z(self, l): + self._z = l + + @property + def timeValueQuality(self): + return self._timeValueQuality + + @timeValueQuality.setter + def timeValueQuality(self, v): + self._timeValueQuality = v + + @property + def fstPeriod(self): + return self._obvPeriod + + @fstPeriod.setter + def fstPeriod(self, p): + self._obvPeriod = p + + @property + def rfcname(self): + return self._rfcname + + @rfcname.setter + def rfcname(self, r): + self._rfcname = r + + def __init__(self, pixmlseries, stations ): + """ + Initialize the RFC_Forecast object with a given + pixml series + """ + self.source = pixmlseries + header = pixmlseries.find('{http://www.wldelft.nl/fews/PI}header') + self.type = header.find('{http://www.wldelft.nl/fews/PI}type').text + self.stationID = header.find('{http://www.wldelft.nl/fews/PI}locationId').text + self.stationName = header.find('{http://www.wldelft.nl/fews/PI}stationName').text + self.parameterId = header.find('{http://www.wldelft.nl/fews/PI}parameterId').text + if header.find('{http://www.wldelft.nl/fews/PI}qualifierId') \ + is not None: + + self.qualifierId = header.find('{http://www.wldelft.nl/fews/PI}qualifierId').text + else: + self.qualifierId = None + + timeStepUnit = \ + header.find('{http://www.wldelft.nl/fews/PI}timeStep').\ + attrib[ 'unit' ] + timeStepMultiplier = \ + header.find('{http://www.wldelft.nl/fews/PI}timeStep').\ + attrib[ 'multiplier' ] + self.timeStep = (timeStepUnit, timeStepMultiplier) + + if header.find('{http://www.wldelft.nl/fews/PI}startDate') \ + is not None: + self.startDate = datetime.strptime( \ + header.find('{http://www.wldelft.nl/fews/PI}startDate').\ + attrib['date'] + ' ' + \ + header.find('{http://www.wldelft.nl/fews/PI}startDate').\ + attrib['time'], '%Y-%m-%d %H:%M:%S') + else: + self.startDate = None + + if header.find('{http://www.wldelft.nl/fews/PI}forecastDate') \ + is not None: + self.forecastDate = datetime.strptime( \ + header.find('{http://www.wldelft.nl/fews/PI}forecastDate').\ + attrib['date'] + ' ' + \ + header.find('{http://www.wldelft.nl/fews/PI}forecastDate').\ + attrib['time'], '%Y-%m-%d %H:%M:%S') + else: + self.forecastDate = None +# if self.startDate is not None: +# self.forecastDate = self.startDate +# else: +# self.forecastDate = None + + if header.find('{http://www.wldelft.nl/fews/PI}creationDate') \ + is not None: + self.creationDateTime = datetime.strptime( \ + header.find('{http://www.wldelft.nl/fews/PI}creationDate').\ + text + ' ' + \ + header.find('{http://www.wldelft.nl/fews/PI}creationTime').\ + text, '%Y-%m-%d %H:%M:%S') + else: + self.creationDateTime = None + + self.missVal = \ + header.find('{http://www.wldelft.nl/fews/PI}missVal').text + + if math.isnan( float( self.missVal ) ): + self.missVal = '-999' + + if header.find('{http://www.wldelft.nl/fews/PI}lat') is not None: + self.lat = float( \ + header.find('{http://www.wldelft.nl/fews/PI}lat').text ) + if header.find('{http://www.wldelft.nl/fews/PI}lon') is not None: + self.lon = float( \ + header.find('{http://www.wldelft.nl/fews/PI}lon').text ) + + if header.find('{http://www.wldelft.nl/fews/PI}x') is not None: + self.x = float( \ + header.find('{http://www.wldelft.nl/fews/PI}x').text ) + + if header.find('{http://www.wldelft.nl/fews/PI}y') is not None: + self.y = float( \ + header.find('{http://www.wldelft.nl/fews/PI}y').text ) + + if header.find('{http://www.wldelft.nl/fews/PI}z') is not None: + self.z = float( \ + header.find('{http://www.wldelft.nl/fews/PI}z').text ) + + self.unit = \ + header.find('{http://www.wldelft.nl/fews/PI}units').text + + self.timeValueQuality = OrderedDict() + + for event in pixmlseries.iter( \ + '{http://www.wldelft.nl/fews/PI}event'): + value = float( event.attrib[ 'value' ] ) + if math.isnan( value ): + value = -999.0 + + # set negative values to missing values + if not math.isclose( value, float( self.missVal ),\ + abs_tol=0.0001 ) and value < 0: + value = float( self.missVal ) + + #NERFC +# if self.stationID == "RKWM1ME": +# value = -999 + + self.timeValueQuality[ datetime.strptime( \ + event.attrib['date'] + ' ' + event.attrib['time'], \ + '%Y-%m-%d %H:%M:%S' ) ] = ( \ + value, \ + float( event.attrib[ 'flag' ] ), False ) + + if len( self.timeValueQuality ) > 0: + self.fstPeriod = list( self.timeValueQuality.keys() )[0], \ + list( self.timeValueQuality.keys() )[-1] + if self.startDate != self.fstPeriod[0]: + self.startDate = self.fstPeriod[0] + + self.rfcname = stations.getRFCBySite( self.get5CharStationID() ) +# # +# #Set time step for WGRFC +# # +# if self.rfcname == "WGRFC": +# self.timeStep = (timeStepUnit, "3600") + +# #NERFC +# if self.stationID == "SWRN6" or self.stationID == "SACN6": +# if self.isForecast(): +# self.timeStep = (timeStepUnit, "86400") +# if self.stationID == "SWRN6": +# if self.isForecast(): +# self.startDate = self.fstPeriod[0] +# self.forecastDate = self.startDate - timedelta( days = 1 ) + # + # CNRFC assumes T0 = startDate + 48 hours + # + if self.rfcname == "CNRFC": + self.forecastDate = self.startDate + timedelta( hours = 48 ) + + if self.rfcname == "NCRFC" and self.forecastDate is not None: + if self.startDate - self.forecastDate > timedelta( hours = 12 ): + self.forecastDate = self.startDate + + def getTimeStepInSeconds(self): + if self.timeStep[0] == "second": + return int( self.timeStep[1] ) + elif self.timeStep[0] == "minute": + return int( self.timeStep[1] ) * 60 + elif self.timeStep[0] == "hour": + return int( self.timeStep[1] ) * 3600 + else: + return None + + + def setTimeStepInSeconds(self, dtInSec): + self.timeStep = ( "second", f"{dtInSec}") + + def getTimePeriod(self): + return self.fstPeriod + + def resetTimePeriod( self ): + if self.isEmpty(): + self.fstPeriod = None + self.startDate = None + return + + self.fstPeriod = list( self.timeValueQuality.keys() )[0], \ + list( self.timeValueQuality.keys() )[-1] + self.startDate = self.fstPeriod[0] + + + def getStartTime( self ): + return self.fstPeriod[0] + + def getT0(self): + if self.isForecast(): + # + # MBRFC has synoptic time, round down to 0, 6, 12 and 18 + # +# if self.rfcname == "MBRFC": +# hr = self.forecastDate.hour // 6 * 6 +# return self.forecastDate.replace(hour=hr) +# else: + return self.forecastDate + elif self.isObserved(): + return None + elif self.startDate is not None: + return self.startDate + elif not isEmpty(): + return self.fstPeriod[0] + else: + return None + + def getSyntheticValues( self ): + syntheticValues = [] + for k, v in self.timeValueQuality.items(): + syntheticValues.append( v[ 2 ] ) + return syntheticValues + + def getStationTimeValueInCMSQuality(self): + parameterset = set( ["RQOT", "QINE", "SQIN" ] ) + if self.parameterId in parameterset: + values = [] + for k, v in self.timeValueQuality.items(): + if self.unit == 'CFS': + values.append( v[0] * 0.028316846592 if \ + abs( v[0] - float( self.missVal ) ) > 0.0001 else \ + v[0] ) + elif self.unit == 'KCFS': + values.append( v[0] * 28.316846592 if \ + abs( v[0] - float( self.missVal ) ) > 0.0001 else \ + v[0] ) + elif self.unit == 'CMS': + values.append( v[0] ) + else: + raise RuntimeError( 'FATAL Error: RFC_Forecast: ' + \ + ' unknown unit: ' + self.unit ) + + offset = self.getOffsetTime() + return (self.stationID, offset, values, 100) + else: + return None + + def getValuesInCMS(self): + parameterset = set( ["RQOT", "QINE", "SQIN" ] ) + values = [] + if self.parameterId in parameterset: + for k, v in self.timeValueQuality.items(): + if self.unit == 'CFS': + values.append( v[0] * 0.028316846592 if \ + abs( v[0] - float( self.missVal ) ) > 0.0001 else \ + v[0] ) + elif self.unit == 'KCFS': + values.append( v[0] * 28.316846592 if \ + abs( v[0] - float( self.missVal ) ) > 0.0001 else \ + v[0] ) + elif self.unit == 'CMS': + values.append( v[0] ) + else: + raise RuntimeError( 'FATAL Error: RFC_Forecast: ' + \ + ' unknown unit: ' + self.unit ) + return values + + def getQueryTime(self): + querytime = None + if self.creationDateTime is not None: + querytime = int( time.mktime( \ + self.creationDateTime.timetuple() ) ) + elif self.forecastDate is not None: + querytime = int( time.mktime( \ + self.forecastDate.timetuple() ) ) + else: + querytime = int( time.mktime( datetime.now().timetuple() ) ) + + return querytime + + def getOffsetTime(self): + return self.fstPeriod[0] - self.getT0() + + def isEmpty(self): + if len( self.timeValueQuality ) <= 0: + return True + else: + for v in self.getValuesInCMS(): + if not math.isclose( v, float( self.missVal ),\ + abs_tol=0.0001 ): + return False + return True + + + def get5CharStationID(self): + if len( self.stationID ) > 5: + return self.stationID[:5] + else: + return self.stationID + + def getQuality(self): + return 100 + + def isObserved(self): + if self.qualifierId is not None and \ + self.qualifierId == "observed": + return True + elif self.qualifierId is not None and \ + self.qualifierId == "forecast": + return False + else: + return False + + def isForecast(self): + if self.qualifierId is not None and \ + self.qualifierId == "forecast": + return True + elif self.qualifierId is not None and \ + self.qualifierId == "observed": + return False + elif self.forecastDate is not None: + return True + else: + return False + + def print(self): + print( "Station: " + self.get5CharStationID() ) + print( "isForecast: ", "True" if self.isForecast() else "False" ) + print( "isObserved: ", "True" if self.isObserved() else "False" ) + print( "Parameter: " + self.parameterId ) + print( "Period: (" + self.getTimePeriod()[0].strftime( \ + "%m/%d/%Y %H:%M:%S" ) + ", " + \ + self.getTimePeriod()[1].strftime( \ + "%m/%d/%Y %H:%M:%S" ) + ")" ) + if self.isForecast(): + print( "T0: " + self.getT0().strftime( "%m/%d/%Y %H:%M:%S" ) ) + print( "Time step: " + self.timeStep[1] + " " + self.timeStep[0] ) + print( "Missing Value: " + self.missVal ) + print( "Time Value(org.) Quality" ) + for k, v in self.timeValueQuality.items(): + print(k.strftime( "%m/%d/%Y %H:%M"), v[0], v[1], v[2] ) + + + def getPreviousValueTime( self, t ): + previousTime = None + for k, v in self.timeValueQuality.items(): + if k <= t: + if not math.isclose( v[ 0 ], \ + float( self.missVal ),\ + abs_tol=0.0001 ): + previousTime = k + else: + break + + return previousTime + + def getNextValueTime( self, t ): + nextTime = None + for k, v in self.timeValueQuality.items(): + if k >= t: + if not math.isclose( v[ 0 ], \ + float( self.missVal ),\ + abs_tol=0.0001 ): + nextTime = k + break + return nextTime + + def removeMissVals(self): + keyMissVal = [] + for k in self.timeValueQuality.keys(): + v = self.timeValueQuality[ k ] + if math.isclose( v[ 0 ], float( self.missVal ),\ + abs_tol=0.0001 ): + keyMissVal.append( k ) + + if keyMissVal: + for k in keyMissVal: + self.timeValueQuality.pop( k ) + + self.resetTimePeriod() + + def addLeadingAndTrailingZeros(self): + # + # Add trailing and leading zeros when the event raw data + # doesn't begin or end with a zero value. + # This function can only be used for a forecast timeseries + # because T0 is not available for observed timeseries + # + t0 = self.getT0() + dt = timedelta( seconds = self.getTimeStepInSeconds() ) + if self.fstPeriod[0] > t0 - timedelta( hours = 48 ): + flag = self.timeValueQuality[ self.fstPeriod[0] ][1] + self.timeValueQuality.update( {self.fstPeriod[0] - dt: ( \ + 0.0, flag, False ) } ) + + self.timeValueQuality.move_to_end( self.fstPeriod[0] - dt, \ + last=False ) + + if self.fstPeriod[1] < t0 + timedelta( hours = 240 ): + flag = self.timeValueQuality[ self.fstPeriod[1] ][1] + self.timeValueQuality.update( {self.fstPeriod[1] + dt: ( \ + 0.0, flag, False ) } ) + + self.timeValueQuality.move_to_end( self.fstPeriod[1] + dt, \ + last=True ) + + self.resetTimePeriod() + + def linearInterpolate(self, dt): + # + # remove missing values + # + self.removeMissVals() + if self.isEmpty(): + return self.timeValueQuality + + t = list( self.timeValueQuality.keys() )[ 0 ] + last = list( self.timeValueQuality.keys() )[ -1 ] + + tvq = OrderedDict() + while t <= last: + if t in self.timeValueQuality: + tvq[ t ] = self.timeValueQuality[ t ] + else: + t1 = self.getPreviousValueTime( t ) + t2 = self.getNextValueTime( t ) + + if ( t2 - t1 ).total_seconds() > 48 * 3600: + + tvq[ t ] = ( float( self.missVal ), 0.0, False ) + + else: + + tvq[t] = ( ( self.timeValueQuality[t2][0] - \ + self.timeValueQuality[t1][0] ) * \ + ( ( t - t1 ).total_seconds() / \ + ( t2 - t1 ).total_seconds() ) + \ + self.timeValueQuality[t1][0] , + ( self.timeValueQuality[t2][1] - \ + self.timeValueQuality[t1][1] ) * \ + ( ( t - t1 ).total_seconds() / \ + ( t2 - t1 ).total_seconds() ) + \ + self.timeValueQuality[t1][1], \ + True ) + + t = t + dt + + if self.getTimeStepInSeconds() > int( dt.total_seconds() ): + self.setTimeStepInSeconds(int( dt.total_seconds() ) ) + + self.fstPeriod = list( tvq.keys() )[0], list( tvq.keys() )[-1] + self.startDate = self.fstPeriod[0] + self.timeValueQuality = tvq + return tvq + + def interForwardPersist(self, dt): + # + # remove missing values + # + self.removeMissVals() + + t = list( self.timeValueQuality.keys() )[ 0 ] + last = list( self.timeValueQuality.keys() )[ -1 ] + + tvq = OrderedDict() + while t <= last: + if t in self.timeValueQuality: + tvq[ t ] = self.timeValueQuality[ t ] + else: + t1 = self.getPreviousValueTime( t ) + + if ( t - t1 ).total_seconds() > 10 * 24 * 3600: + tvq[ t ] = ( float( self.missVal ), 0.0, False ) + else: + tvq[t] = ( self.timeValueQuality[t1][0], \ + self.timeValueQuality[t1][1], \ + True ) + + t = t + dt + + if self.getTimeStepInSeconds() != int( dt.total_seconds() ): + self.setTimeStepInSeconds(int( dt.total_seconds() ) ) + + self.fstPeriod = list( tvq.keys() )[0], list( tvq.keys() )[-1] + self.startDate = self.fstPeriod[0] + self.timeValueQuality = tvq + return tvq + + def linearInterpolateAndInterForwardPersist(self, dt): + # + # remove missing values + # + self.removeMissVals() + if self.isEmpty(): + return self.timeValueQuality + + t = list( self.timeValueQuality.keys() )[ 0 ] + last = list( self.timeValueQuality.keys() )[ -1 ] + + t0 = self.getT0() + + tvq = OrderedDict() + + while t < t0: + if t in self.timeValueQuality: + tvq[ t ] = self.timeValueQuality[ t ] + else: + t1 = self.getPreviousValueTime( t ) + t2 = self.getNextValueTime( t ) + + # + # For LMRFC files that have missing values starting before + # T0, that is t2 is None, next value for t is missing or + # T0 > last. + # + if not t1 or not t2: + tvq[ t ] = ( float( self.missVal ), 0.0, True ) + + else: + if ( t2 - t1 ).total_seconds() > 48 * 3600: + + tvq[ t ] = ( float( self.missVal ), 0.0, True ) + + else: + + tvq[t] = ( ( self.timeValueQuality[t2][0] - \ + self.timeValueQuality[t1][0] ) * \ + ( ( t - t1 ).total_seconds() / \ + ( t2 - t1 ).total_seconds() ) + \ + self.timeValueQuality[t1][0] , + ( self.timeValueQuality[t2][1] - \ + self.timeValueQuality[t1][1] ) * \ + ( ( t - t1 ).total_seconds() / \ + ( t2 - t1 ).total_seconds() ) + \ + self.timeValueQuality[t1][1], \ + True ) + + t = t + dt + + t = t0 + while t <= last: + if t in self.timeValueQuality: + tvq[ t ] = self.timeValueQuality[ t ] + else: + t1 = self.getPreviousValueTime( t ) + + if t1: + if ( t - t1 ).total_seconds() > 10 * 24 * 3600: + tvq[ t ] = ( float( self.missVal ), 0.0, True ) + else: + tvq[t] = ( self.timeValueQuality[t1][0], \ + self.timeValueQuality[t1][1], \ + True ) + # + # If the previous value doesn't exist or + # observed values (including T0) are not provided + # + else: + tvq[ t ] = ( float( self.missVal ), 0.0, True ) + + t = t + dt + + if self.getTimeStepInSeconds() != int( dt.total_seconds() ): + self.setTimeStepInSeconds(int( dt.total_seconds() ) ) + + self.fstPeriod = list( tvq.keys() )[0], list( tvq.keys() )[-1] + self.startDate = self.fstPeriod[0] + self.timeValueQuality = tvq + return tvq + + def persistBackward(self, t, maxt, v = None ): + + if self.isEmpty(): + return self.timeValueQuality + + start = list( self.timeValueQuality.keys() )[ 0 ] + dt = timedelta( seconds = self.getTimeStepInSeconds() ) + +# while \ +# math.isclose( self.timeValueQuality[ start ][ 0 ], \ +# float( self.missVal ), abs_tol=0.0001 ): +# start = start + dt + + if t >= start: + return None + + firstvalue = self.timeValueQuality[ start ] + + t1 = t + it = start - dt + if start - t > maxt: + t1 = start - maxt + + while t1 <= it: + + self.timeValueQuality.update({it: ( \ + firstvalue[0] if not isinstance(v, float) else v, \ + firstvalue[1], True ) } ) + self.timeValueQuality.move_to_end( it, last=False ) + + it = it - dt + + if start - t > maxt: + it = t1 - dt + + while t <= it: + + self.timeValueQuality.update({it: ( \ + float( self.missVal ) if not isinstance(v, float) else v, \ + 0.0, True ) } ) + self.timeValueQuality.move_to_end( it, last=False ) + + it = it - dt + + self.resetTimePeriod() + + return self.timeValueQuality + + def persistForward(self, t, v = None ): + + if self.isEmpty(): + return self.timeValueQuality + + end = list( self.timeValueQuality.keys() )[ -1 ] + + if t <= end: + return self.timeValueQuality + + dt = timedelta( seconds = self.getTimeStepInSeconds() ) + + while \ + math.isclose( self.timeValueQuality[ end ][ 0 ], \ + float( self.missVal ), abs_tol=0.0001 ): + end = end - dt + + vlast = self.timeValueQuality[ end ] + + end = end + dt + + while end <= t: + self.timeValueQuality[end] = ( \ + vlast[0] if not isinstance(v, float) else v,\ + vlast[1], True ) + end = end + dt + + self.resetTimePeriod() + return self.timeValueQuality diff --git a/data_assimilation_engine/rfc_ingestion/RFC_Forecast_test.py b/data_assimilation_engine/rfc_ingestion/RFC_Forecast_test.py new file mode 100644 index 0000000..8ad2f33 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/RFC_Forecast_test.py @@ -0,0 +1,145 @@ +import unittest +import copy +from datetime import datetime, timedelta +from PI_XML import PI_XML +from RFC_Forecast import RFC_Forecast +from RFC_Sites import RFC_Sites + +class RFC_Forecast_test(unittest.TestCase): + def run_rfc_test(self, pixmlfile, sitefile ): + rfcsites = RFC_Sites( sitefile ) + pixml = PI_XML( pixmlfile, rfcsites ) + + allids = pixml.getAllStationIDs() + print(allids) + for s in pixml.getFlowTimeseries(): + s.print() + print("=========================================") + + + for id in allids: + print( "============== " + id + " ===============" ) + ts = pixml.getObservedAndForecastForID( id ) +# if ts[0] is None or ts[1] is None: +# print( "Missing observed or forecast: " + id + " : " + +# rfcsites.getRFCBySite( id ) ) +# break + ts[0].print() + ts[1].print() + obvhourly = copy.deepcopy( ts[0] ) + fsthourly = copy.deepcopy( ts[1] ) + obvhourly.linearInterpolate( timedelta( hours = 1 )) + fsthourly.linearInterpolate( timedelta( hours = 1 )) + obvhourly.persistForward( obvhourly.getTimePeriod()[1] + \ + timedelta( days = 2 ) ) + obvhourly.persistBackward( obvhourly.getTimePeriod()[0] - \ + timedelta( days = 2 ) ) + fsthourly.persistForward( fsthourly.getTimePeriod()[1] + \ + timedelta( days = 2 ) ) + fsthourly.persistBackward( fsthourly.getTimePeriod()[0] - \ + timedelta( days = 2 ) ) + print( "============== " + "hourly: " + id + " ===============" ) + + print( "============== " + "combined: " + id + " ===============" ) + combined = \ + pixml.combineObvFstAndApplyPresistenceLinearInterpolation( ts ) + combined.print() + allcombined = \ + pixml.getReserviorObservedForecastCombinedWithT0() + + print( "============== all combined: ===============" ) + for c in allcombined: + print( "============== all combined: " + c.get5CharStationID() + " ===============" ) + c.print() + + self.assertTrue(True) + + def test_NCRFC( self ): + sitefile = "./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv" + pixmlfile = "./testdata/ncrfc/201911181200_NCRFC_Reservoir_Export.xml" + self.run_rfc_test( pixmlfile, sitefile ) + self.assertTrue(True) + + def test_NERFC( self ): + sitefile = "./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv" + pixmlfile = "./testdata/nerfc/NERFC_Reservoir_Export.xml" + + self.run_rfc_test( pixmlfile, sitefile ) + + self.assertTrue(True) + + def test_WGRFC( self ): + sitefile = "./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv" + pixmlfile = "./testdata/wgrfc/WGRFC_11.27.2019.16.00.xml" + + self.run_rfc_test( pixmlfile, sitefile ) + + self.assertTrue(True) + + def test_MARFC( self ): + sitefile = "./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv" + pixmlfile = "./testdata/marfc/2019112712_MARFC_Reservoir_Export.xml" + + self.run_rfc_test( pixmlfile, sitefile ) + self.assertTrue(True) + + def test_OHRFC( self ): + sitefile = "./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv" + for pixmlfile in [ \ + "./testdata/ohrfc/201911271319_OHRFC_Reservoir_Export_SAGU.xml", + "./testdata/ohrfc/201911271327_OHRFC_Reservoir_Export_SAGL.xml", + "./testdata/ohrfc/201911271331_OHRFC_Reservoir_Export_SMNU.xml", + "./testdata/ohrfc/201911271332_OHRFC_Reservoir_Export_SBVR.xml", + "./testdata/ohrfc/201911271332_OHRFC_Reservoir_Export_SMNL.xml" ]: + self.run_rfc_test( pixmlfile, sitefile ) + + def test_ABRFC( self ): + + sitefile = "./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv" + pixmlfile = "./testdata/abrfc/2019112712_ABRFC_RES_NWM_pixml_export.xml" + + self.run_rfc_test( pixmlfile, sitefile ) + + def test_LMRFC( self ): + + sitefile = "./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv" + pixmlfile = "./testdata/lmrfc/201911290111_LMRFC_Reservoir_export.xml" + + self.run_rfc_test( pixmlfile, sitefile ) + + def test_SERFC( self ): + + sitefile = "./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv" + pixmlfile = "./testdata/serfc/201911290600_SERFC_Reservoir_Export.xml" + + self.run_rfc_test( pixmlfile, sitefile ) + + def test_CBRFC( self ): + + sitefile = "./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv" + pixmlfile = "./testdata/cbrfc/201911281800_CBRFC_Reservoir_Export.xml" + + self.run_rfc_test( pixmlfile, sitefile ) + + def test_CNRFC( self ): + + sitefile = "./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv" + pixmlfile = "./testdata/cnrfc/201911290600_CNRFC_Reservoir_Export_for_NWM.xml" + + self.run_rfc_test( pixmlfile, sitefile ) + def test_NWRFC( self ): + + sitefile = "./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv" + pixmlfile = "./testdata/nwrfc/NWRFC_11.29.2019.2100.xml" + + self.run_rfc_test( pixmlfile, sitefile ) + + def test_MBRFC( self ): + + sitefile = "./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv" + pixmlfile = "./testdata/mbrfc/201911111541_MBRFC_Reservoir_Export.xml" + + self.run_rfc_test( pixmlfile, sitefile ) + +if __name__ == '__main__': + unittest.main() diff --git a/data_assimilation_engine/rfc_ingestion/RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv b/data_assimilation_engine/rfc_ingestion/RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv new file mode 100644 index 0000000..94b3577 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv @@ -0,0 +1,395 @@ +gage,gagedFlowline,NHDWaterbodyComID,lakeLink,SiteName,RFC +SOMT2,5570785,5569731,0,Somerville Lake,WGRFC +SMCT2,3589578,3588682,3589578, ,WGRFC +GGLT2,5671667,5670445,5671667, ,WGRFC +BLNT2,2572334,2571688,2572334,Belton Lake at North Texas Lakes,WGRFC +STIT2,5587560,120053388,5587560, ,WGRFC +GNGT2,5671657,5670421,5671657, ,WGRFC +TBLT2,1111447,1111211,1111447, ,WGRFC +WDRF1,2293124,10361596,2311949, ,SERFC +FOGG1,2306737,166758723,3443790, ,SERFC +CLBA1,18239649,21638156,18239647,Claiborne Dam near Alabama River,SERFC +BDWT2,1447048,1445978,1447048, ,WGRFC +DAWT2,4133643,4132531,4133643,Navarro Mills Lake at North Texas Lakes,WGRFC +ALAT2,166414852,166414857,166414852, ,WGRFC +PCTT2,2569848,120053201,2569848,Proctor Lake at North Texas Lakes,WGRFC +SAGT2,5712857,120053389,0,O. C. Fisher Lake at West Central Texas Lakes,WGRFC +SVIC1,20334576,20334374,20334576, ,CNRFC +GCDA3,21274156,21318615,21320525,GILA RIVER BELOW COOLIDGE DAM AZ.,CBRFC +BNBT2,1269108,1267968,1269108, ,WGRFC +LEWT2,1278674,120053021,1278674,Lake Lewisville at North Texas Lakes,WGRFC +GPVT2,1287177,120051934,1287177,Lake Grapevine at North Texas Lakes,WGRFC +WETG1,3298918,166758703,3298566, ,SERFC +CHDS1,22720895,167484077,6290331, ,SERFC +CMMG1,2051313,6495106,2051313,Lake Lanier at Chattahoochee River,SERFC +CVLG1,6505972,6495140,6505972, ,SERFC +GRNM6,18019788,18014672,18019788,Grenada Dam at Yalobusha River,LMRFC +MYST2,8348979,8347705,8348979,Pat Mayse Lake at North Texas Lakes,ABRFC +MGCO2,707038,167484743,0,"McGee Creek Reservoir, OK",ABRFC +DSNT2,426416,167300255,426416, ,ABRFC +ARBO2,19959560,167300271,19959986, ,ABRFC +SYOT2,13733430,13732800,13733430,WICHITA RV NR MABELLE TX,ABRFC +LYMA3,20585864,20584396,20585864, ,CBRFC +SMDA3,20478096,20476542,0,SALT RIVER BLW STEWART MOUNTAIN DAM AZ.,CBRFC +VDBA3,20439512,20438850,0,Bartlett Dam,CBRFC +HORA3,20440738,120053952,20440738, ,CBRFC +BWAA3,21384136,21383092,21384184, ,CBRFC +LKPC1,17575779,17573833,17575779,Santa Felicia Dam below Piru Creek,CNRFC +CCHC1,17611491,17609317,17611491, ,CNRFC +PYMC1,17569485,17568947,17572445, ,CNRFC +CBDN2,21436863,120052757,21436857, ,CBRFC +ALTO2,13757101,13756271,13757101, ,ABRFC +FOSO2,3142766,3140356,3142766,Foss Reservoir at Washita River,ABRFC +MTNO2,562357,167300241,562485, ,ABRFC +FTCO2,683617,681831,683617, ,ABRFC +NRMO2,481932,481656,0,Little River At Lake Thunderbird,ABRFC +TENO2,402464,402142,402464, ,ABRFC +CTRG1,6479573,6479321,6479573,Carters Lake at Coosawattee River,SERFC +KERV2,8653306,167496465,8653306,John H. Kerr Dam at Roanoke River,SERFC +NUDN7,166737579,166737717,166737584, ,SERFC +NHPN7,26325148,166755060,8898132, ,SERFC +WLKN7,9251746,9250140,9251746, ,SERFC +WTGT1,19744394,166997499,19745278, ,LMRFC +NFDA4,7653861,120052259,7653895, ,LMRFC +PENO2,21773239,167299912,7586119, ,ABRFC +MFDO2,21773255,21772239,21773125,Hudson Lake at Eastern Oklahoma Lakes,ABRFC +CNLO2,390140,389804,390140,Canton Lake above North Canadian River,ABRFC +NACC1,8212787,8210941,0, other Nacimiento Reservoir,CNRFC +SNRC1,8212925,120053442,8212925,SAN ANTONIO RIVER - LAKE SAN ANTONIO,CNRFC +LEXC1,17695749,17693799,0,LEXINGTON RESERVOIR NEAR LOS GATOS,CNRFC +COYC1,17695825,17693823,17695825,Coyote Reservoir (COYC1),CNRFC +FRAC1,17116483,120053836,0,SAN JOAQUIN RIVER NEAR FRIANT,CNRFC +GUUU1,10025198,10022260,10025198,GUNLOCK RESERVOIR,CBRFC +CHNK1,21160795,21160241,21161233, ,ABRFC +STXM7,7372051,167267899,7373063,Stockton Dam at Sac River,MBRFC +WPPM7,3665570,167166315,0,Wappapello Lake Pool at St. Francis River,LMRFC +PTTV2,8674429,8674019,8675539, ,SERFC +JCKV2,8521381,120053459,8523459,Gathright Dam at Lake Moomaw,MARFC +PTXM7,7388811,7387259,7388811, ,MBRFC +HILK1,2993926,2992128,2993756, ,MBRFC +PLKK1,940290180,10114004,940290180,Pomona Lake at 110 Mile Creek,MBRFC +MLVK1,10132098,167267891,10132098,Melvern Lake at Marais Des Cygnes River,MBRFC +JRLK1,20932366,167297255,20932366,John Redmond Lake at Neosho River,ABRFC +JSPT2,1159739,1158647,1159739,Lake Sam Rayburn at Angelina River,WGRFC +BKDL1,25040602,15078462,25040602, ,LMRFC +TYLA1,21687508,120052975,21687488, ,SERFC +MRFA1,21456722,21454020,21456716,Miller's Ferry near Alabama River,SERFC +LBUL1,19936525,120053896,19936525,Lake Bistineau at Bayou Dorcheat,LMRFC +WAGL1,8342801,8341399,0,WALLACE LAKE NEAR KEITHVILLE,LMRFC +ACTT2,5531594,5531274,5531594,Waco Lake at North Texas Lakes,WGRFC +WTYT2,5513692,120053204,5513692,Whitney Lake at North Texas Lakes,WGRFC +HAWC1,20344395,20342929,20344473,Lake Henshaw,CNRFC +ELPC1,20332816,20332350,20334592,EL CAPITAN DAM,CNRFC +LVNT2,1292396,1291638,1292396, ,WGRFC +CRLL1,1136266,167300374,1136426, ,LMRFC +BCEA4,19927057,19925795,19927057, ,LMRFC +LCAL1,15223102,167182354,15223102, ,LMRFC +HRTG1,6270218,166759840,6270218, ,SERFC +UBRA1,19569560,19568056,0,UPPER BEAR DAM NEAR BEAR CREEK,LMRFC +LBRA1,19568264,19626258,0,LITTLE BEAR RTU NEAR BELGREEN,LMRFC +CCRA1,19566578,19566308,19566880,CEDAR CREEK RTU,LMRFC +SRDM6,15290344,167182317,15290596,Tallahatchie River at Sardis Dam,LMRFC +ENDM6,15276792,167166404,15276792, ,LMRFC +DGDA4,22002032,22000120,22002032, ,LMRFC +NADA4,22700300,22697680,22700420, ,LMRFC +AHDA4,3747834,167300345,0,LITTLE RIVER AT MILLWOOD DAM NEAR ASHDOWN,ABRFC +DIEA4,3746252,3745478,0,SALINE RIVER AT DAM NEAR DIERKS,ABRFC +DQDA4,3745840,3745526,0,ROLLING FORK RIVER AT DAM NEAR DEQUEEN,ABRFC +GLLA4,3746224,3745418,0,COSSATOT RIVER AT GILLHAM DAM NEAR GILLHAM,ABRFC +BKDO2,630139,630011,0,MOUNTAIN FORK RIVER AT BROKEN BOW DAM NEAR BROKEN BOW,ABRFC +PCLO2,617464,617546,0,LITTLE RIVER AT PINE CREEK DAM NEAR WRIGHT CITY,ABRFC +HGLO2,592836,591880,592836,Hugo Lake at Eastern Oklahoma Lakes,ABRFC +WRLO2,8358571,8357843,8358571,Waurika Lake at Beaver Creek (OK),ABRFC +RSVA3,22439652,120052904,22439652, ,CBRFC +EUFO2,512899,167801019,512899, ,ABRFC +WSLO2,6047652,6043008,6047652,Wister Lake at Eastern Oklahoma Lakes,ABRFC +BMTA4,7803227,7801259,7803225, ,ABRFC +BMDA4,15234506,15231972,15234506, ,LMRFC +GRRA4,11774999,167299819,11774971,Greers Ferry Dam at Little Red River,LMRFC +ARKM6,15256122,15252778,15256386, ,LMRFC +NRMT1,19534722,166997625,19534808, ,LMRFC +OCCT1,19668053,19667261,19668053, ,LMRFC +HADT1,19678313,19674973,19678329,Apalachia Dam above Hiwassee River,LMRFC +BRDG1,19669385,19668381,19669385,Toccoa River at Blue Ridge Dam,LMRFC +NOTG1,19680543,166997585,19680543, ,LMRFC +FONN7,19736617,166912876,19736617,FONTANA DAM TVA at Little Tennessee River,LMRFC +CHAN7,19674637,166997584,0,Chatuge Dam,LMRFC +SHDT1,19753533,166997474,0,South Holston Dam,LMRFC +FPHT1,19754649,166997475,19754649, ,LMRFC +CRKT1,22180610,166997501,22180610,Cherokee Dam above Holston River,LMRFC +DUGT1,22144632,166997463,22146716, ,LMRFC +NRST1,22124294,166997561,14643271, ,LMRFC +BSGA4,7629426,167299818,7637444, ,LMRFC +GIBO2,21773859,167299918,21773859,Eastern Oklahoma Lakes at Ft. Gibson Lake,ABRFC +OOLO2,21799057,167299904,21799057, ,ABRFC +KEYO2,20973380,20971700,20973380, ,ABRFC +BIRO2,846662,846266,846662, ,ABRFC +SKLO2,941070050,941070128,941070050, ,ABRFC +HEYO2,373089,371555,373089, ,ABRFC +FSLO2,13811232,13811164,13811232, ,ABRFC +MRIT2,19981020,19980072,19981020,Lake Meredith at Canadian River,ABRFC +LKSA3,25138762,22071698,25138762, ,CBRFC +ISAC1,14972947,22670080,0,KERN RIVER AT ISABELLA DAM NEAR LAKE ISABELLA 2N,CNRFC +SCSC1,14931007,14930103,0,TULE RIVER AT SUCCESS DAM NEAR PORTERVILLE 5E,CNRFC +TMDC1,24758173,120052624,24758173,KAWEAH RIVER AT TERMINUS DAM NEAR WOODLAKE,CNRFC +CADC1,17695921,17693805,0,CALERO RESERVOIR,CNRFC +ANDC1,17695819,17693795,17695819, ,CNRFC +PFTC1,22063199,22050039,0,KINGS RIVER AT PINE FLAT DAM NEAR CENTERVILLE 10NE,CNRFC +PCON2,20603436,20603252,0,PINE CANYON DAM NEAR CALIENTE,CBRFC +MVDN2,20603440,20603248,0,MATHEW VALLEY DAM NEAR CALIENTE,CBRFC +FRVC2,17014767,17014523,17015277,Florida River below Lemon Resv.,CBRFC +LPVC2,17034231,17034145,17034971, ,CBRFC +GSPO2,21001215,21000069,21001215, ,ABRFC +KAWO2,21038211,21038107,21038211, ,ABRFC +FLLK1,21517708,21514748,21517708,Fall River Lake above Fall River (KS),ABRFC +HULO2,21785290,21784832,21785290, ,ABRFC +CPLO2,21784744,21783714,21784744, ,ABRFC +ECLK1,20943984,20943110,20943984,Elk City Lake above Elk River (KS),ABRFC +BIGK1,21797549,21795481,21797721, ,ABRFC +CLRM7,7669160,7666880,7669104,Clearwater Lake Pool at Black River,LMRFC +TRLK1,20955434,20953830,20955434, ,ABRFC +CNGK1,20929492,20927390,20929492, ,ABRFC +EDRK1,20082038,20079044,0,Walnut River At El Dorado Lake,ABRFC +MLBK1,20919169,20917521,20919169,Marion Reservoir at Cottonwood River,ABRFC +KANK1,25068602,167266519,25068602, ,MBRFC +CRFC2,3251439,3251185,3252185, ,CBRFC +MPSC2,3254131,3252989,0,MORROW POINT RESERVOIR NEAR MONTROSE,CBRFC +BPRC1,8915961,8914219,8915961, ,CNRFC +TOPN2,10743558,10742110,0,TOPAZ CANAL BELOW TOPAZ LAKE NEAR TOPAZ,CNRFC +HETC1,17082365,17080669,17082207, ,CNRFC +CHVC1,17082185,17080601,17082185, ,CNRFC +NIMC1,15022633,15021939,15024897, ,CNRFC +LBEC1,15032995,130951632,8016105,Lake Berryessa (LBEC1),CNRFC +WSDC1,8276453,8271433,8276453, ,CNRFC +LAMC1,8269153,8306696,8269145,Lake Mendocino,CNRFC +INVC1,8007863,8005383,0,INDIAN VALLEY RESERVOIR NEAR LOWER LAKE,CNRFC +HLEC1,8062551,8060131,8062551,Englebright Lake (HLEC1),CNRFC +DNRC1,8934506,8932994,0,DONNER LAKE NEAR TRUCKEE,CNRFC +TAHC1,8942039,120053784,8942039, ,CNRFC +BCVC1,8933684,8932970,8934482, ,CNRFC +STPC1,8933230,120053476,8934442, ,CNRFC +PSRC1,8933720,8932974,8934488,Prosser Creek Reservoir at Prosser Creek,CNRFC +SFSU1,3907377,3906255,0,SCOFIELD RESERVOIR NEAR SCOFIELD,CBRFC +MLSU1,4876845,4876263,4877561, ,CBRFC +MDCC2,1337204,1336910,1338026, ,CBRFC +TRBC2,1333490,1332558,1333610, ,CBRFC +BLRC2,1312847,1312051,1313385, ,CBRFC +WLSK1,7331754,7330556,7331754, ,MBRFC +MLFK1,5927296,167800866,5927296,MILFORD LK NR JUNCTION CITY KS,MBRFC +MTTK1,2281171,18880944,2281171, ,MBRFC +PRRK1,748101,746373,748101, ,MBRFC +CLIK1,24668460,3730511,24668460,CLINTON LK NR LAWRENCE KS,MBRFC +SLKM7,2530631,2529647,2530631,Smithville Reservoir other Reservoirs,MBRFC +LBRM7,4461528,4460822,4461528, ,MBRFC +STJW2,3717136,167484418,167484406,Stonewall Jackson Dam,OHRFC +TGOW2,4352134,166899099,4352136, ,OHRFC +YGOP1,3809037,3806779,3809045, ,OHRFC +CMDP1,4754924,167484295,4754908,CONEMAUGH RIVER AT TUNNELTON PA,OHRFC +CCDP1,4741239,4739601,0,CROOKED CREEK AT CROOKED CREEK DAM NEAR FORD CITY,OHRFC +LHDP1,4583044,167484347,0,LOYALHANNA CREEK AT LOYALHANNA DAM PA,OHRFC +RADI4,940280022,120053324,0,Rathbun Dam,MBRFC +CBGC2,1234513,1233515,0,COLORADO RIVER NEAR GRANBY CO,CBRFC +WCKC2,1234173,1233595,0,WILLOW CREEK BELOW WILLOW CREEK RESERVOIR (WILWCRCO),CBRFC +WFRC2,1232803,1230577,1232989,WILLIAMS FORK BELOW WILLIAMS FORK RESERVOIR CO,CBRFC +BGMC2,1313213,1311881,1313287, ,CBRFC +LAAU1,11976201,11975087,0,MOON LAKE RESERVOIR NEAR MOUNTAIN HOME,CBRFC +DCRU1,10376632,10375440,10376632, ,CBRFC +WHSC1,2782777,2781993,2782763, ,CNRFC +LLKC1,8246426,8245384,8246596, ,CNRFC +IRGC1,361671,361273,362919,Klamath River below Iron Gate Dam,CNRFC +HLZU1,664760,664014,0,Hyrum at Little Bear River,CBRFC +OPDU1,10275828,10273702,10275998, ,CBRFC +ECWU1,10093052,10091588,10093132, ,CBRFC +ECCU1,10277268,10276260,10277316,EAST CANYON CREEK NEAR MORGAN UT,CBRFC +CRDU1,10089426,10089124,10090806,LOST CREEK NEAR CROYDEN UTAH,CBRFC +BRWU1,7879744,166248016,7880842, ,CBRFC +MCWW4,3197078,120051967,0,BLACKS FORK NEAR MILLBURNE WY,CBRFC +GRZU1,10040950,10038598,10040912,Greendale near Green River (WY-UT-CO),CBRFC +SAYI4,6597700,6597410,0,Saylorville Dam Pool,NCRFC +PELI4,4995175,167121028,22249819,Red Rock Reservoir at Des Moines River,NCRFC +CRVI4,17540805,17539821,17540805, ,NCRFC +KITO1,13156205,13155459,13156523, ,OHRFC +MLPO1,13154265,13152651,13154569,"Milton Dam, Ohio",OHRFC +BRWO1,13156389,166899115,13156577, ,OHRFC +MSQO1,13153121,13152353,13154427,Mosquito Creek Lake below Mosquito Creek,OHRFC +SHDP1,12999322,12996298,12999322,Shenango Dam Tailwater at Shenango River,OHRFC +TNTP1,10222062,10922417,10222062,Tionesta Dam Pool at Tionesta Creek,OHRFC +KNZP1,8975668,166899002,0,Kinzua Dam on Allegheny River other Central PA Dams,OHRFC +GHDP1,6874115,6873355,6874143, ,OHRFC +BCHP1,8139444,120053440,8139718,Blanchard at Bald Eagle Creek,MARFC +STVC3,7718288,120052268,7718286, ,NERFC +SCIR1,6129639,6127281,6130387,Scituate Reservoir,NERFC +GBRN6,3247596,3247342,3247596,Gilboa Dam at Schoharie Creek,NERFC +DWNN6,1748727,1748473,1748773, ,MARFC +CNNN6,2614136,2613174,2614136, ,MARFC +GBFW4,18312556,18352167,18355239, ,CBRFC +LOSO3,23923436,23927716,23923436,Lost Creek Lake other Rogue River,NWRFC +BNGM1,3319220,3318110,3319188, ,NERFC +DRBI1,24158991,24161747,24158993, ,NWRFC +SCOO3,23805106,23807386,23805110,Reservoir at Henry Hagg Lake,NWRFC +HAHW1,23977690,23979340,23977692, ,NWRFC +BMDC2,3254269,3252975,0,BLUE MESA DAM NEAR GUNNISON,CBRFC +MYSU1,10814786,10814778,10815916,Marysvale near Sevier River,CBRFC +OCEU1,10806037,120051930,0,OTTER CREEK RESERVOIR- ANTIMONY- NR,CBRFC +KNFC1,348545,347987,349887, ,CNRFC +NHGC1,17068300,17065952,0,NEW HOGAN LAKE (NEW HOGAN DAM),CNRFC +CMCC1,3953573,3950979,0,Lake Camanche (CMCC1),CNRFC +EPRC1,7994771,7993809,7996275, ,CNRFC +SGEC1,7993205,7990259,7993205,STONY GORGE RESERVOIR NEAR ELK CREEK,CNRFC +BLBC1,7992981,7989989,0,STONY CREEK AT BLACK BUTTE DAM NEAR ORLAND,CNRFC +ORDC1,2778598,12076080,0,Lake Oroville (ORDC1),CNRFC +CFWC1,15013989,15012277,0,BEAR RIVER AT CAMP FAR WEST DAM NEAR NEAR WHEATLAND 6E,CNRFC +NBBC1,8062451,8060079,8062451, ,CNRFC +JOVU1,4877487,4876219,4877545, ,CBRFC +ELLU1,4876063,4875263,4876063, ,CBRFC +VEGC2,3180780,3180118,3181278,VEGA RESERVOIR NEAR COLLBRAN CO,CBRFC +RRGC2,3175298,3174852,3175958, ,CBRFC +REPN1,19043517,19040443,19043517,Harlan Reservoir at Republican River,MBRFC +STAU1,11966427,11965847,11967775, ,CBRFC +STIU1,11964915,11964599,0,STRAWBERRY - STRAWBERRY RESERVOIR- SOLDIER SPRINGS,CBRFC +UTLU1,10329217,10327875,10329101,Jordan - Utah Lake- Provo,CBRFC +GPDN1,11761568,11758154,11761566,Gavins Point Dam at Missouri River,MBRFC +BIGW4,18301696,18300278,18303140, ,CBRFC +VIVW4,3192982,3192800,0,Hams Fork below Viva Naughton Reservoir,CBRFC +BLZI1,4472263,7897413,4472263,BEAR LAKE OUTLET CANAL NR PARIS,CBRFC +BBOI1,4560894,4558474,0,BEAR R BLO UT P&L @ ONEIDA,CBRFC +BEAI1,4556428,4467951,4469009, ,CBRFC +HIKN6,22743759,22741995,22743759, ,NERFC +STDM1,6724973,6719717,0,SEBAGO LAKE AT STANDISH,NERFC +PRVO3,23713968,24518496,24515510, ,NWRFC +RKWM1,1022672,166195943,1022652, ,NERFC +HHWM8,22965000,22971534,22965004,HUNGRY HORSE RESERVOIR NR HUNGRY HORSE MT,NWRFC +CPNN6,21982301,21980955,21982301,Canandaigua at Canandaigua Lake,NERFC +MTHT2,3170376,3169144,3170376,Mathis 5 SSW - Lake Corpus Christi Mathis 5 SSW - Lake Corpus Christi,WGRFC +CTDT2,10664160,120052363,10664532,Three Rivers 4 W - Choke Canyon Dam,WGRFC +CKDT2,1639279,1637751,1639279,Schroeder - Coleto Creek Reservoir,WGRFC +HSJT2,1440417,120053035,1469612,Sheldon - Lake Houston,WGRFC +TBRT2,5702849,5702167,5702849,San Angelo 8 SW - Twin Buttes Reservoir,WGRFC +BCRT2,5754180,5753298,5754180,Brady 3 W - Brady Creek Reservoir,WGRFC +MSDT2,5781955,120053393,5781955,Lake Travis near Austin,WGRFC +LCTT2,1467932,120053033,1468386,Conroe 7 W - Lake Conroe,WGRFC +BKLT2,9535873,8327942,9535873,Burkeville 16 NNE - Toledo Bend Dam,WGRFC +TRNT2,1300600,120051936,1300600,Trinidad 7 NNW - Cedar Creek Reservoir,WGRFC +GBYT2,5499430,120053199,5499430,Granbury - Lake Granbury,WGRFC +CLRT2,5636271,5635571,5636271,Colorado City 5 SW - Lake Colorado City,WGRFC +EVST2,5722903,5722027,5722903,Robert Lee 2 W - E. V. Spence Reservoir,WGRFC +RLAT2,3210709,3210503,3211187,Orla - Red Bluff Reservoir,WGRFC +HAWT2,5489975,5489185,5489975,Hawley 8 E - Fort Phantom Hill Reservoir,WGRFC +PSMT2,5497152,120053359,5497152,Palo Pinto 11 NW - Possum Kingdom Lake,WGRFC +EAMT2,1306945,120051933,1306945,Eagle Mountain Reservoir above Fort Worth,WGRFC +FLWT2,1268404,1267710,1269054,Fort Worth 6 NW - Lake Worth,WGRFC +LART2,1269102,1267898,1269102,Arlington 10 W - Lake Arlington,WGRFC +GPET2,1269878,1269548,1269878,Venus - Mountain Creek Lake,WGRFC +FRHT2,1294840,120053026,1294840,Forney 4 NW - Lake Ray Hubbard,WGRFC +PNTT2,5256789,120053340,5256787,Point 7 S - Lake Tawakoni Sabine River,WGRFC +LFKT2,5293507,5292739,5293507,Quitman 4 W - Lake Fork Reservoir,WGRFC +LNGC1,2823750,17080041,17080371,DON PEDRO RES NR LA GRANGE CA,CNRFC +WCDP1,9052441,9051313,9053149,Woodcock Creek at Woodcock Dam-PA,OHRFC +HDLN6,22294712,22294608,22294820,Sacandaga River,NERFC +CLEW1,24125829,24136807,24125831,Cle Elum Outflow at Yakima River,NWRFC +SWRN6,15514540,166890766,15514540, ,NERFC +FALT2,326437,120051895,326437,Falcon Reservoir near Falcon Heights,WGRFC +MDLT2,10835508,10834778,10835508,Bandera Falls - Medina Lake,WGRFC +AMIT2,285566,120052275,285566,Amistad Reservoir near Del Rio Del Rio - Amistad Reservoir Dam,WGRFC +BUDT2,5757778,5756886,5757778,Lake Buchanan near Burnet,WGRFC +LLST2,5576175,5575089,5576175,Seale 3 NE - Lake Limestone,WGRFC +LVDT2,1498834,1492358,1492992,Goodrich 5 NW - Lake Livingston,WGRFC +LMTT2,5279734,5278224,5279734,Dirgin - Martin Creek Lake near Tatum,WGRFC +LMVT2,5279800,5278562,5279800,Buncomb 1 SE - Lake Murvaul,WGRFC +LCRT2,5279506,5278062,5279686,Tatum - Lake Cherokee,WGRFC +SKCT2,1149839,1148575,1150543,New Salem 1 W - Striker Lake Reservoir,WGRFC +LPTT2,4451942,4451216,4452342,Frankston - Lake Palestine,WGRFC +LCLT2,5512476,5511586,5512476,Cleburne 4 S - Lake Pat Cleburne,WGRFC +LLET2,2568408,2567012,2568408,Ranger 7 S - Leon Reservoir,WGRFC +LBWT2,5735541,5734861,5735541,Brownwood 8 N - Lake Brownwood,WGRFC +LKCT2,5740776,5740630,5740956,Silver Valley 6 NNE - Lake Coleman,WGRFC +CCRT2,5635913,5635591,5636277,Colorado City 7 S - Champion Creek Reservoir,WGRFC +BLKT2,5721979,5721267,5721979,Blackwell - Oak Creek Reservoir,WGRFC +JBTT2,5633473,5632093,5633473,Knapp 3 SSW - J. B. Thomas Reservoir,WGRFC +LSWT2,5490441,5490089,5491015,Sweetwater 7 ESE - Lake Sweetwater,WGRFC +SMKT2,5543698,5541638,5543698,Millers Creek Reservoir near Bomartin,WGRFC +LSFT2,5508410,5506926,5508410,Haskell 10 SE - Paint Creek at Lake Stamford,WGRFC +HCRT2,5526171,5525777,5526171,Breckenridge - Hubbard Creek Reservoir,WGRFC +LMGT2,5494750,5494328,5494750,Graham 2 NW - Lake Graham,WGRFC +LPPT2,5497354,5495308,5497354,Lake Palo Pinto near Santo,WGRFC +BPRT2,1305617,1304891,1306513,Bridgeport 5 NW - Bridgeport Reservoir,WGRFC +NMBA4,7829970,7827790,7830220, ,ABRFC +MSWC1,21608717,21606713,0,LAKE MCCLURE AT EXCHEQUER DAM NEAR SNELLING 10ENE,CNRFC +AMFI1,23163005,120052939,24557503,Neeley at Snake River,NWRFC +APPO3,23936033,23938563,23936037,,NWRFC +COTO3,23759308,23761342,23759312,,NWRFC +DORO3,23759442,23761332,23759588,Dorena Reservoir at Reservoir,NWRFC +FALO3,23752598,23756162,,Fall Creek at Reservoir,NWRFC +PALI1,24438932,120052927,,SNAKE RIVER NR IRWIN ID,NWRFC +JLKW4,23123437,23127757,23123437,,NWRFC +ISLI1,24460018,24465514,24460018,,NWRFC +CSDI1,24177103,120054056,24177561,,NWRFC +BRNI1,24192804,120054057,24192806,,NWRFC +BLUO3,23773405,23777375,23773407,,NWRFC +FOSO3,23785769,23788981,23785769,Foster nr Sweet Home at Reservoir,NWRFC +MAYW1,24248946,24252328,24248950,,NWRFC +MSRW1,24248994,24252336,24248994,"RIFFE LAKE NEAR MOSSYROCK, MOSSYROCK DAM",NWRFC +COEI1,24379413,23016890,24379413,Coeur d'Alene at Lake Coeur d'Alene,NWRFC +CABI1,22975980,22983738,,CLARK FORK-CABINET GORGE DAM,NWRFC +RODW1,24255291,24260289,24255291,ROSS RESERVOIR NEAR NEWHALEM WA,NWRFC +SHAW1,24255877,24260837,25184464,Concrete at Baker River,NWRFC +UBDW1,24255915,24260671,24255915,,NWRFC +SNOA2,XXXXXX,15243900,xxxxxx,Snow River,APRFC +SKLA2,XXXXXX,15266110,xxxxxx,Skilak River,APRFC +GGRT1,18432917,22134539,18432921,GREAT FALLS DAM NEAR ROCK ISLAND,LMRFC +RDTA4,21999712,15237526,15237620,Ouachita River at Remmel Dam above Jones Mill AR,LMRFC +KYDK2,10575371,120052349,10575371,Tennessee River at Kentucky Lake Pool,LMRFC +FLDT1,22134009,166997493,22134007,Tennessee River at Ft Loudoun Dam Lenoir City 1E,LMRFC +PICT1,19578817,19598582,25314235,Tennessee River at Pickwick Dam Tailwater,LMRFC +MHDT1,14644171,120052841,14644171,Clinch River above Melton Hill Dam,LMRFC +GVDA1,25311913,167182204,25311913,Tennessee River below Guntersville Dam,LMRFC +LDBL1,15226990,15222888,15223068,Lake DArbonne at Bayou DArbonne,LMRFC +CKDT1,25309298,166997575,25309298,Tennesse River at Chickamauga Dam,LMRFC +WLSA1,19633474,166997604,19633480,WILSON LOCK DAM TAILWATER NEAR FLORENCE 2E,LMRFC +TDTT1,22134049,936010061,19720259,L TENN TELLICO DAM,LMRFC +WBOT1,22134501,166997494,22134453,Tennessee River at Watts Bar Dam,LMRFC +NVXN6,4147432,4146742,4148038,NEVERSINK RIVER AT NEVERSINK NY,MARFC +RVRC3,6111421,6106841,6107211,WEST BRANCH FARMINGTON RIVER AT RIVERTON CT,NERFC +MCKO3,23648272,23655210,23648274,MCKAY RESERVOIR NEAR PENDLETON,NWRFC +LGRW1,24282032,24284232,24282042,NISQUALLY RIVER AT LA GRANDE Alder lake,NWRFC +DEXO3,23751830,23756168,23751844,Dexter Dam Lake MIDDLE FORK WILLAMETTE RIVER NEAR DEXTER OR,NWRFC +CDRW1,24537944,24539838,24537962,Cedar River At Cedar Falls,NWRFC +GPRO3,23785925,23788951,23785925,Quartzville Creek at Green Peter Reservoir,NWRFC +MILI1,24491294,24500352,24495672,Snake River near Milner below Milner Dam ,NWRFC +BWMI1,23250977,120053985,947040096,Big Wood River below Magic Dam,NWRFC +BULO3,24150401,24152927,24150401,BULLY CREEK RESERVOIR NEAR VALE,NWRFC +OGCN2,23320100,23326906,23320108,Owyhee River near Wildhorse,NWRFC +CGRO3,23773009,23777431,23773011,Cougar Dam below South Fork McKenzie River,NWRFC +WYNW1,23856921,23859017,23856923,WYNOOCHEE RIVER NEAR GRISDALE WA,NWRFC +STOW1,23970763,23974227,23970765,SOUTH FORK TOLT RIVER NEAR CARNATION WA,NWRFC +WODI1,23266994,23272336,23267042,Little Wood River near Carey Little Wood River Dam,NWRFC +PHLO3,24208367,24215523,24208369,Phillips Lake,NWRFC +BEUO3,23412937,23422703,23412939,NORTH FORK MALHEUR RIVER NEAR BEULAH,NWRFC +KERM8,24338704,120054065,24338704,Polson at Flathead Lake,NWRFC +OCHO3,23713982,23717064,23713984,Ochoco Creek Below Ochoco Dam,NWRFC +KBDM8,22878293,22886855,22878297,Libby Dam near Libby below Kootenai River,NWRFC +PSLI1,22988683,22992347,22988683,Priest Lake at Outlet near Coolin,NWRFC +ANDI1,23386379,23393893,23387319,South Fork Boise River below Anderson Ranch Dam Idaho,NWRFC +BUMW1,24423019,24428511,24423025,Bumping Dam below Bumping River,NWRFC +BCLO3,23780511,23783629,23780525,Detroit Lake at N Santiam River,NWRFC +KACW1,24126097,24136753,24126101,Kachess Outflow at Yakima River,NWRFC +SLKW1,23963709,23966965,23963711,SPADA LAKE,NWRFC +DWRI1,23630892,23634782,23630892,Dworshak Reservoir near Ahsahka,NWRFC +OWYO3,24540979,120052938,24540985,Owyhee Dam at Owyhee River,NWRFC +SKBW1,24285508,24286248,24285520,NF SKOKOMISH R NR LWR CUSHMAN DAM NR POTLATCH WA,NWRFC +MAKI1,23238444,23246628,23239256,BIG LOST RIVER BL MACKAY RES NR MACKAY ID,NWRFC +UNYO3,24200221,24204827,24200223,Burnt River below Unity Reservoir,NWRFC +HCRO3,23751946,23756364,23751946,Hills Creek near Oakridge,NWRFC +HCDI1,24219835,24197070,24192562,Snake River at Hells Canyon,NWRFC +KEEW1,24126167,24136769,24126169,Yakima River at Keechelus Outflow,NWRFC +NOXM8,22976068,22983840,22976094,NOXM8,NWRFC +RIMW1,24423299,24428693,24423307,TIETON AT TIETON DAM,NWRFC +WARO3,23413305,23422747,23413307,Malheur River below Warm Springs Reservoir,NWRFC +FRNO3,23763139,23769069,23763141,Long Tom River below Fern Ridge Reservoir,NWRFC +HMAC2,1321058,1320604,1321114,HOMESTAKE RESERVOIR NEAR RED CLIFF 10SW HOMRESCO HOMOUTCO,CBRFC +CLFA3,20733845,3528295,3528925,Colorado River at Lees Ferry Glen Canyon Dam,CBRFC +ARCN5,17040461,120053831,17040459,San Juan River near Archuleta probably Navajo dam,CBRFC +WBWU1,10093214,10091800,10093168,WEBER RIVER NEAR WANSHIP UT,CBRFC +ELCC2,1352642,1351760,1353072,Elkhead Ck Elkhead Reservoir,CBRFC +RUDC2,1326889,1326659,1327495,FRYINGPAN RIVER NEAR RUEDI CO,CBRFC +LLDP1,3773975,3773141,3773977,CHEAT RIVER AT LAKE LYNN DAM tailwater gage,OHRFC diff --git a/data_assimilation_engine/rfc_ingestion/RFC_Sites.py b/data_assimilation_engine/rfc_ingestion/RFC_Sites.py new file mode 100644 index 0000000..603abe1 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/RFC_Sites.py @@ -0,0 +1,138 @@ +############################################################################### +# Module name: RFC_Sites +# # +# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # +# # +# Initial version date: # +# # +# Last modification date: 08/19/2019 # +# # +# Description: manage the RFC sites in CSV format # +# # +############################################################################### + +import csv + +class RFC_Sites: + """ + Store RFC site information + """ + def __init__(self, csvSitefile ): + """ + Initialize the RFC_Sites object with a given + filename + """ + self.source = csvSitefile + + self.gauge = [] + self.gaugedFlowline = [] + self.NHDWaterbodyComID = [] + self.lakeLink = [] + self.SiteName = [] + self.RFC = [] + self.comments = [] + with open( csvSitefile, mode='r') as csvsite_file: + csvsite_reader = csv.DictReader( csvsite_file ) + line_count = 0 + for row in csvsite_reader: + if line_count == 0: + print('Column names are ' + ", ".join(row)) + line_count += 1 + self.gauge.append( row["gage"] ) + self.gaugedFlowline.append( row["gagedFlowline"] ) + self.NHDWaterbodyComID.append( row["NHDWaterbodyComID"] ) + self.lakeLink.append( row["lakeLink"] ) + self.SiteName.append( row["SiteName"] ) + self.RFC.append( row["RFC"] ) + self.comments.append( "Not present!" ) + line_count += 1 + + print('Processed ' + str( line_count ) + ' lines.') + + + @property + def source(self): + return self._source + + @source.setter + def source(self, s): + self._source = s + + @property + def gauge(self): + return self._gauge + + @gauge.setter + def gauge(self, g): + self._gauge=g + + @property + def gaugedFlowline(self): + return self._gaugedFlowline + + @gaugedFlowline.setter + def gaugedFlowline(self, g): + self._gaugedFlowline=g + + @property + def NHDWaterbodyComID(self): + return self._NHDWaterbodyComID + + @NHDWaterbodyComID.setter + def NHDWaterbodyComID(self, n): + self._NHDWaterbodyComID=n + + @property + def lakeLink(self): + return self._lakeLink + + @lakeLink.setter + def lakeLink(self, l): + self._lakeLink=l + + @property + def SiteName(self): + return self._SiteName + + @SiteName.setter + def SiteName(self, s): + self._SiteName=s + + @property + def RFC(self): + return self._RFC + + @RFC.setter + def RFC(self, r): + self._RFC=r + + @property + def comments(self): + return self._comments + + @comments.setter + def comments(self, c): + self._comments=c + + def siteExist(self, s): + return s in self.gauge + + def addComment( self, sta, message ): + try: + ind = self.gauge.index( sta ) + self._comments[ ind ] = message + except ValueError as e: + raise RuntimeError( e ) + + def getSitesByRFC( self, rfcname ): + sites = [] + for s, rfc in zip(self.gauge, self.RFC): + if rfc == rfcname: + sites.append( s ) + return sites + + def getRFCBySite( self, sta ): + for s, rfc in zip(self.gauge, self.RFC): + if s == sta: + return rfc + return None diff --git a/data_assimilation_engine/rfc_ingestion/RFC_Sites_test.py b/data_assimilation_engine/rfc_ingestion/RFC_Sites_test.py new file mode 100644 index 0000000..6320274 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/RFC_Sites_test.py @@ -0,0 +1,17 @@ +import unittest +from RFC_Sites import RFC_Sites + +class RFC_Sites_test(unittest.TestCase): + def test(self): + self.assertTrue(True) + + def testInit(self): + sites = RFC_Sites('./RFC_Reservoir_Locations_for_Forecast_Ingest_into_NWM_All_RFCs.csv' ) + self.assertEqual( len(sites.gauge), 380 ) + self.assertEqual( len(sites.gaugedFlowline), 380 ) + self.assertEqual( len(sites.NHDWaterbodyComID), 380 ) + self.assertEqual( len(sites.lakeLink), 380 ) + self.assertEqual( len(sites.SiteName), 380 ) + +if __name__ == '__main__': + unittest.main() diff --git a/data_assimilation_engine/rfc_ingestion/make_time_series_from_pi_xml.py b/data_assimilation_engine/rfc_ingestion/make_time_series_from_pi_xml.py new file mode 100644 index 0000000..eac55e3 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/make_time_series_from_pi_xml.py @@ -0,0 +1,220 @@ +#! /usr/bin/env python +############################################################################### +# File name: make_time_slice_from_pi_xml.py # +# # +# Author : Zhengtao Cui (Zhengtao.Cui@noaa.gov) # +# # +# Initial version date: # +# # +# Last modification date: 5/30/2019 # +# # +# Description: The driver to create NetCDF time slice files from Army Crops # +# of Engineers real-time observations # +# # +############################################################################### + +import os, sys, time, urllib, getopt, re +import logging +import glob +from string import * +import xml.etree.ElementTree as etree +from datetime import datetime, timedelta +from PI_XML import PI_XML +from RFC_Forecast import RFC_Forecast +from RFCTimeSeries import RFCTimeSeries +from RFCHelper import RFCHelper +from RFC_Sites import RFC_Sites +from EmptyDirOrFileException import EmptyDirOrFileException +#import Tracer + +""" + The driver to parse downloaded ACE XML observations and + create time slices and write to NetCDF files + Author: Zhengtao Cui (Zhengtao.Cui@noaa.gov) + Date: May 30, 2019 +""" +def main(argv): + """ + function to get input arguments + """ + inputdir = '' + try: + opts, args = getopt.getopt(argv,"hi:o:s:",["idir=", "odir=", \ + "sites="]) + except getopt.GetoptError: + print('make_time_slice_from_pi_xml.py -i -o -s ') + sys.exit(2) + for opt, arg in opts: + if opt == '-h': + print( \ + 'make_time_slice_from_pi_xml.py -i -o -s ') + sys.exit() + elif opt in ('-i', "--idir"): + inputdir = arg + if not os.path.exists( inputdir ): + raise RuntimeError( 'FATAL Error: inputdir ' + \ + inputdir + ' does not exist!' ) + elif opt in ('-o', "--odir" ): + outputdir = arg + if not os.path.exists( outputdir ): + raise RuntimeError( 'FATAL Error: outputdir ' + \ + outputdir + ' does not exist!' ) + + elif opt in ('-s', "--rfcsitefile" ): + sitefile = arg + if not os.path.exists( sitefile ): + raise RuntimeError( 'FATAL Error: sitefile ' + \ + sitefile + ' does not exist!' ) + + return (inputdir, outputdir, sitefile) + + + + +t0 = time.time() + +logging.basicConfig(format=\ + '%(asctime)s - %(name)s - %(levelname)s - %(message)s',\ + level=logging.INFO) +logger = logging.getLogger(__name__) +formatter = logging.Formatter(\ + '%(asctime)s - %(name)s - %(levelname)s - %(message)s') +#logger.setFormatter(formatter) +logger.info( "System Path: " + str( sys.path ) ) + +if __name__ == "__main__": + try: + odir = main(sys.argv[1:]) + except Exception as e: + logger.error("Failed to get program options.", exc_info=True) + +indir = odir[0] +outdir = odir[1] +rfcsitefile = odir[2] +logger.info( 'Input dir is "' + indir + '"') +logger.info( 'Output dir is "' + outdir + '"') +logger.info( 'RFC site file is "' + rfcsitefile + '"') + +# +# Load ACE observed XML discharge data +# + +try: + fcsts = [] + + stationsNotInListFile = { 'ABRFC': set(), \ + 'SERFC': set(), \ + 'LMRFC': set(), \ + 'MARFC': set(), \ + 'NERFC': set(), \ + 'WGRFC': set(), \ + 'MBRFC': set(), \ + 'CNRFC': set(), \ + 'NWRFC': set(), \ + 'NCRFC': set(), \ + 'CBRFC': set(), \ + 'OHRFC': set(), \ + 'APRFC': set(), \ + 'UNKNOWN': set() } + + if not os.path.isdir( indir ): +# raise SystemExit( "FATAL ERROR: " + indir + \ + raise RuntimeError( "FATAL ERROR: " + indir + \ + " is not a directory or does not exist. ") + + YYYYMMDDHH = '[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])(2[0-3]|[01][0-9])' + YYYYMMDDHHMMSS = YYYYMMDDHH + '(0[0-9]|[1-5][0-9]){2}' + ABRFCPattern = '^(.*/)?' + YYYYMMDDHH + '_RES_NWM_pixml_export.' + YYYYMMDDHHMMSS + NWRFCPattern = '^(.*/)?' + YYYYMMDDHH + '_QINE_NWM_Res_export.' + YYYYMMDDHHMMSS + rfcsites = RFC_Sites( rfcsitefile ) + + thirtyMinAgo = datetime.now() - timedelta(minutes=30) +# for file in os.listdir( indir ): + for file in sorted( glob.glob( indir + '/*' ), key=os.path.getmtime ): +# mtime=datetime.fromtimestamp(\ +# os.stat(os.path.join( indir, file)).st_mtime) +# m1 = re.match( ABRFCPattern, file ) +# m2 = re.match( NWRFCPattern, file ) +# if file.endswith( ".xml" ) or m1 or m2: +# if mtime > thirtyMinAgo: + logger.info( 'Reading ' + file + ' ... ' ) + try: + pixml = PI_XML( file, rfcsites ) +# rfc_series = pixml.getReserviorForecastWithT0() + t1 = time.time() + rfc_series = pixml.getReserviorObservedForecastCombinedWithT0() + logger.info( "Processing PI XML file done: " + \ + "{0:.1f}".format( (time.time() - t1) ) + \ + " seconds" ) + for s in rfc_series: + if rfcsites.siteExist( s.get5CharStationID() ): + if not s.isEmpty(): + fcsts.append( s ) + rfcsites.addComment( s.get5CharStationID(), \ + "OK") + else: + rfcsites.addComment( s.get5CharStationID(), \ + "Empty") + else: + rfcname = re.search( "[A-Z][A-Z]RFC", file).group() if \ + re.search( "[A-Z][A-Z]RFC", file) else "UNKNOWN" + if not s.isEmpty(): + stationsNotInListFile[ rfcname ].add( \ + s.get5CharStationID() ) + + else: + stationsNotInListFile[ rfcname ].add( \ + s.get5CharStationID() + "*" ) + + except Exception as e: + logger.warn( repr( e ), exc_info=True ) + continue + + if not fcsts: + raise EmptyDirOrFileException( "Input directory " + indir + \ + " has no PI XML files or no forecast data" + " in PI XML files!" ) +# raise SystemExit(0) + for s, r, c in zip( rfcsites.gauge, rfcsites.RFC, rfcsites.comments ): + logger.info( 'Site info: ' + s + " " + r + " " + c ) + logger.info( 'Sits not in the site file:' ) + for k, v in stationsNotInListFile.items(): + if v: + for e in v: + logger.info( ' ' + e + (': ' if len(e) == 6 else ' : ') + k ) + + logger.info( 'Note: \'*\' - flow values are missing.' ) + +except EmptyDirOrFileException as e: + logger.warning( str(e), exc_info=True) + sys.exit(0) +except Exception as e: + logger.error("Failed to load PI XML files:" + str(e), exc_info=True) + sys.exit(3) + +try: + helper = RFCHelper( fcsts ) + + logger.info( 'Earliest time in PI XML: ' + \ + helper.timePeriodForAll()[0].isoformat() ) + logger.info( 'Latest time in PI XML: ' + \ + helper.timePeriodForAll()[1].isoformat() ) + + # + # Create time slices from loaded observations + # + # Set time resolution to 60 minutes + # and + # Write time slices to NetCDF files + # + timeslices = helper.makeAllTimeSeries( outdir, 'RFCTimeSeries.ncdf' ) +except Exception as e: + logger.error("Failed to make time series:" + str(e), exc_info=True) + logger.error("Input dir = " + indir, exc_info=True) + sys.exit(3) + +logger.info( "Total number of timeseries: " + str( timeslices ) ) +logger.info( "Program finished in: " + \ + "{0:.1f}".format( (time.time() - t0) / 60.0 ) + \ + " minutes" ) + diff --git a/data_assimilation_engine/rfc_ingestion/nwmrfccopy.sh b/data_assimilation_engine/rfc_ingestion/nwmrfccopy.sh new file mode 100644 index 0000000..a1e6eba --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/nwmrfccopy.sh @@ -0,0 +1,102 @@ +#!/usr/bin/env bash + +############################################################################### +# Program Name: nwmrfccopy.sh # +# # +# Author(s)/Contact(s): NWC # +# # +# copy files to and from the $COM and $DBN alert directories # +# # +# Input: directory in $COM # +# # +# Output: files # +# # +# For non-fatal errors output is witten to $DATA/LOGS # +# # +# Origination Jun, 2019 # +# # +############################################################################### +# --------------------------------------------------------------------------- # + +####################################### +# nwm_rfc_copy and nwm_rfc_postcopy utilize +# multiple cores to speed up file copying +####################################### +function nwm_rfc_copy () { + msg="Begin copying file at `date`" + postmsg "${pgmout}" "${msg}" + + dir=$1 + echo "#!/usr/bin/env bash" > $DATA/nwmcopyscript + # + # All timeslices in previous 3 days + # + for file in $COMIN/${dir}/*.RFCTimeSeries.ncdf \ + $COMINm1/${dir}/*.RFCTimeSeries.ncdf \ + $COMINm2/${dir}/*.RFCTimeSeries.ncdf \ + $COMINm3/${dir}/*.RFCTimeSeries.ncdf + do + test -f "$file" || continue + echo "cpfs $file $DATA/$(basename $file)" >> $DATA/nwmcopyscript + done + + chmod 755 $DATA/nwmcopyscript + + #aprun -j1 -n$((NODES*NCORES)) -N${NCORES} cfp $DATA/nwmcopyscript + ${CFPCOMMAND} $DATA/nwmcopyscript + export err=$?; err_chk + + msg="Ending copy file at `date`" + postmsg "$pgmout" "$msg" + +} + +function nwm_rfc_postcopy () { + msg="Begin post copying file at `date`" + postmsg "${pgmout}" "${msg}" + + dir=$1 + suffix=$2 + #export COMOUT_ROOT=${COMOUT_ROOT:-${COMROOT}/${NET}/${envir}} + export COMOUT_ROOT=${COMOUT_ROOT:-${COMROOT}/${NET}/${nwm_ver}} + echo "#!/usr/bin/env bash" > $DATA/nwmpostcopyscript + for file in $DATA/*.${suffix} + do + test -f "$file" || continue + # + # NOTE: Here, we assume $COMOUT == $COMIN, otherwise, it doesn't work. + # + Outdir=${COMOUT_ROOT}/${RUN}.$(basename $file | cut -c1-4 )$(basename \ + $file | cut -c6-7 )$(basename $file | cut -c9-10)/${dir} + + if [ ! -e $Outdir ]; then + mkdir -p $Outdir + fi + + copyandalert=true + + # + # if the file exists and was not changed, don't copy and alert + # + if [ -e ${Outdir}/$(basename $file) ]; then + diff ${file} ${Outdir}/$(basename $file) > /dev/null 2>&1 + if [ $? -eq 0 ]; then + copyandalert=false + fi + fi + + if [[ "$copyandalert" == true ]]; then + echo "cpfs ${file} ${Outdir}/$(basename $file); if [ "$SENDDBN" = YES ]; then $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job ${Outdir}/$(basename $file); fi" >> $DATA/nwmpostcopyscript + fi + + done + + chmod 755 $DATA/nwmpostcopyscript + + #aprun -j1 -n$((NODES*NCORES)) -N${NCORES} cfp $DATA/nwmpostcopyscript + ${CFPCOMMAND} $DATA/nwmpostcopyscript + export err=$?; err_chk + + msg="Ending post copy file at `date`" + postmsg "$pgmout" "$msg" +} diff --git a/data_assimilation_engine/rfc_ingestion/testdata/abrfc/2019112712_ABRFC_RES_NWM_pixml_export.xml b/data_assimilation_engine/rfc_ingestion/testdata/abrfc/2019112712_ABRFC_RES_NWM_pixml_export.xml new file mode 100644 index 0000000..bcdb033 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/abrfc/2019112712_ABRFC_RES_NWM_pixml_export.xml @@ -0,0 +1,4297 @@ + + + 0.0 + +

+ instantaneous + MRIT2 + QINE + ALLQPF + 1 + + + + + -999 + LAKE MEREDITH-SANFORD 1NW + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ instantaneous + PDAC2 + QINE + ALLQPF + 1 + + + + -999 + PDAC2 + CFS +
+
+ +
+ instantaneous + TDDC2 + QINE + ALLQPF + 1 + + + + + -999 + TDDC2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TLRC2 + QINE + ALLQPF + 1 + + + + -999 + TLRC2 + CFS +
+
+ +
+ instantaneous + TWLC2 + QINE + ALLQPF + 1 + + + + -999 + TWLC2 + CFS +
+
+ +
+ instantaneous + TRQC2 + QINE + ALLQPF + 1 + + + + -999 + TRQC2 + CFS +
+
+ +
+ instantaneous + TQLC2 + QINE + ALLQPF + 1 + + + + -999 + TQLC2 + CFS +
+
+ +
+ instantaneous + JMCC2 + QINE + ALLQPF + 1 + + + + + -999 + JMCC2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DWSC2 + QINE + ALLQPF + 1 + + + + -999 + DWSC2 + CFS +
+
+ +
+ instantaneous + HTRK1 + QINE + ALLQPF + 1 + + + + + -999 + HTRK1 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CHNK1 + QINE + ALLQPF + 1 + + + + + -999 + CHNK1 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + EDRK1 + QINE + ALLQPF + 1 + + + + + -999 + EL DORADO 4NE - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + KAWO2 + QINE + ALLQPF + 1 + + + + + -999 + KAW CITY - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GSPO2 + QINE + ALLQPF + 1 + + + + + -999 + GSPO2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TRLK1 + QINE + ALLQPF + 1 + + + + + -999 + TRLK1 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FLLK1 + QINE + ALLQPF + 1 + + + + + -999 + FALL RIVER 4NW - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ECLK1 + QINE + ALLQPF + 1 + + + + + -999 + ELK CITY DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BIGK1 + QINE + ALLQPF + 1 + + + + + -999 + BIG HILL DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MLBK1 + QINE + ALLQPF + 1 + + + + + -999 + MARION 3NW - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CNGK1 + QINE + ALLQPF + 1 + + + + + -999 + COUNCIL GROVE 1NW - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JRLK1 + QINE + ALLQPF + 1 + + + + + -999 + JOHN REDMOND DAM BURLINGTON 3N + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PENO2 + QINE + ALLQPF + 1 + + + + + -999 + PENSACOLA DAM-DISNEY 1SW + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MFDO2 + QINE + ALLQPF + 1 + + + + + -999 + LAKE HUDSON - MARKHAM FRY W + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SPAO2 + QINE + ALLQPF + 1 + + + + + -999 + SPAVINAW LAKE (LOWER) + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FSLO2 + QINE + ALLQPF + 1 + + + + + -999 + FSLO2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CNLO2 + QINE + ALLQPF + 1 + + + + + -999 + CANTON 2NW - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ACDO2 + QINE + ALLQPF + 1 + + + + + -999 + ARCADIA + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NRMO2 + QINE + ALLQPF + 1 + + + + + -999 + NORMAN DAM - NORMAN 13E + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CPLO2 + QINE + ALLQPF + 1 + + + + + -999 + COPAN DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HULO2 + QINE + ALLQPF + 1 + + + + + -999 + HULAH 2W - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BIRO2 + QINE + ALLQPF + 1 + + + + + -999 + BIRO2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SKLO2 + QINE + ALLQPF + 1 + + + + + -999 + SKLO2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TENO2 + QINE + ALLQPF + 1 + + + + + -999 + GORE 7NE-TENKILLER FERRY DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + KEYO2 + QINE + ALLQPF + 1 + + + + + -999 + KEYSTONE DAM-SAND SPRINGS 8W + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HEYO2 + QINE + ALLQPF + 1 + + + + + -999 + KELLYVILLE 4W (HEYBURN LAKE) + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OOLO2 + QINE + ALLQPF + 1 + + + + + -999 + OOLOGAH 2SE - DAM (BLO DAM) + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GIBO2 + QINE + ALLQPF + 1 + + + + + -999 + OKAY 5E-FORT GIBSON DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + EUFO2 + QINE + ALLQPF + 1 + + + + + -999 + EUFAULA 12E + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + VBRA4 + QINE + ALLQPF + 1 + + + + + -999 + VBRA4 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WSLO2 + QINE + ALLQPF + 1 + + + + + -999 + WISTER 2S - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OZGA4 + QINE + ALLQPF + 1 + + + + + -999 + OZGA4 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TWELQ + QINE + ALLQPF + 1 + + + + -999 + TWELQ + CFS +
+
+ +
+ instantaneous + DARA4 + QINE + ALLQPF + 1 + + + + -999 + DARA4 + CFS +
+
+ +
+ instantaneous + TODA4 + QINE + ALLQPF + 1 + + + + -999 + TODA4 + CFS +
+
+ +
+ instantaneous + FOSO2 + QINE + ALLQPF + 1 + + + + + -999 + FOSO2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FTCO2 + QINE + ALLQPF + 1 + + + + + -999 + FORT COBB 4NW + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CMTO2L + QINE + ALLQPF + 1 + + + + -999 + CMTO2L + CFS +
+
+ +
+ instantaneous + CMTO2R + QINE + ALLQPF + 1 + + + + -999 + CMTO2R + CFS +
+
+ +
+ instantaneous + NKHO2L + QINE + ALLQPF + 1 + + + + -999 + NKHO2L + CFS +
+
+ +
+ instantaneous + NKHO2R + QINE + ALLQPF + 1 + + + + -999 + NKHO2R + CFS +
+
+ +
+ instantaneous + ARBO2 + QINE + ALLQPF + 1 + + + + + -999 + ROCK CREEK + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ALTO2 + QINE + ALLQPF + 1 + + + + + -999 + GRANITE 7SE + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MTNO2 + QINE + ALLQPF + 1 + + + + + -999 + MOUNTAIN PARK 4N + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SYOT2 + QINE + ALLQPF + 1 + + + + + -999 + SEYMOUR 16NNE + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WRLO2 + QINE + ALLQPF + 1 + + + + + -999 + WAURIKA 6N - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PCLO2 + QINE + ALLQPF + 1 + + + + + -999 + PINE CREEK DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BKDO2 + QINE + ALLQPF + 1 + + + + + -999 + BROKEN BOW 9NE - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MYST2 + QINE + ALLQPF + 1 + + + + + -999 + PAT MAYES DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MGCO2 + QINE + ALLQPF + 1 + + + + + -999 + FARRIS 3N + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DSNT2 + QINE + ALLQPF + 1 + + + + + -999 + DENISON 4NNW - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CYDO2 + QINE + ALLQPF + 1 + + + + + -999 + SARDIS + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HGLO2 + QINE + ALLQPF + 1 + + + + + -999 + HUGO 7E - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + EGLN5 + QINE + ALLQPF + 1 + + + + + -999 + EGLN5 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + EGCN5 + QINE + ALLQPF + 1 + + + + -999 + EGCN5 + CFS +
+
+ +
+ instantaneous + CNCN5 + QINE + ALLQPF + 1 + + + + + -999 + CNCN5 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + UTEN5 + QINE + ALLQPF + 1 + + + + + -999 + UTEN5 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + RTBT2 + QINE + ALLQPF + 1 + + + + + -999 + RTBT2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CLRC2 + QINE + ALLQPF + 1 + + + + -999 + CLRC2 + CFS +
+
+ +
+ instantaneous + CCBC2 + QINE + ALLQPF + 1 + + + + -999 + CCBC2 + CFS +
+
+ +
+ instantaneous + PBAC2 + QINE + ALLQPF + 1 + + + + -999 + PUEBLO 6W - DAM + CFS +
+
+ +
+ instantaneous + TBTC2 + QINE + ALLQPF + 1 + + + + + -999 + TWO BUTTES RESERVOIR + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OPLO2 + QINE + ALLQPF + 1 + + + + + -999 + OPTIMA DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SPRT2 + QINE + ALLQPF + 1 + + + + + -999 + SPRT2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + INLO2 + QINE + ALLQPF + 1 + + + + -999 + INLO2 + CFS +
+
+ +
+ instantaneous + WFLO2 + QINE + ALLQPF + 1 + + + + -999 + WEBBERS FALLS 3NW-LD 16 + CFS +
+
+ +
+ instantaneous + WAGO2 + QINE + ALLQPF + 1 + + + + -999 + WAGO2 + CFS +
+
+ +
+ instantaneous + KERO2 + QINE + ALLQPF + 1 + + + + + -999 + LD 15 - SALLISAW 8S + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BARA4 + QINE + ALLQPF + 1 + + + + -999 + BARA4 + CFS +
+
+ +
+ instantaneous + MAYO2 + QINE + ALLQPF + 1 + + + + -999 + MAYO2 + CFS +
+
+ +
+ instantaneous + DRDA4 + QINE + ALLQPF + 1 + + + + -999 + DRDA4 + CFS +
+
+ +
+ instantaneous + BMTA4 + QINE + ALLQPF + 1 + + + + + -999 + BLUE MOUNTAIN DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BMRA4 + QINE + ALLQPF + 1 + + + + -999 + BMRA4 + CFS +
+
+ +
+ instantaneous + NMLA4 + QINE + ALLQPF + 1 + + + + -999 + NIMROD 5W - DAM + CFS +
+
+ +
+ instantaneous + NMBA4 + QINE + ALLQPF + 1 + + + + + -999 + NMBA4 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MAUA4 + QINE + ALLQPF + 1 + + + + + -999 + MAUA4 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CONA4 + QINE + ALLQPF + 1 + + + + + -999 + CONA4 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LNDA4 + QINE + ALLQPF + 1 + + + + -999 + LNDA4 + CFS +
+
+ +
+ instantaneous + DTLA4 + QINE + ALLQPF + 1 + + + + -999 + DTLA4 + CFS +
+
+ +
+ instantaneous + AMCT2 + QINE + ALLQPF + 1 + + + + -999 + AMARILLO CITY LAKE + CFS +
+
+ +
+ instantaneous + BLAT2 + QINE + ALLQPF + 1 + + + + -999 + BLAT2 + CFS +
+
+ +
+ instantaneous + TGLT2 + QINE + ALLQPF + 1 + + + + -999 + TGLT2 + CFS +
+
+ +
+ instantaneous + MKZT2 + QINE + ALLQPF + 1 + + + + + -999 + MKZT2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GRET2 + QINE + ALLQPF + 1 + + + + + -999 + GRET2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LTLO2 + QINE + ALLQPF + 1 + + + + + -999 + LTLO2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ELWO2 + QINE + ALLQPF + 1 + + + + + -999 + ELWO2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DDET2 + QINE + ALLQPF + 1 + + + + + -999 + DDET2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LWTT2 + QINE + ALLQPF + 1 + + + + + -999 + LWTT2 + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ARRT2 + QINE + ALLQPF + 1 + + + + + -999 + LAKE ARROWHEAD-HENRIETTA 11SW + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DQDA4 + QINE + ALLQPF + 1 + + + + + -999 + DEQUEEN 4NW - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DQTA4 + QINE + ALLQPF + 1 + + + + -999 + DQTA4 + CFS +
+
+ +
+ instantaneous + GLLA4 + QINE + ALLQPF + 1 + + + + + -999 + GILLHAM 6NE - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GLTA4 + QINE + ALLQPF + 1 + + + + -999 + GLTA4 + CFS +
+
+ +
+ instantaneous + DIEA4 + QINE + ALLQPF + 1 + + + + + -999 + DIERKS 5NW - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + AHDA4 + QINE + ALLQPF + 1 + + + + + -999 + ASHDOWN 10E + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MWTA4 + QINE + ALLQPF + 1 + + + + -999 + MWTA4 + CFS +
+
+ +
+ instantaneous + ATKO2 + QINE + ALLQPF + 1 + + + + + -999 + ATOKA 5NE - DAM + CFS + 2019-11-27 + 13:10:01 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + UCBO2P + QINE + ALLQPF + 1 + + + + -999 + UCBO2P + CFS +
+
+ +
+ instantaneous + DLWO2P + QINE + ALLQPF + 1 + + + + -999 + DLWO2P + CFS +
+
+ +
+ instantaneous + CNEO2L + QINE + ALLQPF + 1 + + + + -999 + CNEO2L + CFS +
+
+ +
+ instantaneous + CNEO2R + QINE + ALLQPF + 1 + + + + -999 + CNEO2R + CFS +
+
+ +
+ instantaneous + CAYO2P + QINE + ALLQPF + 1 + + + + -999 + CAYO2P + CFS +
+
+ \ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/cbrfc/201911281800_CBRFC_Reservoir_Export.xml b/data_assimilation_engine/rfc_ingestion/testdata/cbrfc/201911281800_CBRFC_Reservoir_Export.xml new file mode 100644 index 0000000..f857630 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/cbrfc/201911281800_CBRFC_Reservoir_Export.xml @@ -0,0 +1,15559 @@ + + + 0.0 + +
+ instantaneous + STIU1 + QINE + + + + + NaN + STRAWBERRY - STRAWBERRY RES + CFS + 2019-11-28 + 14:38:26 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + STAU1 + QINE + + + + + NaN + STRAWBERRY - STARVATION RES, DUCHESNE, NR + CFS + 2019-11-28 + 14:38:26 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LAAU1 + QINE + + + + + NaN + LAKE FORK- MOON LAKE RES, MTN HOME, NR + CFS + 2019-11-28 + 14:38:26 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SFSU1 + QINE + + + + + NaN + PRICE - SCOFIELD RES, SCOFIELD, NR + CFS + 2019-11-28 + 14:38:26 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GBFW4 + QINE + + + + + NaN + GREEN - FONTENELLE RES, BLO + CFS + 2019-11-28 + 14:42:47 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BIGW4 + QINE + + + + + NaN + BIG SANDY - BIG SANDY RES, FARSON, NR + CFS + 2019-11-28 + 14:42:47 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + VIVW4 + QINE + + + + + NaN + HAMS FORK - VIVA NAUGHTON RES + CFS + 2019-11-28 + 14:42:47 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MCWW4 + QINE + + + + + NaN + MEEKS CABIN DAM + CFS + 2019-11-28 + 14:42:47 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GRZU1 + QINE + + + + + NaN + GREEN - GREENDALE, NR + CFS + 2019-11-28 + 14:42:47 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ELLU1 + QINE + + + + + NaN + HUNTINGTON CK - ELECTRIC LAKE + CFS + 2019-11-28 + 14:39:47 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JOVU1 + QINE + + + + + NaN + SEELEY CK - JOES VLY RES, ORANGEVILLE, NR + CFS + 2019-11-28 + 14:39:47 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MLSU1 + QINE + + + + + NaN + MILLSITE DAM + CFS + 2019-11-28 + 14:39:47 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WCKC2 + QINE + + + + + NaN + WILLOW CK - GRANBY, NR, WILLOW CK RES, BLO + CFS + 2019-11-28 + 14:40:17 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CBGC2 + QINE + + + + + NaN + COLORADO - GRANBY, NR + CFS + 2019-11-28 + 14:40:17 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WFRC2 + QINE + + + + + NaN + WILLIAMS FORK - WILLIAMS FORK RES, BLO + CFS + 2019-11-28 + 14:40:17 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BLRC2 + QINE + + + + + NaN + BLUE - DILLON, BLO + CFS + 2019-11-28 + 14:40:17 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BGMC2 + QINE + + + + + NaN + BLUE - GREEN MTN RES, BLO + CFS + 2019-11-28 + 14:40:17 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + RRGC2 + QINE + + + + + NaN + RIFLE CK - RIFLE GAP RESERVOIR + CFS + 2019-11-28 + 14:43:27 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + VEGC2 + QINE + + + + + NaN + PLATEAU CK - VEGA RES, COLLBRAN, NR + CFS + 2019-11-28 + 14:43:27 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TRBC2 + QINE + + + + + NaN + TAYLOR - TAYLOR PARK RES, BLO + CFS + 2019-11-28 + 14:40:57 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BMDC2 + QINE + + + + + NaN + GUNNISON - BLUE MESA RES + CFS + 2019-11-28 + 14:40:57 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MPSC2 + QINE + + + + + NaN + GUNNISON - MORROW POINT RES + CFS + 2019-11-28 + 14:40:57 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MDCC2 + QINE + + + + + NaN + MUDDY CK - PAONIA RES, BLO + CFS + 2019-11-28 + 14:40:57 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CRFC2 + QINE + + + + + NaN + CRFC2OAF + CFS + 2019-11-28 + 14:40:57 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LPVC2 + QINE + + + + + NaN + LOS PINOS - BAYFIELD, NR, VALLECITO RES, BLO + CFS + 2019-11-28 + 14:42:17 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FRVC2 + QINE + + + + + NaN + FLORIDA - DURANGO, NR, LEMON RES, BLO + CFS + 2019-11-28 + 14:42:17 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LYMA3 + QINE + + + + + NaN + LITTLE COLORADO - LYMAN LAKE, ST. JOHNS, NR + CFS + 2019-11-28 + 19:56:06 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GUUU1 + QINE + + + + + NaN + GUNLOCK RESERVOIR + CFS + 2019-11-28 + 19:57:26 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PCON2 + QINE + + + + + NaN + PINE CANYON DAM-CALIENTE 16SE + CFS + 2019-11-28 + 19:57:46 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MVDN2 + QINE + + + + + NaN + MATHEW VLY DAM-CALIENTE 20SE + CFS + 2019-11-28 + 19:57:46 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BWAA3 + QINE + + + + + NaN + BILL WILLIAMS - ALAMO DAM, BLO + CFS + 2019-11-28 + 19:58:26 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LKSA3 + QINE + + + + + NaN + LAKE MEAD + CFS + 2019-11-28 + 15:09:43 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CBDN2 + QINE + + + + + NaN + COLORADO - DAVIS DAM, BLO + CFS + 2019-11-28 + 15:09:43 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HORA3 + QINE + + + + + NaN + HORSESHOE RESERVOIR + CFS + 2019-11-28 + 20:01:47 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + VDBA3 + QINE + + + + + NaN + VERDE - BARTLETT DAM, BLO + CFS + 2019-11-28 + 20:01:47 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + RSVA3 + QINE + + + + + NaN + SALT - ROOSEVELT RESERVOIR, AT + CFS + 2019-11-28 + 20:07:38 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SMDA3 + QINE + + + + + NaN + SALT - STEWART MTN DAM, BLO + CFS + 2019-11-28 + 20:07:38 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GCDA3 + QINE + + + + + NaN + GILA - COOLIDGE DAM, BLO + CFS + 2019-11-28 + 20:06:08 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DCRU1 + QINE + + + + + NaN + PROVO - DEER CK RES + CFS + 2019-11-28 + 14:44:28 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + UTLU1 + QINE + + + + + NaN + JORDAN - UTAH LAKE, PROVO, NR + CFS + 2019-11-28 + 14:44:28 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ECWU1 + QINE + + + + + NaN + WEBER - ECHO + CFS + 2019-11-28 + 14:46:08 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CRDU1 + QINE + + + + + NaN + LOST CK - CROYDEN, NR + CFS + 2019-11-28 + 14:46:08 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ECCU1 + QINE + + + + + NaN + E CANYON CR - MORGAN, NR + CFS + 2019-11-28 + 14:46:08 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OPDU1 + QINE + + + + + NaN + OGDEN - PINEVIEW DAM, BLO, HUNTSVILLE, NR + CFS + 2019-11-28 + 14:46:08 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BRWU1 + QINE + + + + + NaN + BEAR - WOODRUFF, NR, WOODRUFF NARROWS RES, BLO + CFS + 2019-11-28 + 14:48:38 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BLZI1 + QINE + + + + + NaN + BEAR LAKE OUTLET CANAL NR PARIS + CFS + 2019-11-28 + 14:48:38 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BEAI1 + QINE + + + + + NaN + BEAR - ALEXANDER, AT + CFS + 2019-11-28 + 14:48:38 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BBOI1 + QINE + + + + + NaN + BEAR R BLO UT P AND L AT ONEIDA + CFS + 2019-11-28 + 14:48:38 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HLZU1 + QINE + + + + + NaN + LITTLE BEAR - HYRUM RESERVOIR + CFS + 2019-11-28 + 14:48:38 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OCEU1 + QINE + + + + + NaN + OTTER CK - OTTER CREEK RES, ANTIMONY, NR + CFS + 2019-11-28 + 14:37:56 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MYSU1 + QINE + + + + + NaN + SEVIER - PIUTE DAM, BLO, MARYSVALE, NR + CFS + 2019-11-28 + 14:37:56 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/cnrfc/201911290600_CNRFC_Reservoir_Export_for_NWM.xml b/data_assimilation_engine/rfc_ingestion/testdata/cnrfc/201911290600_CNRFC_Reservoir_Export_for_NWM.xml new file mode 100644 index 0000000..1cbde7e --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/cnrfc/201911290600_CNRFC_Reservoir_Export_for_NWM.xml @@ -0,0 +1,19358 @@ + + + 0.0 + +
+ instantaneous + LLKC1 + RQOT + + + + -999 + TRINITY - LEWISTON DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + IRGC1 + RQOT + + + + -999 + KLAMATH - IRON GATE DAM, + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LAMC1 + RQOT + + + + -999 + EF RUSSIAN - COYOTE DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WSDC1 + RQOT + + + + -999 + DRY CK - WARM SPRINGS DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PORC1 + RQOT + + + + -999 + POTTER VLY DIVERSION FR LK MENDOCINO + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SNRC1 + RQOT + + + + -999 + SAN ANTONIO-SAN ANTONIO DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + COYC1 + RQOT + + + + -999 + COYOTE CK - COYOTE RES + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LEXC1 + RQOT + + + + -999 + LOS GATOS CK - LEXINGTON RES + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NACC1 + RQOT + + + + -999 + NACIMIENTO-NACIMIENTO DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ANDC1 + RQOT + + + + -999 + COYOTE CK - ANDERSON DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ALRC1 + RQOT + + + + -999 + Almaden Res + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GUAC1 + RQOT + + + + -999 + Guadalupe Res + KCFS +
+
+ +
+ instantaneous + CADC1 + RQOT + + + + -999 + Calero Res + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ELPC1 + RQOT + + + + -999 + SAN DIEGO - EL CAPITAN D + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TWDC1 + RQOT + + + + -999 + CUYAMA - TWITCHELL DAM + KCFS +
+
+ +
+ instantaneous + PYMC1 + RQOT + + + + -999 + PYRAMID LK - GORMAN + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LKPC1 + RQOT + + + + -999 + LAKE PIRU - NR PIRU + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SVIC1 + RQOT + + + + -999 + SAN VICENTE CK - SAN VICE + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CCHC1 + RQOT + + + + -999 + SANTA YNEZ-CACHUMA DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SRWC1 + RQOT + + + + -999 + SANTA ANA - MENTONE, NR + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MVDC1 + RQOT + + + + -999 + MOJAVE DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HAWC1 + RQOT + + + + -999 + SAN LUIS REY-LAKE HENSHAW + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + KWKC1 + RQOT + + + + -999 + SACRAMENTO - KESWICK DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BLBC1 + RQOT + + + + -999 + STONY CK - BLACK BUTTE D + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WHSC1 + RQOT + + + + -999 + CLEAR CK - WHISKEYTOWN + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SGEC1 + RQOT + + + + -999 + STONY CK - STONY GORGE RES + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + EPRC1 + RQOT + + + + -999 + LITTLE STONY CK - EAST PARK RES + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CFWC1 + RQOT + + + + -999 + BEAR - CAMP FAR WEST + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HLEC1 + RQOT + + + + -999 + YUBA - ENGLEBRIGHT RESERVOIR + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LEDC1 + RQOT + + + + -999 + LK ELEANOR DIV TUNNEL - C + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ORDC1 + RQOT + + + + -999 + FEATHER - OROVILLE DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NBBC1 + RQOT + + + + -999 + NF YUBA - NEW BULLARDS BAR + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NIMC1 + RQOT + + + + -999 + AMERICAN - NIMBUS DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FMDC1 + RQOT + + + + -999 + FRENCH MEADOWS RES + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + INVC1 + RQOT + + + + -999 + NF CACHE CK-INDIAN VLY D + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CLKC1 + RQOT + + + + -999 + CACHE CK - CLEAR LAKE + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LBEC1 + RQOT + + + + -999 + PUTAH CK - LAKE BERRYESSA + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SWRC1 + RQOT + + + + -999 + SACRAMENTO-SACTO WEIR + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ISAC1 + RQOT + + + + -999 + KERN - ISABELLA DAM, BLO + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SCSC1 + RQOT + + + + -999 + TULE - SUCCESS DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PFTC1 + RQOT + + + + -999 + KINGS - PINE FLAT DAM, BL + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TMDC1 + RQOT + + + + -999 + KAWEAH - TERMINUS DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + KRCC1 + RQOT + + + + -999 + KINGS - CRESCENT WEIR, BLO + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LNGC1 + RQOT + + + + -999 + TUOLUMNE - LA GRANGE, NR + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HETC1 + RQOT + + + + -999 + TUOLUMNE - HETCH HETCHY, + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HIDC1 + RQOT + + + + -999 + FRESNO - HIDDEN DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FRAC1 + RQOT + + + + -999 + SAN JOAQUIN - FRIANT DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BIFC1 + RQOT + + + + -999 + SAN JOAQ-BIFURCATION, BLO + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + KNFC1 + RQOT + + + + -999 + STANISLAUS-GOODWIN DAM, B + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CHVC1 + RQOT + + + + -999 + CHERRY CK - CHERRY VLY D + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MSWC1 + RQOT + + + + -999 + MERCED - MC SWAIN DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BHNC1 + RQOT + + + + -999 + CHOWCHILLA - BUCHANAN DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FKCC1 + RQOT + + + + -999 + FRIANT-KERN CANAL-FRIANT + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MACC1 + RQOT + + + + -999 + MADERA CANAL - FRIANT + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FRGC1 + RQOT + + + + -999 + LITTLEJOHNS CK - FARMINGTON + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NHGC1 + RQOT + + + + -999 + CALAVERAS - NEW HOGAN DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CMCC1 + RQOT + + + + -999 + MOKELUMNE - CAMANCHE DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BPRC1 + RQOT + + + + -999 + EF WALKER - BRIDGEPORT RES + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + STPC1 + RQOT + + + + -999 + LTL TRUCKEE - STAMPEDE DA + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TAHC1 + RQOT + + + + -999 + TAHOE CITY + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCVC1 + RQOT + + + + -999 + LTL TRUCKEE - BOCA DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DNRC1 + RQOT + + + + -999 + DONNER CK - DONNER LK DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ILAC1 + RQOT + + + + -999 + INDEPENDENCE LK - TRUCKEE, NR + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MTSC1 + RQOT + + + + -999 + MARTIS CK - MARTIS RESERVOIR + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PSRC1 + RQOT + + + + -999 + PROSSER CK - PROSSER CK DAM + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TOPN2 + RQOT + + + + -999 + TOPAZ LAKE + KCFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/lmrfc/201911290111_LMRFC_Reservoir_export.xml b/data_assimilation_engine/rfc_ingestion/testdata/lmrfc/201911290111_LMRFC_Reservoir_export.xml new file mode 100644 index 0000000..ba74af0 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/lmrfc/201911290111_LMRFC_Reservoir_export.xml @@ -0,0 +1,16144 @@ + + + 0.0 + +
+ instantaneous + ARKM6OUT + SQIN + + + + + -9999 + ARKABUTLA DAM + CFS + 2019-11-29 + 13:21:55 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCDA1OUT + SQIN + + + + + -9999 + BIG CK DAM + CFS + 2019-11-29 + 13:16:33 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCDN7OUT + SQIN + + + + -9999 + BEAR CREEK AT BEAR CREEK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCEA4OUT + SQIN + + + + + -9999 + BAYOU BODCAU AT L. ERLING + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCRA1OUT + SQIN + + + + -9999 + BEAR CK/BEAR CK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BKDL1OUT + SQIN + + + + -9999 + BUNDICK LK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BMDA4OUT + SQIN + + + + + -9999 + BLAKLEY MT DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BOOT1OUT + SQIN + + + + + -9999 + BOOT1OUT + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BRDG1OUT + SQIN + + + + -9999 + BLUE RIDGE DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BSGA4OUT + SQIN + + + + + -9999 + BULL SHOALS + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BSLT2OUT + SQIN + + + + + -9999 + BOB SANDLIN LAKE + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BVGA4OUT + SQIN + + + + + -9999 + BEAVER DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CCRA1OUT + SQIN + + + + -9999 + CEDAR CK/CEDAR CK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CHAN7OUT + SQIN + + + + + -9999 + CHATUGE DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CHEN7OUT + SQIN + + + + + -9999 + CHEN7OUT + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CLRM7OUT + SQIN + + + + + -9999 + Clearwater + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CRKT1OUT + SQIN + + + + + -9999 + CRKT1OUT + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CRLL1OUT + SQIN + + + + + -9999 + SHREVEPORT/CROSS LK + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DGDA4OUT + SQIN + + + + + -9999 + DEGRAY DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DUGT1OUT + SQIN + + + + + -9999 + F BROAD/DOUGLAS DAM + CFS + 2019-11-29 + 13:29:06 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ENDM6OUT + SQIN + + + + + -9999 + ENID DAM + CFS + 2019-11-29 + 13:21:55 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FONN7OUT + SQIN + + + + + -9999 + L TENN/FONTANA DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FORM7OUT + SQIN + + + + + -9999 + TABLE ROCK DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FPHT1OUT + SQIN + + + + + -9999 + FPHT1OUT + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GRNM6OUT + SQIN + + + + + -9999 + GRENADA DAM + CFS + 2019-11-29 + 13:28:36 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GRRA4OUT + SQIN + + + + + -9999 + GREERS FRRY DM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HADT1OUT + SQIN + + + + + -9999 + HADT1OUT + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HIWN7OUT + SQIN + + + + + -9999 + HIWN7OUT + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ICCN7OUT + SQIN + + + + -9999 + TUCKASEEGE/CEDAR CLIFF DM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JFNT2OUT + SQIN + + + + + -9999 + FERRELS BR DM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JSNM6OUT + SQIN + + + + + -9999 + ROSS BARNETT DAM + CFS + 2019-11-29 + 13:08:51 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LBBL1OUT + SQIN + + + + + -9999 + Bayou Bodcau + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LBRA1OUT + SQIN + + + + -9999 + L BEAR CK/LTL BEAR CK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LBUL1OUT + SQIN + + + + + -9999 + RINGGOLD + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LCAL1OUT + SQIN + + + + -9999 + LAKE CLAIBORNE + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LCOL1OUT + SQIN + + + + -9999 + CADDO LAKE + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LDBL1OUT + SQIN + + + + -9999 + BAYOU D'ARBONNE LAKE + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MRDM6OUT + SQIN + + + + + -9999 + OKATIBBEE RES/MERIDIAN + CFS + 2019-11-29 + 13:16:33 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NADA4OUT + SQIN + + + + + -9999 + NARROWS DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NANN7OUT + SQIN + + + + -9999 + NANTAHALA/NANTAHALA DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NFDA4OUT + SQIN + + + + + -9999 + NORFORK DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NOTG1OUT + SQIN + + + + + -9999 + NOTG1OUT + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NRMT1OUT + SQIN + + + + + -9999 + DUCK/NORMANDY + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NRST1OUT + SQIN + + + + + -9999 + NORRIS DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OCAT1OUT + SQIN + + + + -9999 + OCAT1OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OCCT1OUT + SQIN + + + + -9999 + DAM #3 AT DUCKTOWN + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + REDA4OUT + SQIN + + + + + -9999 + REMMEL DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + RODL1OUT + SQIN + + + + + -9999 + BLACK BAYOU AT RODESSA + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SCLT2OUT + SQIN + + + + + -9999 + COOPER DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SHDT1OUT + SQIN + + + + + -9999 + SF HOLSTON/SOUTH HOLSTON DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SNTN7OUT + SQIN + + + + + -9999 + CHEOAH/SANTEELAH DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SRDM6OUT + SQIN + + + + + -9999 + SARDIS DAM + CFS + 2019-11-29 + 13:21:55 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + THPN7OUT + SQIN + + + + -9999 + W.F.TUCKASEGEE/THORPE DM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TMFT1OUT + SQIN + + + + + -9999 + TIMS FORD DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TXKT2OUT + SQIN + + + + + -9999 + TEXARKANA + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + UBRA1OUT + SQIN + + + + -9999 + BEAR CREEK/UPPER BEAR CK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WAGL1OUT + SQIN + + + + + -9999 + WALLACE LAKE/KEITHVILLE + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WPPM7OUT + SQIN + + + + + -9999 + Wappapello + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WTDN7OUT + SQIN + + + + -9999 + PIGEON AT WALTERS DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WTGT1OUT + SQIN + + + + + -9999 + WATAUGA/WATAUGA DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ARKM6OUT + SQIN + + + + -9999 + ARKABUTLA DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCDA1OUT + SQIN + + + + -9999 + BIG CK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCDN7OUT + SQIN + + + + -9999 + BEAR CREEK AT BEAR CREEK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCEA4OUT + SQIN + + + + -9999 + BAYOU BODCAU AT L. ERLING + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCRA1OUT + SQIN + + + + -9999 + BEAR CK/BEAR CK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BKDL1OUT + SQIN + + + + + -9999 + BUNDICK LK DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BMDA4OUT + SQIN + + + + -9999 + BLAKLEY MT DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BOOT1OUT + SQIN + + + + -9999 + BOOT1OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BRDG1OUT + SQIN + + + + -9999 + BLUE RIDGE DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BSGA4OUT + SQIN + + + + -9999 + BULL SHOALS + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BSLT2OUT + SQIN + + + + -9999 + BOB SANDLIN LAKE + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BVGA4OUT + SQIN + + + + -9999 + BEAVER DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CCRA1OUT + SQIN + + + + -9999 + CEDAR CK/CEDAR CK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CHAN7OUT + SQIN + + + + -9999 + CHATUGE DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CHEN7OUT + SQIN + + + + -9999 + CHEN7OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CLRM7OUT + SQIN + + + + -9999 + Clearwater + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CRKT1OUT + SQIN + + + + -9999 + CRKT1OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CRLL1OUT + SQIN + + + + -9999 + SHREVEPORT/CROSS LK + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DGDA4OUT + SQIN + + + + -9999 + DEGRAY DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DUGT1OUT + SQIN + + + + -9999 + F BROAD/DOUGLAS DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ENDM6OUT + SQIN + + + + -9999 + ENID DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FONN7OUT + SQIN + + + + -9999 + L TENN/FONTANA DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FORM7OUT + SQIN + + + + -9999 + TABLE ROCK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FPHT1OUT + SQIN + + + + -9999 + FPHT1OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GRNM6OUT + SQIN + + + + -9999 + GRENADA DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GRRA4OUT + SQIN + + + + -9999 + GREERS FRRY DM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HADT1OUT + SQIN + + + + -9999 + HADT1OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HIWN7OUT + SQIN + + + + -9999 + HIWN7OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ICCN7OUT + SQIN + + + + -9999 + TUCKASEEGE/CEDAR CLIFF DM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JFNT2OUT + SQIN + + + + -9999 + FERRELS BR DM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JSNM6OUT + SQIN + + + + -9999 + ROSS BARNETT DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LBBL1OUT + SQIN + + + + -9999 + Bayou Bodcau + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LBRA1OUT + SQIN + + + + -9999 + L BEAR CK/LTL BEAR CK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LBUL1OUT + SQIN + + + + -9999 + RINGGOLD + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LCAL1OUT + SQIN + + + + + -9999 + LAKE CLAIBORNE + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LCOL1OUT + SQIN + + + + + -9999 + CADDO LAKE + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LDBL1OUT + SQIN + + + + + -9999 + BAYOU D'ARBONNE LAKE + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MRDM6OUT + SQIN + + + + -9999 + OKATIBBEE RES/MERIDIAN + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NADA4OUT + SQIN + + + + -9999 + NARROWS DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NANN7OUT + SQIN + + + + -9999 + NANTAHALA/NANTAHALA DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NFDA4OUT + SQIN + + + + -9999 + NORFORK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NOTG1OUT + SQIN + + + + -9999 + NOTG1OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NRMT1OUT + SQIN + + + + -9999 + DUCK/NORMANDY + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NRST1OUT + SQIN + + + + -9999 + NORRIS DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OCAT1OUT + SQIN + + + + -9999 + OCAT1OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OCCT1OUT + SQIN + + + + -9999 + DAM #3 AT DUCKTOWN + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + REDA4OUT + SQIN + + + + -9999 + REMMEL DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + RODL1OUT + SQIN + + + + -9999 + BLACK BAYOU AT RODESSA + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SCLT2OUT + SQIN + + + + -9999 + COOPER DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SHDT1OUT + SQIN + + + + -9999 + SF HOLSTON/SOUTH HOLSTON DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SNTN7OUT + SQIN + + + + -9999 + CHEOAH/SANTEELAH DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SRDM6OUT + SQIN + + + + -9999 + SARDIS DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + THPN7OUT + SQIN + + + + -9999 + W.F.TUCKASEGEE/THORPE DM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TMFT1OUT + SQIN + + + + -9999 + TIMS FORD DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TXKT2OUT + SQIN + + + + -9999 + TEXARKANA + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + UBRA1OUT + SQIN + + + + -9999 + BEAR CREEK/UPPER BEAR CK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WAGL1OUT + SQIN + + + + -9999 + WALLACE LAKE/KEITHVILLE + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WPPM7OUT + SQIN + + + + -9999 + Wappapello + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WTDN7OUT + SQIN + + + + -9999 + PIGEON AT WALTERS DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WTGT1OUT + SQIN + + + + -9999 + WATAUGA/WATAUGA DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ARKM6OUT + SQIN + + + + -9999 + ARKABUTLA DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCDA1OUT + SQIN + + + + -9999 + BIG CK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCDN7OUT + SQIN + + + + + -9999 + BEAR CREEK AT BEAR CREEK DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCEA4OUT + SQIN + + + + -9999 + BAYOU BODCAU AT L. ERLING + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCRA1OUT + SQIN + + + + + -9999 + BEAR CK/BEAR CK DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BKDL1OUT + SQIN + + + + -9999 + BUNDICK LK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BMDA4OUT + SQIN + + + + -9999 + BLAKLEY MT DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BOOT1OUT + SQIN + + + + -9999 + BOOT1OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BRDG1OUT + SQIN + + + + + -9999 + BLUE RIDGE DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BSGA4OUT + SQIN + + + + -9999 + BULL SHOALS + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BSLT2OUT + SQIN + + + + -9999 + BOB SANDLIN LAKE + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BVGA4OUT + SQIN + + + + -9999 + BEAVER DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CCRA1OUT + SQIN + + + + + -9999 + CEDAR CK/CEDAR CK DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CHAN7OUT + SQIN + + + + -9999 + CHATUGE DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CHEN7OUT + SQIN + + + + -9999 + CHEN7OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CLRM7OUT + SQIN + + + + -9999 + Clearwater + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CRKT1OUT + SQIN + + + + -9999 + CRKT1OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CRLL1OUT + SQIN + + + + -9999 + SHREVEPORT/CROSS LK + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DGDA4OUT + SQIN + + + + -9999 + DEGRAY DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DUGT1OUT + SQIN + + + + -9999 + F BROAD/DOUGLAS DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ENDM6OUT + SQIN + + + + -9999 + ENID DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FONN7OUT + SQIN + + + + -9999 + L TENN/FONTANA DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FORM7OUT + SQIN + + + + -9999 + TABLE ROCK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FPHT1OUT + SQIN + + + + -9999 + FPHT1OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GRNM6OUT + SQIN + + + + -9999 + GRENADA DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GRRA4OUT + SQIN + + + + -9999 + GREERS FRRY DM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HADT1OUT + SQIN + + + + -9999 + HADT1OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HIWN7OUT + SQIN + + + + -9999 + HIWN7OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ICCN7OUT + SQIN + + + + + -9999 + TUCKASEEGE/CEDAR CLIFF DM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JFNT2OUT + SQIN + + + + -9999 + FERRELS BR DM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JSNM6OUT + SQIN + + + + -9999 + ROSS BARNETT DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LBBL1OUT + SQIN + + + + -9999 + Bayou Bodcau + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LBRA1OUT + SQIN + + + + + -9999 + L BEAR CK/LTL BEAR CK DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LBUL1OUT + SQIN + + + + -9999 + RINGGOLD + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LCAL1OUT + SQIN + + + + -9999 + LAKE CLAIBORNE + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LCOL1OUT + SQIN + + + + -9999 + CADDO LAKE + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LDBL1OUT + SQIN + + + + -9999 + BAYOU D'ARBONNE LAKE + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MRDM6OUT + SQIN + + + + -9999 + OKATIBBEE RES/MERIDIAN + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NADA4OUT + SQIN + + + + -9999 + NARROWS DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NANN7OUT + SQIN + + + + + -9999 + NANTAHALA/NANTAHALA DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NFDA4OUT + SQIN + + + + -9999 + NORFORK DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NOTG1OUT + SQIN + + + + -9999 + NOTG1OUT + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NRMT1OUT + SQIN + + + + -9999 + DUCK/NORMANDY + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NRST1OUT + SQIN + + + + -9999 + NORRIS DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OCAT1OUT + SQIN + + + + + -9999 + OCAT1OUT + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OCCT1OUT + SQIN + + + + + -9999 + DAM #3 AT DUCKTOWN + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + REDA4OUT + SQIN + + + + -9999 + REMMEL DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + RODL1OUT + SQIN + + + + -9999 + BLACK BAYOU AT RODESSA + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SCLT2OUT + SQIN + + + + -9999 + COOPER DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SHDT1OUT + SQIN + + + + -9999 + SF HOLSTON/SOUTH HOLSTON DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SNTN7OUT + SQIN + + + + -9999 + CHEOAH/SANTEELAH DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SRDM6OUT + SQIN + + + + -9999 + SARDIS DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + THPN7OUT + SQIN + + + + + -9999 + W.F.TUCKASEGEE/THORPE DM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TMFT1OUT + SQIN + + + + -9999 + TIMS FORD DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TXKT2OUT + SQIN + + + + -9999 + TEXARKANA + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + UBRA1OUT + SQIN + + + + + -9999 + BEAR CREEK/UPPER BEAR CK DAM + CFS + 2019-11-29 + 12:05:07 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WAGL1OUT + SQIN + + + + -9999 + WALLACE LAKE/KEITHVILLE + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WPPM7OUT + SQIN + + + + -9999 + Wappapello + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WTDN7OUT + SQIN + + + + + -9999 + PIGEON AT WALTERS DAM + CFS + 2019-11-29 + 13:29:06 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WTGT1OUT + SQIN + + + + -9999 + WATAUGA/WATAUGA DAM + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/marfc/2019112712_MARFC_Reservoir_Export.xml b/data_assimilation_engine/rfc_ingestion/testdata/marfc/2019112712_MARFC_Reservoir_Export.xml new file mode 100644 index 0000000..73eb246 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/marfc/2019112712_MARFC_Reservoir_Export.xml @@ -0,0 +1,456 @@ + + + 0.0 + +
+ instantaneous + CNNN6DEL + QINE + + + + + -9999.0 + Cannonsville Reservoir + CFS + 2019-11-27 + 13:36:02 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DWNN6DEL + QINE + + + + + -9999.0 + Downsville Reservoir + CFS + 2019-11-27 + 13:36:02 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCHP1BEC + QINE + + + + + -9999.0 + Blanchard (d.s. Sayers Dam) + CFS + 2019-11-27 + 13:36:02 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JCKV2JCK + QINE + + + + + -9999.0 + Gathright Dam + CFS + 2019-11-27 + 13:36:02 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/mbrfc/201911111541_MBRFC_Reservoir_Export.xml b/data_assimilation_engine/rfc_ingestion/testdata/mbrfc/201911111541_MBRFC_Reservoir_Export.xml new file mode 100644 index 0000000..3bb3b5d --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/mbrfc/201911111541_MBRFC_Reservoir_Export.xml @@ -0,0 +1,3519 @@ + + + 0.0 + +
+ instantaneous + GPDN1 + QINE + + + + + -9999 + GPDN1: GAVINS PT RES NE + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + KANK1 + QINE + + + + + -9999 + KANK1: KANOPOLIS RES KS + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WLSK1 + QINE + + + + + -9999 + WLSK1: WILSON RES KS + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + REPN1 + QINE + + + + + -9999 + REPN1: HARLAN COUNTY RES NE + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MLFK1 + QINE + + + + + -9999 + MLFK1: MILFORD RES KS + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MTTK1 + QINE + + + + + -9999 + MTTK1: TUTTLE CR RES KS + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PRRK1 + QINE + + + + + -9999 + PRRK1: PERRY RES KS + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CLIK1 + QINE + + + + + -9999 + CLIK1: CLINTON RES KS + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SLKM7 + QINE + + + + + -9999 + SLKM7: SMITHVILLE RES MO + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LNZM7 + QINE + + + + + -9999 + LNZM7: LONGVIEW RES MO + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BSZM7 + QINE + + + + + -9999 + BSZM7: BLUE SPRINGS RES MO + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MLVK1 + QINE + + + + + -9999 + MLVK1: MELVERN RES KS + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PLKK1 + QINE + + + + + -9999 + PLKK1: POMONA RES KS + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HILK1 + QINE + + + + + -9999 + HILK1: HILLSDALE RES KS + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + STXM7 + QINE + + + + + -9999 + STXM7: STOCKTON RES MO + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PTXM7 + QINE + + + + + -9999 + PTXM7: POMME DE TERRE RES MO + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TKZM7 + QINE + + + + + -9999 + TKZM7: HARRY TRUMAN RES MO + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + RADI4 + QINE + + + + + -9999 + RADI4: RATHBUN RES IA + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LBRM7 + QINE + + + + + -9999 + LBRM7: LONG BRANCH RES MO + CFS + 2019-11-11 + 14:03:44 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/ncrfc/201911081100_NCRFC_Reservoir_Export.xml b/data_assimilation_engine/rfc_ingestion/testdata/ncrfc/201911081100_NCRFC_Reservoir_Export.xml new file mode 100644 index 0000000..d3696f3 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/ncrfc/201911081100_NCRFC_Reservoir_Export.xml @@ -0,0 +1,328 @@ + + + 0.0 + +
+ instantaneous + Process_Res_Fcsts_NWM + CRVI4 + RQOT + observed + + + + -9999 + CRVI4 + 41.7252777777778 + -91.5352777777778 + -91.5352777777778 + 41.7252777777778 + 0.0 + CFS +
+ + + + + + + + + + +
+ +
+ instantaneous + RRS_PreProcessing_Inst_FRQOT + CRVI4 + QINE + forecast + + + + + -9999 + CRVI4 + 41.7252777777778 + -91.5352777777778 + -91.5352777777778 + 41.7252777777778 + 0.0 + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + Process_Res_Fcsts_NWM + SAYI4 + RQOT + observed + + + + -9999 + SAYI4 + 41.703611111111 + -93.689166666667 + -93.689166666667 + 41.703611111111 + 0.0 + CFS +
+ + + + + + + + + + +
+ +
+ instantaneous + RRS_PreProcessing_Inst_FRQOT + SAYI4 + QINE + forecast + + + + + -9999 + SAYI4 + 41.703611111111 + -93.689166666667 + -93.689166666667 + 41.703611111111 + 0.0 + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + Process_Res_Fcsts_NWM + PELI4 + RQOT + observed + + + + -9999 + PELI4 + 41.369722222222 + -92.98 + -92.98 + 41.369722222222 + 0.0 + CFS +
+ + + + + + + + + + +
+ +
+ instantaneous + RRS_PreProcessing_Inst_FRQOT + PELI4 + QINE + forecast + + + + + -9999 + PELI4 + 41.369722222222 + -92.98 + -92.98 + 41.369722222222 + 0.0 + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/ncrfc/201911181200_NCRFC_Reservoir_Export.xml b/data_assimilation_engine/rfc_ingestion/testdata/ncrfc/201911181200_NCRFC_Reservoir_Export.xml new file mode 100644 index 0000000..85b435e --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/ncrfc/201911181200_NCRFC_Reservoir_Export.xml @@ -0,0 +1,322 @@ + + + 0.0 + +
+ instantaneous + Process_Res_Fcsts_NWM + CRVI4 + RQOT + observed + + + + -9999 + CRVI4 + 41.7252777777778 + -91.5352777777778 + -91.5352777777778 + 41.7252777777778 + 0.0 + CFS +
+ + + + + + + + + +
+ +
+ instantaneous + RRS_PreProcessing_Inst_FRQOT + CRVI4 + QINE + forecast + + + + + -9999 + CRVI4 + 41.7252777777778 + -91.5352777777778 + -91.5352777777778 + 41.7252777777778 + 0.0 + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + Process_Res_Fcsts_NWM + SAYI4 + RQOT + observed + + + + -9999 + SAYI4 + 41.703611111111 + -93.689166666667 + -93.689166666667 + 41.703611111111 + 0.0 + CFS +
+ + + + + + + + + +
+ +
+ instantaneous + RRS_PreProcessing_Inst_FRQOT + SAYI4 + QINE + forecast + + + + + -9999 + SAYI4 + 41.703611111111 + -93.689166666667 + -93.689166666667 + 41.703611111111 + 0.0 + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + Process_Res_Fcsts_NWM + PELI4 + RQOT + observed + + + + -9999 + PELI4 + 41.369722222222 + -92.98 + -92.98 + 41.369722222222 + 0.0 + CFS +
+ + + + + + + + + +
+ +
+ instantaneous + RRS_PreProcessing_Inst_FRQOT + PELI4 + QINE + forecast + + + + + -9999 + PELI4 + 41.369722222222 + -92.98 + -92.98 + 41.369722222222 + 0.0 + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_11.07.2019.16.xml b/data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_11.07.2019.16.xml new file mode 100644 index 0000000..b620858 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_11.07.2019.16.xml @@ -0,0 +1,684 @@ + + + 0.0 + +
+ accumulative + RKWM1ME + FMAP + + + + + NaN + RKWM1ME + 45.58 + -69.72 + -69.72 + 45.58 + 313.33 + IN +
+ + + + + + + + + + + + +
+ +
+ instantaneous + SWRN6 + RQOT + forecast + + + + + NaN + SWRN6 + 43.9 + -75.05 + -75.05 + 43.9 + 515.1 + CFS +
+ + + + +
+ +
+ instantaneous + STDM1 + RQOT + observed + + + + NaN + STDM1 + 43.78 + -70.51 + -70.51 + 43.78 + 270.0 + CFS +
+ + + +
+ +
+ instantaneous + HIKN6 + RQOT + observed + + + + NaN + HIKN6 + 43.32 + -75.12 + -75.12 + 43.32 + 385.6 + CFS +
+ + + +
+ +
+ instantaneous + SCIR1 + RQOT + observed + + + + NaN + SCIR1 + 41.75 + -71.59 + -71.59 + 41.75 + 64.0 + CFS +
+ + + + + + + + + + +
+ +
+ instantaneous + STDM1 + QINE + forecast + + + + + NaN + STDM1ME + 43.78 + -70.51 + -70.51 + 43.78 + 0.0 + CFS + 2019-11-07 + 15:13:17 +
+ + + + + + + + + + + + + +
+ +
+ instantaneous + RKWM1 + QINE + forecast + + + + + NaN + RKWM1ME + 45.58 + -69.72 + -69.72 + 45.58 + 313.33 + CFS + 2019-11-07 + 15:13:17 +
+ + + + + + + + + + + + + +
+ +
+ instantaneous + SCIR1 + QINE + forecast + + + + + NaN + SCIR1SNE + 41.75 + -71.59 + -71.59 + 41.75 + 64.01 + CFS + 2019-11-07 + 15:19:28 +
+ + + + + + + + + + + + + +
+ +
+ instantaneous + HIKN6 + QINE + forecast + + + + + NaN + HIKN6HUD + 43.32 + -75.12 + -75.12 + 43.32 + 385.57 + CFS + 2019-11-07 + 15:57:35 +
+ + + + + + + + + + + + + +
+ +
+ instantaneous + RKWM1 + RQOT + observed + + + + + NaN + RKWM1ME + 45.58 + -69.72 + -69.72 + 45.58 + 313.33 + CFS + 2019-11-07 + 15:13:17 +
+ +
+ +
+ instantaneous + BNGM1 + RQOT + observed + + + + + NaN + WYMM1ME + 45.1 + -69.9 + -69.9 + 45.1 + 149.35 + CFS + 2019-11-07 + 15:13:17 +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + STVC3 + RQOT + observed + + + + + NaN + STVC3SNE + 41.38 + -73.17 + -73.17 + 41.38 + 35.05 + CFS + 2019-11-07 + 15:19:28 +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HDLN6 + RQOT + observed + + + + + NaN + HDLN6HUD + 43.31 + -73.87 + -73.87 + 43.31 + 177.39 + CFS + 2019-11-07 + 15:57:35 +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CPNN6 + RQOT + observed + + + + + NaN + CPNN6GRL + 42.92 + -77.23 + -77.23 + 42.92 + 212.45 + CFS + 2019-11-07 + 15:51:13 +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GBRN6 + RQOT + observed + + + + + NaN + GBRN6HUD + 42.4 + -74.45 + -74.45 + 42.4 + 0.0 + CFS + 2019-11-07 + 15:57:35 +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SWRN6 + RQOT + observed + + + + NaN + SWRN6 + 43.9 + -75.05 + -75.05 + 43.9 + 515.1 + CFS +
+ + + +
+ +
+ instantaneous + CPNN6 + QINE + forecast + + + + + NaN + CPNN6 + 42.92 + -77.23 + -77.23 + 42.92 + 212.4 + CFS +
+ + + + + + + + +
+ +
+ instantaneous + GBRN6 + QINE + forecast + + + + + NaN + GBRN6 + 42.4 + -74.45 + -74.45 + 42.4 + 0.0 + CFS +
+ + + + + + + + +
+ +
+ instantaneous + HDLN6 + QINE + forecast + + + + + NaN + HDLN6 + 43.31 + -73.87 + -73.87 + 43.31 + 177.4 + CFS +
+ + + + + + + + +
+ +
+ instantaneous + STVC3 + QINE + forecast + + + + + NaN + STVC3 + 41.38 + -73.17 + -73.17 + 41.38 + 35.1 + CFS +
+ + + + + + + + +
+ +
+ instantaneous + BNGM1 + QINE + forecast + + + + + NaN + BNGM1 + 45.07 + -69.9 + -69.9 + 45.07 + 121.9 + CFS +
+ + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_11.07.2019.17.xml b/data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_11.07.2019.17.xml new file mode 100644 index 0000000..ddb4f16 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_11.07.2019.17.xml @@ -0,0 +1,699 @@ + + + 0.0 + +
+ accumulative + RKWM1ME + FMAP + + + + + NaN + RKWM1ME + 45.58 + -69.72 + -69.72 + 45.58 + 313.33 + IN +
+ + + + + + + + + + + + +
+ +
+ instantaneous + SWRN6 + RQOT + forecast + + + + + NaN + SWRN6 + 43.9 + -75.05 + -75.05 + 43.9 + 515.1 + CFS +
+ + + + +
+ +
+ instantaneous + STDM1 + RQOT + observed + + + + NaN + STDM1 + 43.78 + -70.51 + -70.51 + 43.78 + 270.0 + CFS +
+ + + +
+ +
+ instantaneous + HIKN6 + RQOT + observed + + + + NaN + HIKN6 + 43.32 + -75.12 + -75.12 + 43.32 + 385.6 + CFS +
+ + + +
+ +
+ instantaneous + SCIR1 + RQOT + observed + + + + NaN + SCIR1 + 41.75 + -71.59 + -71.59 + 41.75 + 64.0 + CFS +
+ + + + + + + + + + +
+ +
+ instantaneous + STDM1 + QINE + forecast + + + + + NaN + STDM1ME + 43.78 + -70.51 + -70.51 + 43.78 + 0.0 + CFS + 2019-11-07 + 15:13:17 +
+ + + + + + + + + + + + + +
+ +
+ instantaneous + RKWM1 + QINE + forecast + + + + + NaN + RKWM1ME + 45.58 + -69.72 + -69.72 + 45.58 + 313.33 + CFS + 2019-11-07 + 15:13:17 +
+ + + + + + + + + + + + + +
+ +
+ instantaneous + SCIR1 + QINE + forecast + + + + + NaN + SCIR1SNE + 41.75 + -71.59 + -71.59 + 41.75 + 64.01 + CFS + 2019-11-07 + 15:19:28 +
+ + + + + + + + + + + + + +
+ +
+ instantaneous + HIKN6 + QINE + forecast + + + + + NaN + HIKN6HUD + 43.32 + -75.12 + -75.12 + 43.32 + 385.57 + CFS + 2019-11-07 + 15:57:35 +
+ + + + + + + + + + + + + +
+ +
+ instantaneous + RKWM1 + RQOT + observed + + + + + NaN + RKWM1ME + 45.58 + -69.72 + -69.72 + 45.58 + 313.33 + CFS + 2019-11-07 + 15:13:17 +
+ +
+ +
+ instantaneous + BNGM1 + RQOT + observed + + + + + NaN + WYMM1ME + 45.1 + -69.9 + -69.9 + 45.1 + 149.35 + CFS + 2019-11-07 + 15:13:17 +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + STVC3 + RQOT + observed + + + + + NaN + STVC3SNE + 41.38 + -73.17 + -73.17 + 41.38 + 35.05 + CFS + 2019-11-07 + 15:19:28 +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HDLN6 + RQOT + observed + + + + + NaN + HDLN6HUD + 43.31 + -73.87 + -73.87 + 43.31 + 177.39 + CFS + 2019-11-07 + 15:57:35 +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CPNN6 + RQOT + observed + + + + + NaN + CPNN6GRL + 42.92 + -77.23 + -77.23 + 42.92 + 212.45 + CFS + 2019-11-07 + 15:51:13 +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GBRN6 + RQOT + observed + + + + + NaN + GBRN6HUD + 42.4 + -74.45 + -74.45 + 42.4 + 0.0 + CFS + 2019-11-07 + 15:57:35 +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SWRN6 + RQOT + observed + + + + NaN + SWRN6 + 43.9 + -75.05 + -75.05 + 43.9 + 515.1 + CFS +
+ + + +
+ +
+ instantaneous + CPNN6 + QINE + forecast + + + + + NaN + CPNN6 + 42.92 + -77.23 + -77.23 + 42.92 + 212.4 + CFS +
+ + + + + + + + + + + + +
+ +
+ instantaneous + GBRN6 + QINE + forecast + + + + + NaN + GBRN6 + 42.4 + -74.45 + -74.45 + 42.4 + 0.0 + CFS +
+ + + + + + + + + + + + +
+ +
+ instantaneous + HDLN6 + QINE + forecast + + + + + NaN + HDLN6 + 43.31 + -73.87 + -73.87 + 43.31 + 177.4 + CFS +
+ + + + + + + + + + + + +
+ +
+ instantaneous + STVC3 + QINE + forecast + + + + + NaN + STVC3 + 41.38 + -73.17 + -73.17 + 41.38 + 35.1 + CFS +
+ + + + + + + + + + + + +
+ +
+ instantaneous + BNGM1 + QINE + forecast + + + + + NaN + BNGM1 + 45.07 + -69.9 + -69.9 + 45.07 + 121.9 + CFS +
+ + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_11.07.2019.22.xml b/data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_11.07.2019.22.xml new file mode 100644 index 0000000..8250f7b --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_11.07.2019.22.xml @@ -0,0 +1,684 @@ + + + 0.0 + +
+ accumulative + RKWM1ME + FMAP + + + + + NaN + RKWM1ME + 45.58 + -69.72 + -69.72 + 45.58 + 313.33 + IN +
+ + + + + + + + + + + + +
+ +
+ instantaneous + SWRN6 + RQOT + forecast + + + + + NaN + SWRN6 + 43.9 + -75.05 + -75.05 + 43.9 + 515.1 + CFS +
+ + + + + +
+ +
+ instantaneous + STDM1 + RQOT + observed + + + + NaN + STDM1 + 43.78 + -70.51 + -70.51 + 43.78 + 270.0 + CFS +
+ + +
+ +
+ instantaneous + HIKN6 + RQOT + observed + + + + NaN + HIKN6 + 43.32 + -75.12 + -75.12 + 43.32 + 385.6 + CFS +
+ + +
+ +
+ instantaneous + SCIR1 + RQOT + observed + + + + NaN + SCIR1 + 41.75 + -71.59 + -71.59 + 41.75 + 64.0 + CFS +
+ + + + + + + + + + +
+ +
+ instantaneous + STDM1 + QINE + forecast + + + + + NaN + STDM1ME + 43.78 + -70.51 + -70.51 + 43.78 + 0.0 + CFS + 2019-11-07 + 15:13:17 +
+ + + + + + + + + + + + + +
+ +
+ instantaneous + RKWM1 + QINE + forecast + + + + + NaN + RKWM1ME + 45.58 + -69.72 + -69.72 + 45.58 + 313.33 + CFS + 2019-11-07 + 15:13:17 +
+ + + + + + + + + + + + + +
+ +
+ instantaneous + SCIR1 + QINE + forecast + + + + + NaN + SCIR1SNE + 41.75 + -71.59 + -71.59 + 41.75 + 64.01 + CFS + 2019-11-07 + 15:19:28 +
+ + + + + + + + + + + + + +
+ +
+ instantaneous + HIKN6 + QINE + forecast + + + + + NaN + HIKN6HUD + 43.32 + -75.12 + -75.12 + 43.32 + 385.57 + CFS + 2019-11-07 + 15:57:35 +
+ + + + + + + + + + + + + +
+ +
+ instantaneous + RKWM1 + RQOT + observed + + + + + NaN + RKWM1ME + 45.58 + -69.72 + -69.72 + 45.58 + 313.33 + CFS + 2019-11-07 + 15:13:17 +
+
+ +
+ instantaneous + BNGM1 + RQOT + observed + + + + + NaN + WYMM1ME + 45.1 + -69.9 + -69.9 + 45.1 + 149.35 + CFS + 2019-11-07 + 15:13:17 +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + STVC3 + RQOT + observed + + + + + NaN + STVC3SNE + 41.38 + -73.17 + -73.17 + 41.38 + 35.05 + CFS + 2019-11-07 + 15:19:28 +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HDLN6 + RQOT + observed + + + + + NaN + HDLN6HUD + 43.31 + -73.87 + -73.87 + 43.31 + 177.39 + CFS + 2019-11-07 + 15:57:35 +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CPNN6 + RQOT + observed + + + + + NaN + CPNN6GRL + 42.92 + -77.23 + -77.23 + 42.92 + 212.45 + CFS + 2019-11-07 + 18:28:31 +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GBRN6 + RQOT + observed + + + + + NaN + GBRN6HUD + 42.4 + -74.45 + -74.45 + 42.4 + 0.0 + CFS + 2019-11-07 + 15:57:35 +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SWRN6 + RQOT + observed + + + + NaN + SWRN6 + 43.9 + -75.05 + -75.05 + 43.9 + 515.1 + CFS +
+ + + +
+ +
+ instantaneous + CPNN6 + QINE + forecast + + + + + NaN + CPNN6 + 42.92 + -77.23 + -77.23 + 42.92 + 212.4 + CFS +
+ + + + + + + + + + + +
+ +
+ instantaneous + GBRN6 + QINE + forecast + + + + + NaN + GBRN6 + 42.4 + -74.45 + -74.45 + 42.4 + 0.0 + CFS +
+ + + + + + + + + + + +
+ +
+ instantaneous + HDLN6 + QINE + forecast + + + + + NaN + HDLN6 + 43.31 + -73.87 + -73.87 + 43.31 + 177.4 + CFS +
+ + + + + + + + + + + +
+ +
+ instantaneous + STVC3 + QINE + forecast + + + + + NaN + STVC3 + 41.38 + -73.17 + -73.17 + 41.38 + 35.1 + CFS +
+ + + + + + + + + + + +
+ +
+ instantaneous + BNGM1 + QINE + forecast + + + + + NaN + BNGM1 + 45.07 + -69.9 + -69.9 + 45.07 + 121.9 + CFS +
+ + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_Reservoir_Export.xml b/data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_Reservoir_Export.xml new file mode 100644 index 0000000..b17e0c2 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/nerfc/NERFC_Reservoir_Export.xml @@ -0,0 +1,678 @@ + + + 0.0 + +
+ accumulative + RKWM1ME + FMAP + + + + + NaN + RKWM1ME + 45.58 + -69.72 + -69.72 + 45.58 + 313.33 + IN +
+ + + + + + + + + + + + +
+ +
+ instantaneous + SWRN6 + RQOT + forecast + + + + + NaN + SWRN6 + 43.9 + -75.05 + -75.05 + 43.9 + 515.1 + CFS +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + STDM1 + RQOT + observed + + + + NaN + STDM1 + 43.78 + -70.51 + -70.51 + 43.78 + 270.0 + CFS +
+ + + + + + + + + + +
+ +
+ instantaneous + HIKN6 + RQOT + observed + + + + NaN + HIKN6 + 43.32 + -75.12 + -75.12 + 43.32 + 385.6 + CFS +
+ + + + + + + + + + +
+ +
+ instantaneous + SCIR1 + RQOT + observed + + + + NaN + SCIR1 + 41.75 + -71.59 + -71.59 + 41.75 + 64.0 + CFS +
+ + + + + + + + + + +
+ +
+ instantaneous + STDM1 + QINE + forecast + + + + + NaN + STDM1ME + 43.78 + -70.51 + -70.51 + 43.78 + 0.0 + CFS + 2019-11-25 + 15:13:21 +
+ + + + + + + + + + + + +
+ +
+ instantaneous + RKWM1 + QINE + forecast + + + + + NaN + RKWM1ME + 45.58 + -69.72 + -69.72 + 45.58 + 313.33 + CFS + 2019-11-25 + 15:13:21 +
+ + + + + + + + + + + + +
+ +
+ instantaneous + SCIR1 + QINE + forecast + + + + + NaN + SCIR1SNE + 41.75 + -71.59 + -71.59 + 41.75 + 64.01 + CFS + 2019-11-25 + 15:46:47 +
+ + + + + + + + + + + + +
+ +
+ instantaneous + HIKN6 + QINE + forecast + + + + + NaN + HIKN6HUD + 43.32 + -75.12 + -75.12 + 43.32 + 385.57 + CFS + 2019-11-25 + 15:14:41 +
+ + + + + + + + + + + + +
+ +
+ instantaneous + RKWM1 + RQOT + observed + + + + + NaN + RKWM1ME + 45.58 + -69.72 + -69.72 + 45.58 + 313.33 + CFS + 2019-11-25 + 15:13:21 +
+ + + + + + + + + +
+ +
+ instantaneous + BNGM1 + RQOT + observed + + + + NaN + WYMM1SIX + 45.1 + -69.9 + -69.9 + 45.1 + 149.35 + CFS +
+ + + + + + + + + +
+ +
+ instantaneous + STVC3 + RQOT + observed + + + + NaN + STVC3SIX + 41.38 + -73.17 + -73.17 + 41.38 + 35.05 + CFS +
+ + + + + + + + + +
+ +
+ instantaneous + HDLN6 + RQOT + observed + + + + NaN + HDLN6SIX + 43.31 + -73.87 + -73.87 + 43.31 + 177.39 + CFS +
+ + + + + + + + + +
+ +
+ instantaneous + CPNN6 + RQOT + observed + + + + NaN + CPNN6SIX + 42.92 + -77.23 + -77.23 + 42.92 + 212.45 + CFS +
+ + + + + + + + + +
+ +
+ instantaneous + GBRN6 + RQOT + observed + + + + NaN + GBRN6SIX + 42.4 + -74.45 + -74.45 + 42.4 + 0.0 + CFS +
+ + + + + + + + + +
+ +
+ instantaneous + SWRN6 + RQOT + observed + + + + NaN + SWRN6 + 43.9 + -75.05 + -75.05 + 43.9 + 515.1 + CFS +
+ + + + + + + + + + +
+ +
+ instantaneous + CPNN6 + QINE + forecast + + + + + NaN + CPNN6 + 42.92 + -77.23 + -77.23 + 42.92 + 212.4 + CFS +
+ + + + + + + + + + + + +
+ +
+ instantaneous + GBRN6 + QINE + forecast + + + + + NaN + GBRN6 + 42.4 + -74.45 + -74.45 + 42.4 + 0.0 + CFS +
+ + + + + + + + + + + + +
+ +
+ instantaneous + HDLN6 + QINE + forecast + + + + + NaN + HDLN6 + 43.31 + -73.87 + -73.87 + 43.31 + 177.4 + CFS +
+ + + + + + + + + + + + +
+ +
+ instantaneous + STVC3 + QINE + forecast + + + + + NaN + STVC3 + 41.38 + -73.17 + -73.17 + 41.38 + 35.1 + CFS +
+ + + + + + + + + + + + +
+ +
+ instantaneous + BNGM1 + QINE + forecast + + + + + NaN + BNGM1 + 45.07 + -69.9 + -69.9 + 45.07 + 121.9 + CFS +
+ + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/nwrfc/NWRFC_11.29.2019.2100.xml b/data_assimilation_engine/rfc_ingestion/testdata/nwrfc/NWRFC_11.29.2019.2100.xml new file mode 100644 index 0000000..97eea64 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/nwrfc/NWRFC_11.29.2019.2100.xml @@ -0,0 +1,3774 @@ + + + 0.0 + +
+ instantaneous + OGCN2 + QINE + + + + + -999 + OGCN2 - Wildhorse near Owyhee River + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + AMFI1 + QINE + + + + + -999 + AMFI1 - Snake R at American Falls Res + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LOSO3 + QINE + + + + + -999 + LOSO3 - Lost Ck Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + APPO3 + QINE + + + + + -999 + APPO3 - Applegate R nr Cooper + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DEXO3 + QINE + + + + + -999 + DEXO3 - MF Willamette R nr Dexter + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + COTO3 + QINE + + + + + -999 + COTO3 - Cottage Grove Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DORO3 + QINE + + + + + -999 + DORO3 - Dorena Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FALO3 + QINE + + + + + -999 + FALO3 - Fall Ck Reservoir + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LOPO3 + QINE + + + + + -999 + LOPO3 - Lookout Point Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HCRO3 + QINE + + + + + -999 + HCRO3 - Hills Ck Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WARO3 + QINE + + + + + -999 + WARO3 - Malheur R nr Riverside + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BERO3 + QINE + + + + + -999 + BERO3 - Beulah Reservoir + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BULO3 + QINE + + + + + -999 + BULO3 - Bully Ck Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OWYO3 + QINE + + + + + -999 + OWYO3 - Owyhee Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ARKI1 + QINE + + + + + -999 + ARKI1 - Arrowrock Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LUCI1 + QINE + + + + + -999 + LUCI1 - Lucky Peak Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ANDI1 + QINE + + + + + -999 + ANDI1 - SF Boise R at Anderson Ranch Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BWMI1 + QINE + + + + + -999 + BWMI1 - Big Wood below Magic Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MAKI1 + QINE + + + + + -999 + MAKI1 - Big Lost R below Mackay Res + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PALI1 + QINE + + + + + -999 + PALI1 - Snake R nr Irwin + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JLKW4 + QINE + + + + + -999 + JLKW4 - Jackson Lake at Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ISLI1 + QINE + + + + + -999 + ISLI1 - Henrys Fork nr Island Park + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DRBI1 + QINE + + + + + -999 + DRBI1 - Deadwood R bl Deadwood Res + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CSDI1 + QINE + + + + + -999 + CSDI1 - Cascade Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BRNI1 + QINE + + + + + -999 + BRNI1 - Brownlee Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PHLO3 + QINE + + + + + -999 + PHLO3 - Mason Dam at Phillips Lake + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + UNYO3 + QINE + + + + + -999 + UNYO3 - Unity Reservoir + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OCHO3 + QINE + + + + + -999 + OCHO3 - Ochoco Ck bl Ochoco Res nr Prineville + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PRVO3 + QINE + + + + + -999 + PRVO3 - Crooked R nr Prineville + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CGRO3 + QINE + + + + + -999 + CGRO3 - Cougar Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BLUO3 + QINE + + + + + -999 + BLUO3 - Blue Reservoir + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCLO3 + QINE + + + + + -999 + BCLO3 - N Santiam R at Niagara + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FOSO3 + QINE + + + + + -999 + FOSO3 - Foster Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GPRO3 + QINE + + + + + -999 + GPRO3 - Green Peter Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FRNO3 + QINE + + + + + -999 + FRNO3 - Fern Ridge Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SCOO3 + QINE + + + + + -999 + SCOO3 - Scoggins Ck nr Gaston + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MEWW1 + QINE + + + + + -999 + MEWW1 - Merwin Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MKDO3 + QINE + + + + + -999 + MKDO3 - Mckay Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HCDI1 + QINE + + + + + -999 + HCDI1 - Snake R at Hells Canyon Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DWRI1 + QINE + + + + + -999 + DWRI1 - Dworshak Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MAYW1 + QINE + + + + + -999 + MAYW1 - Cowlitz R bl Mayfield Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MSRW1 + QINE + + + + + -999 + MSRW1 - Mossyrock Reservoir + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WYNW1 + QINE + + + + + -999 + WYNW1 - Wynoochee R nr Grisdale + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HAHW1 + QINE + + + + + -999 + HAHW1 - Green R bl Howard Hanson Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + KEEW1 + QINE + + + + + -999 + KEEW1 - Yakima R nr Martin + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CLEW1 + QINE + + + + + -999 + CLEW1 - Cle Elum R nr Roslyn + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + KACW1 + QINE + + + + + -999 + KACW1 - Kachess R nr Easton + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CHDW1 + QINE + + + + + -999 + CHDW1 - Lake Chelan + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + COEI1 + QINE + + + + + -999 + COEI1 - Coeur D Alene Lake + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CABI1 + QINE + + + + + -999 + CABI1 - Cabinet Gorge Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NOXM8 + QINE + + + + + -999 + NOXM8 - Noxon Rapids Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + KERM8 + QINE + + + + + -999 + KERM8 - Kerr Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HHWM8 + QINE + + + + + -999 + HHWM8 - Hungry Horse Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + KBDM8 + QINE + + + + + -999 + KBDM8 - Kootenai R bl Libby Dam + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PSLI1 + QINE + + + + + -999 + PSLI1 - Priest Lake + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + RODW1 + QINE + + + + + -999 + RODW1 - Ross Res nr Newhalem + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SHAW1 + QINE + + + + + -999 + SHAW1 - Baker R at Concrete + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + UBDW1 + QINE + + + + + -999 + UBDW1 - Upper Baker Lake + KCFS + 2019-11-29 + 21:00:09 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271319_OHRFC_Reservoir_Export_SAGU.xml b/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271319_OHRFC_Reservoir_Export_SAGU.xml new file mode 100644 index 0000000..80113dc --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271319_OHRFC_Reservoir_Export_SAGU.xml @@ -0,0 +1,384 @@ + + + 0.0 + +
+ instantaneous + ADJUSTQ_KNZP1_KNZP1ADJ_Forecast + KNZP1 + QINE + + + + + -999 + Kinzua Dam + 41.8377777778 + -79.0041666667 + -79.0041666667 + 41.8377777778 + 404.7744 + CFS + 2019-11-27 + 13:18:27 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADJUSTQ_TIOP1_TIOP1ADJ_Forecast + TIOP1 + QINE + + + + + -999 + Tionesta + 41.4730555556 + -79.4394444444 + -79.4394444444 + 41.4730555556 + 335.28 + CFS + 2019-11-27 + 13:18:27 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADJUSTQ_UCYP1_UCYP1ADJ_Forecast + UCDP1 + QINE + + + + + -999 + Union City + 41.9 + -79.82 + -79.82 + 41.9 + 426.72 + CFS + 2019-11-27 + 13:18:27 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADJUSTQ_WDRP1_WDRP1ADJ_Forecast + WCDP1 + QINE + + + + + -999 + Woodcock Dam + 41.6958333333 + -80.1083333333 + -80.1083333333 + 41.6958333333 + 344.424 + CFS + 2019-11-27 + 13:18:27 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271327_OHRFC_Reservoir_Export_SAGL.xml b/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271327_OHRFC_Reservoir_Export_SAGL.xml new file mode 100644 index 0000000..886ff31 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271327_OHRFC_Reservoir_Export_SAGL.xml @@ -0,0 +1,479 @@ + + + 0.0 + +
+ instantaneous + ADJUSTQ_GHDP1_GHDP1AJ_Forecast + GHDP1 + QINE + + + + + -999 + Glen Hazel + 41.5530555556 + -78.5963888889 + -78.5963888889 + 41.5530555556 + 466.344 + CFS + 2019-11-27 + 13:25:59 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADJUSTQ_MHDP1_MHDP1AJ_Forecast + MHDP1 + QINE + + + + + -999 + Mahoning Dam + 40.9275 + -79.2913888889 + -79.2913888889 + 40.9275 + 307.848 + CFS + 2019-11-27 + 13:25:59 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADJUSTQ_CCDP1_CCDP1AJ_Forecast + CCDP1 + QINE + + + + + -999 + Crooked Creek Dam + 40.7202777778 + -79.5116666667 + -79.5116666667 + 40.7202777778 + 251.46 + CFS + 2019-11-27 + 13:25:59 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADJUSTQ_CMDP1_CMDP1AJ_Forecast + CMDP1 + QINE + + + + + -999 + Conemaugh Dam + 40.4544444444 + -79.3911111111 + -79.3911111111 + 40.4544444444 + 262.128 + CFS + 2019-11-27 + 13:25:59 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADJUSTQ_SLTP1_SLTP1AJ_Forecast + LHDP1 + QINE + + + + + -999 + Loyalhanna Dam + 40.4586111111 + -79.4502777778 + -79.4502777778 + 40.4586111111 + 301.752 + CFS + 2019-11-27 + 13:25:59 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271331_OHRFC_Reservoir_Export_SMNU.xml b/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271331_OHRFC_Reservoir_Export_SMNU.xml new file mode 100644 index 0000000..9176f7c --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271331_OHRFC_Reservoir_Export_SMNU.xml @@ -0,0 +1,194 @@ + + + 0.0 + +
+ instantaneous + ADJUSTQ_SWJW2_SSWJW2A_Forecast + SWJW2 + QINE + + + + + -999 + Stonewall Jackson + 39.0033333333 + -80.4741666667 + -80.4741666667 + 39.0033333333 + 310.896 + CFS + 2019-11-27 + 13:30:10 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADJUSTQ_TYGW2_TYGW2AJ_Forecast + TYGW2 + QINE + + + + + -999 + Tygart Dam + 39.3136111111 + -80.0297222222 + -80.0297222222 + 39.3136111111 + 365.76 + CFS + 2019-11-27 + 13:30:10 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271332_OHRFC_Reservoir_Export_SBVR.xml b/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271332_OHRFC_Reservoir_Export_SBVR.xml new file mode 100644 index 0000000..429fa4b --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271332_OHRFC_Reservoir_Export_SBVR.xml @@ -0,0 +1,479 @@ + + + 0.0 + +
+ instantaneous + ADJUSTQ_BRWO1_BRWO1ADJ_Forecast + BRWO1 + QINE + + + + + -999 + Berlin Dam + 41.0483333333 + -81.0013888889 + -81.0013888889 + 41.0483333333 + 295.656 + CFS + 2019-11-27 + 13:31:20 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADJUSTQ_BRWO1_MLPO1ADJ_Forecast + MLPO1 + QINE + + + + + -999 + Milton Dam + 41.1313888889 + -80.9713888889 + -80.9713888889 + 41.1313888889 + 275.844 + CFS + 2019-11-27 + 13:31:20 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADJUSTQ_KITO1_KITO1ADJ_Forecast + KITO1 + QINE + + + + + -999 + Kirwan Dam + 41.1569444444 + -81.0719444444 + -81.0719444444 + 41.1569444444 + 286.512 + CFS + 2019-11-27 + 13:31:20 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADJUSTQ_MSQO1_MSQO1ADJ_Forecast + MSQO1 + QINE + + + + + -999 + Mosquito Creek Dam + 41.2997222222 + -80.7586111111 + -80.7586111111 + 41.2997222222 + 271.272 + CFS + 2019-11-27 + 13:31:20 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADJUSTQ_SHDP1_SHDP1ADJ_Forecast + SHDP1 + QINE + + + + + -999 + Shenango Dam + 41.2661111111 + -80.4727777778 + -80.4727777778 + 41.2661111111 + 265.176 + CFS + 2019-11-27 + 13:31:20 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271332_OHRFC_Reservoir_Export_SMNL.xml b/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271332_OHRFC_Reservoir_Export_SMNL.xml new file mode 100644 index 0000000..a542c96 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/ohrfc/201911271332_OHRFC_Reservoir_Export_SMNL.xml @@ -0,0 +1,99 @@ + + + 0.0 + +
+ instantaneous + ADJUSTQ_YGOP1_YGOP1AJ_Forecast + YGOP1 + QINE + + + + + -999 + Youghiogheny Dam + 39.8052777778 + -79.3644444444 + -79.3644444444 + 39.8052777778 + 403.86 + CFS + 2019-11-27 + 13:32:00 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/serfc/201911290600_SERFC_Reservoir_Export.xml b/data_assimilation_engine/rfc_ingestion/testdata/serfc/201911290600_SERFC_Reservoir_Export.xml new file mode 100644 index 0000000..74892f0 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/serfc/201911290600_SERFC_Reservoir_Export.xml @@ -0,0 +1,724 @@ + + + 0.0 + +
+ instantaneous + WDRF1 + QINE + + + + + -9999 + Woodruff + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FOGG1 + QINE + + + + + -9999 + Fort Gaines + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TYLA1 + QINE + + + + + -9999 + Jones Bluff L/D + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MRFA1 + QINE + + + + + -9999 + Millers Ferry + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CLBA1 + QINE + + + + + -9999 + Claiborne + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WETG1 + QINE + + + + + -9999 + West Point + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CHDS1 + QINE + + + + + -9999 + Thurmond Rsvr + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HRTG1 + QINE + + + + + -9999 + Hartwell Dam + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CMMG1 + QINE + + + + + -9999 + Cumming + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CVLG1 + QINE + + + + + -9999 + Allatoona Dam + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CTRG1 + QINE + + + + + -9999 + Carters + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + KERV2 + QINE + + + + + -9999 + Kerr Reservoir + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NUDN7 + QINE + + + + + -9999 + Neuse Falls Dam + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + NHPN7 + QINE + + + + + -9999 + B. Everett Jordan Dam + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WLKN7 + QINE + + + + + -9999 + W Kerr Scott + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PTTV2 + QINE + + + + + -9999 + Philpott Dam + CFS + 2019-11-29 + 06:56:04 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/data_assimilation_engine/rfc_ingestion/testdata/wgrfc/WGRFC_11.27.2019.16.00.xml b/data_assimilation_engine/rfc_ingestion/testdata/wgrfc/WGRFC_11.27.2019.16.00.xml new file mode 100644 index 0000000..9f64298 --- /dev/null +++ b/data_assimilation_engine/rfc_ingestion/testdata/wgrfc/WGRFC_11.27.2019.16.00.xml @@ -0,0 +1,18231 @@ + + 0.0 + +
+ instantaneous + PNTT2 + QINE + + + + + -999.99 + Lake Tawakoni near Wills Point + 32.83 + -95.92 + -95.92 + 32.83 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LFKT2 + QINE + + + + + -999.99 + Lake Fork Reservoir near Quitman + 32.8 + -95.55 + -95.55 + 32.8 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LCRT2 + QINE + + + + + -999.99 + Lake Cherokee + 32.38 + -94.65 + -94.65 + 32.38 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LMVT2 + QINE + + + + + -999.99 + Murvaul Lake near Gary + 32.03 + -94.42 + -94.42 + 32.03 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LMTT2 + QINE + + + + + -999.99 + Martin Lake near Tatum + 32.27 + -94.57 + -94.57 + 32.27 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BKLT2 + QINE + + + + + -999.99 + Toledo Bend Reservoir near Burkeville + 31.175 + -93.5652777778 + -93.5652777778 + 31.175 + 57.912 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LPTT2 + QINE + + + + + -999.99 + Frankston - Lake Palestine + 32.03 + -95.43 + -95.43 + 32.03 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SKCT2 + QINE + + + + + -999.99 + Striker Lake near New Salem + 31.93 + -94.98 + -94.98 + 31.93 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JSPT2 + QINE + + + + + -999.99 + Sam Rayburn Reservoir + 31.0619444444 + -94.1011111111 + -94.1011111111 + 31.0619444444 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TBLT2 + QINE + + + + + -999.99 + B. A. Steinhagen Lake near Town Bluff + 30.8 + -94.18 + -94.18 + 30.8 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BPRT2 + QINE + + + + + -999.99 + Bridgeport Reservoir above Bridgeport + 33.22 + -97.83 + -97.83 + 33.22 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + EAMT2 + QINE + + + + + -999.99 + Eagle Mountain Reservoir above Fort Worth + 32.88 + -97.47 + -97.47 + 32.88 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FLWT2 + QINE + + + + + -999.99 + Lake Worth above Fort Worth + 32.82 + -97.47 + -97.47 + 32.82 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LWFT2 + QINE + + + + + -999.99 + Lake Weatherford near Weatherford + 32.7725 + -97.6744444444 + -97.6744444444 + 32.7725 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BNBT2 + QINE + + + + + -999.99 + Benbrook - Benbrook Lake + 32.6505555556 + -97.4483333333 + -97.4483333333 + 32.6505555556 + 211.5312 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LART2 + QINE + + + + + -999.99 + Lake Arlington near Arlington + 32.72 + -97.199722 + -97.199722 + 32.72 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GPVT2 + QINE + + + + + -999.99 + Grapevine Lake near Grapevine + 32.97 + -97.05 + -97.05 + 32.97 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + RRLT2 + QINE + + + + + -999.99 + Ray Roberts Lake near Pilot Point + 33.33 + -97.05 + -97.05 + 33.33 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LEWT2 + QINE + + + + + -999.99 + Lewisville - Lewisville Lake + 33.0455555556 + -96.9608333333 + -96.9608333333 + 33.0455555556 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JPLT2 + QINE + + + + + -999.99 + Joe Pool Lake near Duncanville + 32.6433333333 + -97.0008333333 + -97.0008333333 + 32.6433333333 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GPET2 + QINE + + + + + -999.99 + Venus - Mountain Creek Lake + 32.7319444444 + -96.9430555556 + -96.9430555556 + 32.7319444444 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LVNT2 + QINE + + + + + -999.99 + Lavon Lake near Lavon + 33.03 + -96.48 + -96.48 + 33.03 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FRHT2 + QINE + + + + + -999.99 + Forney - Lake Ray Hubbard + 32.8 + -96.5 + -96.5 + 32.8 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TRNT2 + QINE + + + + + -999.99 + Cedar Creek Reservoir near Trinidad + 32.17 + -96.07 + -96.07 + 32.17 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BDWT2 + QINE + + + + + -999.99 + Ennis - Bardwell Lake + 32.25 + -96.65 + -96.65 + 32.25 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + DAWT2 + QINE + + + + + -999.99 + Dawson - Navarro Mills Lake + 31.95 + -96.6997222222 + -96.6997222222 + 31.95 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FFLT2 + QINE + + + + + -999.99 + Kerens - Richland-Chambers Reservoir + 31.95 + -96.1 + -96.1 + 31.95 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LVDT2 + QINE + + + + + -999.99 + Livingston Reservoir near Goodrich + 30.63 + -95.019722 + -95.019722 + 30.63 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LHPT2 + QINE + + + + + -999.99 + Lake Alan Henry near Justiceburg + 33.07 + -101.049722222 + -101.049722222 + 33.07 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LSWT2 + QINE + + + + + -999.99 + Lake Sweetwater near Sweetwater + 32.43 + -100.26972 + -100.26972 + 32.43 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HAWT2 + QINE + + + + + -999.99 + Nugent - Fort Phantom Hill Reservoir + 32.6 + -99.67 + -99.67 + 32.6 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LSFT2 + QINE + + + + + -999.99 + Paint Creek at Lake Stamford near Haskell + 33.08 + -99.58 + -99.58 + 33.08 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HCRT2 + QINE + + + + + -999.99 + Breckenridge - Hubbard Creek Reservoir + 32.83 + -98.97 + -98.97 + 32.83 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SMKT2 + QINE + + + + + -999.99 + Millers Creek Reservoir near Bomartin + 33.42 + -99.38 + -99.38 + 33.42 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LMGT2 + QINE + + + + + -999.99 + Lake Graham near Graham + 33.13 + -98.62 + -98.62 + 33.13 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PSMT2 + QINE + + + + + -999.99 + Possum Kingdom Lake + 32.87 + -98.43 + -98.43 + 32.87 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LPPT2 + QINE + + + + + -999.99 + Lake Palo Pinto near Santo + 32.65 + -98.269722 + -98.269722 + 32.65 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GBYT2 + QINE + + + + + -999.99 + Granbury - Lake Granbury + 32.3741666667 + -97.6888888889 + -97.6888888889 + 32.3741666667 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LCLT2 + QINE + + + + + -999.99 + Lake Pat Cleburne near Cleburne + 32.28 + -97.42 + -97.42 + 32.28 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + WTYT2 + QINE + + + + + -999.99 + Whitney - Lake Whitney + 31.87 + -97.37 + -97.37 + 31.87 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ALAT2 + QINE + + + + + -999.99 + Aquilla Lake above Aquilla + 31.9 + -97.22 + -97.22 + 31.9 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ACTT2 + QINE + + + + + -999.99 + Waco Lake near Waco + 31.58 + -97.1997222222 + -97.1997222222 + 31.58 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LLET2 + QINE + + + + + -999.99 + Leon Reservoir near Ranger + 32.37 + -98.68 + -98.68 + 32.37 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PCTT2 + QINE + + + + + -999.99 + Proctor Lake near Proctor + 31.97 + -98.5 + -98.5 + 31.97 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BLNT2 + QINE + + + + + -999.99 + Belton Lake near Belton + 31.1 + -97.48 + -97.48 + 31.1 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + STIT2 + QINE + + + + + -999.99 + Stillhouse Hollow Lake near Belton + 31.02 + -97.53 + -97.53 + 31.02 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GGLT2 + QINE + + + + + -999.99 + Georgetown - Lake Georgetown + 30.68 + -97.72 + -97.72 + 30.68 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + GNGT2 + QINE + + + + + -999.99 + Granger - Granger Lake + 30.7 + -97.33 + -97.33 + 30.7 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SOMT2 + QINE + + + + + -999.99 + Somerville Lake near Somerville + 30.3222222222 + -96.5255555556 + -96.5255555556 + 30.3222222222 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LLST2 + QINE + + + + + -999.99 + Lake Limestone near Marquez + 31.35 + -96.32 + -96.32 + 31.35 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CGNT2 + QINE + + + + + -999.99 + Gibbons Creek Reservoir + 30.63 + -96.03 + -96.03 + 30.63 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LTXT2 + QINE + + + + + -999.99 + Lake Texana near Edna + 28.9 + -96.58 + -96.58 + 28.9 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + JBTT2 + QINE + + + + + -999.99 + Vincent - J. B. Thomas Reservoir + 32.58 + -101.13 + -101.13 + 32.58 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CCRT2 + QINE + + + + + -999.99 + Champion Creek Reservoir near Colorado City + 32.27 + -100.87 + -100.87 + 32.27 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CLRT2 + QINE + + + + + -999.99 + Colorado City - Lake Colorado City + 32.33 + -100.92 + -100.92 + 32.33 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + EVST2 + QINE + + + + + -999.99 + Robert Lee - E. V. Spence Reservoir + 31.8794444444 + -100.516944444 + -100.516944444 + 31.8794444444 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BLKT2 + QINE + + + + + -999.99 + Oak Creek Reservoir near Blackwell + 32.05 + -100.3 + -100.3 + 32.05 + 629.412 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SAGT2 + QINE + + + + + -999.99 + SJT - O. C. Fisher Lake + 31.47 + -100.48 + -100.48 + 31.47 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + TBRT2 + QINE + + + + + -999.99 + Twin Buttes Reservoir near San Angelo + 31.3819444444 + -100.538055556 + -100.538055556 + 31.3819444444 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + OHIT2 + QINE + + + + + -999.99 + Voss - O. H. Ivie Reservoir + 31.5 + -99.67 + -99.67 + 31.5 + 472.44 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LKCT2 + QINE + + + + + -999.99 + Lake Coleman near Coleman + 32.05 + -99.5197222222 + -99.5197222222 + 32.05 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LBWT2 + QINE + + + + + -999.99 + Lake Brownwood near Brownwood + 31.83 + -99.0 + -99.0 + 31.83 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BCRT2 + QINE + + + + + -999.99 + Brady Creek Res nr Brady + 31.13 + -99.38 + -99.38 + 31.13 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BUDT2 + QINE + + + + + -999.99 + Lake Buchanan near Burnet + 30.7513888889 + -98.4183333333 + -98.4183333333 + 30.7513888889 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MSDT2 + QINE + + + + + -999.99 + Lake Travis near Austin + 30.3911111111 + -97.9066666667 + -97.9066666667 + 30.3911111111 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SMCT2 + QINE + + + + + -999.99 + Canyon Lake near New Braunfels + 29.8705555556 + -98.1966666667 + -98.1966666667 + 29.8705555556 + 304.8 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CKDT2 + QINE + + + + + -999.99 + Schroeder - Coleto Creek Reservoir + 28.72 + -97.17 + -97.17 + 28.72 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MDLT2 + QINE + + + + + -999.99 + Medina Lake near San Antonio + 29.54 + -98.9336111111 + -98.9336111111 + 29.54 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CTDT2 + QINE + + + + + -999.99 + Choke Canyon Reservoir near Three Rivers + 28.48 + -98.2697222222 + -98.2697222222 + 28.48 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MTHT2 + QINE + + + + + -999.99 + Lake Corpus Christi near Mathis + 28.0380555556 + -97.8797222222 + -97.8797222222 + 28.0380555556 + 8.5344 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + SRLN5 + QINE + + + + + -999.99 + Santa Rosa Lake near Santa Rosa + 35.03 + -104.699722222 + -104.699722222 + 35.03 + 1508.76 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LAKN5 + QINE + + + + + -999.99 + Lake Sumner near Fort Sumner + 34.6169444444 + -104.621944444 + -104.621944444 + 34.6169444444 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + RRRN5 + QINE + + + + + -999.99 + Two Rivers Reservoir + 33.3 + -104.72 + -104.72 + 33.3 + 1127.76 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CBLN5 + QINE + + + + + -999.99 + Brantley Lake near Carlsbad + 32.5466666667 + -104.378611111 + -104.378611111 + 32.5466666667 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + RLAT2 + QINE + + + + + -999.99 + Orla - Red Bluff Reservoir + 31.9061111111 + -103.929444444 + -103.929444444 + 31.9061111111 + 853.44 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + RRRC2 + QINE + + + + + -999.99 + Rio Grande Reservoir near Creede + 37.7166666667 + -107.266666667 + -107.266666667 + 37.7166666667 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ELVN5 + QINE + + + + + -999.99 + El Vado Reservoir near Tierra Amarilla + 36.5941666667 + -106.733333333 + -106.733333333 + 36.5941666667 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ABIN5 + QINE + + + + + -999.99 + Abiquiu Reservoir near Abiquiu + 36.24 + -106.428888889 + -106.428888889 + 36.24 + 1944.624 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + COCN5 + QINE + + + + + -999.99 + Cochiti Lake near Cochiti Pueblo - Rio Grande + 35.63 + -106.32 + -106.32 + 35.63 + 1694.688 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CGRN5 + QINE + + + + + -999.99 + Galisteo Reservior near Cerrillos + 35.47 + -106.22 + -106.22 + 35.47 + 1709.928 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BERN5 + QINE + + + + + -999.99 + Jemez Canyon Reservior near Bernalillo + 35.4 + -106.55 + -106.55 + 35.4 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + EBDN5 + QINE + + + + + -999.99 + Elephant Butte Reservoir near Elephant Butte + 33.1541666667 + -107.191111111 + -107.191111111 + 33.1541666667 + 1343.2536 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PLLC6 + QINE + + + + + -999.99 + Presa Luis Leon, MX + 28.98 + -105.58 + -105.58 + 28.98 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + AMIT2 + QINE + + + + + -999.99 + Amistad Reservoir near Del Rio + 29.4497222222 + -101.055833333 + -101.055833333 + 29.4497222222 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + CRNC7 + QINE + + + + + -999.99 + Presa V Carranza, MX + 27.5 + -100.73 + -100.73 + 27.5 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FALT2 + QINE + + + + + -999.99 + Falcon Reservoir near Falcon Heights + 26.5572222222 + -99.1605555556 + -99.1605555556 + 26.5572222222 + 97.536 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + PMGT4 + QINE + + + + + -999.99 + Presa Marte Gomez, MX + 26.22 + -98.92 + -98.92 + 26.22 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + MADT2 + QINE + + + + + -999.99 + Anzalduas Reservoir near Mission - Rio Grande + 26.13 + -98.33 + -98.33 + 26.13 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + FRGC7 + QINE + + + + + -999.99 + Presa la Fragua, MX + 28.8228 + -100.8333 + -100.8333 + 28.8228 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + LCTT2 + QINE + + + + + -999.99 + Lake Conroe near Conroe + 30.37 + -95.569999 + -95.569999 + 30.37 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + HSJT2 + QINE + + + + + -999.99 + Lake Houston near Sheldon + 29.92 + -95.15 + -95.15 + 29.92 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + ADDT2 + QINE + + + + + -999.99 + Addicks - Addicks Reservoir + 29.8 + -95.62 + -95.62 + 29.8 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ instantaneous + BAKT2 + QINE + + + + + -999.99 + Barker Reservoir near Addicks + 29.77 + -95.65 + -95.65 + 29.77 + 0.0 + CMS + 2019-11-27 + 15:00:03 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
From 1d2909adbd6cb029d4348666bebf4f125d6192ef Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Mon, 13 Jul 2026 10:45:59 -0400 Subject: [PATCH 19/26] Change comment and also reduce minutes duration to 2 decimals. --- data_assimilation_engine/output_variables/DataProcessor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index 023e643..767d0ae 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -222,7 +222,7 @@ def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> Non if len(var_prefix_list) > 0: ds_modified = self.stack_soil_variables(var_prefix_list) - # if the output needs to have SNLIQ (snow layer liquid water), I need to expand + # if the output needs to have SNLIQ (snow layer liquid water), we need to expand # dimensions to include a snow layer. It is assumed to be of length=1 if 'SNLIQ' in mdata.nwm_variables: expanded_var = ds_modified['SNLIQ'].expand_dims(dim = consts.DIM_SNOW_LYR) @@ -258,7 +258,7 @@ def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> Non self.write_netcdf_per_timestep(mapped_grid, output_dir, consts.DIM_TIME) end_time = time.perf_counter() duration_minutes = (end_time - start_time) / 60 - print(f"----Function execution time: {duration_minutes:.4f} minutes") + print(f"----Function execution time: {duration_minutes:.2f} minutes") else: print(f"----Production skipped for {cat_class_domain}") From 75ba7952a9d89a39a93daa784687973e5d009dcc Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Wed, 15 Jul 2026 09:52:08 -0400 Subject: [PATCH 20/26] temporary commit for switching to development. Includes WIP for channel_rt product. --- .../output_variables/DataProcessor.py | 116 +++++++++++++++++- .../output_variables/consts.py | 3 +- netcdf_production_sample.py | 4 +- 3 files changed, 114 insertions(+), 9 deletions(-) diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index 767d0ae..7610029 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -140,6 +140,24 @@ def create_template_grid_netcdf_using_config(self, mdata: NetCDFMetadata, templa template_nc_file = os.path.join(template_netcdf_folder, template_nc_name) if os.path.isfile(template_nc_file): print(f"----Reusing existing template file in local for {self._output_class}, {self._category}, {self._domain}") + elif mdata.category == 'channel_rt': # indicates that it is non-geospatial. For example, channel_rt + ds = xr.open_dataset(file_name) + + # Delete any variable that is in the ignore list. Zero the valid min and max attribute in the time dimension + ds = ds.drop_vars(consts.NWM_VARS_IGNORE_LIST, errors="ignore") + if consts.DIM_TIME in ds.coords: + attrs_to_reset = ['valid_min', 'valid_max'] + for attr in attrs_to_reset: + if attr in ds[consts.DIM_TIME].attrs: + ds[consts.DIM_TIME].attrs[attr] = 0 + + # Slice all coordinates and variable arrays to zero length. + dims = list(ds.sizes.keys()) + zero_slices = {dim: slice(0, 0) for dim in dims} + ds_template = ds.isel(zero_slices) + + # Save to nc file + ds_template.to_netcdf(template_nc_file) else: ds = xr.open_dataset(file_name) # To do: Have to figure out a workflow when CRS is "Not Available" @@ -203,12 +221,13 @@ def create_template_grid_netcdf_using_config(self, mdata: NetCDFMetadata, templa # Save to nc file ds_clipped.to_netcdf(template_nc_file) - print(f"NetCDF template grid written to {template_nc_file}") - + self.ds_template_grid = xr.open_dataset(template_nc_file) + print(f"NetCDF template grid written to {template_nc_file}") def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> None: produce_output = False + is_gridded = True ds_modified = self._catchment_ds # if the output needs to have SOIL_M or SOIL_T, we need to @@ -237,7 +256,7 @@ def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> Non ignore_set = set(consts.NWM_VARS_IGNORE_LIST) pruned_variables = [item for item in target_variables if item not in ignore_set] variables_to_drop = [var for var in ds_modified.data_vars if var not in pruned_variables and len(ds_modified[var].dims) > 0] - ds_filtered = ds_modified.drop_vars(variables_to_drop) + ds_filtered = ds_modified.drop_vars(variables_to_drop, errors="ignore") cat_class_domain = mdata.output_class + '.' + mdata.category + '.' + mdata.domain @@ -249,8 +268,10 @@ def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> Non if (cat_class_domain in consts.NWM_PRODUCTS_LIST): produce_output = True + if mdata.category == 'channel_rt': + is_gridded = False - if produce_output: + if produce_output and is_gridded: catchment_grid = self.build_catchment_id_grid(mdata.x_name, mdata.y_name) mapped_grid = self.map_catchment_data_to_grid(ds_filtered, catchment_grid, consts.DIM_CATCHMENTS, mdata.x_name, mdata.y_name) @@ -259,6 +280,8 @@ def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> Non end_time = time.perf_counter() duration_minutes = (end_time - start_time) / 60 print(f"----Function execution time: {duration_minutes:.2f} minutes") + elif produce_output and not is_gridded: + else: print(f"----Production skipped for {cat_class_domain}") @@ -284,8 +307,6 @@ def stack_soil_variables(self, var_prefix_list: List[str]) -> xr.Dataset: stacked_ds = stacked_ds.drop_vars(matching_vars) return stacked_ds - - def build_catchment_id_grid(self, x_dim_name: str, y_dim_name: str) -> xr.DataArray: """ Returns a DataArray (y, x) where each cell in the basin-level grid contains a catchment ID. @@ -438,6 +459,89 @@ def write_netcdf_per_timestep(self, mapped_grid: xr.Dataset, output_dir: str, ti output_file = os.path.join(output_dir, f"nwm.{self._geo_id}.{self._output_class}.{self._category}.{self._domain}.{formatted_t}.nc") # To do: Get this as function argument ds_t.to_netcdf(output_file) + import numpy as np +import xarray as xr + + +def populate_template_snapshot( + template_path, + source_path, + target_time, + var_mapping, + output_path="populated_snapshot.nc", +): + """Expands a zeroed NetCDF template and populates it with data from a single + + time snapshot, including remapping misnamed variables. + + Parameters: + ----------- + template_path : str + Path to the empty/zeroed template NetCDF file. + source_path : str + Path to the multi-time, multi-entity source NetCDF file. + target_time : str or datetime-like + The single time snapshot to extract (e.g., '2026-07-14'). + var_mapping : dict + A dictionary mapping {'source_variable_name': 'template_variable_name'}. + output_path : str + Path where the final populated NetCDF will be saved. + """ + # 1. Open the zeroed template and the source data + template_ds = xr.open_dataset(template_path) + source_ds = xr.open_dataset(source_path) + + # 2. Extract the single time slice from the source data + # Using a slice (target, target) forces the time dimension to keep a length of 1 + snapshot = source_ds.sel(time=slice(target_time, target_time)) + + # 3. Handle the misnamed variable by renaming it in our snapshot + # to match the name expected by the template + # errors='ignore' ensures it doesn't crash if already correctly named + snapshot = snapshot.rename_vars(var_mapping, errors="ignore") + + # 4. Extract the unique coordinates from the snapshot to expand the template + new_time = snapshot.coords["time"].values + new_entities = snapshot.coords["entity"].values + + # 5. Expand the template's dimensions by assigning the active coordinates + # This automatically resizes the template's structures from (0, 0) to (1, N) + populated_ds = template_ds.assign_coords( + time=new_time, entity=new_entities + ) + + # 6. Populate variables defined in the template using the snapshot data + for var_name in list(populated_ds.data_vars): + if var_name in snapshot.data_vars: + # Transfer the data array (retaining original attributes from template) + populated_ds[var_name].values = snapshot[var_name].values + else: + # Fallback: fill with zeros if a template variable isn't in this snapshot + print( + f"Warning: Variable '{var_name}' not found in snapshot. Leaving as zero filled." + ) + # Since assign_coords doesn't fill values, we instantiate it with zeros + populated_ds[var_name] = xr.zeros_like(populated_ds[var_name]) + + # 7. Write the populated snapshot dataset to a new NetCDF file + populated_ds.to_netcdf(output_path) + print( + f"Successfully created '{output_path}' with dimensions: {dict(populated_ds.sizes)}" + ) + + return populated_ds + + +# Example Usage: +# mapping = {'temp_obs': 'temperature'} # 'temp_obs' in source becomes 'temperature' in template +# populate_template_snapshot( +# template_path="empty_template.nc", +# source_path="multi_time_data.nc", +# target_time="2026-07-14", +# var_mapping=mapping, +# output_path="final_snapshot_20260714.nc" +# ) + def close_log(self): """Restores the original terminal output and closes the file.""" original_stream = getattr(self, "_original_stdout", sys.stdout) diff --git a/data_assimilation_engine/output_variables/consts.py b/data_assimilation_engine/output_variables/consts.py index 61f7c82..743ad0f 100644 --- a/data_assimilation_engine/output_variables/consts.py +++ b/data_assimilation_engine/output_variables/consts.py @@ -5,7 +5,8 @@ 'GRDFLX', 'TRAD', 'FSA', 'CANWAT', 'LH', 'FIRA', 'HFX'] NWM_VARS_IGNORE_LIST = ['ACCET', 'ACCECAN', 'ACCEDIR', 'ACCETRAN', 'CANWAT', 'SOILSAT', - 'EDIR', 'FSA', 'GRDFLX', 'ISNOW', 'UGDRNOFF', 'zwattablrt'] + 'EDIR', 'FSA', 'GRDFLX', 'ISNOW', 'UGDRNOFF', 'zwattablrt', + 'qBtmVertRunoff', 'qSfcLatRunoff'] NWM_PRODUCTS_LIST = ['analysis_assim.land.conus', 'analysis_assim.terrain_rt.conus', 'medium_range_blend.land.conus', 'medium_range_blend.terrain_rt.conus', diff --git a/netcdf_production_sample.py b/netcdf_production_sample.py index 9fbee90..335e68a 100644 --- a/netcdf_production_sample.py +++ b/netcdf_production_sample.py @@ -86,14 +86,14 @@ def overall_netcdf_workflow(ngen_netcdf_output_file: str, ngen_gpkg_file: str, o nwm_output_folder = os.path.join(output_folder, consts.NWM_OUTPUT_FOLDER) for mdata in netcdf_metadata_list: # if mdata.output_class == 'medium_range' and mdata.category =='land_1' and mdata.domain == 'conus': - if mdata.output_class == 'analysis_assim' and mdata.category =='land' and mdata.domain == 'conus': + if mdata.output_class == 'analysis_assim' and mdata.category =='channel_rt' and mdata.domain == 'conus': # if mdata.output_class == 'medium_range_blend' and mdata.category =='terrain_rt' and mdata.domain == 'conus': # if mdata.output_class == 'long_range' and mdata.category =='land_4' and mdata.domain == 'conus': log_file = os.path.join(output_folder, consts.LOG_FOLDER, 'nwm_' + mdata.output_class + '.' + mdata.category + '.' + mdata.domain + '.' + datetime.now().strftime("%Y%m%d_%H%M%S") + '.log') processor.log_file = log_file processor.create_template_grid_netcdf_using_config(mdata, ngen_template_nc_folder) - processor.produce_nwm_output_grid(mdata, nwm_output_folder) + #processor.produce_nwm_output_grid(mdata, nwm_output_folder) # print(f"Ready to process: {mdata.output_class}, {mdata.category}, {mdata.domain}") # if any(cat.lower() in mdata.category.lower() for cat in ['channel_rt', 'reservoir', 'total_water']): # print(f"----The requested category - {mdata.category} - is not a gridded netcdf. The functionality is not implemented yet") From 9e9b37dc642fcbfa8b75ed250ddddf475099c529 Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Thu, 16 Jul 2026 07:07:28 -0400 Subject: [PATCH 21/26] Updated function for channel_rt. Not fully functional yet. --- .../output_variables/DataProcessor.py | 91 ++++++++----------- 1 file changed, 37 insertions(+), 54 deletions(-) diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index 7610029..86f88d9 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -41,11 +41,11 @@ def __init__(self, catchment_netcdf_file: str, gpkg_file: str, chunk_size: int = # Check schema and assign catchment ID field. if is_new_NHF_schema: - self.catchment_field = consts.NHF_DIV_ID + self._catchment_field = consts.NHF_DIV_ID else: - self.catchment_field = consts.NONNHF_DIV_ID + self._catchment_field = consts.NONNHF_DIV_ID - gpkg_catchment_list = gpkg_gdf[self.catchment_field].values.tolist() + gpkg_catchment_list = gpkg_gdf[self._catchment_field].values.tolist() self._gpkg_gdf = gpkg_gdf # Check if catchments from netcdf and geopackage match @@ -98,8 +98,8 @@ def log_file(self, log_file_path: str): self._log_file = open(log_file_path, "w", encoding="utf-8") sys.stdout = self._log_file - def set_template_grid(self, template_grid_path: str): - self.ds_template_grid = xr.open_dataset(template_grid_path) + def set_template_netcdf(self, template_grid_path: str): + self._template_netcdf_ds = xr.open_dataset(template_grid_path) def _is_new_NHF_schema(self, geopackage_path: str, layer_name: str) -> bool: """ @@ -222,7 +222,7 @@ def create_template_grid_netcdf_using_config(self, mdata: NetCDFMetadata, templa # Save to nc file ds_clipped.to_netcdf(template_nc_file) - self.ds_template_grid = xr.open_dataset(template_nc_file) + self._template_netcdf_ds = xr.open_dataset(template_nc_file) print(f"NetCDF template grid written to {template_nc_file}") def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> None: @@ -312,7 +312,7 @@ def build_catchment_id_grid(self, x_dim_name: str, y_dim_name: str) -> xr.DataAr Returns a DataArray (y, x) where each cell in the basin-level grid contains a catchment ID. """ try: - ds = self.ds_template_grid + ds = self._template_netcdf_ds x = ds[x_dim_name].values y = ds[y_dim_name].values @@ -343,11 +343,11 @@ def build_catchment_id_grid(self, x_dim_name: str, y_dim_name: str) -> xr.DataAr gdf_poly = self._gpkg_gdf.to_crs(crs) joined = gpd.sjoin( gdf_ncgrid_points, - gdf_poly[[self.catchment_field, "geometry"]], + gdf_poly[[self._catchment_field, "geometry"]], how="left", predicate="within" ) - catchment_ids = joined[self.catchment_field].to_numpy() + catchment_ids = joined[self._catchment_field].to_numpy() catchment_grid = catchment_ids.reshape(len(y), len(x)) catchment_id_da = xr.DataArray( @@ -402,12 +402,12 @@ def map_catchment_data_to_grid(self, ds: xr.Dataset, catchment_grid: xr.DataArra # Attach coordinates from template ds_out = ds_out.assign_coords({ - x_dim_name: self.ds_template_grid[x_dim_name], - y_dim_name: self.ds_template_grid[y_dim_name] + x_dim_name: self._template_netcdf_ds[x_dim_name], + y_dim_name: self._template_netcdf_ds[y_dim_name] }) # Add CRS info from template grid - crs_attrs = self.ds_template_grid["crs"].attrs.copy() + crs_attrs = self._template_netcdf_ds["crs"].attrs.copy() ds_out["crs"] = xr.DataArray(data=0,dims=()) ds_out["crs"].attrs = crs_attrs @@ -463,58 +463,44 @@ def write_netcdf_per_timestep(self, mapped_grid: xr.Dataset, output_dir: str, ti import xarray as xr -def populate_template_snapshot( - template_path, - source_path, - target_time, - var_mapping, - output_path="populated_snapshot.nc", -): - """Expands a zeroed NetCDF template and populates it with data from a single - +def populate_template_snapshot(self): + """ + Expands a zeroed NetCDF template and populates it with data from a single time snapshot, including remapping misnamed variables. - - Parameters: - ----------- - template_path : str - Path to the empty/zeroed template NetCDF file. - source_path : str - Path to the multi-time, multi-entity source NetCDF file. - target_time : str or datetime-like - The single time snapshot to extract (e.g., '2026-07-14'). - var_mapping : dict - A dictionary mapping {'source_variable_name': 'template_variable_name'}. - output_path : str - Path where the final populated NetCDF will be saved. """ # 1. Open the zeroed template and the source data - template_ds = xr.open_dataset(template_path) - source_ds = xr.open_dataset(source_path) - # 2. Extract the single time slice from the source data - # Using a slice (target, target) forces the time dimension to keep a length of 1 - snapshot = source_ds.sel(time=slice(target_time, target_time)) + if not self._template_netcdf_ds: + raise ValueError("Template netcdf not set") + + if not self._catchment_ds: + raise ValueError("ngen catchment netcdf not set") + + # Extract the last time from ngen catchment output and use that as the timeslice + # To do: Need to update this for the correct time snapshot. + last_time = self._catchment_ds.coords[consts.DIM_TIME].values[-1] + output_snapshot = self._catchment_ds.sel(time=slice(last_time, last_time)) # 3. Handle the misnamed variable by renaming it in our snapshot # to match the name expected by the template # errors='ignore' ensures it doesn't crash if already correctly named - snapshot = snapshot.rename_vars(var_mapping, errors="ignore") + output_snapshot = output_snapshot.rename_vars(var_mapping, errors="ignore") - # 4. Extract the unique coordinates from the snapshot to expand the template - new_time = snapshot.coords["time"].values - new_entities = snapshot.coords["entity"].values + # Extract the unique coordinates from the snapshot to expand the template + new_time = output_snapshot.coords[consts.DIM_TIME].values + new_entities = output_snapshot.coords[consts.DIM_CATCHMENTS].values - # 5. Expand the template's dimensions by assigning the active coordinates + # Expand the template's dimensions by assigning the active coordinates # This automatically resizes the template's structures from (0, 0) to (1, N) - populated_ds = template_ds.assign_coords( + populated_ds = self._template_netcdf_ds.assign_coords( time=new_time, entity=new_entities ) - # 6. Populate variables defined in the template using the snapshot data + # Populate variables defined in the template using the snapshot data for var_name in list(populated_ds.data_vars): - if var_name in snapshot.data_vars: + if var_name in output_snapshot.data_vars: # Transfer the data array (retaining original attributes from template) - populated_ds[var_name].values = snapshot[var_name].values + populated_ds[var_name].values = output_snapshot[var_name].values else: # Fallback: fill with zeros if a template variable isn't in this snapshot print( @@ -523,12 +509,9 @@ def populate_template_snapshot( # Since assign_coords doesn't fill values, we instantiate it with zeros populated_ds[var_name] = xr.zeros_like(populated_ds[var_name]) - # 7. Write the populated snapshot dataset to a new NetCDF file - populated_ds.to_netcdf(output_path) - print( - f"Successfully created '{output_path}' with dimensions: {dict(populated_ds.sizes)}" - ) - + # Write the populated snapshot dataset to a new NetCDF file + # populated_ds.to_netcdf(output_path) + # print(f"Successfully created '{output_path}' with dimensions: {dict(populated_ds.sizes)}") return populated_ds From 71f5bf29d9277aa73b9ef09678bb0e2dc90988ff Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Wed, 22 Jul 2026 11:26:01 -0400 Subject: [PATCH 22/26] Pushing latest changes for Jeff. Contains comments and test cases that will be deleted in a later commit. --- .../output_variables/DataProcessor.py | 325 +++++++++++++----- .../output_variables/consts.py | 3 + .../output_variables/utils.py | 68 +--- netcdf_production_sample.py | 35 +- 4 files changed, 291 insertions(+), 140 deletions(-) diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index 86f88d9..a29dfa3 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -101,6 +101,12 @@ def log_file(self, log_file_path: str): def set_template_netcdf(self, template_grid_path: str): self._template_netcdf_ds = xr.open_dataset(template_grid_path) + def set_troute_netcdf(self, troute_outpath: str): + self._troute_netcdf_ds = xr.open_dataset(troute_outpath) + + def set_troute_lakeout_netcdf(self, troute_lakeoutpath: str): + self._troute_lakeout_netcdf_ds = xr.open_dataset(troute_lakeoutpath) + def _is_new_NHF_schema(self, geopackage_path: str, layer_name: str) -> bool: """ Check the data schema in the geopackage for the new NHF format @@ -115,10 +121,10 @@ def _snap_to_grid(self, value: float, origin: float, resolution: int, direction: elif direction == np.ceil: return origin + np.ceil((value - origin) / resolution) * resolution - def create_template_grid_netcdf_using_config(self, mdata: NetCDFMetadata, template_netcdf_folder: str) -> None: + def create_template_netcdf_using_config(self, mdata: NetCDFMetadata, template_netcdf_folder: str) -> None: """ Create a template grid aligned to a reference grid defined in config.json. - The template grid covers the extents in the geopackage (usually basin level). + The output template grid covers the extents of the divides in the geopackage. """ os.makedirs(template_netcdf_folder, exist_ok = True) @@ -140,7 +146,7 @@ def create_template_grid_netcdf_using_config(self, mdata: NetCDFMetadata, templa template_nc_file = os.path.join(template_netcdf_folder, template_nc_name) if os.path.isfile(template_nc_file): print(f"----Reusing existing template file in local for {self._output_class}, {self._category}, {self._domain}") - elif mdata.category == 'channel_rt': # indicates that it is non-geospatial. For example, channel_rt + elif mdata.category in ['channel_rt', 'reservoir']: # indicates that it is non-geospatial. For example, channel_rt ds = xr.open_dataset(file_name) # Delete any variable that is in the ignore list. Zero the valid min and max attribute in the time dimension @@ -166,7 +172,7 @@ def create_template_grid_netcdf_using_config(self, mdata: NetCDFMetadata, templa gdf = self._gpkg_gdf.to_crs(target_crs) geom = unary_union(gdf.geometry) - # Get bounding box and snap to origin in config + # Get bounding box and snap to origin in the national reference grid minx, miny, maxx, maxy = gdf.total_bounds snapped_minx = self._snap_to_grid(minx, origin_x, res_x, np.floor) @@ -174,23 +180,35 @@ def create_template_grid_netcdf_using_config(self, mdata: NetCDFMetadata, templa snapped_miny = self._snap_to_grid(miny, origin_y, res_y, np.floor) snapped_maxy = self._snap_to_grid(maxy, origin_y, res_y, np.ceil) + # Filter national grid to a sub-grid within the snapped bounding box + # 1. Determine if the national grid Y-coordinate counts upwards or downwards + y_dir = 1 if ds[y_name].values[1] > ds[y_name].values[0] else -1 + + # 2. Slice dynamically based on the direction of the reference grid + if y_dir == 1: + y_slice = slice(snapped_miny, snapped_maxy) # South to North + else: + y_slice = slice(snapped_maxy, snapped_miny) # North to South + + # 3. Perform your selection using the verified slice orientation ds_subset = ds.sel( { x_name: slice(snapped_minx, snapped_maxx), - y_name: slice(snapped_miny, snapped_maxy), + y_name: y_slice #slice(snapped_miny, snapped_maxy), } ) x_subset = ds_subset[x_name].values y_subset = ds_subset[y_name].values xx, yy = np.meshgrid(x_subset, y_subset) - mask = intersects_xy(geom, xx, yy) - mask_da = xr.DataArray(mask, + flat_mask = intersects_xy(geom, xx.ravel(), yy.ravel()) + grid_mask = flat_mask.reshape(ds_subset[y_name].size, ds_subset[x_name].size) + mask_da = xr.DataArray(grid_mask, dims=(y_name, x_name), coords={ - y_name: ds_subset[y_name], - x_name: ds_subset[x_name], - }, + y_name: ds_subset[y_name].values, + x_name: ds_subset[x_name].values + } ) ds_masked = ds_subset.copy() @@ -225,7 +243,7 @@ def create_template_grid_netcdf_using_config(self, mdata: NetCDFMetadata, templa self._template_netcdf_ds = xr.open_dataset(template_nc_file) print(f"NetCDF template grid written to {template_nc_file}") - def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> None: + def produce_nwm_output_product(self, mdata: NetCDFMetadata, output_dir: str) -> None: produce_output = False is_gridded = True ds_modified = self._catchment_ds @@ -264,13 +282,16 @@ def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> Non if var_name in ds_filtered.data_vars: continue # the variable exists in ngen output. We don't need to do anything else: + # If not in print(f"----'{var_name}' is missing in ngen output") if (cat_class_domain in consts.NWM_PRODUCTS_LIST): produce_output = True - if mdata.category == 'channel_rt': + if mdata.category in ['channel_rt', 'reservoir']: is_gridded = False + print(f"----Produce output: {produce_output} and Gridded: {is_gridded}") + if produce_output and is_gridded: catchment_grid = self.build_catchment_id_grid(mdata.x_name, mdata.y_name) mapped_grid = self.map_catchment_data_to_grid(ds_filtered, catchment_grid, consts.DIM_CATCHMENTS, mdata.x_name, mdata.y_name) @@ -281,7 +302,7 @@ def produce_nwm_output_grid(self, mdata: NetCDFMetadata, output_dir: str) -> Non duration_minutes = (end_time - start_time) / 60 print(f"----Function execution time: {duration_minutes:.2f} minutes") elif produce_output and not is_gridded: - + self.produce_channel_reservoir_nwm_product(mdata, output_dir) else: print(f"----Production skipped for {cat_class_domain}") @@ -422,17 +443,16 @@ def write_netcdf_per_timestep(self, mapped_grid: xr.Dataset, output_dir: str, ti Writes one NetCDF per timestep. """ os.makedirs(output_dir, exist_ok=True) - reference_time = np.datetime64("1970-01-01T00:00:00") + reference_epoch = np.datetime64("1970-01-01T00:00:00") for t in mapped_grid[time_dim].values: ds_t = mapped_grid.sel({time_dim: t}).copy() - time_value_mins = (t - reference_time) / np.timedelta64(1, "m") # time to CF format + time_value_mins = (t - reference_epoch) / np.timedelta64(1, "m") # time to CF format ds_t = ds_t.expand_dims({time_dim: [time_value_mins]}) ds_t[time_dim].attrs["units"] = "minutes since 1970-01-01 00:00:00 UTC" ds_t[time_dim].attrs["standard_name"] = "time" # Rebuild CRS info and mapping. - # This is required to avoid crs variable getting timesliced. crs(time=1) if "crs" in ds_t: ds_t = ds_t.drop_vars("crs") ds_t["crs"] = xr.DataArray(0, dims=()) @@ -443,11 +463,11 @@ def write_netcdf_per_timestep(self, mapped_grid: xr.Dataset, output_dir: str, ti # Add reference_time variable and attributes to netcdf # To do: Replace this with the actual time when the model simulations were run. - ds_t["reference_time"] = xr.DataArray( + ds_t[consts.DIM_REF_TIME] = xr.DataArray( data=time_value_mins.astype("int32"), dims=() ) - ds_t["reference_time"].attrs = { + ds_t[consts.DIM_REF_TIME].attrs = { "long_name": "model initialization time", "standard_name": "forecast_reference_time", "units": "minutes since 1970-01-01 00:00:00 UTC" @@ -456,74 +476,219 @@ def write_netcdf_per_timestep(self, mapped_grid: xr.Dataset, output_dir: str, ti # Output filename and save t_str = np.datetime_as_string(t, unit='s') formatted_t = t_str.replace('-', '_').replace(':', '_') - output_file = os.path.join(output_dir, f"nwm.{self._geo_id}.{self._output_class}.{self._category}.{self._domain}.{formatted_t}.nc") # To do: Get this as function argument + output_file = os.path.join(output_dir, f"nwm.{self._geo_id}.{self._output_class}.{self._category}.{self._domain}.{formatted_t}.nc") ds_t.to_netcdf(output_file) - import numpy as np -import xarray as xr + def produce_channel_reservoir_nwm_product(self, mdata: NetCDFMetadata, output_dir: str): + """ + Expands a zeroed NetCDF template and populates it with data from a single + time snapshot, including remapping misnamed variables. + """ + if not self._template_netcdf_ds: + raise ValueError("Template netcdf not set") + + if mdata.category == 'channel_rt' and not self._catchment_ds: + raise ValueError("ngen catchment netcdf not set") + + if mdata.category == 'channel_rt' and not self._troute_netcdf_ds: + raise ValueError("troute output netcdf not set") + if mdata.category == 'reservoir' and not self._troute_lakeout_netcdf_ds: + raise ValueError("troute lakeout netcdf not set") + + if mdata.category =='channel_rt': + # Extract the last time from ngen catchment output and use that as the timeslice + # To do: Need to update this for the correct time snapshot. + last_time_1 = self._troute_netcdf_ds.coords[consts.DIM_TIME].values[-1] + output_snapshot_1 = self._troute_netcdf_ds.sel(time=slice(last_time_1, last_time_1)) + last_time_2 = self._catchment_ds.coords[consts.DIM_TIME].values[-1] + output_snapshot_2 = self._catchment_ds.sel(time=slice(last_time_2, last_time_2)) + + # For testing, since the last time snapshot doesn't align in the two datasets + # we align the troute output to the ngen output + output_snapshot_1 = output_snapshot_1.assign_coords(time=output_snapshot_2.coords[consts.DIM_TIME].values) + + # Replace any misnamed variable and also filter based on the required variables + var_mapping={'flow': 'streamflow'} + output_snapshot_1 = output_snapshot_1.rename(**var_mapping) + variables_to_keep = ['feature_id', 'time', 'streamflow', 'nudge', 'velocity'] + ds_filtered_1 = output_snapshot_1[variables_to_keep] + + # rename catchments to feature_id and filter required variables + dim_mapping={'catchments': 'feature_id'} + output_snapshot_2 = output_snapshot_2.rename(**dim_mapping) + variables_to_keep = ['feature_id', 'time', 'qBucket'] + ds_filtered_2 = output_snapshot_2[variables_to_keep] + + # Merge the two filtered datasets together + merged_snapshot = xr.merge([ds_filtered_1, ds_filtered_2], join='outer', combine_attrs = 'override') + snapshot_time = merged_snapshot.coords[consts.DIM_TIME].values + else: + merged_snapshot = self._troute_lakeout_netcdf_ds + snapshot_time = merged_snapshot.coords[consts.DIM_REF_TIME].values + + + # Extract the feature_ids + feature_ids = merged_snapshot.coords[consts.DIM_FEATURE_ID].values + feature_ids_da = xr.DataArray(feature_ids, dims=[consts.DIM_FEATURE_ID]) -def populate_template_snapshot(self): - """ - Expands a zeroed NetCDF template and populates it with data from a single - time snapshot, including remapping misnamed variables. - """ - # 1. Open the zeroed template and the source data + # Time calculations for reference time and time dimension/variable. + # To do: Set up for testing. Update this if-else block for production + if mdata.category == 'channel_rt': + timesteps = self._catchment_ds.coords[consts.DIM_TIME].values + min_time = np.min(timesteps) + max_time = np.max(timesteps) + else: + ref_time = np.atleast_1d(snapshot_time)[0].astype('datetime64[m]') + min_time = ref_time + 60 #mins + max_time = ref_time + 180 #mins + + # Extract the unique coordinates from the snapshot for output + reference_epoch = np.datetime64("1970-01-01T00:00:00") + snapshot_time_array = snapshot_time.astype('datetime64[m]') #we need minutes to perform timedelta + snapshot_time_val = np.int32((snapshot_time_array[0] - reference_epoch) / np.timedelta64(1, "m")) # time to CF format + time_value_min = np.int32((min_time - reference_epoch) / np.timedelta64(1, "m")) # time to CF format + time_value_max = np.int32((max_time - reference_epoch) / np.timedelta64(1, "m")) # time to CF format + if mdata.category == 'channel_rt': + time_da = xr.DataArray([snapshot_time_val], dims=[consts.DIM_TIME]) + else: + time_da = xr.DataArray([time_value_max], dims=[consts.DIM_TIME]) + # print(f"Min time: {min_time}; Max time: {max_time}") + # print(f"Min value time: {time_value_min}; Max value time: {time_value_max}") - if not self._template_netcdf_ds: - raise ValueError("Template netcdf not set") - - if not self._catchment_ds: - raise ValueError("ngen catchment netcdf not set") - - # Extract the last time from ngen catchment output and use that as the timeslice - # To do: Need to update this for the correct time snapshot. - last_time = self._catchment_ds.coords[consts.DIM_TIME].values[-1] - output_snapshot = self._catchment_ds.sel(time=slice(last_time, last_time)) - - # 3. Handle the misnamed variable by renaming it in our snapshot - # to match the name expected by the template - # errors='ignore' ensures it doesn't crash if already correctly named - output_snapshot = output_snapshot.rename_vars(var_mapping, errors="ignore") - - # Extract the unique coordinates from the snapshot to expand the template - new_time = output_snapshot.coords[consts.DIM_TIME].values - new_entities = output_snapshot.coords[consts.DIM_CATCHMENTS].values - - # Expand the template's dimensions by assigning the active coordinates - # This automatically resizes the template's structures from (0, 0) to (1, N) - populated_ds = self._template_netcdf_ds.assign_coords( - time=new_time, entity=new_entities - ) - - # Populate variables defined in the template using the snapshot data - for var_name in list(populated_ds.data_vars): - if var_name in output_snapshot.data_vars: - # Transfer the data array (retaining original attributes from template) - populated_ds[var_name].values = output_snapshot[var_name].values + # reference_time variable and attributes to netcdf + # To do: Replace this with the actual time when the model simulations were run. + if mdata.category == 'channel_rt': + ref_time_val = time_value_max.astype("int32") else: - # Fallback: fill with zeros if a template variable isn't in this snapshot - print( - f"Warning: Variable '{var_name}' not found in snapshot. Leaving as zero filled." - ) - # Since assign_coords doesn't fill values, we instantiate it with zeros - populated_ds[var_name] = xr.zeros_like(populated_ds[var_name]) - - # Write the populated snapshot dataset to a new NetCDF file - # populated_ds.to_netcdf(output_path) - # print(f"Successfully created '{output_path}' with dimensions: {dict(populated_ds.sizes)}") - return populated_ds - - -# Example Usage: -# mapping = {'temp_obs': 'temperature'} # 'temp_obs' in source becomes 'temperature' in template -# populate_template_snapshot( -# template_path="empty_template.nc", -# source_path="multi_time_data.nc", -# target_time="2026-07-14", -# var_mapping=mapping, -# output_path="final_snapshot_20260714.nc" -# ) + ref_time_val = np.int32((min_time - 60 - reference_epoch) / np.timedelta64(1, "m")) # time to CF format + + ref_time_da = xr.DataArray(data=[ref_time_val], dims=[consts.DIM_REF_TIME]) + + # Create empty dataset with the merged snapshot values + data_coords={ + consts.DIM_TIME: time_da, + consts.DIM_FEATURE_ID: feature_ids_da, + consts.DIM_REF_TIME: ref_time_da + } + data_vars_dict = {} + for var_name, var_obj in self._template_netcdf_ds.data_vars.items(): + # shape tuple based on dimensions + if len(var_obj.dims) == 0: # scalar variables + var_shape = () + else: + var_shape = tuple(len(data_coords[d]) for d in var_obj.dims) + # Construct empty array with the exact dimensions, type and attributes in the template + data_vars_dict[var_name] = (var_obj.dims, np.empty(var_shape, dtype=var_obj.dtype), var_obj.attrs) + + populated_ds = xr.Dataset(data_vars = data_vars_dict, coords = data_coords) + + # Copy all global attributes from template + populated_ds.attrs.update(self._template_netcdf_ds.attrs) + + # Populate variables defined in the template using the snapshot data + for var_name in self._template_netcdf_ds.variables: + # leave the dimensions out as they have already been populated. + if var_name in self._template_netcdf_ds.dims: + continue + + # Confirm if the variable is present both in snapshot and final output + in_snapshot = var_name in merged_snapshot.variables + in_populated = var_name in populated_ds.variables + + if not in_snapshot and not in_populated: + print(f"{var_name} is missing from both snapshot and output datasets.") + continue + elif not in_snapshot: + print(f"{var_name} is in the template but not found in the snapshot dataset.") + continue + elif not in_populated: + print(f"{var_name} is in the template but not found in the output dataset.") + continue + + if var_name in merged_snapshot.variables: + print(f"----Processing variable: {var_name}") + out_var = merged_snapshot[var_name] + template_var = self._template_netcdf_ds[var_name] + # raw_values = np.squeeze(out_var.values) + # populated_ds[var_name] = xr.DataArray(raw_values, dims=[consts.DIM_FEATURE_ID]) #, attrs=var_attrs) + if out_var.ndim == template_var.ndim: + print(f"----Dimensions match for variable {var_name}") + print(f"----Source - Shape: {out_var.shape} | Dtype: {out_var.dtype}") + print(f"----Template - Shape: {template_var.shape} | Dtype: {template_var.dtype}") + + # Check if shapes are fully identical + if out_var.shape != template_var.shape: + print(f"----SHAPE MISMATCH: Cannot copy {out_var.shape} into {template_var.shape}!") + # Optional: print a preview of the source values + # print("----Source values preview:", out_var.values) + # ----------------------- + # if dtypes are different between template and the snapshot, + # we need to do appropriate casting. This loop does only from float to int. + data_values = out_var.values + if np.issubdtype(template_var.dtype, np.integer): + if np.issubdtype(extracted_values.dtype, np.floating): + data_values = np.nan_to_num(data_values, nan=0) + # Use np.array().astype() to ensure scalars cast works as well. + extracted_values = np.array(extracted_values).astype(template_var.dtype) + + populated_ds[var_name].values = data_values # populate the values. + else: + print(f"----The dimensions don't match between template ({template_var.dims}) and snapshot ({out_var.dims}) for {var_name}") + else: + if self._template_netcdf_ds[var_name].ndim == 0: #Scalar variables not in the data, but in template + populated_ds[var_name] = xr.DataArray(self._template_netcdf_ds[var_name].values.item()) #, attrs=var_attrs) + print(f"----Found a scalar variable {var_name} that is not in the data, but present in the template.Template value has been copied over.") + else: + # Allocate a 1D zero array sized exactly to the number of catchments/feature IDs + # This is just a fallback option + # shape = (len(feature_ids),) + # populated_ds[var_name] = xr.DataArray(np.zeros(shape), dims=[consts.DIM_FEATURE_ID]) #, attrs=var_attrs) + print(f"----Found a data variable {var_name} that is not in the data, but present in the template.It has been ignored.") + + # Transfer all other attributes from template + for var_name in self._template_netcdf_ds.variables: + if var_name in populated_ds.variables: + populated_ds[var_name].attrs.update(self._template_netcdf_ds[var_name].attrs) + populated_ds[var_name].encoding.update(self._template_netcdf_ds[var_name].encoding) + + # Prevent overwriting conflicts by clearing 'units' and calendar + populated_ds[var_name].attrs.pop('units', None) + populated_ds[var_name].attrs.pop('calendar', None) + + # Copy Fill and missing values from the template DS + has_missing = 'missing_value' in self._template_netcdf_ds[var_name].encoding + has_fill = '_FillValue' in self._template_netcdf_ds[var_name].encoding + if has_missing and has_fill: + tgt_value = self._template_netcdf_ds[var_name].encoding['missing_value'] + populated_ds[var_name].encoding['missing_value'] = tgt_value + populated_ds[var_name].encoding['_FillValue'] = tgt_value + elif has_missing and not has_fill: + tgt_value = self._template_netcdf_ds[var_name].encoding['missing_value'] + populated_ds[var_name].encoding['missing_value'] = tgt_value + populated_ds[var_name].encoding['_FillValue'] = None # set it to None. + elif has_fill and not has_missing: + tgt_value = self._template_netcdf_ds[var_name].encoding['_FillValue'] + populated_ds[var_name].encoding['_FillValue'] = tgt_value + populated_ds[var_name].encoding['missing_value'] = None + + # Add valid min and max times to the "time" attributes and specify units for all time related variables + populated_ds[consts.DIM_TIME].attrs["valid_min"] = time_value_min + populated_ds[consts.DIM_TIME].attrs["valid_max"] = time_value_max + populated_ds[consts.DIM_TIME].attrs['units'] = "minutes since 1970-01-01 00:00:00" + + # Manually assign units and encoding for reference time. + # Without this it was encoding as nanoseconds since 1970-01-01 + populated_ds[consts.DIM_REF_TIME].attrs['units'] = "minutes since 1970-01-01 00:00:00" + + + # Output filename and save + os.makedirs(output_dir, exist_ok=True) + datetime_obj = np.datetime64(int(time_value_max), "m") + t_str = np.datetime_as_string(datetime_obj, unit='m') + formatted_t = t_str.replace('-', '_').replace(':', '_') + output_file = os.path.join(output_dir, f"nwm.{self._geo_id}.{self._output_class}.{self._category}.{self._domain}.{formatted_t}.nc") + populated_ds.to_netcdf(output_file) def close_log(self): """Restores the original terminal output and closes the file.""" diff --git a/data_assimilation_engine/output_variables/consts.py b/data_assimilation_engine/output_variables/consts.py index 743ad0f..ef18394 100644 --- a/data_assimilation_engine/output_variables/consts.py +++ b/data_assimilation_engine/output_variables/consts.py @@ -9,6 +9,7 @@ 'qBtmVertRunoff', 'qSfcLatRunoff'] NWM_PRODUCTS_LIST = ['analysis_assim.land.conus', 'analysis_assim.terrain_rt.conus', + 'analysis_assim.channel_rt.conus', 'analysis_assim.reservoir.conus', 'medium_range_blend.land.conus', 'medium_range_blend.terrain_rt.conus', 'medium_range.land_1.conus', 'medium_range.terrain_rt_1.conus', 'medium_range.land_2.conus', 'medium_range.terrain_rt_2.conus', @@ -30,6 +31,8 @@ DIM_CATCHMENTS = 'catchments' DIM_SOIL_LYR = 'soil_layers_stag' DIM_SNOW_LYR = 'snow_layers' +DIM_FEATURE_ID = 'feature_id' +DIM_REF_TIME = 'reference_time' NHF_REF_OBJECT = 'reference_flowpaths' NHF_DIV_ID = 'div_id' NONNHF_DIV_ID = 'divide_id' diff --git a/data_assimilation_engine/output_variables/utils.py b/data_assimilation_engine/output_variables/utils.py index 25e7fd7..b0de54c 100644 --- a/data_assimilation_engine/output_variables/utils.py +++ b/data_assimilation_engine/output_variables/utils.py @@ -615,58 +615,6 @@ def find_files_by_timestep(root_dir: str, search_timestep: str) -> List[str]: matched_files.append(full_path) return matched_files -def merge_basin_netcdfs(reference_grid: str, nc_files: list[str], fill_value: float | None = None, check_crs: bool = True -) -> xr.Dataset: - """ - Merge multiple NetCDF subsets. - Assumes same grid resolution, same coordinate system and no overlaps - """ - # For testing purposes, making the variables and the units uniform - # across all datasets being combined. - # Also, this function tests combine function with only two datasets - - ref_grid = xr.open_dataset(reference_grid) - datasets = [xr.open_dataset(f) for f in nc_files] - dt_list = [] - for ds in datasets: - # the test datasets have different units for variables. - # For testing, just making them all same units. - for var in ds.data_vars: - ds[var].attrs['variable units'] = 'm' - - # To avoid shift changes due to precision in the lat-lon values, we will - # re-index the coordinates to match the reference grid. - # tolerance of 1m meaning any misalignment within 1m gets snapped. - ds_reindexed = ds.reindex(y=ref_grid.y, x=ref_grid.x, method="nearest", tolerance=1.0) - if len(dt_list) == 0: - dt_list.append(ds_reindexed) # add first file as is. - else: - # For testing purposes, have been using datasets with different timesteps. - # Using the snippet below to match timesteps as well. - ds_updated = ds_reindexed.assign_coords(time=dt_list[0].time) - dt_list.append(ds_updated) - - # Check CRS and confirm that they are the same for all the netcdf files - if check_crs: - crs_list = [] - for ds in datasets: - if "crs" in ds: - crs_list.append(ds.variables["crs"].attrs['spatial_ref']) - else: - raise ValueError("One dataset missing CRS") - if len(set(crs_list)) != 1: - raise ValueError("CRS mismatch between datasets") - - ds_combined = reduce(lambda left, right: left.combine_first(right), dt_list) - - # Optional fill value , if provided - # To do: Examine NWM products to see if there are multiple fill values - # and whether they need to be filled. - if fill_value is not None: - ds_combined = ds_combined.fillna(fill_value) - - return ds_combined - def create_multi_basin_netcdfs(reference_grid: str, nc_files: list[str], variables_of_interest: list[str] = None, tolerance: float = 1.0, fill_value: float | None = None, check_crs: bool = True @@ -737,4 +685,20 @@ def create_multi_basin_netcdfs(reference_grid: str, nc_files: list[str], variabl } return ds_combined, encoding_config + +def combined_channel_reservoir_netcdfs(nc_files_folder: str, output_folder: str, + output_class: str, category: str, domain: str): + + # Path to your NetCDF files + file_pattern = "path/to/files/*.nc" + + # Combine strictly along the 'entity' dimension + ds = xr.open_mfdataset( + file_pattern, + combine="nested", + concat_dim="entity", + coords="minimal", # Keeps identical coordinates (like time) from duplicating + compat="override" # Skips expensive consistency checks for identical variables + ) + # endregion \ No newline at end of file diff --git a/netcdf_production_sample.py b/netcdf_production_sample.py index 335e68a..470b156 100644 --- a/netcdf_production_sample.py +++ b/netcdf_production_sample.py @@ -1,6 +1,7 @@ import argparse import os from datetime import datetime +import time from data_assimilation_engine.output_variables.DataReader import DataReader from data_assimilation_engine.output_variables.DataProcessor import DataProcessor import data_assimilation_engine.output_variables.utils as utils @@ -18,13 +19,13 @@ def create_template_grid_for_gpkg(netcdf_file: str, gpkg_file: str, template_gri # python netcdf_production_sample.py create-template-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json #processor = DataProcessor(netcdf_file, gpkg_file, config_json_file, 'analysis_assim', 'land', 'conus') processor = DataProcessor(netcdf_file, gpkg_file) - processor.create_template_grid_netcdf_using_config(template_grid_file) + processor.create_template_netcdf_using_config(template_grid_file) def create_nwm_grid(netcdf_file: str, gpkg_file: str, template_grid_file: str, config_json_file: str): #Usage: # python netcdf_production_sample.py create-nwm-grid sample_data/sample_netcdf/final_test/catchment_randomvals.nc sample_data/sample_gpkg/gages-01123000.gpkg sample_data/sample_netcdf/final_test/new_grid_template.nc sample_data/nwm_output/metadata_config.json processor = DataProcessor(netcdf_file, gpkg_file, config_json_file, 'analysis_assim', 'land', 'conus') - processor.set_template_grid(template_grid_file) + processor.set_template_netcdf(template_grid_file) output_dir = 'sample_data/sample_netcdf/sample_output/new_test' processor.produce_nwm_output_grid(output_dir) @@ -49,7 +50,8 @@ def combine_basin_grids(reference_grid: str, netcdf_folder: str, output_folder: # python netcdf_production_sample.py create-combined-basin-grid sample_data/nwm_output/analysis_assim/nwm.t00z.analysis_assim.land.tm00.conus.nc sample_data/sample_netcdf/sample_output/merge_test sample_data/sample_netcdf/sample_output/merge_test utils.create_combined_basin_netcdf_products(reference_grid, netcdf_folder, output_folder) -def overall_netcdf_workflow(ngen_netcdf_output_file: str, ngen_gpkg_file: str, output_folder: str): +def overall_netcdf_workflow(ngen_netcdf_output_file: str, ngen_gpkg_file: str, output_folder: str, + troute_output_file: str = '', troute_lakeout_file: str = ''): #Usage # python netcdf_production_sample.py test-overall-workflow sample_data/outputs_0629/ngen_outputs/catchment_output_sr_01123000.nc sample_data/sample_gpkg/gauge_01123000.gpkg sample_data/outputs_0629 download = False @@ -81,24 +83,38 @@ def overall_netcdf_workflow(ngen_netcdf_output_file: str, ngen_gpkg_file: str, o # reader.add_missing_variables(ngen_netcdf_output_file) # reader.assign_random_values(ngen_netcdf_output_file) + start_time = time.perf_counter() + + processor = DataProcessor(ngen_netcdf_output_file, ngen_gpkg_file) ngen_template_nc_folder = os.path.join(output_folder, consts.NWM_NGEN_TEMPLATE_FOLDER) nwm_output_folder = os.path.join(output_folder, consts.NWM_OUTPUT_FOLDER) for mdata in netcdf_metadata_list: + if mdata.output_class == 'analysis_assim' and mdata.category =='channel_rt' and not troute_output_file: + raise ValueError("T-Route output file is not specified") + if mdata.output_class == 'analysis_assim' and mdata.category =='reservoir' and not troute_lakeout_file: + raise ValueError("T-Route lakeout file is not specified") + # if mdata.output_class == 'medium_range' and mdata.category =='land_1' and mdata.domain == 'conus': - if mdata.output_class == 'analysis_assim' and mdata.category =='channel_rt' and mdata.domain == 'conus': + if mdata.output_class == 'analysis_assim' and mdata.category =='reservoir' and mdata.domain == 'conus': # if mdata.output_class == 'medium_range_blend' and mdata.category =='terrain_rt' and mdata.domain == 'conus': # if mdata.output_class == 'long_range' and mdata.category =='land_4' and mdata.domain == 'conus': log_file = os.path.join(output_folder, consts.LOG_FOLDER, 'nwm_' + mdata.output_class + '.' + mdata.category + '.' + mdata.domain + '.' + datetime.now().strftime("%Y%m%d_%H%M%S") + '.log') processor.log_file = log_file - processor.create_template_grid_netcdf_using_config(mdata, ngen_template_nc_folder) - #processor.produce_nwm_output_grid(mdata, nwm_output_folder) + processor.create_template_netcdf_using_config(mdata, ngen_template_nc_folder) + if mdata.category == 'channel_rt': + processor.set_troute_netcdf(troute_output_file) + if mdata.category == 'reservoir': + processor.set_troute_lakeout_netcdf(troute_lakeout_file) + processor.produce_nwm_output_product(mdata, nwm_output_folder) # print(f"Ready to process: {mdata.output_class}, {mdata.category}, {mdata.domain}") # if any(cat.lower() in mdata.category.lower() for cat in ['channel_rt', 'reservoir', 'total_water']): # print(f"----The requested category - {mdata.category} - is not a gridded netcdf. The functionality is not implemented yet") # continue - + end_time = time.perf_counter() + duration_minutes = (end_time - start_time) / 60 + print(f"----Function execution time: {duration_minutes:.2f} minutes") def main() -> None: @@ -149,6 +165,8 @@ def main() -> None: overall_workflow.add_argument("ngen_netcdf_output_file") overall_workflow.add_argument("ngen_gpkg_file") overall_workflow.add_argument("output_folder") + overall_workflow.add_argument("troute_out_file") + overall_workflow.add_argument("troute_lakeout_file") args = parser.parse_args() @@ -167,7 +185,8 @@ def main() -> None: elif args.command == "create-combined-basin-grid": combine_basin_grids(args.reference_grid, args.timestep_grids_folder, args.output_basin_grids_folder) elif args.command == "test-overall-workflow": - overall_netcdf_workflow(args.ngen_netcdf_output_file, args.ngen_gpkg_file, args.output_folder) + overall_netcdf_workflow(args.ngen_netcdf_output_file, args.ngen_gpkg_file, args.output_folder, + args.troute_out_file, args.troute_lakeout_file) else: parser.print_help() From 0ece6efb09df54de617184d845115661e827f3f6 Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Thu, 23 Jul 2026 07:46:15 -0400 Subject: [PATCH 23/26] Added folders to gitignore and untrack ignored files --- .gitignore | 3 + .../output_variables/DataProcessor.py | 361 ++++++++---------- 2 files changed, 163 insertions(+), 201 deletions(-) diff --git a/.gitignore b/.gitignore index 5eb3b10..c48b6c2 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ */launch.json build .idea/ +/sample_data/nwm_output/ +/sample_data/outputs_0629/ +/sample_data/sample_netcdf/ \ No newline at end of file diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index a29dfa3..11b4587 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -266,25 +266,7 @@ def produce_nwm_output_product(self, mdata: NetCDFMetadata, output_dir: str) -> expanded_var = expanded_var.transpose(consts.DIM_TIME, consts.DIM_SNOW_LYR, consts.DIM_CATCHMENTS) ds_modified['SNLIQ'] = expanded_var - # Remove data variables that should not be part of the product. - # You can remove variables that are in the ignore variables as well. - target_variables = [var.strip() for var in mdata.nwm_variables.split(",")] - removed_items = list(set(target_variables).intersection(set(consts.NWM_VARS_IGNORE_LIST))) # for logging - print(f"----Variables ignored: {removed_items}") - ignore_set = set(consts.NWM_VARS_IGNORE_LIST) - pruned_variables = [item for item in target_variables if item not in ignore_set] - variables_to_drop = [var for var in ds_modified.data_vars if var not in pruned_variables and len(ds_modified[var].dims) > 0] - ds_filtered = ds_modified.drop_vars(variables_to_drop, errors="ignore") - cat_class_domain = mdata.output_class + '.' + mdata.category + '.' + mdata.domain - - for var_name in pruned_variables: - if var_name in ds_filtered.data_vars: - continue # the variable exists in ngen output. We don't need to do anything - else: - # If not in - print(f"----'{var_name}' is missing in ngen output") - if (cat_class_domain in consts.NWM_PRODUCTS_LIST): produce_output = True if mdata.category in ['channel_rt', 'reservoir']: @@ -293,9 +275,27 @@ def produce_nwm_output_product(self, mdata: NetCDFMetadata, output_dir: str) -> print(f"----Produce output: {produce_output} and Gridded: {is_gridded}") if produce_output and is_gridded: + # Remove data variables that should not be part of the product. + # You can remove variables that are in the ignore variables as well. + target_variables = [var.strip() for var in mdata.nwm_variables.split(",")] + removed_items = list(set(target_variables).intersection(set(consts.NWM_VARS_IGNORE_LIST))) # for logging + print(f"----Variables ignored: {removed_items}") + ignore_set = set(consts.NWM_VARS_IGNORE_LIST) + pruned_variables = [item for item in target_variables if item not in ignore_set] + variables_to_drop = [var for var in ds_modified.data_vars if var not in pruned_variables and len(ds_modified[var].dims) > 0] + ds_filtered = ds_modified.drop_vars(variables_to_drop, errors="ignore") + + # Log any variables that are missing in ngen output. + for var_name in pruned_variables: + if var_name in ds_filtered.data_vars: + continue # the variable exists in ngen output. We don't need to do anything + else: + # If not in ngen output + print(f"----'{var_name}' is missing in ngen output") + catchment_grid = self.build_catchment_id_grid(mdata.x_name, mdata.y_name) mapped_grid = self.map_catchment_data_to_grid(ds_filtered, catchment_grid, consts.DIM_CATCHMENTS, mdata.x_name, mdata.y_name) - + start_time = time.perf_counter() self.write_netcdf_per_timestep(mapped_grid, output_dir, consts.DIM_TIME) end_time = time.perf_counter() @@ -496,199 +496,158 @@ def produce_channel_reservoir_nwm_product(self, mdata: NetCDFMetadata, output_di if mdata.category == 'reservoir' and not self._troute_lakeout_netcdf_ds: raise ValueError("troute lakeout netcdf not set") - if mdata.category =='channel_rt': - # Extract the last time from ngen catchment output and use that as the timeslice - # To do: Need to update this for the correct time snapshot. - last_time_1 = self._troute_netcdf_ds.coords[consts.DIM_TIME].values[-1] - output_snapshot_1 = self._troute_netcdf_ds.sel(time=slice(last_time_1, last_time_1)) - last_time_2 = self._catchment_ds.coords[consts.DIM_TIME].values[-1] - output_snapshot_2 = self._catchment_ds.sel(time=slice(last_time_2, last_time_2)) - - # For testing, since the last time snapshot doesn't align in the two datasets - # we align the troute output to the ngen output - output_snapshot_1 = output_snapshot_1.assign_coords(time=output_snapshot_2.coords[consts.DIM_TIME].values) - - # Replace any misnamed variable and also filter based on the required variables - var_mapping={'flow': 'streamflow'} - output_snapshot_1 = output_snapshot_1.rename(**var_mapping) - variables_to_keep = ['feature_id', 'time', 'streamflow', 'nudge', 'velocity'] - ds_filtered_1 = output_snapshot_1[variables_to_keep] - - # rename catchments to feature_id and filter required variables - dim_mapping={'catchments': 'feature_id'} - output_snapshot_2 = output_snapshot_2.rename(**dim_mapping) - variables_to_keep = ['feature_id', 'time', 'qBucket'] - ds_filtered_2 = output_snapshot_2[variables_to_keep] - - # Merge the two filtered datasets together - merged_snapshot = xr.merge([ds_filtered_1, ds_filtered_2], join='outer', combine_attrs = 'override') - snapshot_time = merged_snapshot.coords[consts.DIM_TIME].values - else: - merged_snapshot = self._troute_lakeout_netcdf_ds - snapshot_time = merged_snapshot.coords[consts.DIM_REF_TIME].values + reference_epoch = np.datetime64("1970-01-01T00:00:00") # set reference epoch + + if mdata.category == 'reservoir': + troute_source_ds = self._troute_lakeout_netcdf_ds + source_ds_times = troute_source_ds[consts.DIM_TIME].values + sorted_times = np.sort(source_ds_times)[::-1] # sort and reverse slice + time_value_min = sorted_times[-1] + time_value_max = sorted_times[0] + time_value_min = np.int32((sorted_times[-1] - reference_epoch) / np.timedelta64(1, "m")) # time to CF format + time_value_max = np.int32((sorted_times[0] - reference_epoch) / np.timedelta64(1, "m")) # time to CF format + elif mdata.category == 'channel_rt': + troute_source_ds = self._troute_netcdf_ds + units_attr_val = troute_source_ds[consts.DIM_TIME].encoding.get('units') + time_str = units_attr_val.split("since ")[1].strip() + base_datetime = np.datetime64(time_str) + source_ds_times = troute_source_ds[consts.DIM_TIME].values + #delta_seconds = seconds_offsets.astype("timedelta64[s]") + #source_ds_times = base_datetime + delta_seconds + source_ds_minutes = (source_ds_times - reference_epoch).astype("timedelta64[m]").astype(int) + sorted_times = np.sort(source_ds_minutes)[::-1] # sort and reverse slice + time_value_min = sorted_times[-1] + time_value_max = sorted_times[0] + + # Get reference time for output + ref_time_val = time_value_min - 60 # 60 mins less than the smallest time. - - # Extract the feature_ids - feature_ids = merged_snapshot.coords[consts.DIM_FEATURE_ID].values - feature_ids_da = xr.DataArray(feature_ids, dims=[consts.DIM_FEATURE_ID]) - - # Time calculations for reference time and time dimension/variable. - # To do: Set up for testing. Update this if-else block for production - if mdata.category == 'channel_rt': - timesteps = self._catchment_ds.coords[consts.DIM_TIME].values - min_time = np.min(timesteps) - max_time = np.max(timesteps) - else: - ref_time = np.atleast_1d(snapshot_time)[0].astype('datetime64[m]') - min_time = ref_time + 60 #mins - max_time = ref_time + 180 #mins - - # Extract the unique coordinates from the snapshot for output - reference_epoch = np.datetime64("1970-01-01T00:00:00") - snapshot_time_array = snapshot_time.astype('datetime64[m]') #we need minutes to perform timedelta - snapshot_time_val = np.int32((snapshot_time_array[0] - reference_epoch) / np.timedelta64(1, "m")) # time to CF format - time_value_min = np.int32((min_time - reference_epoch) / np.timedelta64(1, "m")) # time to CF format - time_value_max = np.int32((max_time - reference_epoch) / np.timedelta64(1, "m")) # time to CF format - if mdata.category == 'channel_rt': - time_da = xr.DataArray([snapshot_time_val], dims=[consts.DIM_TIME]) - else: - time_da = xr.DataArray([time_value_max], dims=[consts.DIM_TIME]) - # print(f"Min time: {min_time}; Max time: {max_time}") - # print(f"Min value time: {time_value_min}; Max value time: {time_value_max}") - - # reference_time variable and attributes to netcdf - # To do: Replace this with the actual time when the model simulations were run. - if mdata.category == 'channel_rt': - ref_time_val = time_value_max.astype("int32") - else: - ref_time_val = np.int32((min_time - 60 - reference_epoch) / np.timedelta64(1, "m")) # time to CF format - - ref_time_da = xr.DataArray(data=[ref_time_val], dims=[consts.DIM_REF_TIME]) - - # Create empty dataset with the merged snapshot values - data_coords={ - consts.DIM_TIME: time_da, - consts.DIM_FEATURE_ID: feature_ids_da, - consts.DIM_REF_TIME: ref_time_da + re_index_args = { + consts.DIM_FEATURE_ID: troute_source_ds[consts.DIM_FEATURE_ID].values, + consts.DIM_REF_TIME: [ref_time_val] } - data_vars_dict = {} - for var_name, var_obj in self._template_netcdf_ds.data_vars.items(): - # shape tuple based on dimensions - if len(var_obj.dims) == 0: # scalar variables - var_shape = () - else: - var_shape = tuple(len(data_coords[d]) for d in var_obj.dims) - # Construct empty array with the exact dimensions, type and attributes in the template - data_vars_dict[var_name] = (var_obj.dims, np.empty(var_shape, dtype=var_obj.dtype), var_obj.attrs) - - populated_ds = xr.Dataset(data_vars = data_vars_dict, coords = data_coords) - # Copy all global attributes from template - populated_ds.attrs.update(self._template_netcdf_ds.attrs) - - # Populate variables defined in the template using the snapshot data - for var_name in self._template_netcdf_ds.variables: - # leave the dimensions out as they have already been populated. - if var_name in self._template_netcdf_ds.dims: - continue - - # Confirm if the variable is present both in snapshot and final output - in_snapshot = var_name in merged_snapshot.variables - in_populated = var_name in populated_ds.variables - - if not in_snapshot and not in_populated: - print(f"{var_name} is missing from both snapshot and output datasets.") - continue - elif not in_snapshot: - print(f"{var_name} is in the template but not found in the snapshot dataset.") - continue - elif not in_populated: - print(f"{var_name} is in the template but not found in the output dataset.") - continue - - if var_name in merged_snapshot.variables: - print(f"----Processing variable: {var_name}") - out_var = merged_snapshot[var_name] + # Create one netcdf each for tm00, tm01 and tm02 + for time_step, snapshot_time_val in enumerate(sorted_times): + populated_ds = self._template_netcdf_ds.reindex(**re_index_args, fill_value = np.nan) + time_args = {consts.DIM_TIME: [snapshot_time_val]} + populated_ds = populated_ds.assign_coords(**time_args) + populated_ds.attrs.update(self._template_netcdf_ds.attrs) + + # Populate variables defined in the template using the negen output and troute data + for var_name in self._template_netcdf_ds.variables: + # leave the dimensions out as they (except time) have already been populated. + if var_name in self._template_netcdf_ds.dims: + continue + + # Add reference time value to the output + if var_name == consts.DIM_REF_TIME: + # Assign the scalar or 1D value directly to the pre-allocated template dimension + populated_ds[var_name].values = np.array([ref_time_val]).astype(populated_ds[var_name].dtype) + continue + + # Confirm if the variable is present both in lakeout and final output + in_snapshot = var_name in troute_source_ds.variables + in_populated = var_name in populated_ds.variables + if var_name.lower() == 'qbucket': + in_ngenout = var_name in self._catchment_ds.variables + + if not in_snapshot and not in_populated: + print(f"{var_name} is missing from both troute and output datasets.") + continue + elif not in_snapshot: + if self._template_netcdf_ds[var_name].ndim == 0: # Scalar variables not in the data, but in template + populated_ds[var_name] = xr.DataArray(self._template_netcdf_ds[var_name].values.item()) + print(f"----Found a scalar variable - {var_name} that is not in the data, but present in the template.Template value has been copied over.") + else: + print(f"----Found a data variable - {var_name} that is not in the data, but present in the template. It is filled with NaN.") + continue + elif not in_populated: + print(f"{var_name} is in the template but not found in the output dataset.") + continue + elif var_name.lower() == 'qbucket' and not in_ngenout: + print(f"{var_name} is in the template but not found in the catchment output dataset.") + continue + + # Get the time slice data for this variable, if time is one of the dimensions. + # Otherwise, get the full variable (typically 1D based on feature_id dimension) template_var = self._template_netcdf_ds[var_name] - # raw_values = np.squeeze(out_var.values) - # populated_ds[var_name] = xr.DataArray(raw_values, dims=[consts.DIM_FEATURE_ID]) #, attrs=var_attrs) - if out_var.ndim == template_var.ndim: - print(f"----Dimensions match for variable {var_name}") - print(f"----Source - Shape: {out_var.shape} | Dtype: {out_var.dtype}") - print(f"----Template - Shape: {template_var.shape} | Dtype: {template_var.dtype}") - - # Check if shapes are fully identical - if out_var.shape != template_var.shape: - print(f"----SHAPE MISMATCH: Cannot copy {out_var.shape} into {template_var.shape}!") - # Optional: print a preview of the source values - # print("----Source values preview:", out_var.values) - # ----------------------- - # if dtypes are different between template and the snapshot, - # we need to do appropriate casting. This loop does only from float to int. - data_values = out_var.values + if var_name.lower() == 'qbucket': + # get time slice data from ngen catchment output. + # Convert time (mins) to secs to match ngen catchment output. + snapshot_time_val_sec = int(snapshot_time_val * 60) + source_var = self._catchment_ds[var_name].sel(time = snapshot_time_val_sec) #expecting parameter name: 'time' + else: + troute_unsliced_var = troute_source_ds[var_name] + if consts.DIM_TIME in troute_unsliced_var.dims: + # this loop is in descending order of time. but, the source is in ascending order. + # recalculate time index. + total_timesteps = troute_unsliced_var.sizes[consts.DIM_TIME] + inverted_time_index = total_timesteps - 1 - time_step + source_var = troute_unsliced_var.isel(time = inverted_time_index) #expecting parameter name: 'time' + else: + source_var = troute_unsliced_var + + tgt_shape = populated_ds[var_name].shape + + if source_var.ndim == len(tgt_shape): + # print(f"----Dimensions match for variable {var_name}") + # print(f"----Source - Shape: {lakeout_var.shape} | Dtype: {lakeout_var.dtype}") + # print(f"----Template - Shape: {tgt_shape} | Dtype: {populated_ds[var_name].dtype}") + + data_values = source_var.values + # Verify the types because the lakeout variables such as inflow and outflow are float + # But, they are int in the template. So, we are casting from float to int. if np.issubdtype(template_var.dtype, np.integer): - if np.issubdtype(extracted_values.dtype, np.floating): + if np.issubdtype(data_values.dtype, np.floating): data_values = np.nan_to_num(data_values, nan=0) # Use np.array().astype() to ensure scalars cast works as well. - extracted_values = np.array(extracted_values).astype(template_var.dtype) - + data_values = np.array(data_values).astype(template_var.dtype) populated_ds[var_name].values = data_values # populate the values. else: - print(f"----The dimensions don't match between template ({template_var.dims}) and snapshot ({out_var.dims}) for {var_name}") - else: - if self._template_netcdf_ds[var_name].ndim == 0: #Scalar variables not in the data, but in template - populated_ds[var_name] = xr.DataArray(self._template_netcdf_ds[var_name].values.item()) #, attrs=var_attrs) - print(f"----Found a scalar variable {var_name} that is not in the data, but present in the template.Template value has been copied over.") - else: - # Allocate a 1D zero array sized exactly to the number of catchments/feature IDs - # This is just a fallback option - # shape = (len(feature_ids),) - # populated_ds[var_name] = xr.DataArray(np.zeros(shape), dims=[consts.DIM_FEATURE_ID]) #, attrs=var_attrs) - print(f"----Found a data variable {var_name} that is not in the data, but present in the template.It has been ignored.") - - # Transfer all other attributes from template - for var_name in self._template_netcdf_ds.variables: - if var_name in populated_ds.variables: - populated_ds[var_name].attrs.update(self._template_netcdf_ds[var_name].attrs) - populated_ds[var_name].encoding.update(self._template_netcdf_ds[var_name].encoding) - - # Prevent overwriting conflicts by clearing 'units' and calendar - populated_ds[var_name].attrs.pop('units', None) - populated_ds[var_name].attrs.pop('calendar', None) - - # Copy Fill and missing values from the template DS - has_missing = 'missing_value' in self._template_netcdf_ds[var_name].encoding - has_fill = '_FillValue' in self._template_netcdf_ds[var_name].encoding - if has_missing and has_fill: - tgt_value = self._template_netcdf_ds[var_name].encoding['missing_value'] - populated_ds[var_name].encoding['missing_value'] = tgt_value - populated_ds[var_name].encoding['_FillValue'] = tgt_value - elif has_missing and not has_fill: - tgt_value = self._template_netcdf_ds[var_name].encoding['missing_value'] - populated_ds[var_name].encoding['missing_value'] = tgt_value - populated_ds[var_name].encoding['_FillValue'] = None # set it to None. - elif has_fill and not has_missing: - tgt_value = self._template_netcdf_ds[var_name].encoding['_FillValue'] - populated_ds[var_name].encoding['_FillValue'] = tgt_value - populated_ds[var_name].encoding['missing_value'] = None - - # Add valid min and max times to the "time" attributes and specify units for all time related variables - populated_ds[consts.DIM_TIME].attrs["valid_min"] = time_value_min - populated_ds[consts.DIM_TIME].attrs["valid_max"] = time_value_max - populated_ds[consts.DIM_TIME].attrs['units'] = "minutes since 1970-01-01 00:00:00" - - # Manually assign units and encoding for reference time. - # Without this it was encoding as nanoseconds since 1970-01-01 - populated_ds[consts.DIM_REF_TIME].attrs['units'] = "minutes since 1970-01-01 00:00:00" + print(f"----The dimensions don't match between template ({template_var.dims}) and snapshot ({source_var.dims}) for {var_name}") + + # Transfer all other attributes from template + for var_name in self._template_netcdf_ds.variables: + if var_name in populated_ds.variables: + populated_ds[var_name].attrs.update(self._template_netcdf_ds[var_name].attrs) + populated_ds[var_name].encoding.update(self._template_netcdf_ds[var_name].encoding) + + # Prevent overwriting conflicts by clearing 'units' and calendar + populated_ds[var_name].attrs.pop('units', None) + populated_ds[var_name].attrs.pop('calendar', None) + + # Copy Fill and missing values from the template DS + has_missing = 'missing_value' in self._template_netcdf_ds[var_name].encoding + has_fill = '_FillValue' in self._template_netcdf_ds[var_name].encoding + if has_missing and has_fill: + tgt_value = self._template_netcdf_ds[var_name].encoding['missing_value'] + populated_ds[var_name].encoding['missing_value'] = tgt_value + populated_ds[var_name].encoding['_FillValue'] = tgt_value + elif has_missing and not has_fill: + tgt_value = self._template_netcdf_ds[var_name].encoding['missing_value'] + populated_ds[var_name].encoding['missing_value'] = tgt_value + populated_ds[var_name].encoding.pop('_FillValue', None) + populated_ds[var_name].attrs.pop("_FillValue", None) + elif has_fill and not has_missing: + tgt_value = self._template_netcdf_ds[var_name].encoding['_FillValue'] + populated_ds[var_name].encoding['_FillValue'] = tgt_value + populated_ds[var_name].encoding.pop('missing_value', None) + populated_ds[var_name].attrs.pop("missing_value", None) + + # Add valid min and max times to the "time" attributes + populated_ds[consts.DIM_TIME].attrs["valid_min"] = np.int32(time_value_min) + populated_ds[consts.DIM_TIME].attrs["valid_max"] = np.int32(time_value_max) + # Manually assign units and encoding for reference time. + # Without this it was encoding as nanoseconds since 1970-01-01 + populated_ds[consts.DIM_REF_TIME].attrs['units'] = "minutes since 1970-01-01 00:00:00" - # Output filename and save - os.makedirs(output_dir, exist_ok=True) - datetime_obj = np.datetime64(int(time_value_max), "m") - t_str = np.datetime_as_string(datetime_obj, unit='m') - formatted_t = t_str.replace('-', '_').replace(':', '_') - output_file = os.path.join(output_dir, f"nwm.{self._geo_id}.{self._output_class}.{self._category}.{self._domain}.{formatted_t}.nc") - populated_ds.to_netcdf(output_file) + # Output filename and save + os.makedirs(output_dir, exist_ok=True) + formatted_t = f"{time_step:02d}" + output_file = os.path.join(output_dir, f"nwm.{self._geo_id}.{self._output_class}.{self._category}.{self._domain}.tm{formatted_t}.nc") + populated_ds.to_netcdf(output_file) def close_log(self): """Restores the original terminal output and closes the file.""" From 7f934392feff612a95d91253e0bc15e4a925a426 Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Fri, 24 Jul 2026 12:47:14 -0400 Subject: [PATCH 24/26] Updated implementation with a ProductionManager that will allow integration into RTE. --- .../output_variables/DataProcessor.py | 169 ++++++++++++++++-- .../NetCdfProductionManager.py | 168 +++++++++++++++++ .../output_variables/utils.py | 58 +++--- netcdf_production_sample.py | 4 +- postprocessing_wrapper_sample.py | 47 +++++ 5 files changed, 402 insertions(+), 44 deletions(-) create mode 100644 data_assimilation_engine/output_variables/NetCdfProductionManager.py create mode 100644 postprocessing_wrapper_sample.py diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index 11b4587..7ecfcec 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -9,9 +9,11 @@ import time import math import re -from shapely.geometry import Point -from shapely.ops import unary_union -from shapely import intersects_xy +import shapely +# from shapely.geometry import Point +# from shapely.ops import unary_union +# from shapely import intersects_xy, intersects +# from shapely import points from pyproj import CRS from typing import List, Optional from .DataReader import DataReader @@ -73,6 +75,10 @@ def nwm_domain(self): def log_file(self): return self._log_file + @property + def geo_id(self): + return self._geo_id + @nwm_output_class.setter def nwm_output_class(self, value): self._output_class = value @@ -95,7 +101,7 @@ def log_file(self, log_file_path: str): if log_folder: os.makedirs(log_folder, exist_ok=True) - self._log_file = open(log_file_path, "w", encoding="utf-8") + self._log_file = open(log_file_path, "a", encoding="utf-8", buffering=1) sys.stdout = self._log_file def set_template_netcdf(self, template_grid_path: str): @@ -121,7 +127,7 @@ def _snap_to_grid(self, value: float, origin: float, resolution: int, direction: elif direction == np.ceil: return origin + np.ceil((value - origin) / resolution) * resolution - def create_template_netcdf_using_config(self, mdata: NetCDFMetadata, template_netcdf_folder: str) -> None: + def old_create_template_netcdf_using_config(self, mdata: NetCDFMetadata, template_netcdf_folder: str) -> None: """ Create a template grid aligned to a reference grid defined in config.json. The output template grid covers the extents of the divides in the geopackage. @@ -170,7 +176,7 @@ def create_template_netcdf_using_config(self, mdata: NetCDFMetadata, template_ne target_crs = CRS.from_user_input(wkt) gdf = self._gpkg_gdf.to_crs(target_crs) - geom = unary_union(gdf.geometry) + geom = shapely.ops.unary_union(gdf.geometry) # Get bounding box and snap to origin in the national reference grid minx, miny, maxx, maxy = gdf.total_bounds @@ -201,7 +207,7 @@ def create_template_netcdf_using_config(self, mdata: NetCDFMetadata, template_ne y_subset = ds_subset[y_name].values xx, yy = np.meshgrid(x_subset, y_subset) - flat_mask = intersects_xy(geom, xx.ravel(), yy.ravel()) + flat_mask = shapely.intersects_xy(geom, xx.ravel(), yy.ravel()) grid_mask = flat_mask.reshape(ds_subset[y_name].size, ds_subset[x_name].size) mask_da = xr.DataArray(grid_mask, dims=(y_name, x_name), @@ -221,6 +227,7 @@ def create_template_netcdf_using_config(self, mdata: NetCDFMetadata, template_ne ds_masked[var] = da # Leave non-numeric untouched # Drop empty rows/cols that are outside of the polygon boundary + dataset_mask = ds_masked.to_array().notnull().any(dim="variable") ds_clipped = ds_masked.dropna(dim=y_name, how="all") ds_clipped = ds_clipped.dropna(dim=x_name, how="all") @@ -237,6 +244,146 @@ def create_template_netcdf_using_config(self, mdata: NetCDFMetadata, template_ne ds_clipped["crs"] = xr.DataArray("", dims=()) ds_clipped["crs"].attrs = crs_attrs + print("--- FINAL DATASET CHECK FOR 3S ---") + print(f"Dimension name for Y is '{y_name}', first 3 values are: {ds_clipped[y_name].values[:3]}") + print(f"Dimension name for X is '{x_name}', first 3 values are: {ds_clipped[x_name].values[:3]}") + + # Save to nc file + ds_clipped.to_netcdf(template_nc_file) + + self._template_netcdf_ds = xr.open_dataset(template_nc_file) + print(f"NetCDF template grid written to {template_nc_file}") + + def create_template_netcdf_using_config(self, mdata: NetCDFMetadata, template_netcdf_folder: str) -> None: + """ + Create a template grid aligned to a reference grid defined in config.json. + The output template grid covers the extents of the divides in the geopackage. + """ + + os.makedirs(template_netcdf_folder, exist_ok = True) + + self._output_class = mdata.output_class + self._category = mdata.category + self._domain = mdata.domain + origin_x = mdata.origin_x + origin_y = mdata.origin_y + res_x = mdata.resolution_x + res_y = mdata.resolution_y + wkt = mdata.crs_wkt + file_name = mdata.file_path + x_name = mdata.x_name + y_name = mdata.y_name + + # Check if the template file already exists for this request + template_nc_name = self._geo_id + '_' + self._output_class + '_' + self._category + '_' + self._domain + '.nc' + template_nc_file = os.path.join(template_netcdf_folder, template_nc_name) + if os.path.isfile(template_nc_file): + print(f"----Reusing existing template file in local for {self._output_class}, {self._category}, {self._domain}") + elif mdata.category in ['channel_rt', 'reservoir']: # indicates that it is non-geospatial. For example, channel_rt + ds = xr.open_dataset(file_name) + + # Delete any variable that is in the ignore list. Zero the valid min and max attribute in the time dimension + ds = ds.drop_vars(consts.NWM_VARS_IGNORE_LIST, errors="ignore") + if consts.DIM_TIME in ds.coords: + attrs_to_reset = ['valid_min', 'valid_max'] + for attr in attrs_to_reset: + if attr in ds[consts.DIM_TIME].attrs: + ds[consts.DIM_TIME].attrs[attr] = 0 + + # Slice all coordinates and variable arrays to zero length. + dims = list(ds.sizes.keys()) + zero_slices = {dim: slice(0, 0) for dim in dims} + ds_template = ds.isel(zero_slices) + + # Save to nc file + ds_template.to_netcdf(template_nc_file) + else: + ds = xr.open_dataset(file_name) + # To do: Have to figure out a workflow when CRS is "Not Available" + target_crs = CRS.from_user_input(wkt) + + gdf = self._gpkg_gdf.to_crs(target_crs) + union_geom = shapely.ops.unary_union(gdf.geometry) + + # Get bounding box and snap to origin in the national reference grid + minx, miny, maxx, maxy = gdf.total_bounds + + # snapped_minx = self._snap_to_grid(minx, origin_x, res_x, np.floor) + # snapped_maxx = self._snap_to_grid(maxx, origin_x, res_x, np.ceil) + # snapped_miny = self._snap_to_grid(miny, origin_y, res_y, np.floor) + # snapped_maxy = self._snap_to_grid(maxy, origin_y, res_y, np.ceil) + + snapped_minx = np.floor(minx / res_x) * res_x + snapped_miny = np.floor(miny / res_y) * res_y + snapped_maxx = np.ceil(maxx / res_x) * res_x + snapped_maxy = np.ceil(maxy / res_y) * res_y + + # Filter national grid to a sub-grid within the snapped bounding box using slice + ds_subset = ds.sortby([x_name, y_name]).sel( + { + x_name: slice(snapped_minx, snapped_maxx), + y_name: slice(snapped_miny, snapped_maxy) + } + ) + + # create 1D coordinate arrays for the snapped subset + x_subset_1D = ds_subset[x_name].values + y_subset_1D = ds_subset[y_name].values + xx, yy = np.meshgrid(x_subset_1D, y_subset_1D) + + shapely.prepare(union_geom) # for faster processing, just in case. + flat_mask = shapely.intersects_xy(union_geom, xx.ravel(), yy.ravel()) + grid_mask = flat_mask.reshape(len(y_subset_1D), len(x_subset_1D)) + + mask_da = xr.DataArray(grid_mask, + dims=(y_name, x_name), + coords={ + y_name: y_subset_1D, + x_name: x_subset_1D + } + ) + ds_masked = ds_subset.copy() + + for var in ds_subset.data_vars: + da = ds_subset[var] + # Only mask numeric variables + if np.issubdtype(da.dtype, np.number): + ds_masked[var] = da.where(mask_da) + else: + ds_masked[var] = da # Leave non-numeric untouched + + # Combine variables to find valid outer coordinate indices + combined_mask = ds_masked.to_array().notnull() + dims_to_collapse = [dim for dim in combined_mask.dims if dim not in [x_name, y_name]] + dataset_mask = combined_mask.any(dim=dims_to_collapse) + + # Extract non-null coordinates along each axis to locate the outer envelope borders + y_valid = ds_masked[y_name].where(dataset_mask.any(dim=x_name), drop=True) + x_valid = ds_masked[x_name].where(dataset_mask.any(dim=y_name), drop=True) + + if y_valid.size > 0 and x_valid.size > 0: + ymin, ymax = y_valid.values.min(), y_valid.values.max() + xmin, xmax = x_valid.values.min(), x_valid.values.max() + ds_clipped = ds_masked.sel({ + x_name: slice(xmin, xmax), + y_name: slice(ymin, ymax) + }) + else: + ds_clipped = ds_masked.copy() + + # Set values of NWM variables to zero in the template grid + nwm_vars = [name for name, var in ds_clipped.data_vars.items() + if var.ndim > 0 and name not in ds_clipped.coords] + for var in nwm_vars: + ds_clipped[var] = ds_clipped[var] * 0 + + # Create crs as a scalar variable. + crs_attrs = ds_clipped["crs"].attrs + ds_clipped = ds_clipped.drop_encoding() + del ds_clipped["crs"] + ds_clipped["crs"] = xr.DataArray("", dims=()) + ds_clipped["crs"].attrs = crs_attrs + # Save to nc file ds_clipped.to_netcdf(template_nc_file) @@ -497,7 +644,11 @@ def produce_channel_reservoir_nwm_product(self, mdata: NetCDFMetadata, output_di raise ValueError("troute lakeout netcdf not set") reference_epoch = np.datetime64("1970-01-01T00:00:00") # set reference epoch - + # We have to identify min and max times and reference times for the products. + # The approach is different because each product uses different way of reporting time. + # ngen catchment output reports in seconds since reference_epoch. + # troute output reports in offset seconds since the model initialization time. + # troute lakeout (waterbody) reports in minutes since reference epoch. if mdata.category == 'reservoir': troute_source_ds = self._troute_lakeout_netcdf_ds source_ds_times = troute_source_ds[consts.DIM_TIME].values @@ -512,8 +663,6 @@ def produce_channel_reservoir_nwm_product(self, mdata: NetCDFMetadata, output_di time_str = units_attr_val.split("since ")[1].strip() base_datetime = np.datetime64(time_str) source_ds_times = troute_source_ds[consts.DIM_TIME].values - #delta_seconds = seconds_offsets.astype("timedelta64[s]") - #source_ds_times = base_datetime + delta_seconds source_ds_minutes = (source_ds_times - reference_epoch).astype("timedelta64[m]").astype(int) sorted_times = np.sort(source_ds_minutes)[::-1] # sort and reverse slice time_value_min = sorted_times[-1] diff --git a/data_assimilation_engine/output_variables/NetCdfProductionManager.py b/data_assimilation_engine/output_variables/NetCdfProductionManager.py new file mode 100644 index 0000000..1cca5a2 --- /dev/null +++ b/data_assimilation_engine/output_variables/NetCdfProductionManager.py @@ -0,0 +1,168 @@ +import sys +import os +from datetime import datetime +import time +from typing import List, Any, Optional +from data_assimilation_engine.output_variables.DataReader import DataReader +from data_assimilation_engine.output_variables.DataProcessor import DataProcessor +import data_assimilation_engine.output_variables.utils as utils +import data_assimilation_engine.output_variables.consts as consts + +_processor: Optional[DataProcessor] = None # Shared instance of DataProcessor + +def create_dataprocessor(root_output_folder: str, netcdf_file: str, gpkg_file: str) -> DataProcessor: + global _processor + if _processor is None: + _processor = DataProcessor(netcdf_file, gpkg_file) + # Create log file + log_folder = os.path.join(root_output_folder, consts.LOG_FOLDER) + os.makedirs(log_folder, exist_ok = True) + log_file = os.path.join(log_folder, 'nwm_postprocessing_' + datetime.now().strftime("%Y%m%d_%H%M%S") + '.log') + _processor.log_file = log_file + +def download_netcdf_from_nomads(root_output_folder: str, re_download: bool = False) -> str: + return utils.download_nwm_data_from_server(root_output_folder, re_download) + +def create_template_files_for_gpkg(root_output_folder: str, netcdf_file: str, gpkg_file: str, + config_json: str, output_templates_folder: str | None): + + if not os.path.isfile(netcdf_file): + raise ValueError("Specified ngen output cathments netcdf file does not exist") + + if not os.path.isfile(gpkg_file): + raise ValueError("Specified ngen geopackage file does not exist") + + netcdf_metadata_list = [] + if os.path.isfile(config_json): + netcdf_metadata_list = utils.read_output_variables_info_from_config(config_json) + else: + raise ValueError("Specified config file does not exist") + + # create necessary folders + os.makedirs(root_output_folder, exist_ok = True) + if output_templates_folder is None or output_templates_folder == '': + # If no folder is specified, we will create it as a subfolder within the root. + ngen_template_nc_folder = os.path.join(root_output_folder, consts.NWM_NGEN_TEMPLATE_FOLDER) + else: + ngen_template_nc_folder = output_templates_folder + os.makedirs(ngen_template_nc_folder, exist_ok = True) + + # Create templates. + for mdata in netcdf_metadata_list: + _processor.create_template_netcdf_using_config(mdata, ngen_template_nc_folder) + +def create_nwm_products_for_gpkg(root_output_folder: str, troute_output_netcdf: str, troute_lakeout_netcdf: str, + config_json: str, output_templates_folder: str | None): + + if output_templates_folder is None or output_templates_folder == '': + # If no folder is specified, we will assume it as a subfolder within the root as defined in consts.py. + ngen_template_nc_folder = os.path.join(root_output_folder, consts.NWM_NGEN_TEMPLATE_FOLDER) + else: + ngen_template_nc_folder = output_templates_folder + + netcdf_metadata_list = [] + if os.path.isfile(config_json): + netcdf_metadata_list = utils.read_output_variables_info_from_config(config_json) + else: + raise ValueError("Specified config file does not exist") + + # Confirm that template files exist for all categories. Gather a dictionary as well + # To do: Update this to include only conus for demo? + template_files_dict = {} + for mdata in netcdf_metadata_list: + template_nc_name = _processor.geo_id + '_' + mdata.output_class + '_' + + mdata.category + '_' + mdata.domain + template_nc_file = os.path.join(ngen_template_nc_folder, template_nc_name + '.nc') + if os.path.isfile(template_nc_file): + template_files_dict[template_nc_name] = template_nc_file + else: + raise ValueError(f"Template file for {_processor.geo_id}.{_processor.nwm_output_class}.{_processor.nwm_category}.{_processor.nwm_domain} does not exist") + + # set output folder for the nwm products for the geopackage + nwm_output_folder = os.path.join(root_output_folder, consts.NWM_OUTPUT_FOLDER) + os.makedirs(nwm_output_folder, exist_ok = True) + + for mdata in netcdf_metadata_list: + _processor.nwm_output_class = mdata.output_class + _processor.nwm_category = mdata.category + _processor.nwm_domain = mdata.domain + template_nc_name = _processor.geo_id + '_' + mdata.output_class + '_' + mdata.category + '_' + mdata.domain + _processor.set_template_netcdf(template_files_dict[template_nc_name]) + _processor.set_troute_netcdf(troute_output_netcdf) + _processor.set_troute_lakeout_netcdf(troute_lakeout_netcdf) + _processor.produce_nwm_output_product(mdata, nwm_output_folder) + +# Postporcessing Entrypoint +def netcdf_production_workflow(args_list) -> Optional[Any]: + """ + Main entrypoint function. Parses the args list and handles action + based on user preferences. + """ + if not args_list: + print("The arguments list to post processing is either null or empty.") + raise ValueError("Workflow aborted: The arguments list cannot be None or empty.") + + action_item = str(args_list[-1]).lower() # last item is the action. + + match action_item: + case "download": + if len(args_list) < 2: + raise ValueError("'download' action requires argument for root output folder: [root output folder path, 'download']") + root_output_folder = args_list[0] + config_json_file = download_netcdf_from_nomads(root_output_folder) + return config_json_file + + case "template": + if len(args_list) < 6: + raise ValueError("'template' action requires argument for root output folder, " + + "ngen catchments netcdf, geopackage and config json: [root output folder path, " + + "catchments netcdf, geopackage, config json, optional template output folder, 'template']") + root_output_folder = args_list[0] + ngen_catchments_netcdf = args_list[1] + ngen_geopackage = args_list[2] + config_json_file = args_list[3] + output_templates_folder = args_list[4] + if(_processor is None): + _processor = create_dataprocessor(root_output_folder, ngen_catchments_netcdf, ngen_geopackage) + create_template_files_for_gpkg(root_output_folder, ngen_catchments_netcdf, ngen_geopackage, config_json_file, output_templates_folder) + + case "output": + if len(args_list) < 8: + raise ValueError("'output' action requires argument for root output folder, " + + "ngen catchments netcdf, geopackage troute outputs and config json: [root output folder path, " + + "catchments netcdf, geopackage, troute output, troute lakeout, config json, " + + "optional template output folder, 'output']") + root_output_folder = args_list[0] + ngen_catchments_netcdf = args_list[1] + ngen_geopackage = args_list[2] + troute_output_netcdf = args_list[3] + troute_lakeout_netcdf = args_list[4] + config_json_file = args_list[5] + output_templates_folder = args_list[6] + if(_processor is None): + _processor = create_dataprocessor(root_output_folder, ngen_catchments_netcdf, ngen_geopackage) + create_nwm_products_for_gpkg(root_output_folder, troute_output_netcdf, troute_lakeout_netcdf, + config_json_file, output_templates_folder) + + case "all": + if len(args_list) < 8: + raise ValueError("'output' action requires argument for root output folder, " + + "ngen catchments netcdf, geopackage and config json: [root output folder path, " + + "catchments netcdf, geopackage, troute output, troute lakeout, config json, " + + "optional template output folder, 'all']") + root_output_folder = args_list[0] + ngen_catchments_netcdf = args_list[1] + ngen_geopackage = args_list[2] + troute_output_netcdf = args_list[3] + troute_lakeout_netcdf = args_list[4] + config_json_file = args_list[5] + output_templates_folder = args_list[6] + + config_json_file = download_netcdf_from_nomads(root_output_folder) + if(_processor is None): + _processor = create_dataprocessor(root_output_folder, ngen_catchments_netcdf, ngen_geopackage) + create_template_files_for_gpkg(root_output_folder, ngen_catchments_netcdf, ngen_geopackage, config_json_file, output_templates_folder) + create_nwm_products_for_gpkg(root_output_folder, troute_output_netcdf, troute_lakeout_netcdf, + config_json_file, output_templates_folder) + + print("NetCDF Production workflow completed Successfully") diff --git a/data_assimilation_engine/output_variables/utils.py b/data_assimilation_engine/output_variables/utils.py index b0de54c..ec27468 100644 --- a/data_assimilation_engine/output_variables/utils.py +++ b/data_assimilation_engine/output_variables/utils.py @@ -150,16 +150,24 @@ def convert_csvs_to_netcdf(csv_folder: str): # endregion # region data download -def download_nwm_data_from_server(local_root: str, re_download: bool) -> None: +def download_nwm_data_from_server(local_root: str, re_download: bool) -> str: """ - Main function to download a unique set of output files from the server + Main function to download a unique set of output files from the NWM server. + The root URL and the subfolder where the content is downloaded is dictated through + variables in consts.py + + Args: + local_root (str): The root folder for outputs. + re_download (bool): argument indicating that we need to redownload the data. + Defaults to False. """ os.makedirs(local_root, exist_ok = True) nwm_data_folder = os.path.join(local_root, consts.NWM_DATA_LOCAL_FOLDER) os.makedirs(nwm_data_folder, exist_ok = True) # Re-download if requested - if (re_download): + # To consider: may be we should do away with the re_download argument altogether + if (re_download): if len(os.listdir(nwm_data_folder)) > 0: # Delete all the contents in the local folder and re-create shutil.rmtree(nwm_data_folder) @@ -170,6 +178,10 @@ def download_nwm_data_from_server(local_root: str, re_download: bool) -> None: existing_keys = build_existing_keys(nwm_data_folder) # build class, category, domain keys in local folder, if exists. download_nwm_data_recursive(formatted_url, nwm_data_folder, existing_keys) + # After successful download of data, build the metadata config and save it to configs subfolder + config_json = obtain_metadata_information(local_root) + return config_json + def download_nwm_data_recursive(download_url: str, local_path: str, existing_keys: Set[Tuple[str, str, str]] ) -> None: @@ -184,6 +196,9 @@ def download_nwm_data_recursive(download_url: str, local_path: str, soup = BeautifulSoup(response.text, 'html.parser') links = soup.find_all('a', href=True) file_links = [link['href'] for link in links if not link['href'].startswith('/')] + if len(file_links) == 0: + raise Exception(f"No valid file links available for download from {download_url}") + for file_link in file_links: file_url = urljoin(download_url, file_link) if (file_url.endswith('/')): @@ -283,7 +298,7 @@ def __repr__(self) -> str: # for debugging purposes f"class={self.output_class}, category={self.category}, domain={self.domain})" ) -def obtain_metadata_information(local_root: str) -> None: +def obtain_metadata_information(local_root: str) -> str: """ Parse the metadata information from the downloaded NWM output files and write a CSV and a json """ @@ -297,13 +312,10 @@ def obtain_metadata_information(local_root: str) -> None: nwm_config_folder = os.path.join(local_root, consts.NWM_CONFIG_LOCAL_FOLDER) os.makedirs(nwm_config_folder, exist_ok = True) metadata_list = extract_metadata_from_downloaded_files(nwm_local_folder) - output_csv = os.path.join(nwm_config_folder, consts.NWM_CONFIG_FILE_NAME + ".csv") - write_metadata_to_csv(metadata_list, output_csv) output_json = os.path.join(nwm_config_folder, consts.NWM_CONFIG_FILE_NAME + consts.NWM_CONFIG_FILE_SUFFIX + ".json") - ngen_json = os.path.join(nwm_config_folder, - consts.NWM_CONFIG_FILE_NAME + '_ngen' + consts.NWM_CONFIG_FILE_SUFFIX + ".json") - write_metadata_to_config_json(metadata_list, output_json, ngen_json) + write_metadata_to_config_json(metadata_list, output_json) + return output_json def extract_metadata_from_downloaded_files(local_root: str) -> List[NetCDFMetadata]: """ @@ -429,10 +441,14 @@ def write_metadata_to_csv(metadata_list: List[NetCDFMetadata], output_csv: str) } ) -def write_metadata_to_config_json(metadata_list: List[NetCDFMetadata], output_json: str, ngen_json: str) -> None: +def write_metadata_to_config_json(metadata_list: List[NetCDFMetadata], output_json: str) -> None: """ Writes NetCDFMetadata objects to config JSON. """ + # Delete any existing config file + if os.path.exists(output_json): + os.remove(output_json) + info_list = [] for mdata in metadata_list: metadata_info_dict = { @@ -468,28 +484,6 @@ def write_metadata_to_config_json(metadata_list: List[NetCDFMetadata], output_js print(f"Config JSON written to: {output_json}") - - info_list = [] - for mdata in metadata_list: - metadata_info_dict = { - "class": mdata.output_class, - "category": mdata.category, - "domain": mdata.domain, - "nwm_variables": mdata.nwm_variables, - "nwm_dimensions": mdata.nwm_dimensions, - "nwm_scalar_variables": mdata.scalar_variables, - "nwm_var_dimensions": mdata.data_variables_dim - } - info_list.append(metadata_info_dict) - - config = { - "nwm_info": info_list - } - with open(ngen_json, "w", encoding="utf-8") as f: - json.dump(config, f, indent = 2) - - print(f"Config JSON written to: {ngen_json}") - def debug_netcdf_structure_in_folder(folder_path: str) -> None: """ Recursively scans a folder for NetCDF files and prints their structure. diff --git a/netcdf_production_sample.py b/netcdf_production_sample.py index 470b156..90a412b 100644 --- a/netcdf_production_sample.py +++ b/netcdf_production_sample.py @@ -96,7 +96,7 @@ def overall_netcdf_workflow(ngen_netcdf_output_file: str, ngen_gpkg_file: str, o raise ValueError("T-Route lakeout file is not specified") # if mdata.output_class == 'medium_range' and mdata.category =='land_1' and mdata.domain == 'conus': - if mdata.output_class == 'analysis_assim' and mdata.category =='reservoir' and mdata.domain == 'conus': + if mdata.output_class == 'analysis_assim' and mdata.category =='land' and mdata.domain == 'conus': # if mdata.output_class == 'medium_range_blend' and mdata.category =='terrain_rt' and mdata.domain == 'conus': # if mdata.output_class == 'long_range' and mdata.category =='land_4' and mdata.domain == 'conus': log_file = os.path.join(output_folder, consts.LOG_FOLDER, 'nwm_' + mdata.output_class + '.' + mdata.category + @@ -107,7 +107,7 @@ def overall_netcdf_workflow(ngen_netcdf_output_file: str, ngen_gpkg_file: str, o processor.set_troute_netcdf(troute_output_file) if mdata.category == 'reservoir': processor.set_troute_lakeout_netcdf(troute_lakeout_file) - processor.produce_nwm_output_product(mdata, nwm_output_folder) + # processor.produce_nwm_output_product(mdata, nwm_output_folder) # print(f"Ready to process: {mdata.output_class}, {mdata.category}, {mdata.domain}") # if any(cat.lower() in mdata.category.lower() for cat in ['channel_rt', 'reservoir', 'total_water']): # print(f"----The requested category - {mdata.category} - is not a gridded netcdf. The functionality is not implemented yet") diff --git a/postprocessing_wrapper_sample.py b/postprocessing_wrapper_sample.py new file mode 100644 index 0000000..67a944f --- /dev/null +++ b/postprocessing_wrapper_sample.py @@ -0,0 +1,47 @@ +from data_assimilation_engine.output_variables.NetCdfProductionManager import netcdf_production_workflow + +download_inputs = [ + "sample_data/outputs_root", + "download" +] +netcdf_production_workflow(download_inputs) # download and metadata_config.json creation. + +template_inputs = [ + "sample_data/outputs_root", + "sample_data/ngen_netcdfs/catchment_output_3n.nc" + "sample_data/sample_gpkg/vpu_3n.gpkg" + "sample_data/outputs_root/configs/metadata_config.json", + None, + "template" +] +# create templates for geopackage extents. +# assumes download is complete and metadata_config.json is available. +netcdf_production_workflow(template_inputs) + +production_inputs = [ + "sample_data/outputs_root", + "sample_data/ngen_netcdfs/catchment_output_3n.nc" + "sample_data/sample_gpkg/vpu_3n.gpkg" + "sample_data/troute_netcdfs/toute_output_3n.nc" + "sample_data/troute_netcdfs/toute_lakeout_3n.nc" + "sample_data/outputs_root/configs/metadata_config.json", + None, + "output" +] +# create output for geopackage extents. +# assumes that templating is completed. it also means that the metadata_config.json is available. +netcdf_production_workflow(production_inputs) + +overall_workflow_inputs = [ + "sample_data/outputs_root", + "sample_data/ngen_netcdfs/catchment_output_3n.nc" + "sample_data/sample_gpkg/vpu_3n.gpkg" + "sample_data/troute_netcdfs/toute_output_3n.nc" + "sample_data/troute_netcdfs/toute_lakeout_3n.nc" + "sample_data/outputs_root/configs/metadata_config.json", + None, + "all" +] +# overall workflow for creating products for geopackage extents. +# this downloads the nomads data, creates templates and produces outputs. +netcdf_production_workflow(overall_workflow_inputs) \ No newline at end of file From 1d337391f36b8e390bc0b2ae263ee9c9b7f1a183 Mon Sep 17 00:00:00 2001 From: "siva.selvanathan" Date: Fri, 24 Jul 2026 13:10:19 -0400 Subject: [PATCH 25/26] Added the cycle hour and cycle type to the production manager args --- .../NetCdfProductionManager.py | 50 +++++++++++-------- postprocessing_wrapper_sample.py | 4 ++ 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/data_assimilation_engine/output_variables/NetCdfProductionManager.py b/data_assimilation_engine/output_variables/NetCdfProductionManager.py index 1cca5a2..5093186 100644 --- a/data_assimilation_engine/output_variables/NetCdfProductionManager.py +++ b/data_assimilation_engine/output_variables/NetCdfProductionManager.py @@ -52,7 +52,8 @@ def create_template_files_for_gpkg(root_output_folder: str, netcdf_file: str, gp _processor.create_template_netcdf_using_config(mdata, ngen_template_nc_folder) def create_nwm_products_for_gpkg(root_output_folder: str, troute_output_netcdf: str, troute_lakeout_netcdf: str, - config_json: str, output_templates_folder: str | None): + config_json: str, output_templates_folder: str | None, + output_cycle_hour: int, output_cycle_type: str): if output_templates_folder is None or output_templates_folder == '': # If no folder is specified, we will assume it as a subfolder within the root as defined in consts.py. @@ -66,31 +67,36 @@ def create_nwm_products_for_gpkg(root_output_folder: str, troute_output_netcdf: else: raise ValueError("Specified config file does not exist") - # Confirm that template files exist for all categories. Gather a dictionary as well + # Confirm that template files exist for the cycle type. Gather a dictionary as well # To do: Update this to include only conus for demo? template_files_dict = {} for mdata in netcdf_metadata_list: - template_nc_name = _processor.geo_id + '_' + mdata.output_class + '_' - + mdata.category + '_' + mdata.domain - template_nc_file = os.path.join(ngen_template_nc_folder, template_nc_name + '.nc') - if os.path.isfile(template_nc_file): - template_files_dict[template_nc_name] = template_nc_file - else: - raise ValueError(f"Template file for {_processor.geo_id}.{_processor.nwm_output_class}.{_processor.nwm_category}.{_processor.nwm_domain} does not exist") + if mdata.output_class == output_cycle_type: + template_nc_name = _processor.geo_id + '_' + mdata.output_class + '_' + + mdata.category + '_' + mdata.domain + template_nc_file = os.path.join(ngen_template_nc_folder, template_nc_name + '.nc') + if os.path.isfile(template_nc_file): + template_files_dict[template_nc_name] = template_nc_file + else: + raise ValueError(f"Template file for {_processor.geo_id}.{_processor.nwm_output_class}.{_processor.nwm_category}.{_processor.nwm_domain} does not exist") # set output folder for the nwm products for the geopackage nwm_output_folder = os.path.join(root_output_folder, consts.NWM_OUTPUT_FOLDER) os.makedirs(nwm_output_folder, exist_ok = True) + # set cycle hour + formatted_hr = f"{output_cycle_hour:02d}" + for mdata in netcdf_metadata_list: - _processor.nwm_output_class = mdata.output_class - _processor.nwm_category = mdata.category - _processor.nwm_domain = mdata.domain - template_nc_name = _processor.geo_id + '_' + mdata.output_class + '_' + mdata.category + '_' + mdata.domain - _processor.set_template_netcdf(template_files_dict[template_nc_name]) - _processor.set_troute_netcdf(troute_output_netcdf) - _processor.set_troute_lakeout_netcdf(troute_lakeout_netcdf) - _processor.produce_nwm_output_product(mdata, nwm_output_folder) + if mdata.output_class == output_cycle_type: + _processor.nwm_output_class = mdata.output_class + _processor.nwm_category = mdata.category + _processor.nwm_domain = mdata.domain + template_nc_name = _processor.geo_id + '_' + mdata.output_class + '_' + mdata.category + '_' + mdata.domain + _processor.set_template_netcdf(template_files_dict[template_nc_name]) + _processor.set_troute_netcdf(troute_output_netcdf) + _processor.set_troute_lakeout_netcdf(troute_lakeout_netcdf) + _processor.produce_nwm_output_product(mdata, nwm_output_folder) # Postporcessing Entrypoint def netcdf_production_workflow(args_list) -> Optional[Any]: @@ -127,7 +133,7 @@ def netcdf_production_workflow(args_list) -> Optional[Any]: create_template_files_for_gpkg(root_output_folder, ngen_catchments_netcdf, ngen_geopackage, config_json_file, output_templates_folder) case "output": - if len(args_list) < 8: + if len(args_list) < 10: raise ValueError("'output' action requires argument for root output folder, " + "ngen catchments netcdf, geopackage troute outputs and config json: [root output folder path, " + "catchments netcdf, geopackage, troute output, troute lakeout, config json, " + @@ -139,10 +145,12 @@ def netcdf_production_workflow(args_list) -> Optional[Any]: troute_lakeout_netcdf = args_list[4] config_json_file = args_list[5] output_templates_folder = args_list[6] + output_cycle_hour = int(args_list[7]) + output_cycle_type = args_list[8] if(_processor is None): _processor = create_dataprocessor(root_output_folder, ngen_catchments_netcdf, ngen_geopackage) create_nwm_products_for_gpkg(root_output_folder, troute_output_netcdf, troute_lakeout_netcdf, - config_json_file, output_templates_folder) + config_json_file, output_templates_folder, output_cycle_hour, output_cycle_type) case "all": if len(args_list) < 8: @@ -157,12 +165,14 @@ def netcdf_production_workflow(args_list) -> Optional[Any]: troute_lakeout_netcdf = args_list[4] config_json_file = args_list[5] output_templates_folder = args_list[6] + output_cycle_hour = int(args_list[7]) + output_cycle_type = args_list[8] config_json_file = download_netcdf_from_nomads(root_output_folder) if(_processor is None): _processor = create_dataprocessor(root_output_folder, ngen_catchments_netcdf, ngen_geopackage) create_template_files_for_gpkg(root_output_folder, ngen_catchments_netcdf, ngen_geopackage, config_json_file, output_templates_folder) create_nwm_products_for_gpkg(root_output_folder, troute_output_netcdf, troute_lakeout_netcdf, - config_json_file, output_templates_folder) + config_json_file, output_templates_folder, output_cycle_hour, output_cycle_type) print("NetCDF Production workflow completed Successfully") diff --git a/postprocessing_wrapper_sample.py b/postprocessing_wrapper_sample.py index 67a944f..136d250 100644 --- a/postprocessing_wrapper_sample.py +++ b/postprocessing_wrapper_sample.py @@ -26,6 +26,8 @@ "sample_data/troute_netcdfs/toute_lakeout_3n.nc" "sample_data/outputs_root/configs/metadata_config.json", None, + "4", + "analysis_assim" "output" ] # create output for geopackage extents. @@ -40,6 +42,8 @@ "sample_data/troute_netcdfs/toute_lakeout_3n.nc" "sample_data/outputs_root/configs/metadata_config.json", None, + "0" + "medium_range_blend" "all" ] # overall workflow for creating products for geopackage extents. From ebe86464101365a4f162a52f422d1358e792ce12 Mon Sep 17 00:00:00 2001 From: "jeff.wade" Date: Fri, 24 Jul 2026 15:27:40 -0400 Subject: [PATCH 26/26] Various bug fixes found during testing of postprocessing --- .../output_variables/DataProcessor.py | 8 +++- .../NetCdfProductionManager.py | 9 +++-- postprocessing_wrapper_sample.py | 38 +++++++++---------- 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/data_assimilation_engine/output_variables/DataProcessor.py b/data_assimilation_engine/output_variables/DataProcessor.py index 7ecfcec..33deb08 100644 --- a/data_assimilation_engine/output_variables/DataProcessor.py +++ b/data_assimilation_engine/output_variables/DataProcessor.py @@ -30,6 +30,9 @@ def __init__(self, catchment_netcdf_file: str, gpkg_file: str, chunk_size: int = self._catchment_ds: xr.Dataset = self.dataset self._gpkg_file = gpkg_file + self._output_class = None + self._category = None + self._domain = None filename = os.path.basename(gpkg_file) self._geo_id = filename.replace(consts.GPKG_FILE_PREFIX, '').replace('.gpkg', '') @@ -40,6 +43,7 @@ def __init__(self, catchment_netcdf_file: str, gpkg_file: str, chunk_size: int = gpkg_gdf = gpd.read_file(gpkg_file, layer=consts.GPKG_DIVIDES_LYR) if gpkg_gdf.empty: raise ValueError("No polygon geometries found in GeoPackage") + gpkg_gdf["geometry"] = gpkg_gdf["geometry"].make_valid() # Check schema and assign catchment ID field. if is_new_NHF_schema: @@ -152,7 +156,7 @@ def old_create_template_netcdf_using_config(self, mdata: NetCDFMetadata, templat template_nc_file = os.path.join(template_netcdf_folder, template_nc_name) if os.path.isfile(template_nc_file): print(f"----Reusing existing template file in local for {self._output_class}, {self._category}, {self._domain}") - elif mdata.category in ['channel_rt', 'reservoir']: # indicates that it is non-geospatial. For example, channel_rt + elif mdata.category.startswith('channel_rt') or mdata.category.startswith('reservoir'): # indicates that it is non-geospatial. For example, channel_rt ds = xr.open_dataset(file_name) # Delete any variable that is in the ignore list. Zero the valid min and max attribute in the time dimension @@ -279,7 +283,7 @@ def create_template_netcdf_using_config(self, mdata: NetCDFMetadata, template_ne template_nc_file = os.path.join(template_netcdf_folder, template_nc_name) if os.path.isfile(template_nc_file): print(f"----Reusing existing template file in local for {self._output_class}, {self._category}, {self._domain}") - elif mdata.category in ['channel_rt', 'reservoir']: # indicates that it is non-geospatial. For example, channel_rt + elif mdata.category.startswith('channel_rt') or mdata.category.startswith('reservoir'): # indicates that it is non-geospatial. For example, channel_rt ds = xr.open_dataset(file_name) # Delete any variable that is in the ignore list. Zero the valid min and max attribute in the time dimension diff --git a/data_assimilation_engine/output_variables/NetCdfProductionManager.py b/data_assimilation_engine/output_variables/NetCdfProductionManager.py index 5093186..6ddf385 100644 --- a/data_assimilation_engine/output_variables/NetCdfProductionManager.py +++ b/data_assimilation_engine/output_variables/NetCdfProductionManager.py @@ -19,6 +19,7 @@ def create_dataprocessor(root_output_folder: str, netcdf_file: str, gpkg_file: s os.makedirs(log_folder, exist_ok = True) log_file = os.path.join(log_folder, 'nwm_postprocessing_' + datetime.now().strftime("%Y%m%d_%H%M%S") + '.log') _processor.log_file = log_file + return _processor def download_netcdf_from_nomads(root_output_folder: str, re_download: bool = False) -> str: return utils.download_nwm_data_from_server(root_output_folder, re_download) @@ -72,13 +73,12 @@ def create_nwm_products_for_gpkg(root_output_folder: str, troute_output_netcdf: template_files_dict = {} for mdata in netcdf_metadata_list: if mdata.output_class == output_cycle_type: - template_nc_name = _processor.geo_id + '_' + mdata.output_class + '_' - + mdata.category + '_' + mdata.domain + template_nc_name = _processor.geo_id + '_' + mdata.output_class + '_' + mdata.category + '_' + mdata.domain template_nc_file = os.path.join(ngen_template_nc_folder, template_nc_name + '.nc') if os.path.isfile(template_nc_file): template_files_dict[template_nc_name] = template_nc_file else: - raise ValueError(f"Template file for {_processor.geo_id}.{_processor.nwm_output_class}.{_processor.nwm_category}.{_processor.nwm_domain} does not exist") + raise ValueError(f"Template file for {_processor.geo_id}.{mdata.output_class}.{mdata.category}.{mdata.domain} does not exist") # set output folder for the nwm products for the geopackage nwm_output_folder = os.path.join(root_output_folder, consts.NWM_OUTPUT_FOLDER) @@ -104,6 +104,9 @@ def netcdf_production_workflow(args_list) -> Optional[Any]: Main entrypoint function. Parses the args list and handles action based on user preferences. """ + + global _processor + if not args_list: print("The arguments list to post processing is either null or empty.") raise ValueError("Workflow aborted: The arguments list cannot be None or empty.") diff --git a/postprocessing_wrapper_sample.py b/postprocessing_wrapper_sample.py index 136d250..73c38a7 100644 --- a/postprocessing_wrapper_sample.py +++ b/postprocessing_wrapper_sample.py @@ -4,48 +4,48 @@ "sample_data/outputs_root", "download" ] -netcdf_production_workflow(download_inputs) # download and metadata_config.json creation. +netcdf_production_workflow(download_inputs) # download and metadata_config.json creation. template_inputs = [ "sample_data/outputs_root", - "sample_data/ngen_netcdfs/catchment_output_3n.nc" - "sample_data/sample_gpkg/vpu_3n.gpkg" + "sample_data/ngen_netcdfs/catchment_output_3n.nc", + "sample_data/sample_gpkg/vpu_3n.gpkg", "sample_data/outputs_root/configs/metadata_config.json", None, - "template" + "template", ] # create templates for geopackage extents. # assumes download is complete and metadata_config.json is available. -netcdf_production_workflow(template_inputs) +netcdf_production_workflow(template_inputs) production_inputs = [ "sample_data/outputs_root", - "sample_data/ngen_netcdfs/catchment_output_3n.nc" - "sample_data/sample_gpkg/vpu_3n.gpkg" - "sample_data/troute_netcdfs/toute_output_3n.nc" - "sample_data/troute_netcdfs/toute_lakeout_3n.nc" + "sample_data/ngen_netcdfs/catchment_output_3n.nc", + "sample_data/sample_gpkg/vpu_3n.gpkg", + "sample_data/troute_netcdfs/toute_output_3n.nc", + "sample_data/troute_netcdfs/toute_lakeout_3n.nc", "sample_data/outputs_root/configs/metadata_config.json", None, "4", - "analysis_assim" - "output" + "analysis_assim", + "output", ] # create output for geopackage extents. # assumes that templating is completed. it also means that the metadata_config.json is available. -netcdf_production_workflow(production_inputs) +netcdf_production_workflow(production_inputs) overall_workflow_inputs = [ "sample_data/outputs_root", "sample_data/ngen_netcdfs/catchment_output_3n.nc" - "sample_data/sample_gpkg/vpu_3n.gpkg" - "sample_data/troute_netcdfs/toute_output_3n.nc" - "sample_data/troute_netcdfs/toute_lakeout_3n.nc" + "sample_data/sample_gpkg/vpu_3n.gpkg", + "sample_data/troute_netcdfs/toute_output_3n.nc", + "sample_data/troute_netcdfs/toute_lakeout_3n.nc", "sample_data/outputs_root/configs/metadata_config.json", None, - "0" - "medium_range_blend" - "all" + "0", + "medium_range_blend", + "all", ] # overall workflow for creating products for geopackage extents. # this downloads the nomads data, creates templates and produces outputs. -netcdf_production_workflow(overall_workflow_inputs) \ No newline at end of file +netcdf_production_workflow(overall_workflow_inputs)

#&}e@SPYp%a62 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