diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/MFLFloodingRainThreat.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/MFLFloodingRainThreat.py new file mode 100644 index 0000000000..408a9526a4 --- /dev/null +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/MFLFloodingRainThreat.py @@ -0,0 +1,97 @@ + +# ---------------------------------------------------------------------------- +# This software is in the public domain, furnished "as is", without technical +# support, and with no warranty, express or implied, as to its usefulness for +# any purpose. +# +# MFLFloodingRainThreat +# +# Author: M. Volkmer/P. Santos +# ---------------------------------------------------------------------------- + +from gfeConfig import * +HideConfigFile = 1 +#------------------------------------------------------------------------ +# GIF/PNG Graphic Product Generation (ifpIMAGE program) +#------------------------------------------------------------------------ + +# IMAGE SIZE +# You can set the height and width (in pixels) for the Png images. +# It is only necessary to set one of these, as the other will +# be calculated using the aspect ratio of your office domain. +# Do not include decimal points after the numbers. +# Both default to 400 +#Png_height = 720 +Png_width = 492 + +#NAME OF ELEMENT DISPLAYED AS IMAGE +Png_image = 'FloodingRainThreat' + + +Png_parms = ['FloodingRainThreat_SFC:_Official -1'] +FloodingRainThreat_spatialImageType = ["Image"] + +# Smoothing... +#Png_smoothImage = 1 + +# NWS Logos +Png_logo = 1 +Png_logoString = "Flooding Rain Threat - NWS Miami FL" + +# Turn off Color Bar +Png_omitColorBar = 0 + +# COLOR TABLES +FloodingRainThreat_defaultColorTable='GFE/gHLS_new' +# FloodThreat_maxColorTableValue = 6.0 +# FloodThreat_minColorTableValue = 0.0 +ImageLegend_color = 'black' +bgColor = 'white' +Counties_MFL_graphicColor = 'black' +Zones_MFL_graphicColor = 'black' +Marine_Zones_MFL_graphicColor = 'black' +Interstates_graphicColor = 'blue' +States_graphicColor = 'gray' +Lakes_graphicColor = 'blue' + +# MAP BACKGROUNDS +#MapBackgrounds_default = ['Counties','Marine_Zones_MFL','Interstates'] +MapBackgrounds_default = ['Zones_MFL','Marine_Zones_MFL','Interstates','States','Lakes'] +MFL_mask = "MFL_NO_LAKE" + +DefaultSamples = ['MFLFloodingRainThreat'] +# Customize FONT SIZES here. +#TextFont0 = "Bitstream Vera Sans Mono-bold-10" +#TextFont1 = "Bitstream Vera Sans Mono-bold-10" +#TextFont2 = "Bitstream Vera Sans Mono-bold-11" +#TextFont3 = "Bitstream Vera Sans Mono-bold-10" +#TextFont4 = "Bitstream Vera Sans Mono-bold-10" + +SESample_font = 1 +SELegend_font = 2 +SEColorBar_fgTextColor = "black" + +#CONFIGURATION FILE SETTINGS +Png_filenamePrefix = 'MFLFloodingRainThreat' +Png_baseTimeFormat = '' + +#LEGENDS +# Ability to turn on/off legends for the graphic generation. Applies +# only to graphic product generation and not GFE. Defaults to on +# if not specified. Do not include a decimal point after the number. +Png_legend = 1 #1 for visible, 0 for invisible + +# Legends display mode - 0 for UTC, 1 for local time +# Do not include a decimal point after the number. +Png_localTime = 1 # legend displays time in local or UTC (default to UTC) + +# Legend weather element name mode - 0 for weather element name, +# 1 for weather element descriptive name +#Png_descriptiveWeName = 1 +Png_descriptiveWeName = "ALT" +Png_FloodingRainThreat_AltName = "Updated" +Png_legendFormat_LT_dur = "" +#Png_legendFormat_LT_start = "%A %b %d" +Png_legendFormat_LT_start = "%I %p %a %h %d" +# Png_legendFormat_LT_start = "" +Png_legendFormat_LT_end = "" diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/MFLStormSurgeThreat.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/MFLStormSurgeThreat.py new file mode 100644 index 0000000000..79479c045c --- /dev/null +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/MFLStormSurgeThreat.py @@ -0,0 +1,93 @@ +# ---------------------------------------------------------------------------- +# This software is in the public domain, furnished "as is", without technical +# support, and with no warranty, express or implied, as to its usefulness for +# any purpose. +# +# MFLStormSurgeThreat +# +# Author: M. Volkmer/P. Santos +# ---------------------------------------------------------------------------- + +from gfeConfig import * +#HideConfigFile = 1 +#------------------------------------------------------------------------ +# GIF/PNG Graphic Product Generation (ifpIMAGE program) +#------------------------------------------------------------------------ + +# IMAGE SIZE +# Both default to 400 +#Png_height = 720 +Png_width = 492 + +#NAME OF ELEMENT DISPLAYED AS IMAGE +Png_image = 'StormSurgeThreat' + +Png_parms = ['StormSurgeThreat_SFC:_Official -1'] +StormSurgeThreat_spatialImageType = ["Image"] + +# Smoothing... +#Png_smoothImage = 1 + +# NWS Logos +Png_logo = 1 +Png_logoString = "Storm Surge Threat - NWS Miami FL" + +# Turn off Color Bar +Png_omitColorBar = 0 + +# COLOR TABLES +StormSurgeThreat_defaultColorTable='GFE/gHLS_new' +#LocalSurgeThreat_maxColorTableValue = 6.0 +#LocalSurgeThreat_minColorTableValue = 0.0 +ImageLegend_color = 'black' +bgColor = 'white' +# Counties_graphicColor = 'grey' +Counties_MFL_graphicColor = 'black' +Zones_MFL_graphicColor = 'black' +Marine_Zones_MFL_graphicColor = 'black' +Interstates_graphicColor = 'blue' +States_graphicColor = 'gray' +Lakes_graphicColor = 'blue' + + +# MAP BACKGROUNDS +# MapBackgrounds_default = ['Counties','Marine_Zones_MFL','Interstates'] +MapBackgrounds_default = ['Zones_MFL','Marine_Zones_MFL','Interstates','States','Lakes'] +MFL_mask = "StormSurgeWW_EditArea" + +DefaultSamples = ['MFLStormSurgeThreat'] +# Customize FONT SIZES here +#TextFont0 = "Bitstream Vera Sans Mono-bold-10" +#TextFont1 = "Bitstream Vera Sans Mono-bold-10" +#TextFont2 = "Bitstream Vera Sans Mono-bold-11" +#TextFont3 = "Bitstream Vera Sans Mono-bold-10" +#TextFont4 = "Bitstream Vera Sans Mono-bold-10" + +SESample_font = 1 +SELegend_font = 2 +SEColorBar_fgTextColor = "black" + +#CONFIGURATION FILE SETTINGS +Png_filenamePrefix = 'MFLStormSurgeThreat' +Png_baseTimeFormat = '' + +#LEGENDS +# Ability to turn on/off legends for the graphic generation. Applies +# only to graphic product generation and not GFE. Defaults to on +# if not specified. Do not include a decimal point after the number. +Png_legend = 1 #1 for visible, 0 for invisible + +# Legends display mode - 0 for UTC, 1 for local time +# Do not include a decimal point after the number. +Png_localTime = 1 # legend displays time in local or UTC (default to UTC) + +# Legend weather element name mode - 0 for weather element name, +# 1 for weather element descriptive name +#Png_descriptiveWeName = 1 +Png_descriptiveWeName = "ALT" +Png_StormSurgeThreat_AltName="Updated" +Png_legendFormat_LT_dur = "" +#Png_legendFormat_LT_start = "%A %b %d" +Png_legendFormat_LT_start = "%I %p %a %h %d" +# Png_legendFormat_LT_start = "" +Png_legendFormat_LT_end = "" diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/MFLTornadoThreat.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/MFLTornadoThreat.py new file mode 100644 index 0000000000..4cec56b4e2 --- /dev/null +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/MFLTornadoThreat.py @@ -0,0 +1,88 @@ + +# ---------------------------------------------------------------------------- +# This software is in the public domain, furnished "as is", without technical +# support, and with no warranty, express or implied, as to its usefulness for +# any purpose. +# +# gHLSMFLTornadoThreat +# +# Author: M. Volkmer/P. Santos +# ---------------------------------------------------------------------------- + +from gfeConfig import * + +#------------------------------------------------------------------------ +# GIF/PNG Graphic Product Generation (ifpIMAGE program) +#------------------------------------------------------------------------ + +# IMAGE SIZE +#Png_height = 720 +Png_width = 492 + +#NAME OF ELEMENT DISPLAYED AS IMAGE +Png_image = 'TornadoThreat' + +Png_parms = ['TornadoThreat_SFC:_Official -1'] +TornadoThreat_spatialImageType = ["Image"] + +# Smoothing... +#Png_smoothImage = 1 + +# NWS Logos +Png_logo = 1 +Png_logoString = "Tornado Threat - NWS Miami FL" + +# Turn off Color Bar +Png_omitColorBar = 0 + +# COLOR TABLES +TornadoThreat_defaultColorTable='GFE/gHLS_new' +#MFLTornadoThreat_maxColorTableValue = 6.0 +#MFLTornadoThreat_minColorTableValue = 0.0 +ImageLegend_color = 'black' +bgColor = 'white' +Counties_MFL_graphicColor = 'black' +Zones_MFL_graphicColor = 'black' +Marine_Zones_MFL_graphicColor = 'black' +Interstates_graphicColor = 'blue' +States_graphicColor = 'gray' +Lakes_graphicColor = 'blue' + +# MAP BACKGROUNDS +#MapBackgrounds_default = ['Counties','Marine_Zones_MFL','Interstates'] +MapBackgrounds_default = ['Zones_MFL','Marine_Zones_MFL','Interstates','States','Lakes'] +MFL_mask = "MFL_CWA" + +DefaultSamples = ['MFLTornadoThreat'] +# Customize FONT SIZES here +#TextFont0 = "Bitstream Vera Sans Mono-bold-10" +#TextFont1 = "Bitstream Vera Sans Mono-bold-10" +#TextFont2 = "Bitstream Vera Sans Mono-bold-11" +#TextFont3 = "Bitstream Vera Sans Mono-bold-10" +#TextFont4 = "Bitstream Vera Sans Mono-bold-10" + +SESample_font = 1 +SELegend_font = 2 +SEColorBar_fgTextColor = "black" + +#CONFIGURATION FILE SETTINGS +Png_filenamePrefix = 'MFLTornadoThreat' +Png_baseTimeFormat = '' + +#LEGENDS +# Ability to turn on/off legends for the graphic generation. Applies +# only to graphic product generation and not GFE. Defaults to on +# if not specified. Do not include a decimal point after the number. +Png_legend = 1 #1 for visible, 0 for invisible + +# Legends display mode - 0 for UTC, 1 for local time +# Do not include a decimal point after the number. +Png_localTime = 1 # legend displays time in local or UTC (default to UTC) + +Png_descriptiveWeName = "ALT" +Png_TornadoThreat_AltName = "Updated" +Png_legendFormat_LT_dur = "" +#Png_legendFormat_LT_start = "%A %b %d" +Png_legendFormat_LT_start = "%I %p %a %h %d" +# Png_legendFormat_LT_start = "" +Png_legendFormat_LT_end = "" diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/MFLWindThreat.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/MFLWindThreat.py new file mode 100644 index 0000000000..5dc49042d5 --- /dev/null +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/MFLWindThreat.py @@ -0,0 +1,98 @@ + +# ---------------------------------------------------------------------------- +# This software is in the public domain, furnished "as is", without technical +# support, and with no warranty, express or implied, as to its usefulness for +# any purpose. +# +# MFLWindThreat +# +# Author: M. Volkmer/P. Santos +# ---------------------------------------------------------------------------- + +from gfeConfig import * + +#------------------------------------------------------------------------ +# GIF/PNG Graphic Product Generation (ifpIMAGE program) +#------------------------------------------------------------------------ + +# IMAGE SIZE +# You can set the height and width (in pixels) for the Png images. +# It is only necessary to set one of these, as the other will +# be calculated using the aspect ratio of your office domain. +# Do not include decimal points after the numbers. +# Both default to 400 +#Png_height = 720 +Png_width = 492 + +#NAME OF ELEMENT DISPLAYED AS IMAGE +Png_image = 'WindThreat' + + +Png_parms = ['WindThreat_SFC:_Official -1'] +WindThreat_spatialImageType = ["Image"] + +# Smoothing... +#Png_smoothImage = 1 + +# NWS Logos +Png_logo = 1 +Png_logoString = "Wind Threat - NWS Miami FL" + +# Turn off Color Bar +Png_omitColorBar = 0 + +# COLOR TABLES +WindThreat_defaultColorTable='GFE/gHLS_new' +# FloodThreat_maxColorTableValue = 6.0 +# FloodThreat_minColorTableValue = 0.0 +ImageLegend_color = 'black' +bgColor = 'white' +Counties_MFL_graphicColor = 'black' +Zones_MFL_graphicColor = 'black' +Marine_Zones_MFL_graphicColor = 'black' +Interstates_graphicColor = 'blue' +States_graphicColor = 'gray' +Lakes_graphicColor = 'blue' + +# MAP BACKGROUNDS +#MapBackgrounds_default = ['Counties','Marine_Zones_MFL','Interstates'] +MapBackgrounds_default = ['Zones_MFL','Marine_Zones_MFL','Interstates','States','Lakes'] +MFL_mask = "MFL" + +DefaultSamples = ['MFLWindThreat'] +# Customize FONT SIZES here +#TextFont0 = "Bitstream Vera Sans Mono-bold-10" +#TextFont1 = "Bitstream Vera Sans Mono-bold-10" +#TextFont2 = "Bitstream Vera Sans Mono-bold-11" +#TextFont3 = "Bitstream Vera Sans Mono-bold-10" +#TextFont4 = "Bitstream Vera Sans Mono-bold-10" + +SESample_font = 1 +SELegend_font = 2 +SEColorBar_fgTextColor = "black" + + +#CONFIGURATION FILE SETTINGS +Png_filenamePrefix = 'MFLWindThreat' +Png_baseTimeFormat = '' + +#LEGENDS +# Ability to turn on/off legends for the graphic generation. Applies +# only to graphic product generation and not GFE. Defaults to on +# if not specified. Do not include a decimal point after the number. +Png_legend = 1 #1 for visible, 0 for invisible + +# Legends display mode - 0 for UTC, 1 for local time +# Do not include a decimal point after the number. +Png_localTime = 1 # legend displays time in local or UTC (default to UTC) + +# Legend weather element name mode - 0 for weather element name, +# 1 for weather element descriptive name +#Png_descriptiveWeName = 1 +Png_descriptiveWeName = "ALT" +Png_WindThreat_AltName = "Updated" +Png_legendFormat_LT_dur = "" +#Png_legendFormat_LT_start = "%A %b %d" +Png_legendFormat_LT_start = "%I %p %a %h %d" +# Png_legendFormat_LT_start = "" +Png_legendFormat_LT_end = "" diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/gfeConfig.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/gfeConfig.py index bc075edc18..aa2dadfdf0 100644 --- a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/gfeConfig.py +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/gfeConfig.py @@ -1,19 +1,19 @@ ## # This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA +# pursuant to Contract DG133W-05-CQ-1067 with the US Government. +# +# U.S. EXPORT CONTROLLED TECHNICAL DATA # This software product contains export-restricted data whose # export/transfer/disclosure is restricted by U.S. law. Dissemination # to non-U.S. persons whether in the United States or abroad requires # an export license or other authorization. # -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# +# Contractor Name: Raytheon Company +# Contractor Address: 6825 Pine Street, Suite 340 +# Mail Stop B8 +# Omaha, NE 68106 +# 402.291.0100 +# # See the AWIPS II Master Rights File ("Master Rights File.pdf") for # further licensing information. ## @@ -1193,6 +1193,73 @@ FogW_defaultColorTable = "Sat/WV/Gray Scale Water Vapor" Hazards_defaultColorTable = "GFE/Hazards" +# Start HTI entries +ProposedSS_defaultColorTable="GFE/w" +ProposedSSnc_defaultColorTable="GFE/w" + +InundationMax_defaultColorTable="GFE/Inundation" +InundationMax_maxColorTableValue = 30.0 +InundationMax_minColorTableValue = 0.0 + +InundationMaxnc_defaultColorTable="GFE/Inundation" +InundationMaxnc_maxColorTableValue = 30.0 +InundationMaxnc_minColorTableValue = 0.0 + +InundationTiming_defaultColorTable="GFE/Inundation" +InundationTiming_maxColorTableValue = 30.0 +InundationTiming_minColorTableValue = 0.0 + +InundationTimingnc_defaultColorTable="GFE/Inundation" +InundationTimingnc_maxColorTableValue = 30.0 +InundationTimingnc_minColorTableValue = 0.0 + +SurgeHtPlusTideMLLW_defaultColorTable="GFE/Inundation" +SurgeHtPlusTideMLLW_maxColorTableValue = 30.0 +SurgeHtPlusTideMLLW_minColorTableValue = 0.0 + +SurgeHtPlusTideMLLWnc_defaultColorTable="GFE/Inundation" +SurgeHtPlusTideMLLWnc_maxColorTableValue = 30.0 +SurgeHtPlusTideMLLWnc_minColorTableValue = 0.0 + +SurgeHtPlusTideMHHW_defaultColorTable="GFE/Inundation" +SurgeHtPlusTideMHHW_maxColorTableValue = 30.0 +SurgeHtPlusTideMHHW_minColorTableValue = 0.0 + +SurgeHtPlusTideMHHWnc_defaultColorTable="GFE/Inundation" +SurgeHtPlusTideMHHWnc_maxColorTableValue = 30.0 +SurgeHtPlusTideMHHWnc_minColorTableValue = 0.0 + +SurgeHtPlusTideNAVD_defaultColorTable="GFE/Inundation" +SurgeHtPlusTideNAVD_maxColorTableValue = 30.0 +SurgeHtPlusTideNAVD_minColorTableValue = 0.0 + +SurgeHtPlusTideNAVDnc_defaultColorTable="GFE/Inundation" +SurgeHtPlusTideNAVDnc_maxColorTableValue = 30.0 +SurgeHtPlusTideNAVDnc_minColorTableValue = 0.0 + +SurgeHtPlusTideMSL_defaultColorTable="GFE/Inundation" +SurgeHtPlusTideMSL_maxColorTableValue = 30.0 +SurgeHtPlusTideMSL_minColorTableValue = 0.0 + +SurgeHtPlusTideMSLnc_defaultColorTable="GFE/Inundation" +SurgeHtPlusTideMSLnc_maxColorTableValue = 30.0 +SurgeHtPlusTideMSLnc_minColorTableValue = 0.0 + +prob34_defaultColorTable="GFE/TPCprob" +prob64_defaultColorTable="GFE/TPCprob" +pwsD34_defaultColorTable="GFE/TPCprob" +pwsD64_defaultColorTable="GFE/TPCprob" +pwsN34_defaultColorTable="GFE/TPCprob" +pwsN64_defaultColorTable="GFE/TPCprob" +pws34int_defaultColorTable="GFE/TPCprob" +pws64int_defaultColorTable="GFE/TPCprob" + +FloodingRainThreat_defaultColorTable = "GFE/gHLS_new" +StormSurgeThreat_defaultColorTable = "GFE/gHLS_new" +TornadoThreat_defaultColorTable = "GFE/gHLS_new" +WindThreat_defaultColorTable = "GFE/gHLS_new" +# End HTI entries + # TopDownWx MaxTAloft_defaultColorTable="WarmNoseTemp" WetBulb_defaultColorTable="WetBulbTemp" @@ -1611,6 +1678,9 @@ Scripts = [ "ifpAG -h {host} -r {port} -o {prddir}/AG/{ztime}.ag " +\ "-d {productDB} ", + "Make and Send HTI:" + + "xterm -e ssh px2 /awips2/GFESuite/hti/bin/make_hti.sh", + "Official Grids to LDAD: " + "ifpAG -h {host} -r {port} -o - -d {productDB} | gzip -9 > " + " /data/fxa/LDAD/ifp/Official/.incoming; " + diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/CopyNHCProposed.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/CopyNHCProposed.py new file mode 100644 index 0000000000..27783c1a26 --- /dev/null +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/CopyNHCProposed.py @@ -0,0 +1,149 @@ +#-------------------------------------------------------------------------- +# SVN: $Revision$ - $Date$ +# +# Converted with gfePorter R3342 on Oct 01, 2013 18:43 GMT +# Not tested. Remove these 2 lines when ported and tested. +# +# ---------------------------------------------------------------------------- +# This software is in the public domain, furnished "as is", without technical +# support, and with no warranty, express or implied, as to its usefulness for +# any purpose. +# +# CopyNHCProposed +# +# Author: T LeFebvre/P. Santos +# Last Modified: Sept 18, 2014 +# ---------------------------------------------------------------------------- + +# The MenuItems list defines the GFE menu item(s) under which the +# Procedure is to appear. +# Possible items are: Populate, Edit, Consistency, Verify, Hazards +MenuItems = ["Populate"] + +# The ToolList is optional, but recommended, if you are calling +# Smart Tools from your Script. +# If present, it can be used to show which grids will be +# modified by the Script. + +ToolList = [] + +### If desired, Set up variables to be solicited from the user: +## If your script calls Smart Tools, this VariableList should cover +## cover all the variables necessary for the tools. + +import SmartScript +from numpy import * +import TimeRange +import AbsTime +import time, re + +## For documentation on the available commands, +## see the SmartScript Utility, which can be viewed from +## the Edit Actions Dialog Utilities window +Supported_elements=["ProposedSS"] +VariableList = [("Choose Hazards:" , ["ProposedSS"], "check", Supported_elements), + # ["ProposedSS"]), + ] + +class Procedure (SmartScript.SmartScript): + def __init__(self, dbss): + SmartScript.SmartScript.__init__(self, dbss) + + # Makes a timeRange based on the specified start and end times. + # If no times are specified, returns the largest timeRange possible. + # This method will work in either an AWIPS I or AWIPS II environment. + def makeTimeRange(self, start=0, end=0): + + try: # AWIPS 1 code + import TimeRange + import AbsTime + import AFPS + if start == 0 and end == 0: + return TimeRange.TimeRange.allTimes() + + startTime = AbsTime.AbsTime(start) + endTime = AbsTime.AbsTime(end) + + tr = TimeRange.TimeRange(startTime, endTime) + + except: # AWIPS 2 code + import TimeRange, AbsTime + if start == 0 and end == 0: + return TimeRange.allTimes() + + startTime = AbsTime.AbsTime(start) + endTime = AbsTime.AbsTime(end) + + tr = TimeRange.TimeRange(startTime, endTime) + + return tr + + def makeNewTimeRange(self, hours): + + startTime = int(time.time() / 3600) * 3600 + endTime = startTime + hours * 3600 + + timeRange = self.makeTimeRange(startTime, endTime) + + return timeRange + + def getWEInventory(self, modelName, WEName, timeRange=None): + + if timeRange is None: + timeRange = self.makeTimeRange() + + gridInfo = self.getGridInfo(modelName, WEName, "SFC", timeRange) + trList = [] + for g in gridInfo: + start = g.gridTime().startTime().unixTime() + end = g.gridTime().endTime().unixTime() + tr = self.makeTimeRange(start, end) + trList.append(tr) + + return trList + + def execute(self, varDict): + + # Assign a timeRange from now to 48 hours from now + timeRange = self.makeNewTimeRange(48) + + # Copy the ISC data into a grid + + hazardsToCopy = varDict["Choose Hazards:"] + + if len(hazardsToCopy) == 0: + self.statusBarMsg("You must choose at least one hazard.", "U") + return + + weNames = ["ProposedSS"] + #weNames = ["ProposedSS"] + + # Remove any pre-existing grids first + for weName in weNames: + + if weName not in hazardsToCopy: + continue + + trList = self.getWEInventory("Fcst", weName) + for delTR in trList: + self.deleteGrid("Fcst", weName, "SFC", delTR) + + # Copy any Proposed nc grids into the Fcst + for weName in weNames: + + if weName not in hazardsToCopy: + continue + + iscWeName = weName + "nc" + trList = self.getWEInventory("ISC", iscWeName, timeRange) + + if len(trList) == 0: + continue + + gridTR = trList[-1] # only interested in the latest grid + + iscGrid, iscKeys = self.getGrids("ISC", iscWeName, "SFC", gridTR) + + self.createGrid("Fcst", weName, "DISCRETE", (iscGrid, iscKeys), + timeRange, discreteKeys=iscKeys, discreteOverlap=0, + discreteAuxDataLength=0, defaultColorTable="StormSurgeHazards") diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCFloodingRainThreat.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCFloodingRainThreat.py new file mode 100644 index 0000000000..12b5ed42bb --- /dev/null +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCFloodingRainThreat.py @@ -0,0 +1,573 @@ +# ---------------------------------------------------------------------------- +# This software is in the public domain, furnished "as is", without technical +# support, and with no warranty, express or implied, as to its usefulness for +# any purpose. +# +# InlandFloodThreat +# +# Author: lefebvre,santos +# Last Modified: April 4, 2012 - Fixed to handle negative gridded FFG. +# Migrated procedure for AWIPS2. Updated 6/22/2012. S.O. +# +# Comment on 05/21/2014 (Santos): Some sites used QPF and others QPF6hr. Check that parameter +# in getQPFGrid method. Also in AWIPS 2 FFG is gridded and called just FFG. +# This is fixed in getRFCFFGModels method. +# +# LeFevbre/Santos: This is the version being turned in for baseline as of 10/20/2014 +# +#Search for COMMENTS to see any local config step you might need to take. +# ---------------------------------------------------------------------------- + +MenuItems = ["Populate"] + +VariableList = [("Gridded/Text FFG Blending Factor" , 0.75, "scale", [0, 1], 0.05)] + +import SmartScript +import time +import popen2 +import sys +import AbsTime +import TimeRange + +# # For AWIPS 1/ AWIPS 2 compatibility +# try: +# from Numeric import * +# except: +# from numpy import * + +from numpy import * + +class Procedure (SmartScript.SmartScript): + def __init__(self, dbss): + SmartScript.SmartScript.__init__(self, dbss) + + # Make a timeRange based on the start and end int times + def makeTimeRange(self, start, end): + + try: # AWIPS 1 code + import AFPS + startTime = AFPS.AbsTime(start) + endTime = AFPS.AbsTime(end) + + tr = AFPS.TimeRange(startTime, endTime) + + except: # AWIPS 2 code + import TimeRange, AbsTime + startTime = AbsTime.AbsTime(start) + endTime = AbsTime.AbsTime(end) + #print 40 * "*" + #print "start and end times are:", startTime, endTime + tr = TimeRange.TimeRange(startTime, endTime) + + return tr + + def getWEInventory(self, modelName, WEName, timeRange=None): + + allTimes = TimeRange.allTimes() + + if timeRange is None: + timeRange = allTimes + + trList = [] + # getGridInfo will just die if the modelName or weName is not valid + # so wrap it in a try block and return [] if it fails + try: + gridInfo = self.getGridInfo(modelName, WEName, "SFC", timeRange) + except: + return trList + + for g in gridInfo: + start = g.gridTime().startTime().unixTime() + end = g.gridTime().endTime().unixTime() + tr = self.makeTimeRange(start, end) + if timeRange.overlaps(tr): + trList.append(tr) + + return trList + + # get the current time, truncates to the last six hour value. + # returns a timeRange with this startTime until 72 hrs from this time + + def make72hrTimeRange(self): + cTime = int(self._gmtime().unixTime()/ (3600 * 6)) * (3600 * 6) + startTime = AbsTime.AbsTime(cTime) + end = cTime + (3600 * 24 * 3) + endTime = AbsTime.AbsTime(end) + + timeRange = TimeRange.TimeRange(startTime, endTime) + + return timeRange + + # returns a list of timeRange with the specified duration in hours over the + # specified timeRange + def makeTimeRangeList(self, timeRange, duration): + trList = [] + sTime = timeRange.startTime().unixTime() + delta = duration * 3600 + while sTime < timeRange.endTime().unixTime(): + trList.append(self.makeTimeRange(sTime, sTime + delta)) + sTime = sTime + delta + + return trList + + # Returns a list of model names matching the specified model name, + # weather element name and level + def getModelList(self, modelName, weName, weLevel): + modelList = [] + + availParms = self.availableParms() + + for pName, level, dbID in availParms: + if dbID.modelName().find(modelName) > -1: + if pName.find(weName) > -1: + if level.find(weLevel) > -1: + if dbID.modelIdentifier() not in modelList: + modelList.append(dbID.modelIdentifier()) + return modelList + + # A small algorithm to determine the day number + def determineDay(self, modelTime, validTime): + + diff = (validTime - modelTime) / 3600 + if diff < 48: + return 1 + elif diff < 72: + return 2 + else + return 3 + + return 0 + + def getModelTime(self, modelName): + + timeStr = modelName[-13:] + + year = int(timeStr[0:4]) + month = int(timeStr[4:6]) + day = int(timeStr[6:8]) + hour = int(timeStr[9:11]) + + absTime = AbsTime.absTimeYMD(year, month, day, hour, 0, 0) + + return absTime.unixTime() + + def getERPGrids(self): + ERPModelName = "HPCERP" + ERPVarName = "ppffg" + ERPLevel = "SFC" + + # make a dict and fill with grids with the default value. + # These will be replaced when we find real grids + gridDict = {} + for i in range(1, 4): + gridDict[i] = None + + # get the list of all available models + modelList = self.getModelList(ERPModelName, ERPVarName, ERPLevel) + modelList.sort() # sort oldest to latest + + # for each available model, fetch all the grids + # keep only the most recent grids + for model in modelList: + trList = self.getWEInventory(model, ERPVarName) + modelTime = self.getModelTime(model) + + for tr in trList: + dayNum = self.determineDay(modelTime, + tr.startTime().unixTime()) + grid = self.getGrids(model, ERPVarName, ERPLevel, tr, + mode="First") + gridDict[dayNum] = grid + + for i in range(1, 4): + if gridDict[i] == None: + errorStr = "Day" + str(i) + " grid not found in AWIPS database." + self.statusBarMsg(errorStr, "S") + + return gridDict + + # Use this method for testing if you have no luck getting products + # directly from the text database + def getTextProductFromFile(self, filename): + # replace the filename with one on your system + filename = "/tmp/FFGData/" + filename + ".txt" + f = file(filename, 'r') + textList = [] + line = f.readline() + textList.append(line) + while line != "": + line = f.readline() + textList.append(line) + f.close() + return textList + + # Retrieves a text product from the text database + def getTextProductFromDB(self, productID): + cmd = "textdb -r " + productID + + (stdout, stdin, stderr) = popen2.popen3(cmd) + + textList = [] + line = stdout.readline() + textList.append(line) + while line != "": + line = stdout.readline() + textList.append(line) + return textList + + # given a text product, this method decodes the ffg values and + # returns a dictionary {area : value} + def decodeFFGText(self, ffgText): + ffgDict = {} + for s in ffgText: + parts = s.split() + if len(parts) < 4: + continue + if len(parts[0]) != 6: + continue + if parts[0][2] != "Z": + continue + area = parts[0] + value6hr = float(parts[3][:-1]) # strip the "/" + ffgDict[area] = value6hr + + return ffgDict + + # Fetch all of the gridded FFG model names and return just the + # latest version of each type (region) + def getRFCFFGModelName(self, rfcName): + + # Find all the models matching this description. + modelList = self.getModelList(rfcName, "FFG0624hr", "SFC") + + for model in modelList: + # WARNING!!! This check should be more specific to the DBID string. + if model.find(rfcName) > -1: + return model + + return None + + # Smooths the specified grid by the specified factor + # With factor == 3, 3x3 smooth, factor == 5 5x5 smooth, etc. + # Even factors (4, 6, 8,...) round up to the next odd value + # If factors <3 are specified, the unmodified grid is returned. + def smoothGrid(self, grid, factor=3): + # factors of less than 3 are useless or dangerous + if factor < 3: + return grid + st = time.time() + half = int(factor)/ 2 + sg = zeros(grid.shape, 'f8') + count = zeros(grid.shape, 'f8') + gridOfOnes = ones(grid.shape, 'f8') + for y in range(-half, half + 1): + for x in range(-half, half + 1): + if y < 0: + yTargetSlice = slice(-y, None, None) + ySrcSlice = slice(0, y, None) + if y == 0: + yTargetSlice = slice(0, None, None) + ySrcSlice = slice(0, None, None) + if y > 0: + yTargetSlice = slice(0, -y, None) + ySrcSlice = slice(y, None, None) + if x < 0: + xTargetSlice = slice(-x, None, None) + xSrcSlice = slice(0, x, None) + if x == 0: + xTargetSlice = slice(0, None, None) + xSrcSlice = slice(0, None, None) + if x > 0: + xTargetSlice = slice(0, -x, None) + xSrcSlice = slice(x, None, None) + + target = [yTargetSlice, xTargetSlice] + src = [ySrcSlice, xSrcSlice] + sg[target] = sg[target] + grid[src] + count[target] = count[target] + gridOfOnes[src] + return sg / count + + # Returns the list of RFCs that overlap the local GFE domain + # as defined by getSiteID(). + def getOverlappingRFCs(self): + # The list of all the RFCs + RFCEditAreas = ["ISC_PTR", "ISC_RSA", "ISC_STR", "ISC_ACR", "ISC_KRF", "ISC_MSR", "ISC_TUA", "ISC_FWR", "ISC_ORN", + "ISC_TIR", "ISC_ALR", "ISC_RHA", "ISC_TAR"] + + cwaEA = self.getSiteID() + cwaMask = self.encodeEditArea(cwaEA) + + eaList = self.editAreaList() + + rfcList = [] + + for rfc in RFCEditAreas: + + rfcMask = None + if rfc in eaList: + rfcArea = self.getEditArea(rfc) + rfcMask = self.encodeEditArea(rfc) + + if rfcMask is None: + continue + + overlap = logical_and(cwaMask, rfcMask) + + if overlap.any(): + rfcList.append(rfc) + + return rfcList + + # First try to access the gridded FFG from the D2D files. If they exist + # mosaic all the ones we find and return the composite. If we can't + # find any gridded FFG, then fetch the FFG text product, decode it, + # and create a patchwork grid from the guidance value in each county + # or basin. + def getRFCFlashFloodGrid(self, productList, varDict): + + ffgGrid = self._empty + foundGrids = False + factor = varDict["Gridded/Text FFG Blending Factor"] + + RFCList = self.getOverlappingRFCs() + #print "RFCList is: ", RFCList + + ffgWEName = "FFG0624hr" + # Fetch the gridded FFG, mosaic these into a single grid + for rfc in RFCList: + + tmplist = rfc.split('_'); + rfcsid = tmplist[1]; + rfcName = 'FFG' + rfcsid; + # Find the model for this RFC + modelName = self.getRFCFFGModelName(rfcName) + + #print "modelName:", modelName + if modelName is None: + self.statusBarMsg("No FFG database found for " + rfc, "S") + continue + + trList = self.getWEInventory(modelName, ffgWEName) + if len(trList) == 0: + self.statusBarMsg("No FFG grids found in database " + modelName, "S") + continue + + # get the first grid + tempGrid = self.getGrids(modelName, ffgWEName, "SFC", trList[0], mode="First") + # Make an rfc mask + rfcEA = self.getEditArea(rfc) + rfcMask = self.encodeEditArea(rfcEA) + + mask = (tempGrid > 0.0) & rfcMask + ffgGrid = where(mask, tempGrid/25.4, ffgGrid) + foundGrids = True + + + + # Comment this in to see intermediate FFG grid from gridded guidance +## tr = self.getTimeRange("Today") +## self.createGrid("Fcst","FFGFromGrid", "SCALAR", ffgGrid, tr, +## minAllowedValue = -1, maxAllowedValue=100, +## precision=2) + + + # Make another FFG grid from the text guidance + editAreaList = self.editAreaList() + + ffgTextGrid = self._empty + for prod in productList: + + # Uncomment the next line to fetch FFG data from a file +## ffgText = self.getTextProductFromFile(prod) + + # Use this method to retrieve FFG data from the text database + ffgText = self.getTextProductFromDB(prod) + + ffgDict = self.decodeFFGText(ffgText) + + for area in ffgDict.keys(): + if area not in editAreaList: + continue + refArea = self.getEditArea(area) + mask = self.encodeEditArea(refArea) + value = ffgDict[area] + ffgTextGrid = where(mask, value, ffgTextGrid) + + # Comment this in to see intermediate FFG from text guidance +## tr = self.getTimeRange("Today") +## self.createGrid("Fcst","FFGFromText", "SCALAR", ffgTextGrid, tr, +## minAllowedValue = -1, maxAllowedValue=100, +## precision=2) + + # Since the gridded FFG tends to have lots of holes in it, + # fill those holes with the text version of the FFG where the + # gridded FFG is less than its non-zero average. + + # if we found the grids fill in it in with values from the text products. + if foundGrids: + # get the non-zero gridded average + mask = greater(ffgGrid, 0.0) + maskSum = sum(sum(mask)) + gridSum = sum(sum(ffgGrid)) + if maskSum > 0: + gridAvg = gridSum / maskSum + else: # nothing to do but return the text grid + return ffgTextGrid + + # fill in textFFG where griddedFFG is less than average + #print "AVERAGE IS: ", gridAvg + ffgGrid = where(less(ffgGrid, gridAvg * factor), ffgTextGrid, ffgGrid) + else: + ffgGrid = ffgTextGrid + + return ffgGrid + + # Returns the QPF sum over the specified timeRange + def getQPFGrid(self, timeRange): +# +# This assumes QPF has a constraint of TC6NG. If not and your office uses QPF6 or QPF6hr you will need to change this here +# accordingly. +# + trList = self.getWEInventory("Fcst", "QPF", timeRange) + if len(trList) == 0: + return None + + qpfGrid = self._empty + for tr in trList: + grid = self.getGrids("Fcst", "QPF", "SFC", timeRange, mode="First") + qpfGrid = qpfGrid + grid + + return qpfGrid + + def execute(self, varDict): + + ### CONFIGURATION SECTION ################################ + ### Levels must exactly match the levels in the inland threat + ### weather element. + ratios = [0.0, 0.75, 1.0, 2.0, 100.0] + erps = [0.0, 5.0, 10.0, 15.0, 100.0] + cumqpfs = [0.0, 5.0, 10.0, 15.0, 20.0] + + threatMatrix = [ + ["None", "Very Low", "Elevated", "Mod" ], # lowest ERP + ["Very Low", "Elevated", "Mod", "High" ], + ["Elevated", "Mod", "High", "Extreme"], + ["Mod", "High", "Extreme", "Extreme"], # highest # ERP + ] # low ------ QPF/FFG ratio -------->high + + # COMMENTS: The list of FFG products that contain FFG data for your WFO + # The following is set up for testing only. Please change these + # entries for your particular office. + # productList = ["FFGSHV", "FFGALR"] + productList = ["ATLFFGMFL", "ATLFFGTBW", "ATLFFGMLB"] + + ### END CONFIGURATION SECTION ################################# + + ## Replace the "Very Low" with "Elevated" if "Very Low" dows not exist + ## in the list of discrete keys + + try: + threatKeys = self.getDiscreteKeys("FloodingRainThreat") + except: + threatKeys = ["None", "Elevated", "Mod", "High", "Extreme"] + + # replace "Very Low" with "Elevated" + if "Very Low" not in threatKeys: + for i in range(len(threatMatrix)): + for j in range(len(threatMatrix[i])): + if threatMatrix[i][j] == "Very Low": + threatMatrix[i][j] = "Elevated" + + + # make a 72 hour timeRange and a list of 6 hour timeRanges + timeRange = self.make72hrTimeRange() + + trList = self.makeTimeRangeList(timeRange, 6) + + maxFloodThreat = self._empty + cumqpf = self._empty + + # Fetch the FFG grid either from gridded data or the text product + #print "Getting FFG Grid Now: " + ffgGrid = self.getRFCFlashFloodGrid(productList,varDict) + #print "GOT FFG Grid" + ffgGrid = where(less(ffgGrid, 0.0), 0.0, ffgGrid) + + # get the ERP grids and stuff them in six hour time blocks to match + # the cummulative QPF grids will create later + erpGridDict = self.getERPGrids() + + for i in range(len(trList)): + + erpGrid = erpGridDict[int(i / 4 + 1)] + + tr = trList[i] + #print "TIME RANGE IS:", tr + + qpfGrid = self.getQPFGrid(tr) + + if ffgGrid is None or qpfGrid is None: + self.statusBarMsg("FlashFlood or QPF grids missing at timeRange:" + + str(tr), "S") + continue + if erpGrid is None: + self.statusBarMsg("ERP grids missing at timeRange:" + + str(tr), "S") + continue + + tempffgGrid = where(equal(ffgGrid, 0.0), 1000.0, ffgGrid) + ratioGrid = qpfGrid / tempffgGrid + ratioGrid = where(equal(ffgGrid, 0.0), 0.0, ratioGrid) + self.createGrid("Fcst", "ERP", "SCALAR", erpGrid, tr, + minAllowedValue = -1, maxAllowedValue=100, + precision=2) + self.createGrid("Fcst", "FFGNEW", "SCALAR", ffgGrid, tr, + minAllowedValue = 0, maxAllowedValue=10, + precision=2) + self.createGrid("Fcst", "QPFtoFFGRatio", "SCALAR", + ratioGrid, tr, precision=2, + minAllowedValue = 0, maxAllowedValue=1000) + + floodThreat = zeros(self.getTopo().shape) + + for e in range(len(erps) - 1): + for r in range(len(ratios) - 1): + eMin = erps[e] + eMax = erps[e+1] + rMin = ratios[r] + rMax = ratios[r+1] + ratioMask = logical_and(greater_equal(ratioGrid, rMin), + less(ratioGrid, rMax)) + erpMask = logical_and(greater_equal(erpGrid, eMin), + less(erpGrid, eMax)) + mask = logical_and(ratioMask, erpMask) + keyIndex = self.getIndex(threatMatrix[r][e], threatKeys) + floodThreat = where(mask, keyIndex, floodThreat) + + self.createGrid("Fcst", "FloodThreat", "DISCRETE", + (floodThreat, threatKeys), tr, + discreteKeys=threatKeys, + discreteOverlap=0, + discreteAuxDataLength=2, + defaultColorTable="gHLS_new") + + maxFloodThreat = where(floodThreat > maxFloodThreat, floodThreat, maxFloodThreat) + + # make a 6 hour TimeRange + # startTime = trList[0].startTime() + startTime = int(self._gmtime().unixTime()/ 3600) * 3600 - (24 * 3600) + endTime = startTime + (24 * 3600 * 10) + dbTR = self.makeTimeRange(startTime, endTime) + cTime = int(self._gmtime().unixTime()/ 3600) * 3600 + end = cTime + (6*3600) + threatTR = self.makeTimeRange(cTime, end) + self.deleteCmd(['FloodingRainThreat'], dbTR) + self.createGrid("Fcst", "FloodingRainThreat", "DISCRETE", + (maxFloodThreat, threatKeys), threatTR, + discreteKeys=threatKeys, + discreteOverlap=0, + discreteAuxDataLength=2, + defaultColorTable="gHLS_new") + + + return diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCImpactGraphics_KML.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCImpactGraphics_KML.py new file mode 100644 index 0000000000..d3c274bb0e --- /dev/null +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCImpactGraphics_KML.py @@ -0,0 +1,229 @@ +# ---------------------------------------------------------------------------- +# This software is in the public domain, furnished "as is", without technical +# support, and with no warranty, express or implied, as to its usefulness for +# any purpose. +# +# TCImpactGraphics_KML +# +# Author: P. Santos/Joe Maloney - 4/19/2011 +# +# Last edited: 27 July 2012 - Shannon/R. Anderson - made A2 compatible +# Last Modified 30 July 2012 - J Maloney/P. Santos - made it work with A2 +# Modified 09 Sept 2014 - J. Maloney - for 2015 season, removed MarineThreat, +# renamed CoastalThreat -> StormSurgeThreat, InlandThreat -> FloodingRainThreat, +# removed verylow from kml styles in header +# Modified 11 Sept 2014 - J. Maloney/S. White - site ID is now automatically +# retrieved from the environment. +# Modified 16 Sept 2014 - J. Maloney/T. Lefebvre - impact statements are now +# read from TCVDictionary (in Utilities) and formatted on-the-fly! +# Modified 21 Oct 2014 - J. Maloney - products now go in /awips2/GFESuite/hti/ +# data. +# +# ---------------------------------------------------------------------------- + +MenuItems = ["Populate"] + +import SmartScript +from numpy import * +import time +import os +import TimeRange +import AbsTime +from com.raytheon.uf.common.dataplugin.gfe.reference import ReferenceData_CoordinateType as CoordinateType +import TCVDictionary + +class Procedure (SmartScript.SmartScript): + def __init__(self, dbss): + SmartScript.SmartScript.__init__(self, dbss) + + def makeTimeRange(self): + cTime = int(self._gmtime().unixTime()/ 3600) * 3600 + startTime = AbsTime.AbsTime(cTime - 12 * 3600) + endTime = AbsTime.AbsTime(cTime + 12 * 3600) # 12 hours + tr = TimeRange.TimeRange(startTime, endTime) + + return tr + + def makeThreatKML(self,threatWEName,threatKeys,threatGrid_kml): + +# COMMENTS CONFIG READ: the directory below is the directory where the kml txt files will be dumped. +# From there it is synchronized to the web servers along with the graphics. If you set up +# your gHLS scripts and data directories in a different place than recommended in the install +# instructions, you would need to change that directory here. Do not change .kml.txt to .kml. +# Only .txt file can be uploaded as include files. In the servers a php script will convert the +# file name so that a browser can properly interpret it as a kml file to be open with Google +# Earth or equivalent application. + +# Also, make sure the ownership of the kml.txt files created below is fxa:fxalpha with permissions set +# to 666. + +# You can test the kml files created by copying them outside AWIPS and renaming them .kml. Then open them with +# Google Earth. + + kml_filename = '/awips2/GFESuite/hti/data/' + threatWEName + '.kml.txt' + kml = open(kml_filename, 'w') + kml.write('\n') + kml.write('\n') + kml.write(''+threatWEName+'.kml\n\n') + kml.write('\n') + kml.write('\n') + kml.write('\n') + kml.write('\n') + kml.write(''+threatWEName+'0\n') + kml.write('Product LegendProduct Legend1') + + # each threatWEName has its own separate legend + # need site id, in lowercase + SiteID = self.getSiteID().lower() + + if threatWEName == "StormSurgeThreat": + kml.write('http://www.nws.noaa.gov/images/ghls/' + SiteID + '/stormsurgethreatlegend.png') + elif threatWEName == "WindThreat": + kml.write('http://www.nws.noaa.gov/images/ghls/' + SiteID + '/windthreatlegend.png') + elif threatWEName == "FloodingRainThreat": + kml.write('http://www.nws.noaa.gov/images/ghls/' + SiteID + '/floodingrainthreatlegend.png') + elif threatWEName == "TornadoThreat": + kml.write('http://www.nws.noaa.gov/images/ghls/' + SiteID + '/tornadothreatlegend.png') + + # Complete the kml legend + kml.write('') + + #threatKeys = self.getDiscreteKeys(threatWEName) + #print "THREATKEYS ARE: ", threatKeys + + # initialize a flag. It will only be NO for the first polygon in the file. + flag = 'NO' + + for key in threatKeys: + #print "Key:", key + + # get index for this key + hazIndex = self.getIndex(key, threatKeys) + #print "hazIndex:", hazIndex + + mask = equal(threatGrid_kml, hazIndex) + + #print "Number of Grid Points: ", sum(sum(mask)) + + if sum(sum(mask)) == 0: + continue + + # make an editArea from the mask + editArea = self.decodeEditArea(mask) + + # extract the polygons from the edit area + polygons = editArea.getPolygons(CoordinateType.LATLON) + + # pull out the impact statements from the TCVDictionary + # We need to match the threatWEName to the entries found + # in the TCVDictionary + if threatWEName == "TornadoThreat": + threat='Tornado' + elif threatWEName == "StormSurgeThreat": + threat='Storm Surge' + elif threatWEName == "WindThreat": + threat='Wind' + else: + threat='Flooding Rain' + + # Extract the appropriate list from the dictionary, join them + # into a string, and make them separate bullets + impactStatement = "" + impactList = TCVDictionary.PotentialImpactStatements[threat][key] + impactStatement = "
* ".join(impactList) + impactStatement = "* " + impactStatement +# print "impactList:", impactList +# print "impactStatement:", impactStatement + + if key == "None": + kmlHeader='Threat Level - None to LittlePotential for None to Little Impact:
' + impactStatement + '
\n#none\n' + + elif key == "Elevated": + kmlHeader='Threat Level - ElevatedPotential for Limited Impact:
' + impactStatement + '
\n#low\n' + + elif key == "Mod": + kmlHeader='Threat Level - ModeratePotential for Significant Impact:
' + impactStatement + '
\n#moderate\n' + + elif key == "High": + kmlHeader='Threat Level - HighPotential for Extensive Impact:
' + impactStatement + '
\n#high\n' + + else: + kmlHeader='Threat Level - ExtremePotential for Devastating to Catastrophic Impact:
' + impactStatement + '
\n#extreme\n' + + for i in xrange(polygons.getNumGeometries()): + poly = polygons.getGeometryN(i) + shell = poly.getExteriorRing(); + if shell: + # If shell is true, it's a new polygon + if flag == 'YES': + # If flag is YES, this is not the first polygon we're writing out + # so close the previous polygon before continuing. + kml.write('
\n') + + kml.write(kmlHeader) + kml.write('') + #print "Outer shell coordinates:" + for c in shell.getCoordinates(): + #print "x:",c.x,"y:",c.y + line = str(c.x) + ',' + str(c.y) + ',0 \n' + kml.write(line) + + kml.write('') + # Now that we've written at least one polygon, set flag to YES + flag = 'YES' + + # CHECK FOR INNER LOOPS (HOLES) + for j in xrange(poly.getNumInteriorRing()): + hole = poly.getInteriorRingN(j) + #print "Hole",j,"coordinates:" + kml.write('') + for c in hole.getCoordinates(): + #print "x:",c.x,"y:",c.y + line = str(c.x) + ',' + str(c.y) + ',0 \n' + kml.write(line) + + kml.write('') + + kmlEnd='
\n
\n' + kml.write(kmlEnd) + kml.close() + + return + + def execute(self, varDict): + + tr = self.makeTimeRange() + threatlist = ['StormSurgeThreat','WindThreat','FloodingRainThreat','TornadoThreat'] + #threatlist = ['TornadoThreat'] # Took out MarineThreat 8/6/12 S.O. # READDED MARINE THREAT JCM 5/21/14 + + for grid in threatlist: + threatWEName = grid + #print "Doing grid for time range: ", tr + threatGrid, threatKeys = self.getGrids("Fcst", threatWEName, "SFC", tr) + +# COMMENTS CONFIG READ: For each threat element below, you need to change the edit area to the mask you are using +# in the config file to generate that impact graphic. For example, for CoastalThreat that would be +# XXXCoastalThreat where XXX is the 3 letter ID for your office. For WindThreat it would be XXXWindThreat. +# And so on. + + if threatWEName == "StormSurgeThreat": + editArea = self.getEditArea("StormSurgeWW_EditArea") + elif threatWEName == "WindThreat": + editArea = self.getEditArea("MFL") + elif threatWEName == "FloodingRainThreat": + editArea = self.getEditArea("MFL") + elif threatWEName == "TornadoThreat": + editArea = self.getEditArea("MFL_CWA") + else: + editArea = self.getEditArea("Marinezones") + + threatEditArea = self.encodeEditArea(editArea) + threatGrid_kml = where(threatEditArea, threatGrid, threatGrid-9.0) + + self.makeThreatKML(threatWEName,threatKeys,threatGrid_kml) + + # COMMENTS CONFIG READ: This path should be double-checked + os.system("/awips2/GFESuite/hti/bin/kml_legend.sh") + + return + diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCStormSurgeThreat.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCStormSurgeThreat.py new file mode 100644 index 0000000000..6235a0d14e --- /dev/null +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCStormSurgeThreat.py @@ -0,0 +1,582 @@ +# ---------------------------------------------------------------------------- +# This software is in the public domain, furnished "as is", without technical +# support, and with no warranty, express or implied, as to its usefulness for +# any purpose. +# +# CoastalThreat +# +# Author: Tom LeFebvre/Pablo Santos +# April 20, 2012 - To use gridded MSL TO NAVD and MSL to MLLW +# corrections and to get rid of Very Low. +# Last Modified: June 7, 2012 Shannon White - To fix the handling of time +# for A2 so it works for both real time and displaced real time +# Migrated TC Coastal Flood for AWIPS2. Updated 6/22/2012. S.O. +# March 11, 2014 to adapt to new PSURGE 2.0/PHISH and VDATUM Datasets in A1. PS +# May 21, 2014: for new PHISH but in AWIPS 2: PS/SW +# Aug 13, 2014: To rename SurgeHtPlustTide to InundationMax and incorporate InundationTiming. PS +# Sept 17, 2014: To finalize changes and clean up for 2015initial Baseline Check in. +# +# Last Modified: Sept 18, 2014: Added code to pull grids from NHC via ISC if PHISH not +# Available on time. Left inactive (commented out) for the moment until that can be fully tested later +# in 2014 or in 2015. +# +# ---------------------------------------------------------------------------- +# The MenuItems list defines the GFE menu item(s) under which the +# Procedure is to appear. +# Possible items are: Populate, Edit, Consistency, Verify, Hazards + +MenuItems = ["Populate"] + +import SmartScript +import numpy as np +import TimeRange +import AbsTime +import time +import sys + +VariableList = [("DEFAULT: Typical. Should only be changed in coordination with NHC SS Unit", "", "label"), + ("Forecast Confidence?", "Typical (10% Exceedance; for most systems anytime within 48 hours)", +## "radio", ["Low (Prob-only; 10% Exceedance; for ill behaved systems)", + "radio", ["Typical (10% Exceedance; for most systems anytime within 48 hours)", + "Medium (20% Exceedance; for well-behaved systems within 12 hours of event)", + "High (30% Exceedance; for well-behaved systems within 6-12 hours of event)", + "Higher (40% Exceedance; for well-behaved systems within 6 hours of the event)", + "Highest (50% Exceedance; for well-behaved systems at time of the event)"]), + ("Grid Smoothing?", "Yes", "radio", ["Yes","No"]), + ("Make grids from PHISH\n or ICS?\n", "PHISH", "radio", ["PHISH", "ISC"]), + ] + +class Procedure (SmartScript.SmartScript): + def __init__(self, dbss): + SmartScript.SmartScript.__init__(self, dbss) + + def getWEInventory(self, modelName, WEName, level): + allTimes = TimeRange.allTimes().toJavaObj() + gridInfo = self.getGridInfo(modelName, WEName, level, allTimes) + trList = [] + for g in gridInfo: + start = g.gridTime().startTime().unixTime() + end = g.gridTime().endTime().unixTime() + tr = TimeRange.TimeRange(AbsTime.AbsTime(start), + AbsTime.AbsTime(end)) + trList.append(tr) + + return trList + + def getAvgTopoGrid(self, topodb): + + siteID = self.getSiteID() +# print "********************\n TOPO IS: ", topodb + dbName = siteID + "_D2D_" + topodb + + weName = "avgTopo" +# timeRange = TimeRange.allTimes().toJavaObj() + trList = self.getWEInventory(dbName, weName, "SFC") + + #print "NED Topo list is", trList + + if len(trList)== 0: + #print "CRAP!!!" + return + for tr in trList: +# print "My time is", tr + topoGrid = self.getGrids(dbName, weName, "SFC", tr, mode="First") + + + # convert to feet + topoGrid = topoGrid * 3.281 + #topoVal = topoGrid.copy() + min = -16000 + max = 16000.0 + mask1 = topoGrid < min + mask2 = topoGrid > max + topoGrid[mask1] = -80 + topoGrid[mask2] = self.getTopo()[mask2] + +# mask1 = topoVal< min +# mask2 = topoVal> max +# topoGrid = np.where(mask1,-80.0,topoVal) +# topoGrid = np.where(mask2,self.getTopo(),topoVal) + + return topoGrid + + def makeNewTimeRange(self, hours): + + cTime = int(self._gmtime().unixTime()/ 3600) * 3600 + startTime = AbsTime.AbsTime(cTime) + endTime = startTime + (hours * 3600) + threatTR = TimeRange.TimeRange(startTime, endTime) + timeRange = TimeRange.TimeRange(startTime, endTime) + + return timeRange + + def getModelIDList(self, matchStr): + + availParms = self.availableParms() + + modelList = [] + for pName, level, dbID in availParms: + modelId = dbID.modelIdentifier() + if modelId.find(matchStr) > -1: + if modelId not in modelList: + modelList.append(modelId) + + return modelList + + def getExceedanceHeight(self, pctStr, level): + + ap = self.availableParms() + dbName = self.getSiteID() + "_D2D_TPCSurgeProb" + + modelIDList = self.getModelIDList("TPCSurgeProb") + modelIDList.sort() + + if len(modelIDList) == 0: + self.statusBarMsg("No pSurge data found in your inventory.", "S") + return None, None, None + + # the last one is the latest +# modelIDList[-1] + surgeModel = modelIDList[-1] + + weName = "Surge" + pctStr + "Pct" + trList = self.getWEInventory(dbName, weName, level) + + #print "Retreiving ", weName, " at ", level + for tr in trList: + grid = self.getGrids(dbName, weName, level, tr, mode="Max") + #maxGrid = maximum(grid, -100.0) # calculate the max as we go + + surgeVal = grid.copy() + mask = surgeVal>-100 + grid = np.where(mask,surgeVal*3.28, -80.0) +# print dir(grid) + return grid # convert meters to feet + + def makePhishGrid(self, pctStr, level, smoothThreatGrid): + + siteID = self.getSiteID() + dbName = siteID + "_D2D_TPCSurgeProb" + + weName = "Surge" + pctStr + "Pctincr" + #print "Attempting to retrieve: ", weName, level + trList = self.getWEInventory(dbName, weName, level) + + if len(trList) == 0: + self.statusBarMsg("No grids available for model:" + dbName, "S") + return None + + n = 1 + for tr in trList: + start = tr.startTime().unixTime() - 6*3600 + if n == 1: + starttimeghls = tr.startTime().unixTime() - 3*3600 + trdelete = TimeRange.TimeRange(AbsTime.AbsTime(starttimeghls - 100*3600), + AbsTime.AbsTime(starttimeghls + 100*3600)) + self.deleteCmd(['InundationTiming'], trdelete) + n = n + 1 + end = tr.startTime().unixTime() + tr6 = TimeRange.TimeRange(AbsTime.AbsTime(start), + AbsTime.AbsTime(end)) + phishGrid = self.getGrids(dbName, weName, level, tr) +# +# For consistency we need to add smoothing here too as we do in execute. +# + if phishGrid is None: + self.statusBarMsg("No PHISH grid available for:" + repr(tr), "S") + continue + + if smoothThreatGrid is "Yes": + phishGrid = np.where(np.greater(phishGrid, 0.0), self.smoothGrid(phishGrid,3), phishGrid) + + grid = np.where(phishGrid>-100,phishGrid*3.28, -80.0) + self.createGrid("Fcst", "InundationTiming", "SCALAR", grid, tr6, precision=1) + + return + +#************************************************************************************** +# THis procedure was written to extract MSL to NAVD corrections from the VDATUMS D2D +# Database. It is not yet implemented because the VDATUMS database has not been +# finalized. + + def getMSLtoNAVD(self): + siteID = self.getSiteID() + dbName = siteID + "_D2D_VDATUMS" + + weName = "MSLtoNAVD88" + trList = self.getWEInventory(dbName, weName, "SFC") + + if len(trList) == 0: + msgStr = weName + " does not exist in the VDATUMS model. " + self.statusBarMsg(msgStr, "S") + + #maxGrid = zeros(self.getTopo().shape) + + for tr in trList: + grid = self.getGrids(dbName, weName, "SFC", tr, mode="First") + #maxGrid = maximum(grid, -100.0) # calculate the max as we go + + #maxGrid = where(greater(maxGrid,-100.0), maxGrid*3.28, maxGrid) + conversionGrid = grid.copy() + mask = conversionGrid>-0.40 + grid = np.where(mask, conversionGrid*3.28, -80.0) + + #return maxGrid # convert meters to feet + return grid + + +# THis procedure was written to extract MSL to MLLW corrections from the VDATUMS D2D +# Database. It is not yet implemented because the VDATUMS database has not been +# finalized. + + def getMSLtoMLLW(self): + siteID = self.getSiteID() + dbName = siteID + "_D2D_VDATUMS" + + weName = "MSLtoMLLW" + trList = self.getWEInventory(dbName, weName, "SFC") + +# if len(trList) == 0: +# msgStr = weName + " does not exist in the VDATUMS model. " +# self.statusBarMsg(msgStr, "S") + + #maxGrid = zeros(self.getTopo().shape) + + for tr in trList: + grid = self.getGrids(dbName, weName, "SFC", tr, mode="First") + #maxGrid = maximum(grid, -100.0) # calculate the max as we go + + #maxGrid = where(greater(maxGrid,-100.0),maxGrid*3.28, maxGrid) + conversionGrid = grid.copy() + mask = conversionGrid>0.0 + grid = np.where(mask,conversionGrid *3.28, -80.0) + + #return maxGrid # convert meters to feet + return grid + + +# THis procedure was written to extract MSL to MHHW corrections from the VDATUMS D2D +# Database. It is not yet implemented because the VDATUMS database has not been +# finalized. + + def getMSLtoMHHW(self): + siteID = self.getSiteID() + dbName = siteID + "_D2D_VDATUMS" + + weName = "MSLtoMHHW" + trList = self.getWEInventory(dbName, weName, "SFC") + + if len(trList) == 0: + msgStr = weName + " does not exist in the VDATUMS model. " + self.statusBarMsg(msgStr, "S") + + #maxGrid = zeros(self.getTopo().shape) + + for tr in trList: + grid = self.getGrids(dbName, weName, "SFC", tr, mode="First") + #maxGrid = maximum(grid, -100.0) # calculate the max as we go + + #maxGrid = where(greater(maxGrid,-100.0),maxGrid*3.28, maxGrid) + conversionGrid = grid.copy() + mask = conversionGrid>-3.09 + grid = np.where(mask, conversionGrid*3.28, -80.0) + + #return maxGrid # convert meters to feet + return grid + +# THis procedure was written to extract NAVD88 to MLLW corrections from the VDATUMS D2D +# Database. It is not yet implemented because the VDATUMS database has not been +# finalized. + + def getNAVDtoMLLW(self): + siteID = self.getSiteID() + dbName = siteID + "_D2D_VDATUMS" + + weName = "NAVD88toMLLW" + trList = self.getWEInventory(dbName, weName, "SFC") + +# if len(trList) == 0: +# msgStr = weName + " does not exist in the VDATUMS model. " +# self.statusBarMsg(msgStr, "S") + + #maxGrid = zeros(self.getTopo().shape) + + for tr in trList: + grid = self.getGrids(dbName, weName, "SFC", tr, mode="First") + #maxGrid = maximum(grid, -100.0) # calculate the max as we go + + #maxGrid = where(greater(maxGrid,-100.0),maxGrid*3.28, maxGrid) + conversionGrid=grid.copy() + mask = conversionGrid>-2.20 + grid = np.where(mask, conversionGrid*3.28, -80.0) + + #return maxGrid # convert meters to feet + return grid + + +# THis procedure was written to extract NAVD88 to MLLW corrections from the VDATUMS D2D +# Database. It is not yet implemented because the VDATUMS database has not been +# finalized. + + def getNAVDtoMHHW(self): + siteID = self.getSiteID() + dbName = siteID + "_D2D_VDATUMS" + + weName = "NAVD88toMHHW" + trList = self.getWEInventory(dbName, weName, "SFC") + +# if len(trList) == 0: +# msgStr = weName + " does not exist in the VDATUMS model. " +# self.statusBarMsg(msgStr, "S") + + #maxGrid = zeros(self.getTopo().shape) + + for tr in trList: + grid = self.getGrids(dbName, weName, "SFC", tr, mode="First") + #maxGrid = maximum(grid, -100.0) # calculate the max as we go + + #maxGrid = where(greater(maxGrid,-100.0),maxGrid*3.28, maxGrid) + conversionGrid = grid.copy() + mask = conversionGrid>-3.40 + grid = np.where(mask, conversionGrid*3.28, -80.0) + + #return maxGrid # convert meters to feet + return grid + + def smoothGrid(self, grid, factor): + # factors of less than 3 are useless or dangerous + if factor < 3: + return grid + st = time.time() + half = int(factor)/ 2 + sg = np.zeros(grid.shape,"f8") + count = np.zeros(grid.shape,"f8") + gridOfOnes = np.ones(grid.shape,"f8") + for y in range(-half, half + 1): + for x in range(-half, half + 1): + if y < 0: + yTargetSlice = slice(-y, None, None) + ySrcSlice = slice(0, y, None) + if y == 0: + yTargetSlice = slice(0, None, None) + ySrcSlice = slice(0, None, None) + if y > 0: + yTargetSlice = slice(0, -y, None) + ySrcSlice = slice(y, None, None) + if x < 0: + xTargetSlice = slice(-x, None, None) + xSrcSlice = slice(0, x, None) + if x == 0: + xTargetSlice = slice(0, None, None) + xSrcSlice = slice(0, None, None) + if x > 0: + xTargetSlice = slice(0, -x, None) + xSrcSlice = slice(x, None, None) + + target = [yTargetSlice, xTargetSlice] + src = [ySrcSlice, xSrcSlice] + sg[target] = np.where(np.greater(grid[src],-80.0),sg[target] + grid[src],sg[target]) + count[target] = np.where(np.greater(grid[src],-80.0),count[target] + gridOfOnes[src],count[target]) + + return np.where(np.greater(count,0.0), sg / count, -80.0) + + + # Copies the specified weather elements in elementList into the Fcst database. + def copyISCGridstoFcst(self, elementList): + + # First delete the existing grids so there's no confusion + cTime = int(self._gmtime().unixTime()/ 3600) * 3600 + startTime = AbsTime.AbsTime(cTime - 24*3600) + endTime = startTime + 240*3600 + timeRange = TimeRange.TimeRange(startTime, endTime) + + + for elem in elementList: + if elem == "InundationTiming": + #print "Deleting: ", elem + self.deleteCmd([elem], timeRange) + + for weName in elementList: + iscWeName = weName + "nc" + # get the inventory for the ISC grids + try: + trList = self.getWEInventory("ISC", iscWeName, "SFC") + except: + self.statusBarMsg("No grids found in ISC database for " + iscWeName, "S") + continue + + if len(trList) == 0: + self.statusBarMsg("No grids found in ISC database for " + iscWeName, "S") + continue + + # Fetch the ISC grid and create the same grid in the Fcst database + for tr in trList: + grid = self.getGrids("ISC", iscWeName, "SFC", tr) + if iscWeName == "InundationTimingnc": + self.createGrid("Fcst", weName, "SCALAR", grid, tr, precision=2) + elif iscWeName == "InundationMaxnc": + surgePctGrid = grid + elif iscWeName == "SurgeHtPlusTideMSLnc": + surgePctGridMSL = grid + elif iscWeName == "SurgeHtPlusTideMLLWnc": + surgePctGridMLLW = grid + elif iscWeName == "SurgeHtPlusTideMHHWnc": + surgePctGridMHHW = grid + elif iscWeName == "SurgeHtPlusTideNAVDnc": + surgePctGridNAVD = grid + + return surgePctGrid,surgePctGridMSL,surgePctGridMLLW,surgePctGridMHHW,surgePctGridNAVD + + def execute(self, varDict): + + # List of elements + # See if we should copy from ISC. If so, do the copy and exit + smoothThreatGrid = varDict["Grid Smoothing?"] + PHISHorISC = varDict["Make grids from PHISH\n or ICS?\n"] + #PHISHorISC = "PHISH" + topodb = "NED" + #topodb = varDict["Topographic Database?"] + + editArea = self.getEditArea("StormSurgeWW_EditArea") + ssea = self.encodeEditArea(editArea) + + Topo = self.getAvgTopoGrid(topodb) + + confidenceStr = varDict["Forecast Confidence?"] + + # extract the percent value from this string + pctPos = confidenceStr.find("%") + pctStr = confidenceStr[pctPos - 2:pctPos] + + #print "pctStr is: ", pctStr + + if PHISHorISC == "PHISH": + + #initialize grids to zero + surgePctGrid = self._empty + surgePctGridNAVD = self._empty + + # Now get the psurge + surgePctGrid = self.getExceedanceHeight(pctStr, "FHAG0") + surgePctGridNAVD = self.getExceedanceHeight(pctStr, "SFC") + #print "retrieved my grids" +# +# The following lines are the gridded vdatum corrections. +# + msltonavd = self.getMSLtoNAVD() + msltomllw = self.getMSLtoMLLW() + msltomhhw = self.getMSLtoMHHW() + navdtomllw = self.getNAVDtoMLLW() + navdtomhhw = self.getNAVDtoMHHW() + +# Apply 3x3 smooth within the surge zone +# for values greater than 1 as to not underplay areas adjacent to zero value pixels. +# If you apply a smoother, for consistency among storm surge plus tide and derived +# grids, it must be done here. + + if smoothThreatGrid is "Yes": + surgePctGrid = np.where(np.greater(surgePctGrid, 0.0), self.smoothGrid(surgePctGrid,3), surgePctGrid) + surgePctGridNAVD = np.where(np.greater(surgePctGridNAVD, -10.0), self.smoothGrid(surgePctGridNAVD,3), surgePctGridNAVD) + + mask1 = np.logical_and(np.greater(msltonavd, -80.0),np.greater(surgePctGridNAVD,-80.0)) + surgePctGridMSL= np.where(mask1, surgePctGridNAVD - msltonavd, -80.0) # MSL Grid + surgePctGridMLLW = np.where(np.greater(navdtomllw,-80.0) & np.greater(surgePctGridNAVD,-80.0), \ + surgePctGridNAVD + navdtomllw, -80.0)# MLLW Grid + surgePctGridMHHW = np.where(np.greater(navdtomhhw,-80.0) & np.greater(surgePctGridNAVD,-80.0), \ + surgePctGridNAVD + navdtomhhw, -80.0)# MHHW Grid + surgeDiffMLLWMHHW = np.where(np.greater(surgePctGridMLLW,-80.0) & np.greater(surgePctGridMHHW, -80.0), \ + surgePctGridMLLW-surgePctGridMHHW, -80.0)# Diff Grid Between MLLW and MHHW + + self.makePhishGrid(pctStr, "FHAG0", smoothThreatGrid) + + else: + + elementList = ["InundationMax","InundationTiming", "SurgeHtPlusTideMSL","SurgeHtPlusTideMLLW", + "SurgeHtPlusTideNAVD","SurgeHtPlusTideMHHW"] + surgePctGrid,surgePctGridMSL,surgePctGridMLLW,surgePctGridMHHW,surgePctGridNAVD = self.copyISCGridstoFcst(elementList) + + threatWEName = "StormSurgeThreat" + + threatKeys = self.getDiscreteKeys(threatWEName) + + # Define a mapping between UI names and key names + # keyMap = {"Very Low" :"Very Low", + keyMap = {"Elevated" : "Elevated", + "Moderate" : "Mod", + "High" : "High", + "Extreme" : "Extreme", + } + + threshDict = {} # a dict to store thresholds from the UI + + for key in keyMap.keys(): + # if not key in varDict.keys(): # This should never happen + # print "Error in mapping UI keys to DISCRETE keys." + # print "Please fix the keyMap dictionary." + # return + + #threshDict[keyMap[key]] = varDict[key] + if keyMap[key] == "Extreme": + threshDict[keyMap[key]] = 9 + elif keyMap[key] == "High": + threshDict[keyMap[key]] = 6 + elif keyMap[key] == "Mod": + threshDict[keyMap[key]] = 3 + elif keyMap[key] == "Elevated": + threshDict[keyMap[key]] = 1 + + #print "threshDict[keyMap[key]]: ", keyMap[key], threshDict[keyMap[key]] + + # make a grid of zeros. This will be the CoastalThreat grid + coastalThreat = np.zeros(self.getTopo().shape) + + # Yet another list to define the order in which we set grid values + # This order must be ranked lowest to highest + #keyList = ["Very Low", "Elevated", "Mod", "High", "Extreme"] + keyList = ["Elevated", "Mod", "High", "Extreme"] + + # Set the grid values based on the surgePctGrid grid and thresholds + for key in keyList: + #print "THRESHOLD FOR KEY IS: ", key, threshDict[key] + thresh = threshDict[key] + keyIndex = self.getIndex(key, threatKeys) + coastalThreat = np.where(ssea & np.greater_equal(surgePctGrid, thresh), keyIndex, + coastalThreat) + + # make a timeRange - 6 hours long + elementList = ["StormSurgeThreat","InundationMax","SurgeHtPlusTideMSL","SurgeHtPlusTideMLLW","SurgeHtPlusTideNAVD","SurgeHtPlusTideMHHW"] + + cTime = int(self._gmtime().unixTime()/ 3600) * 3600 + startTime = AbsTime.AbsTime(cTime - 24*3600) + endTime = startTime + 240*3600 + timeRange = TimeRange.TimeRange(startTime, endTime) + #print "time range to delete is: ", timeRange + + for elem in elementList: + #print "Deleting: ", elem + self.deleteCmd([elem], timeRange) + + timeRange = self.makeNewTimeRange(6) + + # display the D2D grid for debugging purposes only + self.createGrid("Fcst", "InundationMax", "SCALAR", surgePctGrid, + timeRange, precision=2) + self.createGrid("Fcst", "SurgeHtPlusTideMSL", "SCALAR", surgePctGridMSL, + timeRange, precision=2) + self.createGrid("Fcst", "SurgeHtPlusTideMLLW", "SCALAR", surgePctGridMLLW, + timeRange, precision=2) + self.createGrid("Fcst", "SurgeHtPlusTideNAVD", "SCALAR", surgePctGridNAVD, + timeRange, precision=2) + self.createGrid("Fcst", "SurgeHtPlusTideMHHW", "SCALAR", surgePctGridMHHW, + timeRange, precision=2) + + +# create the CoastalThreat Grid + self.createGrid("Fcst", threatWEName, "DISCRETE", + (coastalThreat, threatKeys), timeRange, + discreteKeys=threatKeys, + discreteOverlap=0, + discreteAuxDataLength=2, + defaultColorTable="Hazards") + + return diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCTornadoThreat.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCTornadoThreat.py new file mode 100644 index 0000000000..ad51fe6002 --- /dev/null +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCTornadoThreat.py @@ -0,0 +1,342 @@ +# ---------------------------------------------------------------------------- +# +# This software is in the public domain, furnished "as is", without technical +# support, and with no warranty, express or implied, as to its usefulness for +# any purpose. +# +# TornadoFloodThreat +# +# Author: Tom LeFebvre/Pablo Santos +# Updated: April 16, 2012 to lower Low Category Threshold and hide Sliding Bars +# Migrated procedure for AWIPS2. Updated 6/22/2012. S.O. +# Last Modified: Sept 19, 2014: Updated Low to Elevated for 2015 Official Implementation. PS +# ---------------------------------------------------------------------------- + +# The MenuItems list defines the GFE menu item(s) under which the +# Procedure is to appear. +# Possible items are: Populate, Edit, Consistency, Verify, Hazards +MenuItems = ["Populate"] + +import SmartScript +import time +import sys +import AbsTime +import TimeRange + +VariableList = [("NOTE: Day 1 Tornado Probabilities Used by Procedure:", "", "label"), + #("Very Low" , "02", "radio", ["02"]), + ("Elevated" , "02", "radio", ["02"]), + ("Mod" ,"15", "radio", ["15"]), + ("High","30", "radio", ["30"]), + ("Extreme" ,"45", "radio", ["45"]), + ("Day 2: Prob Svr Wx (ptotsvr) >= 5: Elevated; ptotsvr >= 60%: Mod", "", "label"), + ("Day 2: Prob Sig Svr Wx (ptotxsvr) >= 10: Elevated -> Mod and Mod -> High", "", "label"), + ("Day 3: Prob Svr Wx (ptotsvr) >= 5: Elevated", "", "label"), + ("Day 3: Prob Sig Svr Wx (ptotxsvr) >= 10: Elevated -> Mod", "", "label"), + ("NOTE: After applying logic above", "", "label"), + ("threat level is the max composite from Day 1-3", "", "label") + ] + +try: + from Numeric import * +except: + from numpy import * + +class Procedure (SmartScript.SmartScript): + def __init__(self, dbss): + SmartScript.SmartScript.__init__(self, dbss) + + # Make a timeRange based on the start and end int times + def makeTimeRange(self, start, end): + + try: # AWIPS 1 code + import AFPS + startTime = AFPS.AbsTime(start) + endTime = AFPS.AbsTime(end) + + tr = AFPS.TimeRange(startTime, endTime) + + except: # AWIPS 2 code + import TimeRange, AbsTime + startTime = AbsTime.AbsTime(start) + endTime = AbsTime.AbsTime(end) + + tr = TimeRange.TimeRange(startTime, endTime) + + return tr + + def variableExists(self, modelName, weName, weLevel): + + # it turns out the the modelName will not match the dbID().model() + # directly, so it needs to be massaged a bit. + parts = modelName.split("_") + if len(parts) >= 4: + modelName = parts[3] + + availParms = self.availableParms() + for pName, level, dbID in availParms: + if dbID.modelName().find(modelName) > -1: + if pName.find(weName) > -1 and level.find(weLevel) > -1: + return True + + return False + + def getWEInventory(self, modelName, WEName, timeRange = None): + + allTimes = TimeRange.allTimes() + + if timeRange is None: + timeRange = allTimes + + weLevel = "SFC" + + if not self.variableExists(modelName, WEName, weLevel): + #print WEName, "does not exist in model", modelName + return [] + + try: + gridInfo = self.getGridInfo(modelName, WEName, weLevel, timeRange) + except: + #print "GridInfo failed for:", modelName, WEName, weLevel, timeRange + return [] + + trList = [] + for g in gridInfo: + start = g.gridTime().startTime().unixTime() + end = g.gridTime().endTime().unixTime() + tr = self.makeTimeRange(start, end) + if timeRange.overlaps(tr): + trList.append(tr) + + return trList + + # get the current time, truncates to the last six hour value. + # returns a timeRange with this startTime until 24 hrs from this time + def make6hrTimeRange(self): + startTime = int(self._gmtime().unixTime()/ (3600 * 6)) * 3600 * 6 + endTime = startTime + (3600 * 6) + + timeRange = self.makeTimeRange(startTime, endTime) + + return timeRange + + # Returns a list of dbIdentifiers that match the specified model + # name, weName and level. + def getModelList(self, modelName, weName, weLevel): + modelList = [] + + availParms = self.availableParms() + + for pName, level, dbID in availParms: + if dbID.modelName().find(modelName) > -1: + if pName.find(weName) > -1: + if level.find(weLevel) > -1: + if dbID.modelIdentifier() not in modelList: + modelList.append(dbID.modelIdentifier()) + return modelList + + def determineDay(self, modelTime, validTime): + + diff = (validTime - modelTime) / 3600 + if diff < 36: + return 1 + elif diff >= 36 and diff < 60: + return 2 + elif diff >= 60: + return 3 + + return 0 + + # returns a unix time based on the specified model ID. + def getModelTime(self, modelName): + + timeStr = modelName[-13:] + + year = int(timeStr[0:4]) + month = int(timeStr[4:6]) + day = int(timeStr[6:8]) + hour = int(timeStr[9:11]) + + absTime = AbsTime.absTimeYMD(year, month, day, hour, 0, 0) + absTime = AbsTime.absTimeYMD(year, month, day, hour, 0, 0) + + return absTime.unixTime() + + def getTornadoGrid(self, varName, dayNum): + siteID = self.getSiteID() + SPCModelName = siteID + "_D2D_SPC" + SPCVarName = varName + SPCLevel = "SFC" + + modelList = self.getModelList("SPC", SPCVarName, SPCLevel) + #print "Processing varName, dayNum: ", varName, dayNum + + hours24 = 24 * 3600 + + for modelName in modelList: + + trList = self.getWEInventory(modelName, SPCVarName) + #print "modelName trList:", modelName, trList + if len(trList) == 0: # no grids found for this version + continue # go on to older versions + + modelTime = self.getModelTime(modelName) + # get the current time rounded to the nearest 12Z + currentTime = (int(time.time() / hours24) * hours24) + (12 * 3600) + + for tr in trList: + gridDayNum = self.determineDay(currentTime, + tr.startTime().unixTime()) + #print "modelName, modelTime, and gridDayNum:", modelName, modelTime, gridDayNum + if gridDayNum == dayNum: + grid = self.getGrids(modelName, SPCVarName, SPCLevel, tr) + return grid + + return None + + # This method adjusts an existing threat grid + def adjustTornadoGrid(self, tornadoThreat, threatKeys, var, dayNum, extThreshold): + D2DGrid = self.getTornadoGrid(var, dayNum) + if D2DGrid is None: + #print "No grid found for", var, "day:", dayNum + return tornadoThreat + + # Account for offices using the four key arrangement + # Just change the "Very Low" to "Low" in the threshDict + #if "Very Low" not in threatKeys: + # # find all places greater than "Very Low or Low" in the tornadoThreat + # lowIndex = self.getIndex("Low", threatKeys) + #else: + # lowIndex = self.getIndex("Very Low", threatKeys) + #lowMask = greater_equal(tornadoThreat, lowIndex) + + lowMask = greater(tornadoThreat, 0) + + # finds all places in the extreme grid >= to the extThreshold + xMask = greater_equal(D2DGrid, extThreshold) + + # increment the threat where these masks intersect + mask = lowMask & xMask + + # make sure we're not incremening too far + extremeIndex = self.getIndex("Extreme", threatKeys) + extremeMask = equal(tornadoThreat, extremeIndex) + mask = mask - extremeMask # subtract the extreme area + + # increment the category. This code assumes that the categories are + # defined in increaing order of severity. + tornadoThreat = where(mask, tornadoThreat + 1, tornadoThreat) + + return tornadoThreat + + + def setTornadoGrid(self, tornadoThreat, threatKeys, var, dayNum, threshDict): + + D2DGrid = self.getTornadoGrid(var, dayNum) + if D2DGrid is None: + #print "No grid found for", var, "day:", dayNum + return tornadoThreat + + # Account for offices using the four key arrangement + # Just change the "Very Low" to "Low" in the threshDict + #print "THREATKEYS ARE: ", threatKeys + #print "THRESHDICT IS: ", threshDict.keys() + if "Very Low" not in threatKeys: + for key in threshDict.keys(): + if threshDict[key] == "Very Low": + threshDict[key] = "Elevated" + dictKeys = threshDict.keys() + + #print "unsorted dictKeys: ", dictKeys + dictKeys.sort() # sort lowest to highest value + #print "sorted dictKeys: ", dictKeys + + + # Set the grid values based on the tornado prob grid and thresholds + for key in dictKeys: + thresh = int(key) + #print "THRESH IS: ", thresh + keyIndex = self.getIndex(threshDict[key], threatKeys) + # make a temp grid where the thresholds are exceeded + tempGrid = where(greater_equal(D2DGrid, thresh), keyIndex, 0) + # calculate areas where this temp grid exceeds the threatGrid + mask = greater(tempGrid, tornadoThreat) + # update the threatGrid for these areas only + tornadoThreat = where(mask, keyIndex, tornadoThreat) + + return tornadoThreat + + def execute(self, varDict): + + threatWEName = "TornadoThreat" + + threatKeys = self.getDiscreteKeys(threatWEName) + + # make a dict to store thresholds from the UI + ptorDict = {} + + for key in threatKeys: + if key == "None": + continue + ptorDict[varDict[key]] = key + + #print "***************************" + #print "ptorDict is:", ptorDict + #print "***************************" + + # Set up the data for processing the various grids. + # Each entry consists of the D2D variable to be checked, + # the day number of that grid, and a dictionary that defines + # each threshold value and the corresponding discrete value. + # Note the grids will be processed in the order defined in + # this list. + actionList = [ + ("ptor", 1, ptorDict, "sigtrndprob", 10), # ptorDict comes from the GUI + + ("prsvr", 2, { 5 : "Very Low", + #15 : "Elevated", + 5 : "Elevated", + 60 : "Mod", + }, + "prsigsv", 10), + + ("prsvr", 3, { 5 : "Very Low", + #15 : "Elevated", + 5 : "Elevated", + + }, + "prsigsv", 10), + + ] + + # make a grid of zeros. This will be the TornadoThreat grid + tornadoThreat = zeros(self.getTopo().shape) + + for var, dayNum, threshDict, xVar, xThreshold in actionList: + tornadoThreat = self.setTornadoGrid(tornadoThreat, threatKeys, + var, dayNum, threshDict) + + # now adjust the grid based on the extreme grid category + tornadoThreat = self.adjustTornadoGrid(tornadoThreat, threatKeys, + xVar, dayNum, xThreshold) + + # make a timeRange - 6 hours long, rounded to nearest hour + startTime = int(self._gmtime().unixTime()/ 3600) * 3600 + endTime = startTime + (6 * 3600) + threatTR = self.makeTimeRange(startTime, endTime) + + # remove any old grids that are lying around + startTime = int(self._gmtime().unixTime()/ 3600) * 3600 - (24 * 3600) + endTime = startTime + (24 * 3600 * 10) + removeTR = self.makeTimeRange(startTime, endTime) + self.deleteCmd([threatWEName], removeTR) + + # create the TornadoThreat Grid + self.createGrid("Fcst", threatWEName, "DISCRETE", + (tornadoThreat, threatKeys), threatTR, + discreteKeys=threatKeys, + discreteOverlap=0, + discreteAuxDataLength=2, + defaultColorTable="Hazards") + + return diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCWindThreat.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCWindThreat.py new file mode 100644 index 0000000000..73295f47f2 --- /dev/null +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCWindThreat.py @@ -0,0 +1,575 @@ +# ---------------------------------------------------------------------------- +# This software is in the public domain, furnished "as is", without technical +# support, and with no warranty, express or implied, as to its usefulness for +# any purpose. +# +# A2TCWindThreatFinal_3 +# This version is for use with MLB's Graphical HLS. +# This version modifies the gHLS WindThreat element. +# +# Author: lefebvre 9/11/06 +# Modified by: Volkmer/MLB and Santos/MFL 5/23/07 +# More modifications: by LeFebvre/Santos/Sharp 05/7/09 +# LeFebvre/Santos 07/20/10 +# Modified: by Santos 04/26/2011 to accomodate alternate logic for NE Coast and hide bars +# Modified: by Santos 04/20/2012 to get rid off Very Low and tweak GUI. +# Modified: by Shannon/Pablo 06/19/2012 to make A2 and DRT compatible +# Modified: by Pablo/Shannon on 05/21/2014 to fix bug introduced in 2012 when Very Low was eliminated +# Last Modified: By Santos/Lefebvre 09/17/2014 to make changes for official implementation in 2015. +# ---------------------------------------------------------------------------- +# +# THIS CODE SHALL NOT BE CHANGED WITHOUT CONSULTING ORIGINAL DEVELOPERS. +# +# The MenuItems list defines the GFE menu item(s) under which the +# Procedure is to appear. +# Possible items are: Populate, Edit, Consistency, Verify, Hazards +MenuItems = ["Populate","Edit"] + +# The ToolList is optional, but recommended, if you are calling +# Smart Tools from your Script. +# If present, it can be used to show which grids will be +# modified by the Script. + + +VariableList = [("Forecast Confidence?", "Typical (Combined; For ill defined or for most systems anytime within 48 hours of landfall or closest approach)", + "radio", ["Typical (Combined; For ill defined or for most systems anytime within 48 hours of landfall or closest approach)", + "High (Combined; for well-behaved systems within 12 hours of landfall or closest approach)", + "Higher (Combined; for very well-behaved systems within 6 hours of landfall or closest approach)", + "Highest (Deterministic-only; assumes a perfect forecast)"]), + ("WindMax Source?", "WFO Mesoscale (default)", "radio", ["WFO Mesoscale (default)","NHC/TCM Synoptic"]), + ] + +import SmartScript +import string +import TimeRange +import AbsTime +import time +import MetLib +import sys + +from numpy import * + + +class Procedure (SmartScript.SmartScript): + def __init__(self, dbss): + SmartScript.SmartScript.__init__(self, dbss) + + # Finds the TPC prob database, extracts all of the grids and returns + # the last one of each type + def getProbGrids(self): + ap = self.availableParms() + searchStr = self.getSiteID() + "_GRID_D2D_TPCProb" + probModel = "" + for elem, level, model in ap: + if string.find(model.modelIdentifier(), searchStr) > -1: + probModel = model.modelIdentifier() + break + + if probModel == "": + self.statusBarMsg("TPC Wind probability grids not found.", "S") + return None, None, None + + # make a big timeRange + timeRange = TimeRange.allTimes() + + + # get the TPC prob grids, and keep the last one + prob34List = self.getGrids(probModel, "prob34", "FHAG10", timeRange, + mode = "List") + prob34Grid = prob34List[-1] + + prob50List = self.getGrids(probModel, "prob50", "FHAG10", timeRange, + mode = "List") + prob50Grid = prob50List[-1] + + prob64List = self.getGrids(probModel, "prob64", "FHAG10", timeRange, + mode = "List") + prob64Grid = prob64List[-1] + + return prob34Grid, prob50Grid, prob64Grid + + def getWEInventory(self, modelName, WEName): + dbTime = self.makeDBTimeRange() + trList = [] + + try: + gridInfo = self.getGridInfo(modelName, WEName, "SFC", dbTime) + except: + return trList + + for g in gridInfo: + start = g.gridTime().startTime().unixTime() + end = g.gridTime().endTime().unixTime() + startTime = AbsTime.AbsTime(start) + endTime = AbsTime.AbsTime(end) + + tr = TimeRange.TimeRange(startTime, endTime) + if dbTime.overlaps(tr): + trList.append(tr) + + return trList + + + # make a timeRange spanning from the current hour to 6 hours hence + def make6hrTimeRange(self): + cTime = int(self._gmtime().unixTime()/ 3600) * 3600 + startTime = AbsTime.AbsTime(cTime) + endTime = AbsTime.AbsTime(cTime + (6 * 3600)) # 6 hours + tr = TimeRange.TimeRange(startTime, endTime) + + return tr + + # make a timeRange spanning the usual -24 to 10-day db + def makeDBTimeRange(self): + cTime = int(self._gmtime().unixTime()/ 3600) * 3600 + startTime = AbsTime.AbsTime(cTime - (24*3600)) + endTime = AbsTime.AbsTime(cTime + (240 * 3600)) # 10 days + tr = TimeRange.TimeRange(startTime, endTime) + + return tr + + + # removes all grids from a selected set of temporary parms + def removeTempGrids(self): + elementList = ["Prob34", "Prob50", "Prob64", "WindMax"] + ap = self.availableParms() + tr = TimeRange.allTimes() + + for elem, level, model in ap: + modelName = model.modelIdentifier() + if elem in elementList and level == "SFC": + self.deleteCmd([elem], tr) + return + + # Smooths the specified grid by the specified factor + # With factor == 3, 3x3 smooth, factor == 5 5x5 smooth, etc. + # Even factors (4, 6, 8,...) round up to the next odd value + # If factors <3 are specified, the unmodified grid is returned. + def smoothGrid(self, grid, factor=3): + # factors of less than 3 are useless or dangerous + if factor < 3: + return grid + st = self._gmtime().unixTime() + half = int(factor)/ 2 + sg = zeros(grid.shape,'f8') + count = zeros(grid.shape,'f8') + gridOfOnes = ones(grid.shape,'f8') + for y in range(-half, half + 1): + for x in range(-half, half + 1): + if y < 0: + yTargetSlice = slice(-y, None, None) + ySrcSlice = slice(0, y, None) + if y == 0: + yTargetSlice = slice(0, None, None) + ySrcSlice = slice(0, None, None) + if y > 0: + yTargetSlice = slice(0, -y, None) + ySrcSlice = slice(y, None, None) + if x < 0: + xTargetSlice = slice(-x, None, None) + xSrcSlice = slice(0, x, None) + if x == 0: + xTargetSlice = slice(0, None, None) + xSrcSlice = slice(0, None, None) + if x > 0: + xTargetSlice = slice(0, -x, None) + xSrcSlice = slice(x, None, None) + + target = [yTargetSlice, xTargetSlice] + src = [ySrcSlice, xSrcSlice] + sg[target] = sg[target] + grid[src] + count[target] = count[target] + gridOfOnes[src] + return sg / count + + # + def getStormCenter(self, windGrid, tr): + u, v = self.MagDirToUV(windGrid[0], windGrid[1]) + vortGrid = MetLib.vorticity((u, v)) + vortGrid = self.smoothGrid(vortGrid, 3) + vortGrid = clip(vortGrid, 0.0, 1000000) +## self.createGrid("Fcst", "Vorticity", "SCALAR", vortGrid, tr, +## minAllowedValue = 0.0, maxAllowedValue=1000000.0) + + # find the max + maxVort = max(vortGrid.flat) + + if maxVort < 10: + return None, None + + # find the location of the max + mask = equal(vortGrid, maxVort) + + maxPos = nonzero(mask.flat)[0] + + # get x. y position of the center + row = maxPos / mask.shape[1] + col = maxPos % mask.shape[1] + + return col, row + + # Using the center, a distance grid from that center and a mask + # indictaing the area that includes the maxWind field this + # method returns the radius of that area in gridpoint units. + # Note this method adds 2 gridpoints since the area tends to + # fall a little short of the actual max wind value. + def calcRadius(self, center, distGrid, mask): + maskPoints = nonzero(mask) + if len(maskPoints) == 0: + return 0 + + histDict = {} + yCoords, xCoords = maskPoints + + for i in range(len(yCoords)): + dist = int(distGrid[yCoords[i], xCoords[i]]) + + if not histDict.has_key(dist): + histDict[dist] = 1 + else: + histDict[dist] = histDict[dist] + 1 + + histKeys = histDict.keys() + histKeys.sort() + lastKey = 0 + for key in histKeys: + if key - lastKey >=2: + return lastKey + 2 + lastKey = key + + return lastKey + 2 + + # makes a grid of distance from the specified center + # which must be expressed as a tuple (x, y) + def makeDistGrid(self, center): + iGrid = indices(self._empty.shape) + yDist = center[1] - iGrid[0] + xDist = center[0] - iGrid[1] + distGrid = sqrt(pow(xDist, 2)+ pow(yDist, 2)) + + return distGrid + + # Given a specified wind speed and direction grid along with + # a distance grid, this method computes a mask that covers + # the area defined by the ring of max winds. + def makeCoreMask(self, ws, wd, distGrid): + + # Find the area inside the max wind ring + u, v = self.MagDirToUV(ws, wd) + windGrad = MetLib.gradient(ws) + distGrad = MetLib.gradient(distGrid) + dotGrid = MetLib.dot(windGrad, distGrad) + + # smooth this grid to remove noise + dotGrid = self.smoothGrid(dotGrid, 9) + mask = greater(dotGrid, 0.0) + + return mask + + # This method returns the max wind speed value found in the + # specified wind speed grid. This method restricts the search + # to an area just inside and just outside the specified radius. + def getMaxWindValue(self, distGrid, radius, ws, tr): + maxWS = 0.0 + lessMask = less(distGrid, radius + 2) + moreMask = greater(distGrid, radius - 7) + mask = lessMask & moreMask +## self.createGrid("Fcst", "MaxMask", "SCALAR", mask, tr) + ringGrid = ws * mask + thisMax = max(ringGrid.flat) + if thisMax > maxWS: + maxWS = thisMax + + return maxWS + + # This method adjusts and returns the specified maxWindGrid by + # temporally interpolating each wind grid found in the current + # inventory. A vorticity field is used to determine the storm + # center. Then the wind speed and direction grids are used to + # calculate the area surrounded by the ring of max winds. This + # area is used to calculate the radius of max wind and the all + # of the attributes are used to calculate the max wind field + # over the entire event by interpolating temporally. This max + # wind field is later used to calculate the WindThreat. + def adjustWindMax(self, maxWindGrid): + trList = self.getWEInventory("Fcst", "Wind") + if len(trList) == 0: + return + + adjustedWindMax = maxWindGrid + stormMaxWindValue = -1 + + modifiedMask = zeros(self._empty.shape, 'b') + + lastXPos = None + lastYPos = None + lastRadius = None + lastWindMax = None + for tr in trList: + + ws, wd = self.getGrids("Fcst", "Wind", "SFC", tr, mode="First") + + xPos, yPos = self.getStormCenter((ws, wd), tr) + + # See if the storm os outside the GFE domain. If it is, just update + # the adjustedWindMax and the stormMaxWindValue + if xPos is None or yPos is None: + adjustedWindMax = where(greater(ws, adjustedWindMax), ws, adjustedWindMax) + gridWindMax = max(ws.flat) # max value over the whole grid + stormMaxWindValue = max(gridWindMax, stormMaxWindValue) # update the overall max + continue + + # On 09/17/2014 took off these lines and assked a few above to fix problem wint returned Max Wind when storm + # center remained outside grid. + # ignore positions outside the domain + #if xPos < 0 or yPos < 0 or \ + # xPos >= ws.shape[1] or yPos >= ws.shape[0]: + # continue + + # calc change in wind speed as a function of radius + distGrid = self.makeDistGrid((xPos, yPos)) + + coreMask = self.makeCoreMask(ws, wd, distGrid) + + # first time through just store the position + if lastXPos == None or lastYPos == None: + lastXPos = xPos + lastYPos = yPos + lastRadius = self.calcRadius((xPos, yPos), distGrid, coreMask) + lastWindMax = self.getMaxWindValue(distGrid, lastRadius, ws, tr) + continue + + # get the maxWindRadius in grid cell coordinates + radius = self.calcRadius((xPos, yPos), distGrid, coreMask) + if radius is None: + continue + + # Get the max wind value, but restrict it to near the radius + maxWindValue = self.getMaxWindValue(distGrid, radius, ws, tr) + #print "unrestricted max Wind Value: ", maxWindValue + + dr = radius - lastRadius + + # calc distance from last point + dx = xPos - lastXPos + dy = yPos - lastYPos + dWind = maxWindValue - lastWindMax + # one iteration per grid point + steps = abs(maximum(dx, dy)) + + for i in range(steps): + x = lastXPos + (float(dx) / steps) * i + y = lastYPos + (float(dy) / steps) * i + r = lastRadius + (float(dr) / steps) * i + + windValue = lastWindMax + (float(dWind) / steps) * i + distGrid = self.makeDistGrid((x, y)) + + # change grids at the intersection of a circle defined by + # the center and radius and points that whose value is + # less than the current maxWind value + distMask = less_equal(distGrid, r) + lessMask = less(adjustedWindMax, windValue) + mask = distMask & lessMask # union of dist and less masks + + adjustedWindMax = where(mask, windValue, adjustedWindMax) + + modifiedMask = mask | modifiedMask + + lastXPos = xPos + lastYPos = yPos + lastRadius = radius + lastWindMax = maxWindValue + + + # calculate the maximum wind value over the modified area + stormMaxWindValue = max((adjustedWindMax * modifiedMask).flat) + + #print "stormMaxWindValue: ", stormMaxWindValue + # smooth out moderate values to remove "quadrant effect" + adjustedWindMax = self.smoothGrid(adjustedWindMax, 5) + + return adjustedWindMax, stormMaxWindValue + + # fetch a grid that represents the maxWind everywhere for the next 5 days + def getWindMax(self, timeRange): + + cTime = int(self._gmtime().unixTime()/ 3600) * 3600 + startTime = AbsTime.AbsTime(cTime) + endTime = startTime + (5 * 24 * 3600) # 5 days from the startTime + tr = TimeRange.TimeRange(startTime, endTime) + + try: + windMax, dir = self.getGrids("Fcst", "Wind", "SFC", tr, mode = "Max") + except: + windMax = None + self.statusBarMsg("No Wind grids found. Please define Wind grids first.", + "S") + return windMax + + def getMaxWindGrid(self): + try: + grid = self.getObject("TCMMaxWindGrid", "WindGrid") + maxWindValue = max(grid.flat) + return (grid, maxWindValue) + except: + self.statusBarMsg("No TCMMaxWindGrid found.", + "S") + return (None, None) + + + def execute(self, varDict): + + # Get confidence value from the dialog + + confidenceStr = varDict["Forecast Confidence?"] + tcmwindmax = varDict["WindMax Source?"] + + # define a couple of boolean flags that will come in handy later + # allProb = confidenceStr == "Low (Probability-only; 10% Default-05% NE Coast)" + # allWind = confidenceStr == "Highest (Deterministic-only; MaxWind Composite)" + + #allProb = confidenceStr == "Low (Probability-only; for ill-behaved systems)" + allWind = confidenceStr == "Highest (Deterministic-only; assumes a perfect forecast)" + typical = confidenceStr == "Typical (Combined; For ill defined or for most systems anytime within 48 hours of landfall or closest approach)" + high = confidenceStr == "High (Combined; for well-behaved systems within 12 hours of landfall or closest approach)" + higher = confidenceStr == "Higher (Combined; for very well-behaved systems within 6 hours of landfall or closest approach)" + + #print "allProb and allWind are: ", allProb, allWind + + # extract the percent value from this string + # pctPos = confidenceStr.find("% Default") + # pctStr = confidenceStr[pctPos - 2:pctPos] + pctStr="10" + if high: + pctStr="20" + elif higher: + pctStr="30" + + # Percent thresholds for each confidence category + threatDict = {"10" : [10.0, 10.0, 10.0, 20.0, 30.0], + "20" : [20.0, 20.0, 20.0, 30.0, 40.0], + "30" : [30.0, 30.0, 30.0, 40.0, 50.0], + } + # wind thresholds for each threat category + windDict = {'None' : 0.0, + # 'Very Low' : 34.0, + #'Elevated' : 50.0, + 'Elevated': 34.0, + 'Mod' : 50.0, + 'High1' : 64.0, + 'High2' : 89.0, + 'Extreme' : 96.0, + } + + # Make sure the string is valid. If not then assign any value since the user + # has indicted Highest confidence in the wind field and is not using the + # probabilistic grids at all. + + #if not threatDict.has_key(pctStr): + # pctStr = "10" + + #print "pctStr is: ", pctStr + + # Extract the proper list and assign thresholds + thresholdList = threatDict[pctStr] +# + t34TS1 = thresholdList[0] + t50TS2 = thresholdList[1] + t64Cat1 = thresholdList[2] + t64Cat2 = thresholdList[3] + t64Cat3 = thresholdList[4] + + timeRange = self.make6hrTimeRange() + + # Remove previous version of grids. + self.removeTempGrids() + + # set up the indices for the discrete keys + keys = self.getDiscreteKeys("WindThreat") +## print "WindThreat keys are:", keys + noneIndex = self.getIndex("None", keys) + + lowIndex = self.getIndex("Elevated", keys) + modIndex = self.getIndex("Mod", keys) + highIndex = self.getIndex("High", keys) + extremeIndex = self.getIndex("Extreme", keys) + + # initialize the threat grid + threatGrid = self._empty # a grid of zeros + + + # Attempt to get the grid from the server. + windMax, maxWindValue = self.getMaxWindGrid() + + #print "MAXWIND ACROSS DOMAIN IS: ", maxWindValue + + if windMax is None or tcmwindmax == "WFO Mesoscale (default)": # use the old-fashioned method + # Get and adjust a grid of maximum wind over the entire storm + windMax = self.getWindMax(timeRange) + + windMax, maxWindValue = self.adjustWindMax(windMax) + + if windMax is not None: + self.createGrid("Fcst", "WindMax", "SCALAR", windMax, timeRange, + minAllowedValue=0, maxAllowedValue=200) + + # assign values to the grid based on the probability grids + + if allWind: + + threatGrid = where(windMax < windDict["Elevated"], 0, threatGrid) + threatGrid = where(windMax >= windDict["Elevated"], lowIndex, threatGrid) + threatGrid = where(windMax >= windDict["Mod"], modIndex, threatGrid) + threatGrid = where(windMax >= windDict["High1"], highIndex, threatGrid) + threatGrid = where(windMax >= windDict["Extreme"], extremeIndex, threatGrid) + + else: + + # high and extreme threats require maxWind to meet particular windMax criteria + # Fetch the probabilistic grids + prob34Grid, prob50Grid, prob64Grid = self.getProbGrids() + + #self.createGrid("Fcst", "Prob34", "SCALAR", prob34Grid, timeRange) + #self.createGrid("Fcst", "Prob50", "SCALAR", prob50Grid, timeRange) + #self.createGrid("Fcst", "Prob64", "SCALAR", prob64Grid, timeRange) + #print "MAXWIND IS: ", maxWindValue + threatGrid = zeros(prob64Grid.shape) + threatGrid = where(prob34Grid < t34TS1, 0, threatGrid) + threatGrid = where(prob34Grid >= t34TS1, lowIndex, threatGrid) + threatGrid = where(prob50Grid >= t50TS2, modIndex, threatGrid) + threatGrid = where(prob64Grid >= t64Cat1, highIndex, threatGrid) + if maxWindValue >= windDict['High2']: + threatGrid = where(prob64Grid >= t64Cat3, extremeIndex, threatGrid) + if maxWindValue >= windDict['Extreme']: + threatGrid = where(prob64Grid >= t64Cat2, extremeIndex, threatGrid) + + # Upgrade windThreat based on windMax grid +## + # upgrade None to Elevated + windMask = (windMax >= windDict['Elevated']) & (windMax < windDict['Mod']) + threatMask = threatGrid < lowIndex + threatGrid = where(windMask & threatMask, lowIndex, threatGrid) + + # upgrade Elevated to Med + windMask = (windMax >= windDict['Mod']) & (windMax < windDict['High1']) + threatMask = threatGrid < modIndex + threatGrid = where(windMask & threatMask, modIndex, threatGrid) + + # upgrade Med to High + windMask = (windMax >= windDict['High1']) & (windMax < windDict['Extreme']) + threatMask = threatGrid < highIndex + threatGrid = where(windMask & threatMask, highIndex, threatGrid) + + # upgrade High to Extreme + windMask = windMax >= windDict['Extreme'] + threatMask = threatGrid < extremeIndex + threatGrid = where(windMask & threatMask, extremeIndex, threatGrid) + + # Remove previous version of grid. + dbTimes = self.makeDBTimeRange() + self.deleteCmd(['WindThreat'], dbTimes) + + # create the threat grid + self.createGrid("Fcst", "WindThreat", "DISCRETE", (threatGrid, keys), + timeRange, discreteKeys=keys, discreteAuxDataLength=5, + discreteOverlap=0) diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/weGroups/HTI.xml b/cave/com.raytheon.viz.gfe/localization/gfe/weGroups/HTI.xml new file mode 100644 index 0000000000..350a3e2534 --- /dev/null +++ b/cave/com.raytheon.viz.gfe/localization/gfe/weGroups/HTI.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/editAreas/StormSurgeWW_EditArea.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/editAreas/StormSurgeWW_EditArea.xml new file mode 100644 index 0000000000..7bde52e0ed --- /dev/null +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/editAreas/StormSurgeWW_EditArea.xml @@ -0,0 +1,4 @@ + + + MULTIPOLYGON (((-98.07666023229241 27.624286160198803, -98.07604962729766 27.60044605224753, -98.07543926457896 27.576605486451413, -98.07482914399215 27.552764467020797, -98.07421926539322 27.528922998165438, -98.07360962863825 27.505081084094765, -98.07300023358344 27.48123872901769, -98.07239108008511 27.457395937142678, -98.07178216799969 27.433552712677624, -98.07117349718371 27.409709059830146, -98.07056506749385 27.385864982807206, -98.06995687878683 27.362020485815325, -98.06934893091956 27.338175573060628, -98.06874122374906 27.314330248748643, -98.06813375713241 27.290484517084494, -98.06752653092683 27.266638382272745, -98.06691954498969 27.242791848517516, -98.01850772849134 27.243758004845798, -98.01791055387976 27.219910901052042, -98.01731361546973 27.1960634066206, -98.01671691312117 27.172215525754208, -98.0161204466941 27.148367262654986, -98.01552421604865 27.124518621524576, -98.01492822104507 27.10066960656416, -98.01433246154372 27.076820221974284, -98.01373693740504 27.05297047195504, -98.01314164848964 27.02912036070605, -98.0125465946582 27.005269892426334, -98.0119517757715 26.981419071314306, -98.01135719169046 26.957567901568044, -98.0107628422761 26.933716387384937, -98.01016872738948 26.90986453296186, -98.00957484689195 26.886012342495093, -98.00898120064477 26.862159820180576, -98.00838778850942 26.838306970213452, -98.00779461034745 26.814453796788424, -98.00720166602056 26.790600304099648, -98.00660895539048 26.766746496340645, -98.00601647831915 26.742892377704454, -98.00542423466854 26.719037952383488, -98.00483222430078 26.695183224569657, -98.00424044707808 26.671328198454198, -98.00364890286272 26.647472878227862, -98.0030575915172 26.623617268080736, -97.90672695189201 26.625494507652498, -97.90615482180307 26.601638264487285, -97.9055829168597 26.57778173958703, -97.54445978234034 26.58427397138949, -97.54395911846058 26.560415966224767, -97.54345865154649 26.536557687035664, -97.54295838148188 26.512699138010007, -97.54245830815061 26.488840323335186, -97.54195843143673 26.464981247197883, -97.54145875122424 26.441121913784112, -97.49336292664695 26.4419216539772, -97.49287289099631 26.41806191867218, -97.49238304790543 26.394201934379318, -97.49189339726087 26.370341705283078, -97.49140393894928 26.34648123556706, -97.4909146728573 26.32262052941439, -97.49042559887178 26.29875959100751, -97.44238578228267 26.29954317634493, -97.44190632660717 26.275681863430666, -97.4414270591147 26.251820326545406, -97.4174163447778 26.252206251981672, -97.41694197495538 26.22834442308053, -97.41646779124797 26.204482378529832, -97.4159937935461 26.180620122509023, -97.41551998174035 26.156757659196778, -97.36753575526792 26.157517498684847, -97.3670715339509 26.13365468964244, -97.36660749462675 26.109791681587136, -97.36614363718844 26.085928478695756, -97.36567996152912 26.0620650851446, -97.317732739927 26.062809120794462, -97.31727863626371 26.03894540070415, -97.36521646754191 26.038201505109203, -97.36475315512011 26.014337742764383, -97.34078900594959 26.014711523909657, -97.34033056643027 25.990847512967953, -97.33987230642717 25.96698332802683, -97.33941422583486 25.943118973259253, -97.12385711051874 25.946309885996254, -97.12427299740006 25.970174843246202, -97.12468904717518 25.994039630347622, -97.12510525993984 26.017904243127187, -97.12552163578985 26.041768677411206, -97.12593817482106 26.065632929025075, -97.1263548771294 26.08949699379357, -97.1267717428109 26.113360867540926, -97.12718877196163 26.137224546090547, -97.12760596467776 26.16108802526531, -97.12802332105554 26.18495130088743, -97.12844084119129 26.208814368778334, -97.12885852518136 26.23267722475893, -97.1292763731223 26.256539864649515, -97.15328880813294 26.256199708017352, -97.15371153258002 26.280062064018242, -97.15413442302062 26.303924195602267, -97.17815614952845 26.303580096095832, -97.17858392213965 26.327441934818353, -97.1790118627917 26.351303540795133, -97.17943997158362 26.375164909843388, -97.1798682486145 26.39902603777955, -97.18029669398352 26.422886920419543, -97.18072530778998 26.44674755357854, -97.20477522130865 26.446399249108616, -97.20520873077652 26.470259563838543, -97.20564241073873 26.494119620751892, -97.22970164142706 26.493767365489564, -97.23014022274425 26.517627094998318, -97.23057897661735 26.541486558352865, -97.23101790314817 26.565345751365477, -97.23145700243862 26.589204669847877, -97.25553502654942 26.588848329087845, -97.25597903682619 26.6127069028858, -97.25642322193131 26.636565193811734, -97.28051058168626 26.63620489566435, -97.28095968349382 26.660062832928478, -97.28140896220313 26.683920478976926, -97.28185841791864 26.707777829618433, -97.30595986434275 26.707413504200044, -97.30641424445827 26.731270488048022, -97.30686880365931 26.755127168142575, -97.3073235420518 26.778983540290707, -97.30777845974173 26.802839600298977, -97.33189876043475 26.80247117595206, -97.33235861221738 26.826326851877056, -97.33281864538397 26.850182207311626, -97.33327886004179 26.87403723806064, -97.33373925629832 26.89789193992842, -97.33419983426104 26.92174630871872, -97.33466059403752 26.94560034023471, -97.33512153573542 26.969454030279042, -97.3355826594625 26.99330737465387, -97.33604396532661 27.017160369160766, -97.33650545343565 27.04101300960073, -97.33696712389767 27.06486529177429, -97.33742897682072 27.088717211481377, -97.337891012313 27.112568764521523, -97.33835323048277 27.13641994669353, -97.33881563143837 27.160270753795874, -97.33927821528826 27.184121181626363, -97.33974098214092 27.207971225982433, -97.31553959606381 27.208340796868903, -97.31599775932345 27.23219052064514, -97.31645610390987 27.256039852501523, -97.31691462993074 27.279888788233837, -97.3173733374938 27.303737323637396, -97.29315264529308 27.30410331758879, -97.29360674013384 27.327951514705013, -97.29406101483467 27.35179930304327, -97.29451546950243 27.375646678397313, -97.27028024183218 27.376009023758535, -97.27073007641737 27.399856047357968, -97.27118008928211 27.423702649521257, -97.27163028053245 27.447548826040755, -97.24738050131845 27.44790751826504, -97.24782606511016 27.47175332956058, -97.24827180559492 27.49559870675774, -97.22401226858553 27.495953677449595, -97.22445337602176 27.519798680198548, -97.20018888664323 27.520149863274725, -97.20062535723709 27.543994486598237, -97.17635591496685 27.544341880605018, -97.17678774492187 27.568186119526512, -97.17721974626255 27.59202990739922, -97.17765191909089 27.61587324001201, -97.17808426350908 27.639716113153384, -97.12950642746183 27.6403998349061, -97.1299293003714 27.664242366797584, -97.13035234124692 27.688084430720856, -97.08175466745702 27.688752971522064, -97.08216822521268 27.71259468279332, -97.08258194730142 27.73643591759942, -97.08299583382114 27.760276671726405, -97.0343686589813 27.760930136649367, -97.0347730470182 27.784770522444788, -97.035177595842 27.808610419062763, -96.98653056702612 27.80924867705226, -96.98692560572533 27.83308819394928, -96.98732080155823 27.85692721317025, -96.98771615461857 27.88076573049903, -96.98811166500022 27.904603741718994, -96.93942541625943 27.905227002783754, -96.9398113973485 27.929064614333583, -96.94019753209227 27.952901711273995, -96.89149140521775 27.95350973667501, -96.89186799898965 27.977346422569596, -96.89224474274046 28.001182585353845, -96.86788179853815 28.001480907341378, -96.86825384102777 28.02531659559575, -96.84388592477578 28.02561110402209, -96.84425326215758 28.0494463127798, -96.77113424439241 28.050306791789698, -96.77148716193012 28.074141616769726, -96.77184022013307 28.097975901607043, -96.72307420700544 28.098530414443623, -96.72341768705586 28.122364252749918, -96.72376130406579 28.1461975424131, -96.67497540281691 28.146736771159706, -96.67530942994892 28.170569602943974, -96.65091145229714 28.170833458843422, -96.65124074717674 28.194665779925543, -96.5780315820349 28.1954342587217, -96.57834640560462 28.219266153562877, -96.55393827623939 28.219514614034875, -96.55424835581542 28.243345986839522, -96.4810087603538 28.2440682623263, -96.48130434861969 28.267899192007576, -96.45688608410713 28.26813224571031, -96.45717691662858 28.291962642032132, -96.38390694066817 28.292638680246725, -96.38418326188942 28.316468616587695, -96.35975487887744 28.31668625222111, -96.36002643259417 28.340515643891408, -96.36029809479172 28.364344448519752, -96.3358598656935 28.364558284015825, -96.33612675461887 28.38838653477592, -96.28724027377243 28.38880264937582, -96.28749750166558 28.412630377338722, -96.26304925099075 28.412832654350897, -96.26330169583063 28.43665981784911, -96.21439517772396 28.437052807103065, -96.21463794769217 28.4608794351353, -96.16572133752074 28.461256976255676, -96.16595442467094 28.485083061805234, -96.1170277308879 28.48544514920963, -96.11725112727393 28.509270685264447, -96.04384586869735 28.50978480651614, -96.04405467226974 28.53360981522184, -95.97063411909531 28.534089094172018, -95.97082831779184 28.55791356511406, -95.89739250649487 28.558357989187996, -95.89757208826767 28.582181911962813, -95.8486047889076 28.582458832495053, -95.84877464203844 28.606282173679844, -95.79979732060124 28.606543608551554, -95.79995743715287 28.630366361162643, -95.75097010223897 28.630612304864364, -95.7511204742745 28.654434461922822, -95.70212313450497 28.654664908955603, -95.70226375408784 28.678486463487086, -95.6532564181046 28.678701408362333, -95.65338727729856 28.702522353397278, -95.60436995376413 28.702721790636804, -95.6044910446334 28.726542119210354, -95.55546374223113 28.72672604334633, -95.55557505684028 28.750545748498364, -95.53105643792674 28.750631895082428, -95.53116288276051 28.774450955654604, -95.4575920806833 28.774686110415445, -95.45768381896761 28.79850454786299, -95.40862663226945 28.798641899985256, -95.40870857048986 28.822459693159367, -95.35964143986497 28.822581510410572, -95.35971357008788 28.846398652370105, -95.31063650432351 28.84650492933434, -95.31069881861572 28.870321413142918, -95.28615533194626 28.870368724278727, -95.28621274681524 28.894184535537892, -95.26166431694885 28.894227963140615, -95.26171682844547 28.91804309693919, -95.23716345499376 28.91808263966258, -95.23721105916616 28.941897091090244, -95.21265274174246 28.94193274758972, -95.21269543463625 28.965746511737233, -95.18813217285555 28.965778280669756, -95.18816995051367 28.98959135262885, -95.16360174399266 28.98961923265294, -95.16363460245549 29.013431607516385, -95.1390614508126 29.013455597292264, -95.13908938611783 29.03726727015373, -95.11451128897323 29.03728736834318, -95.11453429715597 29.06109833429741, -95.0653682051919 29.061126848469016, -95.0653813419434 29.084937104714907, -95.04079334836145 29.084945518695275, -95.04080154806412 29.10875505755983, -94.99161566980325 29.108760195311252, -94.9916139841647 29.13256901199891, -94.94241821947404 29.13255855719006, -94.94240664054365 29.15636664480695, -94.91780381677118 29.156355567976977, -94.91778728488947 29.18016292218463, -94.89317951824037 29.180147943782313, -94.89315802942605 29.203954559684195, -94.86854531953844 29.20393567838476, -94.86851886980753 29.227741551085355, -94.81928357312866 29.227692079038054, -94.81924720424381 29.25149719910914, -94.77000204675419 29.251432111983362, -94.76995575075988 29.275236472550404, -94.74532823774162 29.275198069973683, -94.74527696488936 29.299001671342634, -94.72064451047227 29.29895935926817, -94.72058825676727 29.32276219654944, -94.69595086060214 29.32271597366214, -94.69588962204696 29.346518041967272, -94.67124728378626 29.346467906953492, -94.67118105638085 29.370269201395065, -94.67111480228704 29.394069726224206, -94.64646255542056 29.394015668634477, -94.64639130645605 29.417815410482323, -94.59707694820212 29.417695558231312, -94.59699573021952 29.441494501768588, -94.54767153835841 29.44135900160682, -94.54758034338866 29.465157139986502, -94.47357936797941 29.464924548721736, -94.47347321399583 29.48872186137871, -94.39945763022372 29.48845405705667, -94.39933650535552 29.512250533881534, -94.34998302707743 29.512052423378513, -94.34985189740087 29.53584807192414, -94.30048863557153 29.53563429015514, -94.30034749312644 29.559429103597946, -94.25097445703263 29.559199645398035, -94.25082329385965 29.582993616919236, -94.17674917093018 29.58262004112373, -94.17658299528789 29.60641314235545, -94.0777983355006 29.6058601983384, -94.07761214991967 29.62965239505656, -94.02821020948423 29.62935240465754, -94.02801397348233 29.653143735141498, -93.80566373810407 29.651599878631338, -93.80542251822953 29.675390130475794, -93.68187236405674 29.674395327703653, -93.68160609128361 29.698184588891102, -93.60746206394016 29.697540642509832, -93.60718070488419 29.72132896768912, -93.43414634227696 29.719689174340044, -93.43382990712819 29.743476393111052, -93.1618743554701 29.740511577599307, -93.16224572511761 29.716724853934053, -93.06337632391445 29.715529499143393, -93.0637675095036 29.69174214323735, -92.9896317783966 29.69080468834097, -92.99003777360633 29.667016661594094, -92.91591821174926 29.666044151345183, -92.91633900386515 29.642255464103208, -92.86693662554723 29.641587673801734, -92.86736721724203 29.617798279487182, -92.79327966961264 29.616767429330842, -92.7937250350162 29.59297739324048, -92.7196537521952 29.591911523494762, -92.72011387855817 29.568120856006356, -92.621374213257 29.5666452016171, -92.62185406557168 29.542853976083382, -92.42442222899857 29.539715545159858, -92.42494169024229 29.515924045793103, -92.17821709944499 29.51164996411027, -92.17764789445668 29.53544074460849, -92.12829521971003 29.534538885708173, -92.12771583363754 29.558328713898803, -92.05367332657234 29.55694638289533, -92.05426763892807 29.53315678699452, -92.00491689167991 29.532215848055696, -92.00552091061829 29.508425609922863, -91.98085080682299 29.50794935874469, -91.98145955317105 29.48415840463378, -91.90746536027048 29.482706452684795, -91.90808876733172 29.45891495132895, -91.90871192314876 29.435122662513812, -91.90933482787341 29.41132959047536, -91.90995748165741 29.387535739449223, -91.81138087611602 29.38554645704673, -91.81073837325035 29.409339972040446, -91.8100956114532 29.433132708265273, -91.80945259056804 29.456924661485633, -91.76013576249267 29.45590608299586, -91.75948254659075 29.479697077332716, -91.73481948563833 29.479181843032524, -91.73416103664 29.502971959251514, -91.70949322227904 29.502452731439718, -91.7088295361517 29.526241964759883, -91.6841569682733 29.52571874221944, -91.6834880409819 29.54950708786102, -91.68281884379553 29.57329462960163, -91.65813654698607 29.572767322560857, -91.65746210242936 29.596553967665898, -91.60808822095478 29.595487448855433, -91.6087726197321 29.57170098271819, -91.58409099255378 29.57116195000459, -91.58478009015857 29.547374766434896, -91.58546890985237 29.523586779199363, -91.58615745180322 29.499797992534155, -91.56149096938523 29.499255325092207, -91.5621842025181 29.47546583459974, -91.46354043974408 29.47325647285037, -91.46282733296911 29.497045591286888, -91.38883205920602 29.495347274982002, -91.38956006972958 29.471558442507927, -91.3649004221368 29.470984621399342, -91.36563310488474 29.44719509515963, -91.36636549240701 29.42340478275026, -91.3417160143706 29.422827251010986, -91.34245306833499 29.399036254156048, -91.41638733680277 29.40075684654553, -91.41566516774097 29.424548133885953, -91.44031536178595 29.42511395318727, -91.43959786558943 29.4489045539128, -91.51356474632544 29.450578868563248, -91.51426734991536 29.426787985461324, -91.51496967044041 29.402996320052797, -91.51567170807161 29.379203876572735, -91.49103073535085 29.378649957246715, -91.49173744861348 29.35485683357821, -91.44246611673427 29.353737475215198, -91.4431824577515 29.329943771408512, -91.3939219775675 29.328808996063398, -91.39464793797464 29.305014719247087, -91.34539831733909 29.3038645327183, -91.34613388877206 29.280069690025694, -91.34686916423541 29.256274090867617, -91.32225461566347 29.255693343464365, -91.32299454273684 29.23189709067009, -91.2491671999435 29.230131752207768, -91.24992166477864 29.206335051440156, -91.15150845486045 29.203927096487952, -91.1522823867687 29.18013006171993, -91.10308718093326 29.178902906625027, -91.10387068205674 29.15510534171951, -90.9809118848005 29.151969792520863, -90.98171975924568 29.12817202713758, -90.95713372413111 29.127533337921935, -90.95794620914691 29.10373495136653, -90.93336537505702 29.103092476437734, -90.93418246672059 29.079293473747363, -90.88503146810802 29.07799706153777, -90.88585809325043 29.054197558790513, -90.7875790763418 29.051558460233135, -90.78673272983379 29.07535751215165, -90.66386555036881 29.071970470695508, -90.66299420598041 29.095768223400103, -90.61383945596202 29.094385917533952, -90.61295789553846 29.118182709552112, -90.58837601962139 29.117485596954594, -90.58748917022236 29.141281541175776, -90.58660196431873 29.165076752261168, -90.5128284722388 29.162961327428125, -90.51192609479811 29.186755441165765, -90.48733058142811 29.18604238696981, -90.48642290120904 29.209835638094788, -90.46182274527344 29.209118565791787, -90.46090975827143 29.23291094956444, -90.43630495976188 29.23218985796373, -90.43722288828565 29.208397596687565, -90.41262333186008 29.20767273084248, -90.4135458306968 29.18387984744372, -90.38895151562399 29.18315120882342, -90.38802407761099 29.20694396831714, -90.31422814406348 29.204734301270978, -90.31517039850281 29.180941917481505, -90.3161122742162 29.157148792960967, -90.31705377143182 29.133354931940204, -90.3179948903777 29.109560338649597, -90.29341660285095 29.10881649676256, -90.29436227427952 29.085021302322133, -90.29530756591842 29.06122538415323, -90.1970369594479 29.058212108916955, -90.19607195548403 29.082007512531217, -90.09778668863396 29.07893143810453, -90.09680157979903 29.10272559342523, -90.07222613570137 29.101946710435925, -90.07123570025303 29.125740005657537, -90.04665564954446 29.124957096062705, -90.04565988348675 29.148749526459614, -90.02107522619218 29.14796258907784, -90.02007412552686 29.17175414992558, -89.9954848616731 29.170963183576966, -89.99447842239964 29.19475387015234, -89.99347157842635 29.21854381285747, -89.94427429324801 29.216949653423953, -89.94325716474731 29.240738577289456, -89.89405133288822 29.23912855993647, -89.89302391249339 29.26291645842443, -89.86841655936912 29.26210546711668, -89.86738378256148 29.285892471875798, -89.69510727707235 29.280105432151526, -89.69617464945912 29.256319408603428, -89.62236189930648 29.253781216249298, -89.62344366006758 29.22999486796838, -89.5250513828795 29.226556643619013, -89.52615245462106 29.202770128377445, -89.50156021882407 29.201900980754033, -89.50266578197125 29.178113866900038, -89.4780788419405 29.177240972833278, -89.47918889258969 29.1534532654519, -89.45460724752161 29.152576626441746, -89.45572178177207 29.128788330619052, -89.43114543086162 29.127907948167028, -89.43226444481557 29.104119068989842, -89.4333830093999 29.080329460734823, -89.43450112488509 29.05653912762999, -89.40993991571166 29.055655304957913, -89.41106250360593 29.031864402234845, -89.41218464097302 29.008072783213535, -89.4367360096389 29.008956303781698, -89.43785277944737 28.98516382149309, -89.43896910123645 28.96137063126423, -89.44008497527552 28.93757673732185, -89.44120040183375 28.913782143892544, -89.36760636715492 28.911121738662388, -89.3664762070337 28.934915875627368, -89.34194068730069 28.93402114746446, -89.34080516110004 28.957814431833643, -89.3162650997205 28.956915662595765, -89.3151242034624 28.98070808966798, -89.29057960051911 28.979805278189144, -89.28943333022328 29.003596843264457, -89.2648841858011 29.00268998838019, -89.26373253748497 29.02648068675987, -89.21462554399781 29.024654998475, -89.2157870274954 29.000864612325636, -89.19123901681395 28.999946091308935, -89.19240494960748 28.976155151091756, -89.16786223509534 28.975232899406038, -89.1690326133073 28.95144141021698, -89.11995815882896 28.949585561479598, -89.11877795512835 28.973376732683388, -89.09423639287246 28.972442817802737, -89.09305080124787 28.99623312245323, -89.06850471214841 28.99529515943263, -89.06731372861847 29.01908459283806, -89.06612226702342 29.042873311337285, -89.04156673335922 29.04193113798987, -89.04036987362073 29.065718976429615, -89.03917253327349 29.089506091612726, -89.01460754971878 29.088559705754626, -89.01340480498156 29.112345932065473, -88.98883529143401 29.11139549347099, -88.98762713831398 29.135180826222047, -88.96305309488281 29.134226333740166, -88.96183952938483 29.15801076824511, -88.96062547620232 29.181794462895876, -88.95941093504146 29.205577413464944, -88.95819590560815 29.22935961572429, -88.98278966870842 29.230314757641032, -88.98157908556185 29.25409636946033, -89.07997782661484 29.257878632085745, -89.07878650628663 29.281660128362006, -89.1033921088236 29.282596113935988, -89.10220524922666 29.306377007267066, -89.12681618070927 29.307309254422904, -89.12563378574953 29.331089539710984, -89.1502500470134 29.33201804694137, -89.14907212059971 29.355797719089523, -89.14789372000232 29.37957661672913, -89.146714844935 29.40335473563022, -89.1220837444446 29.402425757594358, -89.12089944424305 29.426202936795583, -89.09626378188261 29.425269901651195, -89.09507405252181 29.449046136465103, -89.09388384385588 29.472821580054152, -89.06923866584542 29.47188432880963, -89.06804302171481 29.495658819197562, -89.04339328028784 29.494717508002847, -89.04219219666058 29.518491040505058, -89.01753789192296 29.51754566822124, -89.01633136476472 29.54131823815438, -88.99167249682449 29.54036880364419, -88.99046052209869 29.564140406326192, -88.9892480586458 29.58791119704445, -88.93991167072109 29.58599997683526, -88.93868878874139 29.609769630973954, -88.93746541345367 29.633538464897057, -88.88811077056505 29.631610981067784, -88.88687696515781 29.65537866795028, -88.88564266185192 29.679145526366877, -88.83626976494185 29.677201769879176, -88.83502501991532 29.700967470802844, -88.83377977238969 29.72473233501204, -88.83253402206086 29.748496358275023, -88.80783326613201 29.747518130024833, -88.8065820353067 29.771281145050676, -88.78187671361435 29.770298844436542, -88.78061999823286 29.794060846554455, -88.77936277512774 29.817821995246767, -88.75464790690528 29.816835456995232, -88.75338519287033 29.840595583987028, -88.75212196849105 29.864354849197966, -88.75085823345822 29.888113248395538, -88.74959398746232 29.911870777347094, -88.74832923019363 29.93562743181992, -88.74706396134215 29.95938320758111, -88.74579818059767 29.983138100397653, -88.74453188764967 30.006892106036403, -88.74326508218742 30.03064522026409, -88.76802486879299 30.03163323095731, -88.76676255149614 30.055385612596492, -88.7654997230791 30.079137094247837, -88.91412715620369 30.08498483969122, -88.91535996130717 30.06123239401747, -88.91659226739247 30.03747904770488, -88.91782407476227 30.013724804987383, -88.91905538371908 29.9899696700989, -88.92028619456515 29.966213647273136, -88.96978193466441 29.968129968252445, -88.97100225809962 29.944372744516176, -88.97222208805125 29.920614641096986, -88.9734414248184 29.896855662228358, -88.99817491944953 29.897807476926264, -88.99938877419625 29.874047468899228, -89.00060213836429 29.850286593783874, -89.00181501225082 29.826524855813396, -89.00302739615272 29.802762259220838, -89.02774134510743 29.803709530919296, -89.02894825797144 29.77994592222841, -89.03015468344768 29.756181463276334, -89.03136062183111 29.73241615829574, -89.05606002920973 29.733359047843667, -89.05726050521292 29.70959274369994, -89.0584604967129 29.68582560188836, -89.08315034928349 29.6867642691242, -89.08434488475206 29.662996136958732, -89.10903015799161 29.663930740382146, -89.11021924148051 29.640161622545122, -89.13489993528599 29.641092163290114, -89.13608357084468 29.61732206446517, -89.16075968511521 29.618248543667384, -89.16193787679077 29.594477468539505, -89.21128133134424 29.59631840090478, -89.21244911817158 29.572546200121224, -89.26178417662858 29.574371205168653, -89.26294156594471 29.55059788519156, -89.28760470253849 29.551504378394775, -89.2887566636258 29.527730097295105, -89.31341521659732 29.52863253468176, -89.31456175349412 29.504857297151304, -89.33921572275719 29.505755679866187, -89.34035683949945 29.481979490598, -89.36500622496997 29.482873819787624, -89.36614192559139 29.459096683476098, -89.36727716878056 29.435318754834668, -89.36841195481364 29.411540038094454, -89.46695374829434 29.41507654122346, -89.46583877427535 29.438855854458026, -89.46472335105476 29.46263437920502, -89.4636074783612 29.486412111232987, -89.46249115592308 29.510189046310334, -89.4613743834686 29.53396518020519, -89.46025716072573 29.557740508685562, -89.45913948742223 29.581515027519284, -89.45802136328567 29.605288732473994, -89.4086703656964 29.603525912184924, -89.4075418521136 29.62729850365563, -89.40641288315533 29.651070272976625, -89.35704348927419 29.649291233271356, -89.35590411922678 29.67306187859854, -89.35476428925178 29.69683169350692, -89.3053764997183 29.695036425242982, -89.3042262570026 29.71880510565644, -89.23013248518862 29.716082436999194, -89.22896684489419 29.739849824339952, -89.2042647079216 29.73893429791387, -89.2030936176101 29.762700689963648, -89.20192205422894 29.786466235263443, -89.2007500174916 29.8102309295801, -89.1995775071113 29.833994768680267, -89.19840452280101 29.85775774833054, -89.1489515766731 29.855913433292407, -89.14776814031107 29.879675242967775, -89.14658422542476 29.903436184930577, -89.14539983172402 29.927196254946953, -89.14421495891851 29.950955448783088, -89.1194691029537 29.950026806787132, -89.11827875414374 29.973784966495426, -89.11708792363322 29.99754224165851, -89.11589661112984 30.021298628042285, -89.11470481634115 30.045054121412406, -89.11351253897433 30.06880871753449, -89.11231977873645 30.092562412174026, -89.11112653533426 30.11631520109634, -89.10993280847434 30.14006708006674, -89.10873859786297 30.163818044850366, -89.10754390320625 30.187568091212288, -89.00836421291373 30.183808180031203, -89.0071489690935 30.20755668654813, -89.00593323253487 30.231304266593245, -88.95632572118217 30.2294001593695, -88.95755149274522 30.205652891591722, -88.95877676751884 30.181904697554724, -88.90919093954464 30.179985531314276, -88.90795563480069 30.203733410280392, -88.906719829217 30.22748036320165, -88.85711556984201 30.225544878715446, -88.8583614084545 30.201798243240233, -88.21379094010332 30.175213964690844, -88.21241476599499 30.19895623758321, -87.93974750504701 30.186909440910778, -87.93831566410898 30.21064881042077, -87.74000791937816 30.201588183882468, -87.73853542437395 30.225325137838134, -87.589794930815 30.218363939412033, -87.58829178392696 30.242098819530955, -87.48912132154898 30.23737887072757, -87.48759752658472 30.261112041330158, -87.38841507572484 30.256328604926015, -87.38687062105576 30.280060052474887, -87.26287899294688 30.27399158093399, -87.26130885652717 30.297721092162444, -87.06290921308724 30.287806111018636, -87.06129835141702 30.31153305444767, -87.01169370578486 30.30901470285604, -87.01007216791022 30.332740284316287, -86.96045964185794 30.330205840024433, -86.95882742060996 30.353930053262882, -86.7851655621584 30.34493455091493, -86.78349758510728 30.368656338748792, -86.26257100220757 30.340512887078567, -86.26434416055083 30.31679568981363, -86.16516887973685 30.311239986202896, -86.16696132853507 30.287522741861704, -86.09260107857911 30.283315519136043, -86.09440779818931 30.259598012996168, -86.02006790864115 30.255356236881155, -86.0218888842076 30.231638479953453, -85.97234194929274 30.22879151830292, -85.9741721735212 30.205073287472487, -85.89987127948247 30.200774191186003, -85.90171573303739 30.177055729514073, -85.82743528027785 30.17272212278288, -85.82929394828531 30.149003441313447, -85.80454000698116 30.147551319031283, -85.80640290724767 30.12383194981339, -85.75690683570993 30.120916449319115, -85.75877894579715 30.09719663754447, -85.70929530378072 30.094265975812906, -85.7111766146688 30.070545728965378, -85.66170540818713 30.067599912504836, -85.66359591085882 30.043879238073202, -85.6141371459041 30.04091827340354, -85.61603683134479 30.017197178881446, -85.59131335922565 30.01571107937512, -85.59321724793246 29.991989326385614, -85.56849937308576 29.990499565419807, -85.57040746116682 29.96677715917045, -85.52098353302227 29.963786411734432, -85.52290078234407 29.940063604950396, -85.47348930807647 29.937057731887705, -85.47541570963801 29.9133345320782, -85.45071588491402 29.911825988004974, -85.45264646946075 29.88810215220944, -85.427952239955 29.886589954637277, -85.42988700360921 29.86286548806836, -85.43182098658657 29.839140144472918, -85.43375418935868 29.81541392807205, -85.4356866123968 29.79168684308686, -85.43761825617179 29.767958893738253, -85.43954912115417 29.744230084247057, -85.4148852454999 29.74271549379084, -85.41682027818554 29.71898608068161, -85.41875453104511 29.69525581603802, -85.42068800454913 29.67152470408039, -85.39603959540246 29.670006973898833, -85.39797722974805 29.6462752723129, -85.3240506413244 29.64169946456285, -85.32209819010313 29.665430401785642, -85.22351862792374 29.65927375337286, -85.22549082956498 29.635543844557134, -85.15157775643993 29.630886226768034, -85.15356396673972 29.607156259189782, -85.10430170655182 29.604032227562104, -85.10629697992725 29.58030195001887, -84.93393427376554 29.569247031140424, -84.93190449356726 29.592975457912424, -84.90727896987968 29.591380345399692, -84.9052434425175 29.61510767406689, -84.88061365651436 29.6135084009183, -84.87857237797182 29.637234626952228, -84.82930495341505 29.634023863191135, -84.82725298704622 29.65774871355896, -84.75334210473673 29.65290255356133, -84.7512745104406 29.676625751793818, -84.72663397057755 29.675002305400444, -84.72456060836984 29.698724385973037, -84.69991581399998 29.697096773308566, -84.69783667985767 29.720817731701064, -84.67318763143807 29.719185951757623, -84.67110272133617 29.74290578345122, -84.62179680336374 29.7396299906025, -84.6197011740995 29.76334841818059, -84.57038812961709 29.76005649253184, -84.5682817744732 29.783773509860865, -84.54362134843882 29.78212142730574, -84.54150920214609 29.805837303432405, -84.53939620408529 29.8295523088376, -84.53728235374203 29.853266439304083, -84.48793392392172 29.84994893090085, -84.48580932649473 29.873661632301037, -84.33775116178359 29.86361387308357, -84.33559602256189 29.88732402705217, -84.31091718380716 29.88563547455099, -84.30875622707708 29.909344462886196, -84.30659439824443 29.933052561079773, -84.30443169678229 29.95675976491511, -84.30226812216328 29.980466070175407, -84.3001036738596 30.00417147264365, -84.29793835134302 30.027875968102865, -84.2732305079868 30.026181838117893, -84.27105935140811 30.049885143297185, -84.24634726319059 30.048186830581542, -84.24417026849588 30.071888940984632, -84.19473832144925 30.068480044073542, -84.19692523657741 30.044778494678134, -84.14750608713071 30.041354545746007, -84.14530925330935 30.06505553151221, -84.07117107724167 30.059889485788386, -84.06895847505554 30.083588703242473, -84.01952674229723 30.080124586688036, -84.02174926274516 30.056425939034852, -83.99703945119072 30.05468831120311, -83.99926603057358 30.030989032058955, -83.94985851855394 30.02750264232005, -83.95209410665456 30.00380302452451, -83.8780032162276 29.998545043182457, -83.88025275424641 29.97484538409782, -83.85556221801778 29.973085212365028, -83.85781579618434 29.949384940119934, -83.78376348042823 29.944081901567383, -83.78603098454444 29.92038160630077, -83.7120002073405 29.91504436033908, -83.71428162210718 29.89134405336657, -83.66494139730715 29.887766992237868, -83.66723176946562 29.864066387772766, -83.66952121837731 29.840364898173494, -83.64486210768534 29.838571116763706, -83.6471555679374 29.814869043754246, -83.62250214388659 29.813071665183937, -83.62479961166179 29.78936901403414, -83.62709615394216 29.765665490785885, -83.6293917712855 29.741961099651842, -83.58011676126031 29.73835645644893, -83.58242130435217 29.714651801555327, -83.5331591667501 29.71103219195413, -83.53547262650946 29.687327280957657, -83.48622336650256 29.68369271185702, -83.4885457338518 29.659987552418976, -83.46392716391769 29.65816473632371, -83.46625351354504 29.63445903124499, -83.44164062245642 29.632632630515847, -83.44397095056782 29.608926385072728, -83.41936373704448 29.60709640139031, -83.42169803984903 29.58338962085965, -83.42403140408247 29.559682003721893, -83.4263638303093 29.53597355418738, -83.42869531909369 29.512264276466198, -83.4310258709993 29.488554174768456, -83.38186281315609 29.484885617266993, -83.3842022316988 29.461175311672186, -83.33505203787153 29.457491835775677, -83.33740031401629 29.433781333966397, -83.31283126687431 29.431934081524705, -83.31518349606395 29.408223079846373, -83.24149566337407 29.402658964548145, -83.24386162763142 29.378948093375815, -83.21930545444494 29.37708593901155, -83.22167535941959 29.35337458027738, -83.22404431348414 29.329662424639437, -83.22641231720934 29.305949476305212, -83.20187158254461 29.304084385339902, -83.20424352050841 29.28037096355026, -83.17970844447973 29.27850230997418, -83.18208431293027 29.254788420013938, -83.10849839036261 29.24916014673746, -83.11088794259643 29.225446429471262, -83.11327653714184 29.20173193735706, -83.11566417457297 29.178016674600748, -83.11805085546351 29.154300645407925, -83.12043658038667 29.130583853983953, -83.12282134991521 29.10686630453421, -83.09832350593041 29.104984376399116, -83.10071218692833 29.081266393154486, -83.00274807910296 29.073701247539493, -83.000339937614 29.097417943940247, -82.9979308317127 29.121133887546907, -82.97343203348285 29.11923227706009, -82.97101709480708 29.14294714068534, -82.84851061527466 29.133379386048343, -82.8509498857732 29.109666147441406, -82.85338817977906 29.08595215308251, -82.82889899287603 29.084027640084432, -82.831341172082 29.060313221619918, -82.83378237405063 29.036598056018864, -82.80930370286704 29.034670329081322, -82.81174878498952 29.010954749082696, -82.78727576710911 29.009023482485315, -82.7897247256716 28.985307493385626, -82.79217270493079 28.96159077017534, -82.76771019107737 28.959656295949003, -82.77016204174362 28.935939173346217, -82.7457051761896 28.93400116379643, -82.74816089455743 28.910283647098765, -82.7506156315667 28.886565409314194, -82.75306938780398 28.86284645464354, -82.75552216385528 28.839126787287398, -82.75797396030623 28.815406411446087, -82.78240660619834 28.81734276188677, -82.78485258540866 28.79362134931089, -82.78729758808818 28.769899236440857, -82.76287461674715 28.767963551108046, -82.76532347790602 28.744241075010653, -82.74090613690551 28.74230186229978, -82.74335885285629 28.71857902827228, -82.74581059023174 28.694855506966178, -82.74826134961575 28.671131302580125, -82.72385929512363 28.66918923372769, -82.72631390299463 28.645464685524267, -82.70191747149568 28.643519094546715, -82.70437592417663 28.619794207823855, -82.67998511436778 28.61784509646073, -82.6824474081848 28.59411987651706, -82.6849087206722 28.57039399091169, -82.6873690524149 28.5466674438414, -82.68982840399734 28.522940239502663, -82.69228677600353 28.499212382091557, -82.71665349889234 28.50115980712675, -82.7191060801811 28.477430962946947, -82.72155768494409 28.453701473877622, -82.72400831376278 28.42997134411426, -82.72645796721822 28.40624057785191, -82.72890664589102 28.38250917928536, -82.75325012240553 28.38445106328045, -82.75569302408748 28.360718698357502, -82.75813495402534 28.33698570931161, -82.76057591279722 28.313252100336655, -82.7630159009808 28.289517875626366, -82.76545491915329 28.265783039374035, -82.78977519004096 28.26771938383955, -82.7922084449044 28.243983601644814, -82.81652470945994 28.245915761815187, -82.81895220486994 28.222179038147235, -82.86757750416423 28.226031146563297, -82.86999445244581 28.20229314895503, -82.87241044050882 28.178554555753344, -82.87482546892385 28.15481537115041, -82.85052679623487 28.15289225104178, -82.85294565148628 28.12915281678093, -82.85536354636015 28.105412799706592, -82.85778048142679 28.081672204009866, -82.86019645725604 28.057931033881353, -82.86261147441729 28.034189293511442, -82.86502553347955 28.010446987090052, -82.86743863501131 27.98670411880683, -82.86985077958062 27.962960692850977, -82.8722619677551 27.939216713411337, -82.87467220010191 27.915472184676393, -82.87708147718779 27.891727110834246, -82.87948979957899 27.867981496072666, -82.88189716784134 27.84423534457893, -82.88430358254024 27.820488660539983, -82.88670904424062 27.79674144814236, -82.8382572132954 27.792893878766485, -82.84067123715745 27.769146825485425, -82.84308430544425 27.74539925262276, -82.79465461114417 27.74153772563513, -82.79707622976724 27.71779032426434, -82.77286730505053 27.71585415895812, -82.77529271566077 27.692106591475483, -82.77771716684614 27.668358517574546, -82.7801406591743 27.64460994143868, -82.7825631932124 27.62086086725081, -82.78498476952713 27.597111299193443, -82.78740538868483 27.57336124144873, -82.78982505125131 27.54961069819827, -82.76565011729475 27.547673124964707, -82.76807356059162 27.52392244720556, -82.77049604658727 27.5001712925055, -82.74633136349843 27.49823058962486, -82.74875762537486 27.47447931008675, -82.75118292924297 27.450727562170673, -82.72702848932043 27.448783733430126, -82.72945756422735 27.425031870345677, -82.70530863359198 27.423084569600583, -82.70774147597139 27.39933259663504, -82.68359805335965 27.39738182566482, -82.68603465964821 27.373629748105824, -82.66189674379585 27.37167550869141, -82.66433711043321 27.347923331826898, -82.64020470007519 27.345965625750804, -82.64264882350393 27.32221335486889, -82.61852191737452 27.320252183915127, -82.62096979404016 27.296499824304288, -82.59684839087294 27.294535190258365, -82.59930001722392 27.270782747207377, -82.57518411575165 27.268814651856363, -82.57763948823943 27.24506213065426, -82.55352908719425 27.243090575786717, -82.55598820227316 27.219337981722667, -82.53188330038641 27.217362969128764, -82.53434615451378 27.1936103074923, -82.5368080385894 27.169857225456173, -82.51271334015219 27.167879115044556, -82.5151789584867 27.144125975103425, -82.51764360609164 27.120372423312197, -82.49355910344012 27.11839121890602, -82.49602748052196 27.09463761887598, -82.49849488619917 27.070883615543156, -82.4744205716768 27.06889932096959, -82.47689170205648 27.045145279062847, -82.47936186035923 27.02139084239838, -82.4552977263168 27.01940346148862, -82.45777160455509 26.995648995913744, -82.43371295418872 26.993658169909466, -82.43619054884257 26.969903680713127, -82.43866716951057 26.94614880967519, -82.41461868843535 26.944154903887448, -82.41709902076444 26.92040001888996, -82.39305601854936 26.918402672529353, -82.39554005902735 26.89464777886111, -82.37150253440272 26.892646993733155, -82.3739902795204 26.86889209668317, -82.34995823121581 26.866887874594866, -82.35244967746682 26.84313297945235, -82.35494014536927 26.819377724121253, -82.33091824809212 26.81737043426652, -82.33341241239562 26.793615190502457, -82.30939598662397 26.7916044682252, -82.31189384383 26.76784924131724, -82.31439072080745 26.74409366712324, -82.29038443490526 26.742079883666833, -82.29288500006528 26.718324335986704, -82.2953845843482 26.694568449550452, -82.27138843070827 26.69255160877682, -82.2738916984613 26.668795758510576, -82.27639398469134 26.64503957801566, -82.25240795571379 26.64301968379058, -82.25491392070889 26.61926354912023, -82.25741890353787 26.595507092746242, -82.23344299163007 26.593484148939307, -82.23595164852644 26.569727748042865, -82.23845932261621 26.545971033965145, -82.21449352019285 26.54394504444978, -82.21700486365977 26.520188395500913, -82.21951522368227 26.49643144189066, -82.2220246008362 26.4726741877747, -82.19807354788202 26.470645531712293, -82.20058658851924 26.4468883567364, -82.1766409823378 26.444856287439727, -82.17915768299375 26.42109919689013, -82.10733961270985 26.414981392040804, -82.1098692510504 26.39122514804642, -82.06200384603571 26.387128434529345, -82.05946492845435 26.410883918802494, -82.01159348116141 26.40677129794461, -82.00904428904285 26.430525733443947, -81.93722929500049 26.42432725493705, -81.9397924049179 26.40057396810834, -81.91586034389023 26.398500619292427, -81.91842708780769 26.374747431459934, -81.89450048077656 26.372670682112886, -81.89707085524459 26.348917598569177, -81.87314970092295 26.34683745052944, -81.87572370249488 26.323084476567338, -81.85180799959501 26.32100093167477, -81.8543856248271 26.297248072586903, -81.85696224276839 26.27349494539858, -81.85953785400737 26.249741554257927, -81.86211245913208 26.225987903312724, -81.86468605873003 26.20223399670991, -81.84079430536745 26.20014861114236, -81.84337152044833 26.176394842139572, -81.84594772940683 26.15264082598194, -81.84852293283022 26.12888656681456, -81.85109713130518 26.105132068781828, -81.82722466700477 26.103044464547907, -81.82980247399166 26.07929012247026, -81.83237927543728 26.05553555002445, -81.80851685358682 26.05344495262016, -81.81109725894548 26.029690545770748, -81.81367665817258 26.00593591704739, -81.78982427124286 26.00384233040499, -81.79240726979135 25.980087876917324, -81.76856030763193 25.97799091106732, -81.77114690208961 25.954236638102646, -81.77373248865574 25.9304821561052, -81.7763170679174 25.906727469213724, -81.75248472827053 25.90462791590679, -81.75507289769189 25.88087342352308, -81.75766005922613 25.85711873473093, -81.7100162264914 25.852909905312853, -81.71261156602698 25.829155817802604, -81.64116576910695 25.822815511650013, -81.63855665521417 25.846568403362944, -81.63594652525407 25.87032110385892, -81.56448062635089 25.863944495421382, -81.56710453159008 25.84019299664662, -81.54328881874189 25.838060327584266, -81.545916291699 25.814309040474427, -81.49829654372677 25.810033209956075, -81.49565989414282 25.83378369038895, -81.40041208924832 25.825185225176902, -81.40306708624291 25.801436366851313, -81.37926182152506 25.7992777442865, -81.38192036943076 25.775529108580425, -81.38457788321858 25.75178029227531, -81.33698821242928 25.747453389452797, -81.33965385201392 25.723705214866136, -81.34231845519467 25.699956868373977, -81.31853404204404 25.697788593757817, -81.32120218485808 25.674040490111135, -81.29742319166006 25.671868866040906, -81.30009487073575 25.6481210105323, -81.30276551173235 25.62437299593726, -81.30543511525266 25.600624826383356, -81.28167068090696 25.598450679987085, -81.28434381504874 25.57470277254979, -81.26058479358548 25.572525282355265, -81.26326145498646 25.548777642325422, -81.23950784510099 25.546596810214947, -81.24218803040172 25.52284944288342, -81.21843983078881 25.52066527074067, -81.22112353663258 25.49691818139807, -81.22380620107414 25.473170958586188, -81.22648782471747 25.44942360642771, -81.229168408166 25.425676129044614, -81.18171101612076 25.42129985871525, -81.18439966628658 25.397553095758227, -81.16067679621565 25.395359752355876, -81.16336895462454 25.371613291932672, -81.1660600694651 25.347866719293926, -81.18977383988525 25.350059224310023, -81.1924593645257 25.326312124057154, -81.1951438485312 25.302564919609285, -81.19782729250441 25.27881761508389, -81.20050969704748 25.2550702145975, -81.20319106276216 25.231322722266, -81.20587139024965 25.207575142204522, -81.20855068011082 25.18382747852748, -81.1611875741935 25.179444607024585, -81.16387489690597 25.155697706632075, -81.16656117975668 25.13195073127984, -81.11921959578382 25.127554577472257, -81.12191390042473 25.103808377877638, -81.12460716297588 25.08006211197599, -81.0536283301625 25.07344237081989, -81.05633412883594 25.049697319476937, -80.96172572185479 25.04082035755214, -80.9644485642427 25.017076962353595, -80.8935148198496 25.010381284043, -80.89625016695857 24.986639130008268, -80.87261182397195 24.98440019635843, -80.8753506306003 24.96065842752724, -80.85171766546824 24.958416191834615, -80.85445992831686 24.934674813490837, -80.8308323397272 24.932429277667907, -80.83357805549971 24.90868829509518, -80.80995584213974 24.90643946105572, -80.81270500754256 24.882698879537344, -80.81545311179948 24.858958267595238, -80.86268036552705 24.86345046047919, -80.86541839618718 24.839708950489328, -80.88902880790896 24.841949014630277, -80.89176127647143 24.818207047019786, -80.93897566313107 24.82267511369152, -80.9416980682447 24.798932259182216, -80.98890686695172 24.80338453707857, -80.99161921405003 24.779640801886444, -81.06242528738474 24.786289946111097, -81.06512307798343 24.762544906063205, -81.1595250194065 24.77135649029976, -81.16220375573675 24.747609727297284, -81.16488145896398 24.723862959556673, -81.25926083415229 24.732611448438522, -81.25660114565291 24.75635992006571, -81.253940430855 24.780108386108378, -81.27754637801364 24.78228703221296, -81.27488914461865 24.8060359122567, -81.51103941849271 24.82762130089222, -81.51365154258072 24.803868224957412, -81.53726659778579 24.806005812980985, -81.53987320189272 24.78225230935903, -81.58709674481301 24.786515454777916, -81.58969332137825 24.76276111348378, -81.61330180660448 24.764886672510038, -81.61589287146487 24.74113191293497, -81.63949766093006 24.743253325968258, -81.64208321760445 24.719498152547736, -81.68928621460793 24.7237289570403, -81.69186175877167 24.699972962158128, -81.71545996383449 24.70208235525524, -81.71803000808357 24.678325955942718, -81.78881594068488 24.68463051592312, -81.79137147641072 24.660872896921898, -81.81496388830215 24.662966545939558, -81.81751393362345 24.6392085324737, -81.84110264111467 24.641298042603466, -81.84364719954458 24.617539639114685, -81.96158017226237 24.627929202866873, -81.96410123245305 24.604168789904836, -81.9666213209113 24.58040840229959, -81.99020128859252 24.582474316287357, -81.99271590442721 24.55871355363227, -82.08702564659806 24.566938306370226, -82.08452904110928 24.590700679567583, -82.08203147296612 24.61446308122807, -82.17638979413023 24.62263136482231, -82.17886933787773 24.598867365361688, -82.18134792579147 24.575103393577432, -82.18382555842237 24.551339453567774, -82.18630223632091 24.52757554943033, -81.76211324307785 24.49037745828254, -81.75955560459427 24.51413406745028, -81.73599260083023 24.51203169756259, -81.7334294818391 24.53578793399564, -81.66273181665636 24.529457231475835, -81.66015422225922 24.55321226303312, -81.58945034989559 24.54684678303853, -81.58685827352681 24.570600600112417, -81.53971743171647 24.566337482961774, -81.53711536288498 24.590090494258142, -81.44282550500104 24.581517870747124, -81.44020444507836 24.605269230065847, -81.32233816115912 24.594467503410208, -81.31969360791376 24.618216772477563, -81.27254390286257 24.61386914997743, -81.26988933699035 24.637617588055818, -81.19915754380345 24.631066928974438, -81.19648846320212 24.65481410262866, -81.1729083759797 24.652622668886046, -81.17023376849069 24.676369426253903, -81.05232346978752 24.665354209877062, -81.0496253404681 24.689098826028406, -80.97887582389659 24.682443678159352, -80.976163160632 24.706187001249198, -80.92899207809853 24.70173073366884, -80.92626937210673 24.725473189467756, -80.90268061466824 24.723239029817876, -80.89995235931241 24.74698104793524, -80.85276841856685 24.74250067391132, -80.85003011035695 24.766241813577015, -80.82643492960132 24.763995597598853, -80.8236910638126 24.787736290233084, -80.77649428803059 24.783231797350137, -80.77374035926654 24.80697160038302, -80.72653804122214 24.802451314139272, -80.72377404407493 24.82619022136394, -80.67656619543278 24.821654137917616, -80.67379212449916 24.845392143131427, -80.65018500400917 24.843118065831217, -80.64740535786518 24.866855604809253, -80.62379460682152 24.86457735565386, -80.62100938195513 24.88831442399311, -80.59739500105141 24.886032001926132, -80.59460419394922 24.90976859522445, -80.57098618388126 24.907481999190864, -80.5681897910285 24.93121811304687, -80.52094739494076 24.926632838929685, -80.51814090407474 24.950368024880035, -80.4945165206492 24.948069345213664, -80.49170443580742 24.971804042401203, -80.46807642721402 24.96950118508163, -80.46525874487808 24.99323538910826, -80.44162711182317 24.990928353086662, -80.43880382847341 25.01466205955516, -80.41516857166555 25.012350843784137, -80.41233968378083 25.036084048297976, -80.40950970253643 25.05981719311716, -80.38586630798866 25.05750134989507, -80.38303071635136 25.081233984485266, -80.38019402838594 25.1049665513969, -80.35654249273 25.102646078873473, -80.35370018850695 25.126378127282102, -80.35085678498201 25.150110100026424, -80.32719710485104 25.14778499635723, -80.32434807919692 25.17151644232475, -80.32149795126178 25.19524780464046, -80.29783012329044 25.192918067986692, -80.2949743673477 25.216648895252337, -80.27130291445019 25.214314971582148, -80.26844152696388 25.23804525940552, -80.26557903186281 25.261775451706956, -80.24189942729738 25.259436891673, -80.23903129476416 25.283166536260097, -80.23616205162283 25.306896077333757, -80.23329169723078 25.330625510782458, -80.20959940556112 25.328281864200164, -80.20672340548535 25.352010737781168, -80.18302748750729 25.349662899554666, -80.18014583820164 25.373391208878548, -80.17726307228499 25.397119398700855, -80.1743791891108 25.42084746490764, -80.17149418803203 25.44457540338435, -80.1477810308334 25.442222025747913, -80.14489036988807 25.465949383931047, -80.14199858802469 25.489676606385125, -80.13910568459376 25.513403688993623, -80.1362116589453 25.537130627639353, -80.1333165104288 25.560857418204407, -80.1304202383933 25.58458405657023, -80.17790201429757 25.58929243557794, -80.18078918597567 25.565564903379084, -80.18367523757875 25.541837218514843, -80.23114246299492 25.546528811761142, -80.23401829958793 25.522800086527592, -80.23689302084529 25.49907121640202, -80.23976662741316 25.475342205502454, -80.2426391199372 25.451613057946258, -80.24551049906246 25.427883777850035, -80.29293590600385 25.432555922716748, -80.29007361080726 25.45628609354211, -80.28721020564956 25.48001613136615, -80.28434568988753 25.503746032071817, -80.28148006287745 25.527475791541367, -80.27861332397514 25.551205405656386, -80.27574547253589 25.574934870297753, -80.27287650791452 25.598664181345683, -80.22538744121503 25.593985811076674, -80.2225082547334 25.61771407691925, -80.21962795032663 25.641442181390836, -80.12462432115888 25.632036860226503, -80.12172467465543 25.655763017276414, -80.11882390202403 25.67948900564599, -80.11592200261116 25.703214821213354, -80.11301897576283 25.726940459855857, -80.11011482082453 25.750665917450217, -80.10720953714127 25.774391189872507, -80.10430312405751 25.798116272998207, -80.10139558091723 25.82184116270191, -80.09848690706393 25.8455658548579, -80.09557710184055 25.86929034533957, -80.09266616458955 25.89301463001977, -80.0897540946529 25.91673870477063, -80.08684089137205 25.94046256546375, -80.0839265540879 25.964186207970034, -80.08101108214093 25.98790962815974, -80.07809447487102 26.011632821902477, -80.07517673161756 26.035355785067367, -80.0722578517195 26.059078513522763, -80.0693378345152 26.082801003136474, -80.06641667934252 26.106523249775645, -80.06349438553885 26.13024524930687, -80.06057095244103 26.153966997596097, -80.05764637938539 26.1776884905087, -80.05472066570776 26.201409723909386, -80.05179381074345 26.225130693662315, -80.04886581382725 26.24885139563101, -80.04593667429347 26.27257182567852, -80.04300639147583 26.29629197966708, -80.0400749647076 26.3200118534586, -80.03714239332153 26.34373144291421, -80.03420867664981 26.367450743894548, -80.03127381402415 26.391169752259653, -80.02833780477573 26.414888463868966, -80.02540064823519 26.438606874581467, -80.02246234373274 26.46232498025541, -80.01952289059794 26.48604277674853, -80.01658228815992 26.509760259918156, -80.01364053574724 26.533477425620795, -80.010697632688 26.557194269712642, -80.0077535783097 26.580910788049174, -80.00480837193939 26.604626976485395, -80.00186201290359 26.628342830875773, -79.9989145005282 26.652058347074203, -79.99596583413873 26.675773520934065, -79.9930160130601 26.699488348308172, -79.9900650366167 26.72320282504879, -79.9871129041324 26.746916947007673, -80.01107841025228 26.749294638803057, -80.0081297582991 26.773008837195196, -80.00517995072315 26.7967226722641, -80.00222898684768 26.820436139859734, -79.99927686599553 26.844149235831647, -79.99632358748892 26.867861956028758, -80.02031324096396 26.870238032389683, -80.01736345079571 26.893950806089578, -80.04135869342986 26.89632352513688, -80.03841239502839 26.920036346984567, -80.0354649404932 26.943748780113108, -80.03251632914646 26.967460820368974, -80.05652646681715 26.96983104299822, -80.05358135287378 26.993543117251928, -80.05063508254385 27.017254790080475, -80.07465547413356 27.0196220797801, -80.07171270575041 27.043333776851593, -80.06876878140802 27.067045063942956, -80.09279943480824 27.06940941667533, -80.08985901696336 27.09312071825313, -80.08691744358892 27.116831601293665, -80.11095836669902 27.119193013024812, -80.10802030438013 27.142903900793765, -80.10508108696376 27.1666143614658, -80.1291322876911 27.168972828165543, -80.12619658589564 27.192683283806428, -80.12325972943714 27.216393303788617, -80.14732121569709 27.21874882143043, -80.14438787943217 27.242458826620446, -80.14145338894104 27.26616838758766, -80.16552516865694 27.268520952148794, -80.16259420293947 27.29223048856136, -80.18667160201437 27.294579673146153, -80.1837441645382 27.31828917964624, -80.18081557439483 27.341998228951176, -80.20490327864556 27.344344453616646, -80.20197822133586 27.36805346324498, -80.22607155017245 27.370396303248757, -80.22315002917198 27.394105267842445, -80.22022735707257 27.4178137622639, -80.2443310028195 27.42015363552156, -80.24141187163404 27.443862075142665, -80.23849158979856 27.46757003601877, -80.26260556040923 27.46990693852475, -80.25968882409983 27.49361483483343, -80.25677093759175 27.5173222438222, -80.28089524102761 27.519656171574777, -80.27798090466518 27.543363506227852, -80.30211084551162 27.545694039026436, -80.29920006278833 27.569401293985372, -80.29628813145366 27.593108048636342, -80.29337505083028 27.616814298811367, -80.31752004383291 27.619142265067378, -80.31461052261666 27.642848421366526, -80.31169985257034 27.66655406460869, -80.30878803301611 27.690259190624495, -80.33294809633345 27.692584583723587, -80.33003984196723 27.71628960167804, -80.32713043855419 27.73999409382207, -80.35130087081119 27.742316495010364, -80.34839503723808 27.766020869319092, -80.34548805508166 27.789724709231486, -80.36966886428505 27.79204411452744, -80.36676545662797 27.81574782682949, -80.3638609008536 27.83945099614732, -80.38805209501818 27.84176740157331, -80.38515111841008 27.865470433504793, -80.38224899415314 27.889172913862346, -80.40645058130181 27.891486315444556, -80.40355204088564 27.915188648638733, -80.4277592945002 27.917498634764822, -80.42486434145535 27.94120081543598, -80.44907726297912 27.94350738426578, -80.44618590083921 27.967209407054586, -80.4432933938263 27.99091086084079, -80.46751672401663 27.9932144162967, -80.4646278126008 28.016915702422477, -80.48885681596958 28.019215835966524, -80.48597150369253 28.042916949072875, -80.51020618168248 28.045213658870082, -80.507324472089 28.068914593598286, -80.50444162041894 28.092614941888613, -80.50155762599587 28.116314699563524, -80.52580747850357 28.11860878894023, -80.52292709263642 28.142308354037052, -80.5471826274283 28.144599014126978, -80.54430585367206 28.168298381287, -80.54142793881381 28.19199714481021, -80.56569391410387 28.19428477412619, -80.56281961608161 28.21798332993213, -80.55994417744847 28.24168127349921, -80.58422060131237 28.243965868099835, -80.58134878424792 28.26766359416842, -80.57847582706623 28.291360699394488, -80.5756017290908 28.31505717959706, -80.57272648964458 28.3387530305948, -80.56985010805003 28.362448248206114, -80.56697258362905 28.386142828249135, -80.54266755490028 28.383855843774178, -80.53978411301934 28.407549384606863, -80.51547524370491 28.405258163165808, -80.51258588053223 28.42895066040448, -80.4882731713976 28.426655201059546, -80.48537788309984 28.45034665032189, -80.48248144369221 28.47403744601961, -80.50680370778642 28.476333701817953, -80.503910896848 28.500024237626874, -80.50101693528816 28.52371411125948, -80.4981218224229 28.547403318532083, -80.52245937109491 28.549696923729616, -80.51956789263463 28.57338585689268, -80.51667526335991 28.59707411508189, -80.5410233244994 28.599364667892317, -80.53813433440077 28.62305264217952, -80.56248812307295 28.625339744354264, -80.55960277574917 28.649027429377448, -80.58396229341358 28.65131107910385, -80.58108059246652 28.67499846950141, -80.5781977435608 28.698685167447795, -80.60256778961674 28.70096575537934, -80.59968859187697 28.72465214890766, -80.62406437226636 28.726929279841013, -80.62118882930268 28.750615363590462, -80.6455703454844 28.752889035718514, -80.64269846091014 28.776574804328675, -80.66708571434245 28.77884501584591, -80.66421749177407 28.802530463956895, -80.68861048391459 28.80479721305928, -80.68574592697168 28.82848233531175, -80.7101446592775 28.830745620196925, -80.70728377158277 28.854430411231952, -80.73168824551036 28.856690230099165, -80.72883103068969 28.880374684558404, -80.75324124769489 28.882631035608455, -80.75038770937734 28.906315148134045, -80.77480367091535 28.908568029569334, -80.77195381273307 28.932251794803975, -80.76910281664566 28.955934823508134, -80.79352934584692 28.958184617415434, -80.79068203473344 28.981867289038284, -80.81511431381132 28.984113608817715, -80.81227069131235 29.00779591800287, -80.83670872172137 29.010038761862358, -80.83386879148063 29.0337207032539, -80.85831257467461 29.03596006940304, -80.85547634033897 29.059641637645647, -80.8799258777712 29.06187752429558, -80.8770933429907 29.08555871403444, -80.87425967566621 29.109239140881414, -80.89871980454163 29.111471925278785, -80.89588984163981 29.13515196383316, -80.92035573010016 29.13738126423951, -80.91752947527948 29.161060909147448, -80.91470208966976 29.1847397781008, -80.9391785816993 29.18696596968774, -80.93635490905142 29.210644435206127, -80.93353010615782 29.234322116140888, -80.95801720999678 29.236545195050482, -80.95519612495367 29.260222462761647, -80.9796889976282 29.262442050502273, -80.97687163410781 29.286118899637682, -81.00137027707062 29.28833499443229, -80.99855663874831 29.312011419640218, -80.99574187317717 29.335687042761617, -81.02025114400584 29.337900015642855, -81.01744010853999 29.36157520504924, -81.04195515501355 29.36378468052141, -81.03914785333687 29.38745943086227, -81.03633942619672 29.411133366047626, -81.06086511270681 29.413339713079342, -81.0580604242763 29.437013199412227, -81.0825918917913 29.439216044581556, -81.07979094576282 29.462889076712585, -81.0769888760665 29.48656128061725, -81.10153099580351 29.488760990832482, -81.09873267344307 29.512432730749076, -81.0959332279796 29.536103633804604, -81.12048600822453 29.538300205238485, -81.11769031503883 29.561970634519916, -81.1148934993178 29.5856402183047, -81.1394569483648 29.587833647134456, -81.13666388987141 29.611502747359282, -81.1338697094131 29.635170993451087, -81.15844383556474 29.637361275858296, -81.15565341729209 29.661029028604624, -81.15286187762763 29.684695918580708, -81.17744668919484 29.68688305075145, -81.17465891668213 29.710549437596786, -81.19924953029431 29.712733052789677, -81.19646552865565 29.73639893115864, -81.19368040745299 29.76006393368007, -81.21828171872694 29.762244392167506, -81.21550037337786 29.785908876428337, -81.21271790904622 29.80957247620261, -81.20993432505894 29.833235187290573, -81.23455124282235 29.835412845912717, -81.23177144093364 29.85907502451633, -81.22899051997358 29.882736305793493, -81.25361815648023 29.884910798968008, -81.25084102261732 29.908571537977082, -81.24806277027014 29.932231371018997, -81.27270113387296 29.934402694954375, -81.26992667362964 29.958061975944972, -81.26715109549194 29.98172034232702, -81.29180019455232 29.98388849323622, -81.28902841353339 30.007546297784252, -81.2862555152128 30.031203179081807, -81.2834814989172 30.054859132927557, -81.3081462619218 30.057024462863655, -81.30537604903695 30.080679840652028, -81.33004664413029 30.082841634165938, -81.32728023841858 30.106496430556465, -81.32451271659916 30.13015028641105, -81.3491940722848 30.132308895564915, -81.34643036267802 30.155962160240716, -81.34366553756475 30.17961447573699, -81.3408995962718 30.20326583785155, -81.33813253812536 30.226916242382003, -81.3628345316297 30.229072368012872, -81.36007129329887 30.252722162700586, -81.35730693871879 30.27637099115966, -81.35454146721524 30.300018849187456, -81.35177487811346 30.323665732581244, -81.34900717073815 30.347311637138308, -81.3737347818113 30.349465620312326, -81.37097090315885 30.37311089191926, -81.3682059068401 30.396755176043786, -81.36543979217933 30.420398468482865, -81.39018316351272 30.42254959928985, -81.38742088393903 30.446192244556283, -81.38465748663347 30.46983388949106, -81.38189297091981 30.493474529890978, -81.37912733612124 30.517114161552612, -81.40389144763127 30.519262781082062, -81.40112965558856 30.542901746905663, -81.39836674507416 30.566539695344126, -81.42314169505907 30.568685102663213, -81.42038263240397 30.592322375485548, -81.41762245189332 30.615958622275702, -81.41486115284991 30.639593838829995, -81.41209873459597 30.663228020944658, -81.40933519645321 30.686861164416136, -81.40657053774278 30.710493265040697, -81.40380475778528 30.734124318614654, -81.40103785590077 30.757754320934424, -81.39826983140877 30.781383267796283, -81.39550068362824 30.80501115499666, -81.39273041187758 30.828637978331844, -81.38995901547466 30.852263733598356, -81.3871864937368 30.875888416592524, -81.38441284598076 30.89951202311092, -81.38163807152276 30.923134548949985, -81.37886216967843 30.946755989906247, -81.37608513976289 30.970376341776245, -81.3733069810907 30.99399560035667, -81.37052769297587 31.017613761444057, -81.36774727473183 31.041230820835192, -81.36496572567145 31.064846774326803, -81.3621830451071 31.0884616177157, -81.35939923235057 31.112075346798736, -81.33450954038946 31.10992204311679, -81.33171958211001 31.133534313277714, -81.32892848826208 31.157145460970135, -81.3040296944245 31.154987554395078, -81.30123244824088 31.178597234850294, -81.25142761283523 31.174268972408463, -81.24861919324299 31.1978768396719, -81.24580963000498 31.2214835725929, -81.24299892242493 31.245089166969287, -81.24018706980596 31.268693618598967, -81.23737407145065 31.292296923280094, -81.23455992666098 31.315899076810652, -81.2317446347384 31.33950007498887, -81.22892819498382 31.36309991361306, -81.22611060669752 31.386698588481597, -81.20116436495418 31.384525502216874, -81.1983405930151 31.40812266910335, -81.19551566913266 31.431718664078144, -81.19268959260428 31.455313482940124, -81.1677291808895 31.45313544743535, -81.16489691112912 31.476728746065067, -81.16206348530227 31.500320860427642, -81.13709393391949 31.49813821433157, -81.13425430798425 31.52172880016991, -81.13141352255539 31.54531819358831, -81.1285715769251 31.568906390386545, -81.12572847038494 31.59249338636437, -81.12288420222598 31.616079177321808, -81.12003877173863 31.639663759058898, -81.11719217821278 31.663247127375875, -81.11434442093774 31.68682927807309, -81.11149549920222 31.710410206951067, -81.08648143408308 31.708220572784537, -81.08362628623564 31.73179993719873, -81.05860811136016 31.7296060276106, -81.05574673321823 31.75318382323246, -81.05288418442477 31.77676038493851, -81.02785683675364 31.77456185988904, -81.02498805073799 31.79813684452878, -81.02211809060964 31.821710587107063, -80.99708156602001 31.819507445257877, -80.99420536173315 31.843079602499664, -80.96916472687472 31.840872181970973, -80.96628227423638 31.864442749554897, -80.94123752990691 31.862231049516524, -80.93834882472233 31.885800023122947, -80.91329997172241 31.88358404274627, -80.91040500979507 31.907151418057456, -80.88535204892806 31.904931156515282, -80.88245082605962 31.92849692921529, -80.85739375813168 31.92627238568194, -80.85448627012208 31.949836551456567, -80.82942509594214 31.947607725107872, -80.82651133858947 31.97117027964479, -80.82359638710659 31.994731560320073, -80.820680240762 32.018291562937904, -80.81776289882357 32.04185028330272, -80.86792686809703 32.046306719092236, -80.86501850267663 32.069864832970666, -80.83993094498658 32.06763824759268, -80.83701629782557 32.09119473090251, -80.7617442082747 32.08449028350875, -80.75881309654208 32.10804445051116, -80.70862641874615 32.10355440921438, -80.7056839241084 32.12710659428717, -80.68058696928796 32.124855312854855, -80.67763817593385 32.14840585334889, -80.67468817236518 32.17195508771095, -80.64958201917526 32.16969917470984, -80.64662570988487 32.193246756260606, -80.62151545044152 32.190986553262334, -80.61855283120497 32.21453247770602, -80.61558899543486 32.238077083957975, -80.59046953293368 32.23581224694474, -80.58749938019903 32.25935518786394, -80.51213166230875 32.2525359545356, -80.50914498797113 32.27607653735185, -80.45889463530371 32.27150994806482, -80.4558965319551 32.29504851072229, -80.43076775860304 32.29275894669687, -80.42776332129652 32.31629583008198, -80.42475764937522 32.33983137615381, -80.39961967580875 32.33753717017467, -80.39660766288968 32.36107102876558, -80.39359441178952 32.384603541927284, -80.39057992174756 32.408134705470125, -80.41573321833742 32.410429948586554, -80.41272260036867 32.433960103503495, -80.43788201733652 32.43625173888079, -80.43487527540498 32.45978087983446, -80.3845472217926 32.45519296694103, -80.38756419200259 32.431664515204446, -80.31209503523253 32.42475403455043, -80.30906272726511 32.44828144782687, -80.30602917191078 32.471807499715, -80.23053848228538 32.46485936191918, -80.22748833432262 32.488383005812075, -80.22443693127647 32.511905280743576, -80.17409445272835 32.50725202849781, -80.17103155911555 32.53077223332263, -80.1206829529939 32.52610246650292, -80.11760856234739 32.54962059564457, -80.04207803363452 32.54258523757935, -80.03898702151172 32.56610093413737, -79.96345046472385 32.559028931309165, -79.96034282375224 32.58254218718105, -79.95723390326422 32.606054055870466, -79.93204689463307 32.603688106196515, -79.9289315722521 32.62719823054365, -79.8533614585026 32.620075588176825, -79.85022948589905 32.643583255451745, -79.84709622318854 32.66708952409042, -79.84396166957713 32.690594389909606, -79.79355610444513 32.68582405364291, -79.79041000531164 32.70932680317716, -79.78726260956962 32.73282814207946, -79.73684075926222 32.72804055572742, -79.73368180665162 32.75153976918596, -79.73052155171459 32.775037564204204, -79.68008342359816 32.77023272163376, -79.67691160044247 32.793728382060905, -79.67373846923219 32.81722261624346, -79.5728339495496 32.807562568974795, -79.56963897069046 32.83105394367898, -79.56644267391441 32.85454388490045, -79.56324505840944 32.87803238846004, -79.5127684193398 32.87317645718291, -79.50955920648728 32.89666280239234, -79.50634866915058 32.920147702147226, -79.50313680651317 32.94363115226968, -79.45263364176444 32.93875722396958, -79.44941016547298 32.96223850302674, -79.42415506458686 32.95979523635172, -79.42092511239262 32.98327469873006, -79.3451509004762 32.97592004391118, -79.34190417764748 32.99939696439666, -79.3166431434851 32.99693712632643, -79.31338993339175 33.020412221053114, -79.31013537941891 33.04388584725885, -79.30687948073745 33.06735800076869, -79.23105662494987 33.05995145183859, -79.2277839273304 33.0834210440278, -79.20250669185451 33.080943903256276, -79.19922748980996 33.104411652852605, -79.19594693227995 33.12787791838308, -79.17066049567505 33.12539608735186, -79.16737342651763 33.14886050220238, -79.16408499812815 33.17232342493104, -79.16079520966719 33.1957848513657, -79.15750406029468 33.21924477733467, -79.15421154916986 33.242703198666575, -79.15091767545131 33.26616011119041, -79.14762243829685 33.28961551073558, -79.14432583686366 33.31306939313176, -79.14102787030822 33.3365217542091, -79.13772853778633 33.35997258979812, -79.11239156789814 33.3574831758115, -79.10908569316894 33.38093212160086, -79.10577844869854 33.40437953385544, -79.05508715361975 33.39938734825517, -79.05176818150306 33.42283250188179, -79.04844783377786 33.44627611422231, -79.02309350779376 33.4437733405377, -79.01976660194738 33.46721504664519, -79.01643831670151 33.49065520342601, -78.99107474942956 33.48814773402147, -78.98773989878894 33.51158597651577, -78.98440366495072 33.53502266164536, -78.93365916901793 33.5299943540366, -78.930311174579 33.55342875542562, -78.92696179104637 33.576861591709914, -78.90158086162464 33.57434075145992, -78.89822489673304 33.59777165706129, -78.89486753893321 33.62120098952599, -78.86947735974097 33.618675449443494, -78.86611341328224 33.642102843187956, -78.86274807009356 33.66552865576645, -78.81195034441487 33.660464195775965, -78.80857320759333 33.68388769957938, -78.805194668117 33.70730961448821, -78.72897546252703 33.69968091207957, -78.7255799182102 33.7231001460708, -78.72218296320665 33.746517783742824, -78.67135509878442 33.741410633174056, -78.66794632651518 33.764825943340284, -78.64252892122464 33.76226603449321, -78.63911352844461 33.7856793765148, -78.6136920754534 33.783115123184956, -78.61027005780394 33.80652649290991, -78.5339970415128 33.79880875579134, -78.53055798351855 33.82221741789147, -78.47970471356419 33.81705162489218, -78.4762538133754 33.84045793903873, -78.45082372422256 33.837868704441995, -78.44736618195331 33.86127303297505, -78.39649910399736 33.856081885584466, -78.39302970741805 33.879483856412634, -77.9607621745512 33.834709976968995, -77.95720287805459 33.858103980818676, -77.93178093519465 33.85543403061868, -77.92821496047425 33.878826031591984, -77.90278902621074 33.87615172403656, -77.89921636891584 33.89954171801472, -77.8956422261459 33.92293007949538, -77.89206659697913 33.9463168043282, -77.88848948049319 33.96970188836328, -77.86304394530366 33.967022087877, -77.85946013284314 33.99040514929767, -77.85587482912024 34.01378656193829, -77.85228803320904 34.037166321650545, -77.84869974418274 34.06054442428663, -77.82323458227926 34.05785913136447, -77.81963958384297 34.08123519578178, -77.81604308833555 34.10460959514567, -77.81244509482669 34.127982325309986, -77.8088456023854 34.15135338212893, -77.78336078794194 34.14866259729559, -77.77975457261971 34.17203160030662, -77.77614685439599 34.19539892200029, -77.750652816586 34.19270339803401, -77.74703836806067 34.21606865799497, -77.74342241265735 34.2394322286697, -77.71791914782216 34.236731964681326, -77.71429645468766 34.260093465703804, -77.68878919043027 34.25738883730286, -77.68515975517533 34.28074826458066, -77.6596484926364 34.2780392711067, -77.65601231087012 34.301396620549525, -77.63049705119353 34.29868326134367, -77.6268541185234 34.322038528863395, -77.6013348628562 34.31932080326818, -77.59768517488811 34.34267398477882, -77.57216192438055 34.33995189213817, -77.56850547671878 34.363302983555975, -77.54297823252429 34.36057652321536, -77.53931502077151 34.38392552045872, -77.51378378404675 34.38119469176493, -77.51011380380403 34.404541590754484, -77.48457857570885 34.401806393055836, -77.48090182257566 34.42515118971432, -77.4553626042731 34.42241162236057, -77.4516790738473 34.445754312612976, -77.42613586650367 34.4430103749553, -77.42244555438151 34.46635095472877, -77.37135242109711 34.460850345636445, -77.36765007902834 34.48418843113748, -77.3165514958763 34.47867109414641, -77.31283711758088 34.5020066802028, -77.2872844761842 34.499241642666384, -77.28356330031643 34.522575105522584, -77.23245132698918 34.517032290516504, -77.22871810289043 34.5403632444429, -77.20315877465947 34.537585465949185, -77.19941874284785 34.560914288297525, -77.17385544018491 34.5581321344878, -77.17010859625037 34.58145882120118, -77.14454132035077 34.578672291438274, -77.14078765988168 34.601996838462064, -77.08964644390807 34.596411031803505, -77.08588071175323 34.61973305181688, -77.06030677540313 34.616933773905714, -77.05653421656882 34.64025364587518, -76.97980436793694 34.631830694094326, -76.97601447367467 34.6551476446808, -76.873705079513 34.64385958018862, -76.86989259272721 34.66717321507923, -76.71643598335675 34.65011897243056, -76.7202799570395 34.62680767142637, -76.5924616461315 34.612487948122585, -76.59633021975273 34.58917684171246, -76.57077573962192 34.58630131572378, -76.57464793418649 34.5629888416885, -76.49800811137546 34.55433950716977, -76.4941202117385 34.57765079378987, -76.49023068796471 34.60096031951905, -76.48633953904256 34.62426808023243, -76.46077986656222 34.62137579936996, -76.45688185179065 34.64468139499415, -76.45298220773957 34.66798521769765, -76.42741338153951 34.66508815297649, -76.4235068641199 34.68838980278953, -76.41959871328196 34.71168967178031, -76.39402072996356 34.70878782244721, -76.39010569822916 34.732085510751766, -76.38618902893 34.755381410335886, -76.36060188509838 34.752474775643634, -76.35667832736593 34.77576848675146, -76.33108727075448 34.77285746183143, -76.3271568201787 34.796148980451534, -76.30156185206415 34.79323356469429, -76.29762450423353 34.81652288681748, -76.29368550841009 34.83981040478066, -76.26808137639738 34.83689020123442, -76.26413547576512 34.860175514923355, -76.23852743353903 34.85725091909103, -76.23457462368077 34.880534024502424, -76.20896267252915 34.87760503577975, -76.2050029490262 34.90088592891253, -76.17938709024017 34.89795254669667, -76.1754204486724 34.92123122355203, -76.14980068354636 34.918293447241595, -76.1458271194921 34.94156990382289, -76.12020344932384 34.9386277328179, -76.11622295835996 34.961901965130814, -76.09059538445058 34.95895539883268, -76.08660796215244 34.98222740288525, -76.06097648580635 34.979276440696765, -76.05698212774789 35.0025462124992, -76.03134675027282 34.99959085382463, -76.02734545202644 35.02285838938944, -76.00170617473351 35.01989863363444, -75.99769793187015 35.043163928976384, -75.97205475607379 35.04019977554801, -75.96803956416292 35.06346282668416, -75.9423924911809 35.06049427499086, -75.93837034579053 35.08375507794055, -75.88706978369812 35.0778051767191, -75.88303541025405 35.10106332818506, -75.85738192505431 35.09808197770335, -75.85334058800397 35.12133787280593, -75.82768321218035 35.11835212192888, -75.82363490708853 35.141605756695085, -75.77231376195266 35.13562145197536, -75.76825321133653 35.15887242187409, -75.6912660851513 35.14986475425989, -75.68718801037467 35.17311265237318, -75.63585967851665 35.16708673105495, -75.63176934569734 35.19033195354371, -75.58043605932774 35.184289221555744, -75.5763334624128 35.207531763448976, -75.47366263712358 35.19539666915505, -75.46953722536406 35.2186357151298, -75.46541008213282 35.24187288094222, -75.46128120634724 35.265108162492034, -75.45715059692375 35.288341555679615, -75.45301825277794 35.31157305640602, -75.44888417282445 35.33480266057301, -75.44474835597705 35.358030364082865, -75.44061080114862 35.38125616283867, -75.43647150725113 35.40448005274409, -75.43233047319559 35.42770202970357, -75.45804888447071 35.430745843236885, -75.45391140231278 35.45396630498778, -75.44977217994645 35.47718484523922, -75.44563121628131 35.500401459897404, -75.44148851022608 35.523616144869386, -75.43734406068852 35.54682889606276, -75.43319786657554 35.57003970938591, -75.42904992679313 35.593248580747826, -75.42490024024633 35.61645550605829, -75.42074880583932 35.63966048122772, -75.41659562247538 35.66286350216724, -75.4423684865142 35.66590730521999, -75.43821886849432 35.68910876545667, -75.43406750146475 35.7123082629226, -75.45985242378745 35.7153488470984, -75.45570462723218 35.738546774024485, -75.45155508161668 35.76174272964167, -75.4773520726351 35.76478009100003, -75.47320610263327 35.78797446624455, -75.46905838352279 35.81116686164488, -75.49486745366106 35.81420099625072, -75.4907233153128 35.837391801449726, -75.51653914098803 35.84042231257509, -75.51239858750422 35.86361152219575, -75.53822117090593 35.86663840813641, -75.53408420639296 35.88982601680351, -75.55991354971047 35.892849275857195, -75.5557801782788 35.91603527819734, -75.55164506086587 35.93921927882131, -75.5774865094654 35.942239299305434, -75.57335499031099 35.965421683786296, -75.56922172513947 35.98860205802583, -75.59507528948558 35.991618836028636, -75.59094562775906 36.01479758431312, -75.58681421998182 36.037974313834084, -75.6126799105513 36.04098784544948, -75.60855211141475 36.06416293920789, -75.63442457983982 36.0671728343782, -75.63030039347811 36.09034628701085, -75.65617964195216 36.09335254404641, -75.65205907250355 36.11652435019199, -75.64793675911706 36.13969412017573, -75.67382815482668 36.142697121704146, -75.66970946357138 36.16586523540334, -75.66558902835459 36.1890313044275, -75.69149258181184 36.19203104656211, -75.68737577395369 36.21519544950868, -75.713286120186 36.21819154661456, -75.70917294384202 36.241354278129755, -75.73509008504533 36.24434672852711, -75.73098054437521 36.26750778325909, -75.75690448274527 36.27049658526996, -75.75279858191283 36.29365595786878, -75.74869094034868 36.316813263981, -75.77462706281837 36.31979879493501, -75.77052306634847 36.342954409134165, -75.76641732913613 36.36610794834451, -75.7923656462582 36.36909020437867, -75.78826355940613 36.392242041900694, -75.8142186864534 36.39522064270034, -75.81012025414279 36.418370773191846, -75.80602008217554 36.441518815767004, -75.83198741972977 36.44449413520966, -75.82789090758604 36.467640460986566, -75.82379265578234 36.490784690352974, -75.84977221442648 36.49375672459118, -75.84567762773784 36.51689922739617, -75.84158130138825 36.54003962529969, -75.83748323427623 36.5631779142375, -75.86348043578414 36.566147032075406, -75.85938604019097 36.58928358026997, -75.85528990383614 36.612418011012586, -75.85119202561677 36.635550320241215, -75.87720689342439 36.63851651494808, -75.87311269314323 36.66164706926061, -75.86901675100009 36.684775493577796, -75.86491906589059 36.7079017838401, -75.8909516234795 36.71086504869581, -75.88685762274325 36.733989569878105, -75.88276187904502 36.75711194852894, -75.878664391279 36.780232180591184, -75.90471466217653 36.78319250888639, -75.9006208652345 36.80631095771383, -75.89652532423085 36.829427251481135, -75.92258789066656 36.8323842703692, -75.91849604583761 36.85549877116961, -75.9445654740287 36.85845211159671, -75.94047732961653 36.881564814115386, -75.93638744226949 36.90467534869335, -75.96246918202934 36.90762537336401, -75.95838300046614 36.930734099936174, -75.98447160954181 36.93368044196506, -75.98038913801552 36.956787355221785, -76.00648461862374 36.95973001297218, -76.01056163629084 36.936622737167255, -76.24543537231985 36.96292125433767, -76.24140747976173 36.98603176880039, -76.26751704601772 36.98893394209237, -76.26349289907165 37.012042628983814, -76.25946703383323 37.0351491270964, -76.25543944920877 37.05825343237974, -76.25141014410363 37.08135554078429, -76.2473791174223 37.104455448261284, -76.24334636806832 37.127553150763, -76.26949016217249 37.13045340682502, -76.26546116846244 37.153549254448464, -76.29161184493506 37.15644581118751, -76.28758661116504 37.17953979864439, -76.33990313343492 37.185321455860176, -76.33588715050224 37.208413929698665, -76.36205299755937 37.2112990278368, -76.35804078631928 37.23438963005261, -76.3540268581889 37.257478005301245, -76.32785002938576 37.25459220561855, -76.32382888900969 37.277677999613346, -76.31980602729205 37.30076155890852, -76.24125099276165 37.29207771677508, -76.23720991763625 37.3151579855264, -76.23316711218799 37.33823601255832, -76.20697392223968 37.33533258195065, -76.20292388565024 37.35840801226952, -76.19887211426585 37.381481193147145, -76.19481860697893 37.40455212054674, -76.1907633626809 37.427620790432336, -76.18670638026228 37.450687198768975, -76.18264765861262 37.47375134152263, -76.20887388080747 37.47665687253255, -76.20481893212403 37.49971909449351, -76.23105208407384 37.50262091289162, -76.22700091269098 37.52568120878902, -76.25324099662645 37.528579312974635, -76.24919360688288 37.55163767753984, -76.24514448027938 37.57469375932914, -76.2410936157049 37.597747554312924, -76.23704101204747 37.62079905846247, -76.23298666819419 37.64384826775001, -76.28552633089033 37.6496357445003, -76.2814813105512 37.67268334389154, -76.27743455235333 37.695728639658675, -76.27338605518375 37.718771627776654, -76.26933581792854 37.74181230422144, -76.26528383947283 37.76485066496977, -76.26123011870081 37.78788670599958, -76.25717465449573 37.81092042328971, -76.23086533693368 37.80802631530449, -76.22680257930058 37.83105736308451, -76.22273807370512 37.854086079440776, -76.21867181902621 37.87711246035511, -76.214603814142 37.900136501810394, -76.24093534097618 37.90303197466422, -76.2368711428211 37.92605401297277, -76.26320965309284 37.928945754549076, -76.259149266055 37.95196578446599, -76.25508713004088 37.97498346216733, -76.25102324392746 37.997998783639794, -76.24695760659078 38.021011744871, -76.27331980292315 38.023900768269755, -76.26925798463729 38.046911702764426, -76.26519441518454 38.06992026864091, -76.26112909343946 38.09292646188986, -76.28750943893056 38.095812421175694, -76.28344794300925 38.11881657372372, -76.30983529481728 38.1216987926503, -76.30577762913427 38.14470089926571, -76.30171821240468 38.167700620521465, -76.29765704350206 38.19069795241203, -76.29359412129904 38.21369289093294, -76.32000524574913 38.21657236946211, -76.31594616177472 38.23956524374397, -76.34236430677396 38.242440976180184, -76.33830906545955 38.26543178099977, -76.3342520721017 38.28842017973327, -76.330193325572 38.31140616838017, -76.35662969399166 38.314278815614706, -76.35257479695153 38.33726272087032, -76.3485181468077 38.360244207687195, -76.3444597424303 38.3832232720678, -76.34039958268843 38.40619991001576, -76.31394078513257 38.40332594212724, -76.31800655565314 38.38034963381133, -76.29155480039825 38.37747191308443, -76.29562442074948 38.35449350918544, -76.29969228220934 38.33151268355925, -76.27325317125161 38.32863154290785, -76.27732487690126 38.305648631266344, -76.25089280043778 38.3027637417528, -76.2549683458371 38.27977874931489, -76.22854330159039 38.27689011249877, -76.23262268230374 38.25390304448583, -76.20620466799608 38.25101066192884, -76.21028787959229 38.22802152356444, -76.15746734363434 38.22222519178926, -76.16155996973389 38.19923432399493, -76.13515744676656 38.19633037704026, -76.13925389166005 38.17333745021887, -76.14334856936257 38.150342132164916, -76.14744148100999 38.12734442688227, -76.12105714293277 38.124437414814714, -76.12515386660844 38.10143766446065, -76.09877654384267 38.098526915364246, -76.1028770751404 38.0755251251752, -76.07650676540837 38.072610640625, -76.08061109992639 38.049606815839674, -76.0847136660093 38.026600620924725, -76.0888144647923 38.00359205988881, -76.09291349740964 37.98058113674157, -76.04022172856902 37.97474267464875, -76.04433011594573 37.951730077619, -76.04843673482829 37.928715127217394, -76.05254158635086 37.90569782745641, -76.05664467164655 37.88267818234951, -76.06074599184757 37.8596561959112, -76.06484554808519 37.83663187215689, -76.01222617196734 37.83078125120158, -76.01633505396215 37.80775528475032, -76.02044216967887 37.7847269897347, -75.9678507165319 37.77886148146882, -75.96373252048394 37.80188908307609, -75.95961255358678 37.82491435683857, -75.9554908147056 37.847937298739296, -75.90287188318673 37.842053438434874, -75.90700470784401 37.819031190588554, -75.9111357559465 37.796006611602216, -75.91526502863178 37.77297970549254, -75.8626851208508 37.76708166333371, -75.86682368762794 37.74405313242981, -75.87096047670087 37.72102228316207, -75.87509548920707 37.69798911955004, -75.879228726283 37.674953645614146, -75.90549583550697 37.67790330003195, -75.9096217736739 37.65486516893028, -75.91374594095447 37.63182473518734, -75.94000344456707 37.6347696243093, -75.94412032110408 37.611726540888924, -75.97037374229906 37.61466701607697, -75.97448333284798 37.59162128680883, -75.97859116044611 37.568573266252464, -75.98269722622008 37.54552295843441, -75.98680153129561 37.52247036738224, -75.99090407679736 37.4994154971245, -75.99500486384919 37.476358351690685, -75.99910389357386 37.45329893511114, -76.00320116709328 37.43023725141725, -76.0072966855284 37.40717330464135, -76.01139044999918 37.38410709881662, -76.01548246162466 37.36103863797729, -76.0416767181657 37.36397117630121, -76.04576148242552 37.340900110166515, -76.0498444983323 37.31782679673009, -76.05392576700089 37.29475124002901, -76.05800528954516 37.2716734441013, -76.03183300202137 37.26874232518967, -76.03591626617293 37.24566264982228, -76.03999778417358 37.22258074366477, -76.04407755713582 37.199496610757784, -76.01792314302337 37.19656250664175, -76.02200665102208 37.173476508382535, -75.99585913710742 37.170538708830136, -75.99994637585483 37.14745085051225, -76.00403186840546 37.124360778288214, -76.00811561587068 37.10126849620206, -76.01219761936093 37.07817400829869, -75.93382927093452 37.0693406131475, -75.92973086562459 37.09243401985917, -75.87748149153012 37.086524116635935, -75.87337040103323 37.10961459584652, -75.84724239139604 37.10665320694117, -75.84312407648885 37.129741116262174, -75.83900400193302 37.15282681383622, -75.81286648784184 37.149860650222664, -75.80873918082895 37.172943770368626, -75.7825976318147 37.16997319335854, -75.77846308765457 37.19305373222283, -75.7743267759959 37.216132047939915, -75.77018869571278 37.239208136470275, -75.76604884567827 37.26228199377542, -75.73988683340362 37.2593059179893, -75.73573973141609 37.28237717913528, -75.73159085517344 37.30544620134499, -75.70541932443442 37.30246534955888, -75.70126318815801 37.32553176809402, -75.69710527311427 37.34859593998643, -75.69294557816883 37.371657861202536, -75.66675903727126 37.368671872428955, -75.66259207081542 37.391731178793776, -75.65842331993397 37.41478822678244, -75.65425278348832 37.437843012364176, -75.65008046033894 37.46089553150917, -75.6238734001049 37.45790404645703, -75.61969379055 37.480953935924106, -75.61551238975241 37.504001551263336, -75.58929578991481 37.50100528939003, -75.58510709458649 37.52405026756458, -75.58091660346801 37.54709296392489, -75.57672431541233 37.57013337444609, -75.57253022927141 37.593171495104166, -75.56833434389615 37.616207321876296, -75.56413665813666 37.639240850740336, -75.55993717084189 37.66227207767533, -75.55573588085996 37.685300998661155, -75.52947666964697 37.68229781218858, -75.52526805651111 37.70532406660555, -75.52105763611225 37.728348007404, -75.51684540729418 37.75136963056686, -75.51263136889965 37.774388932078075, -75.48635154153133 37.77138025671865, -75.48213016494823 37.79439687691075, -75.4779069741977 37.81741116779081, -75.45161756810899 37.81439771595138, -75.44738703097362 37.837409318068545, -75.42109357509031 37.834391444919646, -75.41685568680512 37.85740035447812, -75.33796763380101 37.84832127184922, -75.33371132503929 37.87132677200076, -75.30741275329444 37.86829192233042, -75.30314908120563 37.891294722037394, -75.29888357546572 37.91429517460326, -75.29461623490002 37.93729327602063, -75.26830255225225 37.93425328914507, -75.26402783668831 37.957248679063625, -75.25975128166726 37.980241710195024, -75.23342801781904 37.977196942655986, -75.22914407956684 38.0001872548777, -75.22485829721752 38.02317520067854, -75.19852544875219 38.020125652084076, -75.19423227492905 38.04311087157153, -75.18993725236012 38.06609371700928, -75.16359481586585 38.063039386973436, -75.15929239357062 38.08601949870131, -75.15498811787228 38.10899722875577, -75.15068198758162 38.13197257313896, -75.14637400150846 38.154945527854224, -75.14206415846155 38.17791608890576, -75.11569546348116 38.174855911891896, -75.1113782020079 38.19782372098471, -75.10705907888465 38.220789128801606, -75.10273809291579 38.24375213135005, -75.07635422841507 38.24068681878236, -75.07202581224239 38.26364705838392, -75.06769552853565 38.28660488511208, -75.0633633760948 38.309560294977565, -75.05902935371877 38.33251328399216, -75.0546934602054 38.355463848168675, -75.02828326683506 38.35239269477838, -75.02393992431604 38.37534047781639, -75.01959470595223 38.398285828423084, -75.01524761053705 38.42122874261466, -75.01089863686293 38.44416921640825, -75.00654778372123 38.467107245822106, -75.00219504990231 38.49004282687555, -75.02863873779464 38.49311608848072, -75.024289712575 38.51604956723926, -75.01993880656427 38.53898058930066, -75.01558601855108 38.56190915068739, -75.01123134732309 38.58483524742291, -75.00687479166683 38.60775887553188, -75.03334799082108 38.6108298017996, -75.02899515255581 38.633751304950934, -75.02464042974867 38.656670331149584, -75.02028382118455 38.679586876423244, -75.01592532564729 38.702500936800824, -75.04242248864169 38.705569167371976, -75.0380677182137 38.72848108450572, -75.0337110606999 38.75139050842585, -75.02935251488242 38.774297435164385, -75.05586806363222 38.77736261576132, -75.05151324955794 38.800267385333555, -75.04715654706894 38.82316964941325, -75.15327909230217 38.83539225118914, -75.14894301380035 38.858293373682926, -75.20202474506218 38.864380830250816, -75.1976980524598 38.88728011798248, -75.22424684708851 38.89031805286981, -75.21992391395214 38.91321515991224, -75.24647987475306 38.91624934401553, -75.24216070553595 38.939144265155335, -75.2378396605056 38.962036657976235, -75.26440843407855 38.96506742693586, -75.2600911585558 38.987957624308535, -75.28666710645172 38.990984638482395, -75.28235360490164 39.01387263519973, -75.30893672953155 39.016895893028185, -75.3046270064239 39.03978168388545, -75.33121731019861 39.042801183810916, -75.3269113700077 39.06568476360586, -75.35350885533784 39.068700504072844, -75.3492067025426 39.09158186760568, -75.34490267840164 39.11446067720618, -75.37151301092263 39.1174729891342, -75.36721277980514 39.14034957294877, -75.3629106772739 39.163223594552136, -75.35860670211572 39.18609504999291, -75.35430085311631 39.20896393532093, -75.34999312906038 39.23183024658717, -75.37663334118237 39.234840117775285, -75.37232941923222 39.25770418077286, -75.36802362215802 39.28056566144115, -75.39467672155479 39.28357209305914, -75.39037473224417 39.30643131595539, -75.41703504295857 39.309433976721394, -75.41273686592514 39.332290936664414, -75.3594063977685 39.32628086000857, -75.36371594874281 39.30342455583455, -75.33705869438467 39.3004136965425, -75.34137205091247 39.27755513114407, -75.26142652536277 39.268498950020906, -75.26575503945784 39.245638789781424, -75.23911527686188 39.24261219795187, -75.24344758077874 39.21974978859253, -75.21681502838109 39.21671943170919, -75.22115111762335 39.193854778420274, -75.19452577299334 39.190820658032635, -75.19886564306923 39.16795376600701, -75.06579036139284 39.15272340397865, -75.06142216782109 39.17558862130524, -74.92835726841399 39.16025421045035, -74.93275376041603 39.13739068022011, -74.93714834090213 39.114524585905535, -74.94154101110938 39.09165593145535, -74.94593177227392 39.068784720819245, -74.95032062563074 39.04591095794818, -74.97690223265327 39.04898433305704, -74.98128353348945 39.02610768159013, -74.9856629313259 39.003228485413665, -74.9900404273931 38.980346748482106, -74.99441602292038 38.957462474751026, -74.99878971913611 38.934575668177104, -75.00316151726757 38.911686332718304, -74.87043817173586 38.89628881163626, -74.86603821233719 38.919176431021334, -74.83949256946717 38.91608431802036, -74.83508506873952 38.938969066084205, -74.83067565469187 38.961851283589965, -74.77756651770913 38.95565341395477, -74.77314391964528 38.97853240829464, -74.76871940111852 39.00140886493114, -74.74215590752787 38.99830310720551, -74.73772382941482 39.021176677874806, -74.73328982601866 39.04404770331851, -74.70671662335444 39.040937166853155, -74.7022750518906 39.063805299078005, -74.67569777963132 39.060690327760604, -74.67124863519537 39.08355556308646, -74.66679755706008 39.10641824210598, -74.66234454397416 39.12927836087157, -74.65788959468523 39.15213591543664, -74.63129131487783 39.14901547719267, -74.62682877693328 39.17187012049916, -74.6223642979348 39.19472219210166, -74.59575629526542 39.19159697460402, -74.59128421909422 39.214446127722326, -74.5646721463767 39.21131647366891, -74.56019246811155 39.2341627046383, -74.55571084032644 39.257006352852486, -74.52908904168274 39.253871918774045, -74.5245998032719 39.27671263762595, -74.52010861046642 39.2995507662333, -74.4934770825422 39.296411551890415, -74.48897827056908 39.319246743929874, -74.43570867671481 39.312955343805875, -74.43119657685682 39.33578725263782, -74.40455851550915 39.33263506614702, -74.40003878530702 39.35546403100374, -74.37339666237351 39.35230740539144, -74.3688692968938 39.375133422626575, -74.3422231140185 39.37197235748815, -74.33768810832629 39.39479542345803, -74.33315112650621 39.417615877921435, -74.30649521631607 39.4144500294539, -74.30195058571415 39.43726752547409, -74.29740397406731 39.460082402522815, -74.27073833325241 39.45691177051478, -74.26618406424429 39.47972368195004, -74.26162780926488 39.5025329669546, -74.23495243452108 39.49935755120037, -74.23038851359082 39.522163863429036, -74.22582260175375 39.544967541773296, -74.19913748978244 39.541787342073164, -74.19456390339482 39.56458804048689, -74.18998832115561 39.5873860975683, -74.16329346866391 39.58420111372826, -74.15871020326428 39.606996183732335, -74.13201129427912 39.60380675748479, -74.12742034075978 39.62659883679375, -74.12282738277412 39.649388263806884, -74.1182324190196 39.67217503460891, -74.1136354481926 39.69495914528577, -74.08691541146608 39.691764251385145, -74.08231073655952 39.71454535719782, -74.07770404960429 39.7373237954571, -74.07309534929196 39.760099562252684, -74.06848463431302 39.78287265367551, -74.06387190335678 39.805643065817776, -74.03712500739175 39.80244236716446, -74.032504552671 39.82520975678986, -74.02788207697638 39.847974459719914, -74.0232575789924 39.870736472050645, -74.01863105740247 39.89349578987922, -74.01400251088883 39.91625240930416, -74.00937193813256 39.939006326425186, -74.00473933781366 39.961757537343324, -74.00010470861096 39.98450603816077, -73.99546804920217 40.007251824981026, -73.99082935826384 40.02999489390884, -73.98618863447138 40.05273524105032, -73.98154587649907 40.075472862512626, -73.97690108302008 40.09820775440443, -73.97225425270634 40.120939912835496, -73.96760538422872 40.143669333916925, -73.96295447625693 40.16639601376111, -73.95830152745948 40.189119948481704, -73.95364653650381 40.21184113419363, -73.94898950205612 40.23455956701313, -73.94433042278158 40.25727524305769, -73.93966929734404 40.27998815844614, -73.93500612440634 40.302698309298556, -73.93034090263012 40.3254056917363, -73.92567363067583 40.34811030188211, -73.92100430720278 40.3708121358599, -73.91633293086915 40.39351118979504, -73.91165950033192 40.41620745981405, -73.93856130787168 40.41941718072086, -73.93389159280918 40.442110991528025, -73.96080084460631 40.44531692302229, -73.95613484959067 40.46800826947612, -73.98305154828148 40.47121041002805, -73.97838927788963 40.493899286989766, -74.0322392438553 40.50029186366286, -74.03688995489134 40.47760233444363, -74.14458674991806 40.49033675131572, -74.13995917068317 40.513027579404934, -74.11302669454018 40.50984983063324, -74.10839129047255 40.53253753212991, -74.08145469005674 40.52935533903956, -74.07681145606475 40.55203991039876, -73.99599429246933 40.54246763487933, -74.00065488492426 40.519784037405316, -73.9198701153479 40.510175656121795, -73.91519217428225 40.53285827548298, -73.86133248031923 40.526431436211176, -73.8566409143005 40.54911059441751, -73.7758466505976 40.53943845576793, -73.77113567191722 40.56211382062026, -73.69033926861277 40.55240362031112, -73.6856088713794 40.57507518612826, -73.52402724029541 40.55554158487011, -73.51926008756344 40.57820835294695, -73.43847498869191 40.56838495072005, -73.43368840860013 40.591047905416296, -73.29905205456767 40.574591530422055, -73.29423449679626 40.59724999769853, -73.24038048606856 40.59063794962685, -73.23554926227756 40.61329292567208, -73.15476392795814 40.60334296018577, -73.14991326079804 40.625994104943956, -73.09605352181781 40.61933953072692, -73.09118917558122 40.641987175548564, -73.03732487195867 40.63531545440902, -73.03244684020338 40.65795959521621, -72.97857799192711 40.65127072576367, -72.97368626822228 40.67391135848483, -72.91981289530524 40.66720533933501, -72.91490747323147 40.68984245990462, -72.88796765359288 40.68648293412056, -72.88305429816711 40.70911687707261, -72.82916840441925 40.702384792071086, -72.82424133790794 40.72501521528116, -72.74340844225635 40.71488517897558, -72.73846188667409 40.73751173875974, -72.68457061581094 40.73073710710205, -72.67961033629702 40.7533601385348, -72.65266159774777 40.749966303930805, -72.6476933596727 40.7725861436508, -72.59378968830416 40.76578543589635, -72.58880771364406 40.78840173971882, -72.50794830284512 40.77816876070399, -72.50294681341178 40.800781182899925, -72.47599149145861 40.79736160959272, -72.47098202460249 40.81997082955595, -72.41706523180606 40.813118640615514, -72.41204200936231 40.83572431262939, -72.35812088322638 40.82885496063654, -72.35308389888422 40.851457080696086, -72.32612027400964 40.848015882326465, -72.3210752946318 40.87061478971864, -72.26714193334344 40.86371934726395, -72.26208317949893 40.88631469521964, -72.235113448155 40.88286045055291, -72.23004668794442 40.90545257891862, -72.20307300099427 40.90199387045053, -72.19799822935515 40.92458277578993, -72.1440447731898 40.91765231012782, -72.13895620827316 40.94023764509727, -72.0849985101935 40.93329000898024, -72.07989614573738 40.95587176960785, -72.02593422614935 40.94890696174856, -72.02081805590369 40.97148514406874, -71.96685193523726 40.96450316318598, -71.96172195296394 40.987077763239014, -71.93473587958131 40.983580246038954, -71.92959785578968 41.00615160579251, -71.90260785114612 41.00264962189016, -71.89746178077318 41.02521773792847, -71.87046784684584 41.02171128702467, -71.86531372482733 41.04427615593499, -71.83831586359781 41.04076523773166, -71.83315368486815 41.06332685610411, -71.8279892270318 41.08588556610927, -71.96305489495505 41.10340238127394, -71.96819042119873 41.08084195037092, -72.02221805428205 41.08781912814047, -72.0170941091639 41.110380244144075, -72.04411648280806 41.11386298981288, -72.03899606867522 41.13642153201081, -72.1471271523451 41.15031263265991, -72.1420276761776 41.17286961469743, -72.13692594528968 41.1954236717264, -72.08283351488897 41.188485014745204, -72.0777179153146 41.21103546595541, -72.05066865688148 41.20755960933069, -72.04554498795316 41.23010679001779, -71.96439087502371 41.21965344491467, -71.95924751919897 41.242196672709134, -71.90514242505884 41.235206464677724, -71.89998518169432 41.257746074887486, -71.872929614588 41.25424444096127, -71.86776428298052 41.27678077036899, -71.81364712101755 41.26976444178521, -71.80846788932298 41.29229714628203, -71.75434657838233 41.2852636291727, -71.74915344035728 41.30779270485995, -71.69502800113976 41.30074199799586, -71.68982095055304 41.32326744098095, -71.63569140378382 41.31619954313878, -71.63047043441645 41.33872134953533, -71.49515049908166 41.32097767485169, -71.48989819258904 41.34349481004855, -71.46283407123417 41.33993335157724, -71.45757363652119 41.362447185508046, -71.43050560734902 41.358881256179174, -71.42523703932274 41.381391785477014, -71.41996613917281 41.4038993508711, -71.41469290536644 41.42640394857272, -71.38760935544876 41.422832860365126, -71.3823279753532 41.44533414338202, -71.27398960155601 41.431007137331115, -71.26868264083294 41.453504069884985, -71.21451331032814 41.446315110854876, -71.21983188425673 41.42381886888359, -71.16568183424147 41.41661409230877, -71.16035165214677 41.43910964185419, -71.10619768194373 41.43188766450268, -71.10085353200847 41.45437954564128, -71.07377363272566 41.45076201946332, -71.06842131205151 41.473250575755294, -70.96009782055378 41.45873781136127, -70.96547334638478 41.43625064739327, -70.970846493948 41.41376050776019, -70.97621726480453 41.3912673962438, -70.84094342226969 41.37303885330402, -70.84634075991724 41.350544531275055, -70.85173571203435 41.328047247194554, -70.85712828018518 41.30554700484808, -70.86251846593244 41.28304380802268, -70.86790627083757 41.2605376605069, -70.84088622592785 41.25688134767013, -70.84627742420699 41.234372608433134, -70.76524624576524 41.2233800092681, -70.75983773714623 41.245887680166355, -70.75442683973408 41.26839240598262, -70.72740879530132 41.264719251252714, -70.72198973521212 41.28722067206197, -70.71656828081916 41.30971914066744, -70.66251495368672 41.30235904117477, -70.65707955310965 41.324853841946236, -70.46791421117233 41.29896116229654, -70.46243600612749 41.32145050127855, -70.43541448365349 41.31773470279541, -70.42992808923451 41.34022072337951, -70.40290277227128 41.3365004444228, -70.39740818344134 41.3589831432834, -70.39191116628474 41.381462876072995, -70.38641171920939 41.403939639012975, -70.41345435343051 41.407660993497785, -70.40795825201124 41.43013514039677, -70.54322996515863 41.448681846023845, -70.53776035019459 41.471154793719094, -70.5648263978157 41.474852116777384, -70.55936015214063 41.49732243441371, -70.58643396008226 41.50101598580634, -70.580971088174 41.52348366822995, -70.49973820186027 41.51238957734438, -70.49425552769276 41.53485320847024, -70.46717605603789 41.53114657282028, -70.46168516002082 41.55360685572091, -70.43460187443173 41.54989574033266, -70.42910275149475 41.57235267169857, -70.37493054229594 41.564917354581326, -70.36941739222648 41.58737057721617, -70.28815661174599 41.57618559151955, -70.28262363501206 41.59863474684968, -70.228448167878 41.591156748452605, -70.222901152409 41.61360218707371, -70.16872210168478 41.60610697265269, -70.16316104158754 41.62854869081537, -70.08189013636289 41.61727385425624, -70.07630923420949 41.63971149157186, -70.02212710902802 41.63217358935238, -70.027719590311 41.6097366667118, -70.03330959623806 41.5872967341108, -70.0388971284333 41.56485379530985, -70.04448218851944 41.54240785407088, -70.05006477811779 41.519958914157236, -69.99594854392754 41.51240810017215, -69.9903543994915 41.534856319815084, -69.9632935278728 41.53107436708704, -69.95769113039626 41.553519228629625, -69.95208625369078 41.57596108914025, -69.94647889612946 41.59839994485732, -69.9194027057828 41.59461278760898, -69.91378708213625 41.61704827535491, -69.90816897200072 41.63948075125807, -69.90254837374367 41.661910211561214, -69.87545685320201 41.658117851455955, -69.8698279757906 41.68054393393461, -69.8641966046102 41.70296699377376, -69.85856273802267 41.72538702722057, -69.88567163389712 41.729180461319984, -69.88004106680063 41.751597821679795, -69.87440800339886 41.7740121476753, -69.86877244205081 41.79642343555803, -69.86313438111404 41.81883168158102, -69.8574938189447 41.841236881998775, -69.91177573706855 41.84881492206048, -69.90614429297106 41.87121778116041, -69.90051034913134 41.89361758622761, -69.89487390390404 41.91601433352088, -69.88923495564246 41.93840801930055, -69.94357154583813 41.945972358093265, -69.93794173836379 41.96836368106726, -69.93230942935564 41.99075193411306, -69.98667746996901 41.99830114380635, -69.98105431822187 42.020687021940304, -70.00824722387564 42.02445577506923, -70.00262740674533 42.04683892309521, -70.02982818251826 42.05060388966061, -70.02421170451379 42.072984302457236, -70.10584374829854 42.08425543055589, -70.10024230224099 42.10663379442589, -70.26359621573272 42.12906643477424, -70.26916256477325 42.10668600745543, -70.27472643705431 42.084302489211616, -70.28028783420984 42.06191588377462, -70.28584675787239 42.03952619487763, -70.23143414677057 42.032067946513926, -70.23700228357491 42.0096758676172, -70.10103527862279 41.99095961073243, -70.10663011753645 41.9685661913271, -70.11222247097716 41.946169702923555, -70.11781234058175 41.92377014926062, -70.12339972798566 41.90136753407856, -70.1289846348229 41.87896186111913, -70.07467025779636 41.87144991287204, -70.08026432321743 41.84904188753988, -70.08585590654042 41.82663081285141, -70.11300045082427 41.83038815017658, -70.11858374038025 41.807973677885684, -70.12416455349607 41.78555616326549, -70.17843643839022 41.79305703957243, -70.18400315569119 41.770635781895365, -70.45542478326456 41.807888825706236, -70.4499162501586 41.83031357834383, -70.47707522023128 41.83401650838151, -70.4715700691739 41.85643856340491, -70.49873685876145 41.86013770708585, -70.49323509427171 41.882557059369994, -70.4877308853709 41.90497335909418, -70.51491133304586 41.90866905954367, -70.50941051603989 41.93108264719969, -70.50390725381456 41.953493174343336, -70.55829748202598 41.96087354576143, -70.55280346241082 41.98328169393172, -70.58000740744738 41.986966018440725, -70.5745167933385 42.00937143919932, -70.56902373643484 42.031773786840624, -70.56352823512383 42.054173057624695, -70.59075172688428 42.05785426776038, -70.58525963725391 42.0802507976296, -70.61249097817043 42.08392820928031, -70.60700230477859 42.10632199313271, -70.63424149793087 42.109995604742174, -70.62875624534064 42.132386637478675, -70.65600329380881 42.136056447492926, -70.65052146658846 42.15844472401742, -70.64503719661666 42.18082990317701, -70.67229797617604 42.18449624610418, -70.66681713697164 42.20687865977094, -70.69408578176298 42.210541197099275, -70.68860837790733 42.23292084018498, -70.71588489101454 42.23657957036847, -70.71041092709414 42.258956437787766, -70.73769531160154 42.26261135928262, -70.73222479220816 42.28498544595316, -70.8141075254183 42.29592634956824, -70.80865223945011 42.31829831308406, -70.83595634480322 42.3219373244485, -70.8305045200961 42.34430649526647, -70.85781650473432 42.3479416920478, -70.85236814590085 42.37030806509685, -70.87968801290573 42.373939445762744, -70.87424312456373 42.39630301597473, -70.86879580344367 42.41866345074787, -70.86334604793234 42.441020746364174, -70.85789385641509 42.46337489910702, -70.83055035816668 42.45974220743896, -70.82508981505609 42.482092886974705, -70.81962683023896 42.504440416661474, -70.76492214469889 42.49716128371611, -70.75944488270416 42.51950500710152, -70.73208961489955 42.515858891969295, -70.72660398561162 42.53819913241748, -70.69924479899754 42.534548542339735, -70.6937507971808 42.55688529661326, -70.63902659467 42.54957101769247, -70.63351829672946 42.571903955579884, -70.60615328637316 42.56824026626821, -70.6006366042941 42.5905697115338, -70.57326768507214 42.58690154635719, -70.56774261361751 42.60922749577333, -70.56221506930575 42.631550273033994, -70.55668505049478 42.65386987443875, -70.55115255554097 42.67618629628875, -70.54561758279928 42.698499534886636, -70.71003908447194 42.72045603649751, -70.70453725027569 42.74276802954561, -70.6990329498684 42.76507682921422, -70.75387996809495 42.772363735129204, -70.7483850931237 42.79466997956894, -70.7428877536315 42.816973022336015, -70.73738794797802 42.839272859740575, -70.73188567452148 42.86156948809431, -70.72638093161865 42.88386290371045, -70.72087371762485 42.90615310290392, -70.71536403089405 42.928440081991155, -70.70985186977863 42.95072383729021, -70.70433723262961 42.97300436512075, -70.67685910412426 42.96936011872475, -70.67133601954454 42.99163709879211, -70.6658104531286 43.01391084448974, -70.66028240322163 43.036181352142115, -70.6547518681673 43.0584486180754, -70.62725187099997 43.054798949247115, -70.62171287073508 43.07706265456594, -70.61617137950076 43.0993231112781, -70.5611535588076 43.092010035749, -70.55559761217337 43.11426661028447, -70.55003916623124 43.13651992978932, -70.54447821931306 43.15876999059786, -70.53891476974928 43.18101678904608, -70.53334881586878 43.20326032147156, -70.52778035599903 43.22550058421347, -70.52220938846605 43.24773757361267, -70.51663591159435 43.269971286011575, -70.51105992370698 43.29220171775431, -70.50548142312547 43.31442886518658, -70.45035193995908 43.30709287884709, -70.44475891745049 43.32931611586027, -70.41719125095204 43.325641566472584, -70.4115897031134 43.34786120138551, -70.38401808906066 43.34418217709898, -70.37840801054412 43.36639820675871, -70.37279540252149 43.38861093934034, -70.34521383667739 43.38492712863491, -70.3395926884166 43.40713624962713, -70.3120071784518 43.4034479636734, -70.30637748459934 43.42565346993157, -70.30074525111714 43.44785566909869, -70.29511047630574 43.470054557533885, -70.28947315846422 43.49225013159797, -70.28383329589019 43.5144423876534, -70.22860834746419 43.50705021801535, -70.22295389702116 43.52923853412546, -70.1677252247733 43.52182908085705, -70.16205618021891 43.54401345356285, -70.13443894997377 43.54030216774842, -70.12876132457197 43.56248290370192, -70.1230811349725 43.58466030942282, -70.09545395018412 43.580944237674565, -70.08976517012685 43.603118000355714, -70.06213405401651 43.599397452178515, -70.05643667813007 43.62156756870335, -70.02880163303402 43.617842543915714, -70.02309565594594 43.64000901117071, -69.99545668420537 43.63627950959232, -69.98974210054202 43.65844232446701, -69.98402493395764 43.680601792838, -69.97830518272099 43.702757911084845, -69.78476483676315 43.67652820514542, -69.77900029025972 43.69867880456532, -69.72371005833249 43.69114647066189, -69.71793085406159 43.71329309459519, -69.71214903718301 43.73543636176214, -69.70636460594578 43.75757626854938, -69.568085920838 43.738667830847625, -69.5622687307494 43.76080281993773, -69.55644891017658 43.782934443782516, -69.55062645735642 43.80506269877393, -69.49529379903768 43.797468277539565, -69.48945665001854 43.81959253851988, -69.48361686017327 43.84171342438169, -69.31759821581912 43.818826372801325, -69.31171960120417 43.84094201103388, -69.28405136574361 43.83711259921271, -69.27816406382001 43.859224545514756, -69.250491970035 43.855390652261114, -69.24459597543677 43.87749890357286, -69.18924625114283 43.86981798487451, -69.19515429911776 43.84771035959717, -69.1121641150977 43.83615865808724, -69.10623799799802 43.85826534120184, -69.1003092002155 43.880368640995705, -69.09437771995353 43.90246855387323, -68.98368245037578 43.88700415625803, -68.97772418401239 43.909099422364115, -68.97176322151616 43.93119129629215, -68.9994458015239 43.93506427751468, -68.99348816936569 43.95715306939747, -68.98752783997318 43.979238461441184, -69.01522467723811 43.983107899483365, -69.00926768358637 44.005190200447544, -69.00330799159981 44.0272690939187, -68.99734559946764 44.04934457631321, -68.99138050537748 44.07141664404916, -69.01910369893679 44.07528315660467, -69.01314194742312 44.09735211611138, -69.00717749284844 44.11941765331959, -69.00121033339704 44.14147976465231, -68.97346899321167 44.13761232351144, -68.97944220406589 44.11555052122591, -68.95170912027889 44.111679216328, -68.95768567112334 44.08961429858682, -68.96365951385515 44.06754595950993, -68.96963065029138 44.045474202675884, -68.91420736183316 44.037720941448505, -68.92018786900414 44.01564639443982, -68.92616566847144 43.99356843780065, -68.87077534044731 43.98579974484982, -68.86478547671611 44.007877074871466, -68.75400722056291 43.99228839486792, -68.74799052329895 44.01436105997058, -68.74197110142468 44.03643031476666, -68.73594895311271 44.05849615567631, -68.72992407653403 44.08055857912135, -68.75763944636576 44.08446325956865, -68.75161787771722 44.106522574713836, -68.77934150849542 44.110423396219254, -68.77332325247242 44.13247959810769, -68.71786613125245 44.12467315931341, -68.72389646985802 44.10261758152529, -68.69617728696826 44.09870841684616, -68.70221093017953 44.076649727595026, -68.70824184077861 44.05458761778894, -68.68053695247775 44.050674909427954, -68.68657116231302 44.028609697181054, -68.69260264068818 44.00654107202023, -68.69863138943357 43.98446903752527, -68.58790640278087 43.96878029592306, -68.58185356895495 43.99085106423315, -68.5541718740712 43.9869181401122, -68.54811028055231 44.00898518394491, -68.5420459430403 44.0310488173035, -68.5359788596958 44.05310903661005, -68.48058605007701 44.04522877976821, -68.47450416844944 44.06728494895269, -68.39141370851671 44.055432342351075, -68.38531100021281 44.07748414094186, -68.30222272711681 44.06559305782418, -68.29609918884617 44.087640481474544, -68.2684015903158 44.08366813050669, -68.26226925729513 44.105711811867465, -68.25613414666486 44.127752065736644, -68.22842676632179 44.12377490948754, -68.22228285123384 44.14581141499862, -68.21613615230733 44.16784448637945, -68.18841898825684 44.16386252536886, -68.1822634751545 44.185891842332516, -68.17610517197349 44.20791771853464, -68.16994407684186 44.22994015041506, -68.16378018788598 44.25195913441521, -68.13604117183058 44.24797173737269, -68.1298684502086 44.26998695478093, -68.12369292850157 44.291998717692266, -68.11751460482938 44.3140070225534, -68.00650892274952 44.298011929001746, -68.00030363259394 44.32001551349129, -67.97255189943475 44.31600599299731, -67.96633775418861 44.33800579910219, -67.9601207887749 44.36000213899161, -67.9046000573243 44.351969318138735, -67.89836818580477 44.37396155859229, -67.87060523304517 44.369938573115164, -67.86436449034123 44.391927026308174, -67.83659780296827 44.38789955225597, -67.83034818371372 44.40988421523593, -67.82409572666434 44.43186539982285, -67.60194894711296 44.39949031733067, -67.59564532093249 44.42146549439252, -67.54011980909962 44.41332935764304, -67.53380124953041 44.435300418770176, -67.52747982139125 44.45726799591871, -67.4719395123697 44.44911389721014, -67.46560313827501 44.47107735274742, -67.43783046021377 44.46699372597377, -67.43148517082659 44.488953374321305, -67.42513699958398 44.51090952961265, -67.39735459193675 44.50682109489827, -67.39099749561261 44.528773437052884, -67.384637511059 44.55072227960376, -67.32905558917619 44.54253162092448, -67.32268062661419 44.56447632804751, -67.23930731338343 44.552158081358094, -67.23291132634102 44.574098332863414, -67.22651243273813 44.596035076738765, -67.17091788962976 44.58780077141349, -67.16450400056179 44.609733370818944, -67.15808719602785 44.63166245657835, -67.15166747406842 44.65358802517621, -67.12385563003178 44.64946366025522, -67.11742694010682 44.67138539243885, -67.08961142876755 44.66725653576541, -67.08317376551352 44.689174428638964, -67.07673317394155 44.71108879483756, -67.0489079476628 44.706955130781196, -67.04245837292704 44.728865651780545, -67.03600586343038 44.750772639602054, -66.98033837170911 44.74249152093132, -66.9738708145407 44.76439434287271, -66.94603460837745 44.760247202968955, -66.93955805193886 44.782146171057896, -66.91171819133103 44.77799453900837, -66.90523263025214 44.79988965036652, -66.89874411648559 44.82178121659194, -66.89225264804428 44.84366923418703, -66.9201106854789 44.84782180844412, -66.91362232432529 44.86970658695429, -66.94148883329069 44.87385529518515, -66.93500358406955 44.89573682968582, -66.96287856827159 44.89988167037463, -66.95639643563342 44.92175995594473, -66.98427989877894 44.92590092757812, -66.97780088737996 44.9477759592999, -66.97131892139817 44.96964742287681, -66.99921694767902 44.973784833326114, -66.99273810812508 44.995653034141256, -67.02064462490722 44.999786571603885, -67.01416891645145 45.02165150474865, -67.0420839274479 45.02578116771961, -67.03561135476635 45.04764282828874, -67.06353486369126 45.05176861526557, -67.05706543146574 45.07362699835724, -67.08499744203418 45.07774890783984, -67.07853115495227 45.09960400855565, -67.13441459050809 45.10783588512036, -67.12795755864038 45.12968800249496, -67.1214975759316 45.151536523777594, -67.2333421357378 45.167952481555304, -67.22690365823803 45.18979861096995, -67.28285256479349 45.197982075115995, -67.28927880354348 45.17613534421487, -67.29570210471367 45.154285010700036, -67.43555499348687 45.17466740008696, -67.44194475938978 45.15281196554, -67.44833160441826 45.130952932804114, -67.3364934757502 45.11465779783612, -67.34290186446243 45.09279637515613, -67.25906663890142 45.08053198265166, -67.25263992016346 45.10239249761183, -67.24621026471344 45.124249421400904, -67.19030763260434 45.11605102324798, -67.19674950507594 45.09419470556713, -67.20318843575933 45.07233479773089, -67.14731980968703 45.06412087600176, -67.15376800097722 45.04225799121551, -67.16021324938424 45.02039152425281, -67.16665555689319 44.99852147859708, -67.17309492548739 44.97664785773351, -67.17953135714838 44.95477066514913, -67.2632464494438 44.96708068631368, -67.26966168106318 44.94519900387684, -67.27607398728397 44.923313755173425, -67.24817874704586 44.91921521105897, -67.25459421475908 44.89732670740512, -67.26100675849166 44.875434644979386, -67.23312606534547 44.87133253640381, -67.23954176533697 44.84943722794236, -67.21166953068723 44.845331248586604, -67.21808838226369 44.82343269900546, -67.19022460243511 44.81932285037641, -67.19664660092835 44.79742106459494, -67.20306567576398 44.77551573556272, -67.20948182890929 44.75360686678285, -67.23732740619396 44.757715780701204, -67.24373457712382 44.73580306309008, -67.35511635856892 44.752195688333984, -67.36149635836647 44.73027818912695, -67.41718931629532 44.738448809205565, -67.42355428038267 44.71652715546261, -67.47924454107459 44.72468044005521, -67.48559447511484 44.70275463487619, -67.51343706927774 44.70682469893743, -67.51977804728332 44.68489505600686, -67.54761692418518 44.68896063112768, -67.55394895155202 44.66702715335428, -67.7766957188521 44.69939885035547, -67.78297630275465 44.677459373668654, -67.81082407522076 44.68148672301546, -67.81709572593306 44.65954341662536, -67.87278609164849 44.66758496214716, -67.87904273905066 44.645637520825794, -67.90688532601916 44.649651717324154, -67.91313305201929 44.62770045205347, -67.9409718793591 44.631710161844424, -67.94721068936921 44.60975507555461, -68.00288312875897 44.6177613435109, -68.00910695401262 44.59580213110263, -68.23184018532622 44.6276575924684, -68.23801255064221 44.60569241921837, -68.32155707860741 44.6175683429155, -68.3277083813941 44.59559874713386, -68.33385688486533 44.57362564586329, -68.41738541786607 44.585462125988684, -68.42351287162361 44.563484608446004, -68.42963753745397 44.54150359101051, -68.48531024350235 44.54937246356288, -68.47919774842784 44.571354089511026, -68.53489169096308 44.57920685189782, -68.54099200917582 44.5572246190443, -68.54708955151116 44.535238887879906, -68.6584558335944 44.55089183065184, -68.66452625030215 44.52890139182556, -68.67059390505203 44.506907459820155, -68.72626619531744 44.51470764294128, -68.7202107203817 44.53670217995209, -68.71415248858717 44.55869322281356, -68.70809149807495 44.58068076798561, -68.70202774698451 44.60266481192991, -68.75775778638557 44.610450684566736, -68.75170347915515 44.63243182327288, -68.7456464127371 44.65440945271138, -68.77352701536816 44.658296714652415, -68.77957797380184 44.636318786533046, -68.8074547135326 44.64020156766468, -68.80140986459888 44.66217979406658, -68.79536225974012 44.6841545067011, -68.78931189709525 44.70612570203688, -68.7832587748016 44.72809337654428, -68.81116221698063 44.73197316400404, -68.80511245445544 44.753937610109176, -68.83302426640545 44.757813509039224, -68.83906790613052 44.735848767376076, -68.84510878948207 44.71388050039193, -68.85114691832138 44.69190871161459, -68.85718229450804 44.66993340457377, -68.86321491990005 44.64795458280089, -68.86924479635373 44.62597224982916, -68.897122147341 44.629842185893175, -68.90314316780163 44.60785604720553, -68.90916144559426 44.585866403909264, -68.85343340842655 44.57812354346434, -68.85946115146595 44.55613099752771, -68.86548615041765 44.53413495502474, -68.92118978057344 44.54187661764679, -68.92719984145477 44.51987648176297, -68.89935300940357 44.51600804077415, -68.90536643111804 44.49400471490583, -68.96105012919291 44.50173681589171, -68.96704862630433 44.47972940212639, -68.97304439437715 44.45771850452927, -69.02871260480354 44.46543268376757, -69.03469346129275 44.443417704091665, -69.04067159752624 44.421399246723944, -69.04664701533628 44.39937731521711, -69.07446617139094 44.40322723286209, -69.080432785838 44.381201529037185, -69.19170713129706 44.39655820676848, -69.19764668179803 44.374527830616415, -69.20358353212383 44.35249398860275, -69.25920955230194 44.360146052377786, -69.26513152973119 44.338108146162256, -69.2710508157275 44.316066780253784, -69.29885494063863 44.31988594299596, -69.29294174157226 44.341927609725694, -69.37638550820125 44.35336092869797, -69.38228043763642 44.33131836192296, -69.38817268767538 44.309272337118685, -69.52722833257494 44.32824129886103, -69.53308745185352 44.306190322838226, -69.53894390813757 44.28413589355512, -69.65017873429518 44.2992334568831, -69.65600816103637 44.27717438398632, -69.62820230502172 44.2734065592127, -69.63403517430645 44.25134433665959, -69.63986539365041 44.22927867014635, -69.64569296483748 44.20720956324728, -69.65151788964997 44.18513701953835, -69.65734016986859 44.163061042597285, -69.60179578294292 44.155515856626124, -69.6076275738238 44.133437052636936, -69.63539261403655 44.13721143226826, -69.64121568531311 44.11512890117218, -69.86336470133996 44.14517118928645, -69.86913651154478 44.123082831231784, -69.87490570214963 44.10099105099765, -69.98598283688473 44.11590956651326, -69.9917250860006 44.09381317122455, -70.01949359968137 44.097532060252725, -70.02522716103094 44.07543194953318, -70.03095812085353 44.05332842507476, -70.03668648089888 44.031221490469505, -70.0424122429152 44.00911114931094, -70.04813540864913 43.986997405194465, -70.02039727900419 43.98328001363344, -70.02612391933793 43.961163171040795, -70.03184796432484 43.93904293314968, -70.03756941570845 43.91691930356051, -70.04328827523076 43.89479228587543, -70.09871811944898 43.90222048336357, -70.10442226956759 43.8800894761178, -70.13213428893799 43.883797013270005, -70.13782979655667 43.86166232182893, -70.1655378571363 43.86536538405843, -70.1712247276752 43.843227011514735, -70.19892882711714 43.846925598995895, -70.20460706599535 43.82478354844541, -70.21028273442349 43.80263812552293, -70.26567298473852 43.81002157440688, -70.2713339765478 43.787872177142496, -70.27699240644804 43.76571941381153, -70.33236678646388 43.77308496572314, -70.33801055286655 43.75092823416491, -70.3436517658878 43.728768142854584, -70.34929042724052 43.70660469541147, -70.35492653863611 43.68443789545671, -70.41026083744624 43.691784338988626, -70.41588231206765 43.66961358234669, -70.38822017097019 43.66594274933519, -70.3938451465525 43.643768950662576, -70.47681964588668 43.65476802861757, -70.48242395539357 43.63258997526398, -70.48802573193399 43.61040858206845, -70.49362497720566 43.58822385266063, -70.49922169290477 43.56603579067178, -70.50481588072607 43.54384439973483, -70.51040754236281 43.521649683484384, -70.56566173984866 43.52895790157068, -70.57123881802742 43.50675925184769, -70.57681337847264 43.48455728317325, -70.58238542287002 43.46235199918706, -70.58795495290373 43.440143403530406, -70.67077928383574 43.451070805758036, -70.67632823286132 43.428857982044555, -70.68187467848153 43.40664185258427, -70.68741862237155 43.384422421023565, -70.69296006620509 43.36219969101051, -70.66537399430717 43.35856261773024, -70.67091895377796 43.336336900989636, -70.72608110293281 43.34360626687692, -70.73161153881406 43.321376642800914, -70.7371394821773 43.299143730773174, -70.74266493468879 43.27690753444841, -70.74818789801337 43.254668057482895, -70.94115089365482 43.27997104102922, -70.94662931231596 43.25772612941994, -70.9521052627896 43.235477941328476, -70.95757874672552 43.21322648041632, -70.963049765772 43.19097175034665, -70.9685183215759 43.16871375478432, -70.97398441578258 43.1464524973957, -70.97944805003607 43.12418798184894, -70.9849092259788 43.10192021181364, -70.99036794525183 43.07964919096115, -70.99582420949481 43.05737492296434, -71.0012780203459 43.035097411497745, -70.91876542553447 43.02428847625357, -70.92423473406421 43.00200866203119, -70.92970158494248 42.97972561304212, -70.87472711382506 42.97250011489129, -70.88020345827647 42.950214463441455, -70.88567734334256 42.92792558548657, -70.8911487706619 42.905633484708986, -70.89661774187155 42.8833381647925, -70.92408009479661 42.886951732088555, -70.92954064741325 42.86465288038749, -70.93499874968806 42.84235081646924, -70.94045440325233 42.820045544022435, -70.94590760973588 42.79773706673737, -70.95135837076712 42.77542538830597, -70.95680668797308 42.75311051242163, -70.96225256297932 42.73079244277944, -70.96769599740995 42.70847118307601, -70.97313699288769 42.686146737009494, -70.94572822723258 42.68253603292085, -70.95117272706999 42.66020872457809, -70.89637303839604 42.652975501813, -70.90182697449156 42.630645657937094, -70.90727846904828 42.60831264015455, -70.96205441377612 42.61554457606059, -70.9674916038833 42.593207743293114, -70.97292636064986 42.57086774312731, -70.97835868569149 42.54852457927063, -71.0057318384365 42.55213335428276, -71.01115580656075 42.52978670735604, -71.01657734866275 42.50743690370822, -71.02199646635245 42.48508394705158, -71.07671314346064 42.49228710999159, -71.08211799565201 42.469930356477924, -71.08752043159242 42.44757045648643, -71.03282743492787 42.44036858956862, -71.03823928902645 42.418006196174616, -71.04364872513858 42.39564066463633, -71.04905574486715 42.37327199867378, -71.15837862161439 42.387655243994395, -71.16375958536533 42.36528214498653, -71.13643183544906 42.361692878794976, -71.14181630566553 42.339316976387266, -71.1471983716923 42.31693794937913, -71.15257803512233 42.29455580149686, -71.17988806309363 42.2981440902269, -71.18525942313296 42.27575849848308, -71.1906283862195 42.25336979287507, -71.13603388775934 42.246190378880954, -71.14141224911212 42.223799218802476, -71.14678821176764 42.201404953218244, -71.03766982291263 42.18699903271713, -71.04306694054704 42.16460298559619, -71.0157981238129 42.1609914800801, -71.02119871844788 42.138592668338156, -70.91216659755213 42.124106561293175, -70.90674248655806 42.146504042095394, -70.90131595799349 42.16889842891082, -70.84678818980751 42.161629195878284, -70.8522264736351 42.13923547630498, -70.85766233500534 42.11683866365008, -70.748677485266 42.10225318803079, -70.75413440112374 42.0798546295043, -70.75958888797598 42.05745298718594, -70.76504094742654 42.035048264814655, -70.7378172683543 42.03139255932803, -70.74327276027785 42.00898509899763, -70.74872582557322 41.98657456655167, -70.75417646584151 41.96416096573354, -70.7813825773852 41.96781565479527, -70.78682494323915 41.94539864963181, -70.7324263945395 41.93808581492597, -70.73787803681203 41.91566642922402, -70.74332725642938 41.893243986844176, -70.71614263217114 41.88958204827277, -70.721595271847 41.867156894951776, -70.69441846116224 41.86349116410923, -70.69987451635473 41.84106330496231, -70.70532814884473 41.818632401301144, -70.71077936022795 41.79619845687935, -70.71622815209864 41.773761475452, -70.7976944786822 41.78474214748982, -70.79226318115886 41.807180160344174, -70.87376468373114 41.81812466409995, -70.8791784752629 41.79568562390957, -70.88458986336454 41.77324354774332, -70.9932392372447 41.78777561513596, -70.9878511988416 41.81021905653754, -70.98246076669044 41.83265946015499, -71.145563376462 41.854337609002094, -71.15091873099826 41.83189517383437, -71.17810344646782 41.83549338713046, -71.18345057349177 41.81304757402395, -71.23781410910989 41.82023091991118, -71.2431471653307 41.797781395182646, -71.29750672214693 41.804947526051926, -71.29218536662577 41.82739772342249, -71.28686164563543 41.849844881835516, -71.28153555761467 41.87228899753149, -71.27620710100103 41.89473006675238, -71.27087627423056 41.91716808574159, -71.37973565557282 41.93145740097596, -71.38504302670216 41.90901804924186, -71.39034803743517 41.88657564549622, -71.4447658119651 41.89369414420169, -71.4500567381851 41.871248026750955, -71.45534531200455 41.84879886391712, -71.56415692747582 41.86298355017671, -71.56941970346662 41.84053001667939, -71.57468013992386 41.81807344355332, -71.52029395807209 41.81099070366197, -71.52556377278664 41.7885317600548, -71.55275005315752 41.79207486550895, -71.55801167149055 41.76961255732393, -71.56327095247944 41.74714722124497, -71.56852789766552 41.724678861039585, -71.57378250858872 41.70220748047683, -71.54661963382642 41.69866571110718, -71.55187775734223 41.6761916490816, -71.55713354723984 41.65371457468207, -71.50283687405825 41.64661997705407, -71.50810200903265 41.62414056743043, -71.51336480860904 41.60165815386417, -71.67620752577888 41.62288831132755, -71.68143297415665 41.600400877632936, -71.68665610476587 41.57791044490633, -71.74092878288852 41.584952759003954, -71.74613792456194 41.56245865959122, -71.77327125010258 41.56597328243452, -71.77847224613554 41.54347585520211, -71.78367093625393 41.52097543896614, -71.78886732197567 41.49847203751063, -71.79406140481734 41.47596565462094, -71.79925318629425 41.45345629408408, -71.80444266792033 41.430943959688314, -71.8096298512082 41.40842865522341, -71.97222422110764 41.42941552336131, -71.97737416888914 41.4068952310555, -71.98252183588012 41.38437197365193, -72.14511317059099 41.40520612875786, -72.15022360471494 41.38267789978594, -72.23152670592968 41.39303821498117, -72.22643376499168 41.41556744290274, -72.22133856661102 41.43809370563581, -72.2162411093009 41.46061699938522, -72.27048738581627 41.467505210264186, -72.27557316521475 41.44498125455116, -72.28065669055336 41.422454328996196, -72.285737963316 41.39992443739469, -72.29081698498528 41.37739158354338, -72.45345967551147 41.39794911012276, -72.45850144332509 41.3754113126148, -72.46354097760553 41.35287055789367, -72.54485189381437 41.36309156731554, -72.5498716923401 41.340546870200264, -72.55488926757589 41.31799922220263, -72.60908226259507 41.324791255467304, -72.60407635757669 41.34733956134735, -72.59906823414332 41.36988491549838, -72.6532918062201 41.37666173542299, -72.64829314764535 41.39920478840575, -72.64329227261663 41.42174488120936, -72.75180782561644 41.435251535041196, -72.75678530713726 41.4127101406627, -72.76176058198651 41.3901657844209, -72.81600575382717 41.39689301046726, -72.82096712938167 41.37434504642745, -72.82592630606217 41.35179412729159, -72.83088328531693 41.3292402568649, -72.83583806859289 41.30668343895417, -72.89004364264936 41.31339153400332, -72.88510054349457 41.335949002340364, -72.96643980946807 41.3459811256775, -72.9713653736316 41.32342268512307, -73.0255887509781 41.33008945604232, -73.03050044187653 41.307527423027274, -73.05760894434563 41.31085428631226, -73.06251261448396 41.288288987432615, -73.08961704119594 41.29161139529423, -73.09451269573624 41.26904283398839, -73.12161304481616 41.27236078673814, -73.12650068891904 41.249788966447426, -73.1313861686738 41.22721421356774, -73.21266273130647 41.23714134377816, -73.21752852921107 41.214562693403266, -73.2446183886084 41.21786315125046, -73.24947619284013 41.195281252277645, -73.2765619640028 41.19857725654322, -73.28141177971817 41.175992112426286, -73.38974897287892 41.189133529144776, -73.39457328758431 41.166544179156865, -73.399395467045 41.14395191197514, -73.45355114911222 41.150496549373514, -73.44874064891442 41.17308945787241, -73.44392801837016 41.1956794483609, -73.4981140085172 41.202208839510604, -73.5029149503287 41.17961821035059, -73.50771376669593 41.15702466236552, -73.56188330383581 41.16353624947561, -73.56666831267258 41.14093914802041, -73.57145120376228 41.118339134577084, -73.62560427333014 41.1248329202458, -73.63037336984227 41.10222936038163, -73.6351403562917 41.07962289537451, -73.66220779235361 41.082862954076056, -73.65744664426381 41.105469737930015, -73.68452163519105 41.10870598446298, -73.68927694379175 41.086098882220604, -73.69403014861719 41.063488877857104, -73.74816191218112 41.069947705534055, -73.75290134205682 41.04733416586672, -73.77996394926524 41.05055706600649, -73.78469544751411 41.027940312855655, -73.83881410097064 41.03437308677353, -73.84353183744047 41.01175280592559, -73.84824748789923 40.98912963628041, -73.95645848421746 41.001943085284, -73.96114871724303 40.97931576125844, -73.9658368767936 40.956685554513086, -73.97052296423264 40.934052468888254, -73.97520698092242 40.91141650822566, -73.97988892822404 40.88877767636849, -73.98456880749741 40.866135977161136, -73.98924662010127 40.843491414449495, -74.07030019279287 40.853051480195724, -74.07495848020824 40.830403102236836, -74.04794476496583 40.82722085888562, -74.05260681436877 40.804569942390245, -74.18766301644935 40.820438300196095, -74.19229391625933 40.7977829412754, -74.16528515659671 40.794617840411874, -74.16991983036654 40.771959948012864, -74.1745524588725 40.74929920898073, -74.17918304345733 40.7266356271698, -74.23316733023708 40.73295979675852, -74.23778424954355 40.710292739316145, -74.24239913248609 40.68762284601955, -74.24701198040097 40.66495012072739, -74.2516227946233 40.642274567299665, -74.30556724071371 40.64857969062826, -74.31016441501978 40.625900674931174, -74.33713331052847 40.62904673233115, -74.34172265570676 40.60636457674625, -74.39565378011368 40.61264368412262, -74.40022949858552 40.589958074048354, -74.40480320085356 40.56726964933175, -74.45871768543967 40.57353099153276, -74.46327777394384 40.55083911958238, -74.46783585375144 40.528144439944796, -74.44088938948137 40.525016466674025, -74.44545125702328 40.50231930199434, -74.45001111607098 40.479619337758265, -74.42307787430883 40.47648788140295, -74.42764151536363 40.45378544150702, -74.43220314812892 40.43108021019105, -74.40528311685496 40.427945274371, -74.40984852591087 40.405237576784714, -74.24839745120225 40.386343391693195, -74.25299551471453 40.363634850721304, -74.1454174707634 40.35095766465535, -74.1500365901773 40.328247650917234, -74.1546536799968 40.30553486558626, -74.15926874154854 40.28281931254162, -74.16388177615809 40.26010099566402, -74.13701444730175 40.25692271774082, -74.14163121325988 40.23420196974767, -74.14624595252049 40.21147846608183, -74.15085866640712 40.18875221062765, -74.17770873157166 40.1919295008585, -74.18231367164483 40.16920016748067, -74.1869165913863 40.14646808969218, -74.19151749211473 40.12373327138134, -74.21835195846242 40.12690545818806, -74.22294509785266 40.104167572517035, -74.22753622325894 40.08142695370997, -74.28118710176923 40.0877576692164, -74.28576473359145 40.065013659570916, -74.2903403588434 40.042266923788425, -74.29491397883372 40.01951746576389, -74.29948559486994 39.996765289393544, -74.32629053415515 39.999923156895726, -74.33085441505722 39.97716793442806, -74.27725763141596 39.97084875333817, -74.28183097249715 39.94809148449234, -74.2864023111532 39.92533150938959, -74.29097164868858 39.902568831931085, -74.29553898640665 39.879803456019225, -74.30010432560957 39.85703538555775, -74.30466766759847 39.834264624451514, -74.33143090600315 39.83742426866597, -74.33598653734195 39.814650485944284, -74.3627456835512 39.8178056892766, -74.36729360923928 39.79502888854716, -74.4475636171676 39.80446885917545, -74.45209241486707 39.781688376120464, -74.45661923243098 39.75890521609812, -74.53686947335748 39.768306232556675, -74.54137717747726 39.7455193988844, -74.56812475839166 39.74864452698387, -74.57262478084084 39.72585469005273, -74.5993682523082 39.72897538011383, -74.60386059808299 39.70618254354818, -74.60835098074779 39.683387043727926, -74.63508463255644 39.686502963393586, -74.63956734719521 39.663704471096395, -74.6440481036518 39.640903322993175, -74.64852690319923 39.61809952300348, -74.65300374710941 39.595293075048005, -74.65747863665322 39.57248398304859, -74.68418537190351 39.57559413109617, -74.68865261298836 39.552782064393554, -74.71535524057688 39.55588777610224, -74.71981483817883 39.53307273833859, -74.72427248995696 39.51025506753353, -74.72872819717485 39.48743476761401, -74.73318196109501 39.46461184250817, -74.73763378297886 39.44178629614532, -74.74208366408679 39.418958132456, -74.74653160567804 39.396127355371945, -74.79986197771622 39.40232178419249, -74.80429662303231 39.37948772477877, -74.80872933606706 39.35665105907008, -74.83538552642537 39.35974145346467, -74.83981063261204 39.33690184893476, -74.8664627169 39.33998780926588, -74.8708802211899 39.317145269579186, -74.97748150932631 39.329446790642656, -74.97308671310674 39.35229067080589, -75.07973567145731 39.364527955686235, -75.07536169334571 39.38737056621995, -75.2087362463065 39.402576589752286, -75.20438881247924 39.42541824503654, -75.23107405550358 39.428447477078834, -75.22673042062951 39.45128684871238, -75.33350959483947 39.463364069705754, -75.32918686675828 39.48620213199885, -75.32486225133584 39.50903757255953, -75.35157229860151 39.512047272424596, -75.34725150247995 39.53488041209098, -75.34292881894555 39.55771092178503, -75.36965182250357 39.5607171660865, -75.36533296396934 39.583545365415226, -75.33860424677019 39.58053879757525, -75.33427778472462 39.60336403553135, -75.32994943157856 39.6261866317243, -75.32561918610067 39.6490065822263, -75.32128704705853 39.67182388311063, -75.31695301321868 39.69463853045191, -75.31261708334661 39.71745052032597, -75.28585557929065 39.71443791097115, -75.28151202276824 39.73724691804881, -75.25474633748435 39.73422987885952, -75.25039514928893 39.75703589948547, -75.1968569724828 39.75098885207018, -75.19249241644471 39.77379156048857, -75.1389490004745 39.76772743394989, -75.13457106981674 39.790526825817345, -75.10779597026796 39.787488276553894, -75.10341039009744 39.810284670811065, -75.07663112158265 39.80724168948311, -75.072237886873 39.83003508248769, -75.01867258395515 39.8239361455101, -75.01426595505362 39.84672621013907, -75.00985739618015 39.86951358972275, -74.98306563035493 39.86645730978717, -74.97864940185346 39.88924167720817, -74.95185347346744 39.88618096360321, -74.94742957030509 39.9089623152304, -74.92062948096972 39.90589716755818, -74.916197898112 39.928675499763315, -74.88939364944275 39.92560591762731, -74.88495438185346 39.94838122678484, -74.8581459754699 39.945307209789924, -74.85369901811129 39.96807949227721, -74.826886455637 39.96500104002948, -74.82243180346967 39.987770292226664, -74.79561508653237 39.984687404333656, -74.79115273451532 40.00745362262364, -74.76433186474675 40.0043662986942, -74.75986180783734 40.02712947946274, -74.73303678687331 40.02403771910704, -74.72855902002732 40.04679785874275, -74.72407928889292 40.0695552777109, -74.67041104924832 40.063358122094115, -74.66591784738998 40.08611216864107, -74.66142267386262 40.10886348749492, -74.65692552737802 40.13161207475949, -74.65242640664691 40.15435792653985, -74.64792531037885 40.17710103894239, -74.64342223728237 40.19984140807473, -74.63891718606477 40.22257903004584, -74.63441015543232 40.24531390096591, -74.68817057123977 40.25151621782424, -74.68367310364047 40.27424897548708, -74.79123633019019 40.28660548007366, -74.79571069767614 40.26387144472251, -74.8001830989656 40.24113465212123, -74.85395122655638 40.24728692248599, -74.85841011627132 40.22454673898245, -74.86286704719976 40.20180380524209, -74.9166184633176 40.20793833263718, -74.9210618955826 40.18519201537528, -74.94793421795671 40.1882527855737, -74.95236992911308 40.165503406837445, -75.0061077912449 40.17161196141688, -75.01053001699422 40.1488592071226, -75.01495030115767 40.12610371626153, -75.0418100682969 40.12915118372919, -75.03739555212212 40.15190699218615, -75.06426266656821 40.15495066081135, -75.068671413722 40.132194535233026, -75.07307822539578 40.109435676226894, -75.12679410692915 40.115509397049685, -75.1311874529317 40.092747174182314, -75.13557887081755 40.0699822249299, -75.18927797144394 40.07603821602807, -75.19365593658225 40.05326991035216, -75.19803198095451 40.03049888534168, -75.25171428787286 40.03653714987804, -75.25607689242057 40.013762775896694, -75.30975391244903 40.01978394944006, -75.31410308401459 39.997006230797815, -75.34093816534201 40.00001033010147, -75.34527967067531 39.97722958648906, -75.37211054354181 39.98022925599692, -75.37644438770603 39.95744549105228, -75.43009925884279 39.96343185745885, -75.43441968981321 39.94064475965693, -75.46124368353598 39.943631457259585, -75.46555646486632 39.92084134551546, -75.54602040830461 39.92977581309604, -75.55031403350608 39.90698206258348, -75.57713266058575 39.909951677651314, -75.58141864909211 39.887154920709776, -75.63504898053807 39.89308118396497, -75.63932158296694 39.87028111094686, -75.64359231325867 39.84747835211444, -75.64786117263502 39.82467291138565, -75.70146308585862 39.83058084361395, -75.70571857815834 39.80777209753197, -75.73251606378652 39.81071958239929, -75.73676394466942 39.78790784819, -75.70997220680623 39.784960676658365, -75.7142239730179 39.76214658491495, -75.71847387800791 39.73932982622482, -75.7720358900276 39.7452188032459, -75.77627245295292 39.722398753143985, -75.7805071618974 39.69957604321298, -75.94116047224652 39.71714056298295, -75.94535888756681 39.6943133191505, -75.99891050131275 39.7001346526575, -75.99472357409834 39.7229625186399, -76.20903555424663 39.74608588277055, -76.21317649018565 39.72325554740404, -76.2173156131526 39.70042255427871, -76.37804265513554 39.717588691348624, -76.38214546137979 39.69475120822578, -76.40893268217889 39.69759753373279, -76.4130279405741 39.67475709387461, -76.43981086949631 39.677599002899974, -76.44389858510127 39.65475561001212, -76.41712140646248 39.651914005563846, -76.42121308101319 39.62906827273555, -76.47475739856344 39.634746760782846, -76.47883579110147 39.61189777728586, -76.48291239946997 39.589046156438584, -76.53643954671212 39.594706982822785, -76.54050288610784 39.57185211899208, -76.54456444848951 39.54899462498576, -76.59807441388007 39.55463779323392, -76.60212272032705 39.531777063944276, -76.6288741261243 39.53459217948432, -76.63291492366494 39.51172852305013, -76.63695395490096 39.48886224721644, -76.64099122098308 39.46599335592844, -76.6944639208627 39.47160943538299, -76.69848795653682 39.4487373236375, -76.70251023417589 39.42586260363362, -76.72923726740329 39.428663872865954, -76.73325205837116 39.40578624410718, -76.75997478979146 39.40858310168835, -76.76398209911926 39.38570256791376, -76.76798765865804 39.36281943703553, -76.77199146954658 39.33993371300645, -76.8254068447471 39.345513282308005, -76.82939746318048 39.32262435983953, -76.83338634004734 39.29973285143594, -76.88678450002635 39.30529478042216, -76.89076019744427 39.28240008136014, -76.91745567784639 39.28517458389417, -76.92142392228567 39.26227700216606, -76.92539043576038 39.23937684534017, -76.95207589043437 39.24214663529161, -76.9560349594751 39.219243603173226, -76.98271610551855 39.22200898495907, -76.9866677351373 39.19910308131014, -77.01334457116842 39.20186405539465, -77.01728876637533 39.178955283979946, -77.04396129101626 39.18171185082881, -77.04789805681962 39.15880021541589, -77.07456626869633 39.16155237549619, -77.07849561010256 39.138637879855274, -77.08242323926447 39.11572083118197, -77.10908142985858 39.118468281539606, -77.11300164313747 39.09554838003775, -77.11692014879144 39.0726259330988, -77.14356832211949 39.07536867416168, -77.147479420394 39.05244338180127, -77.15138881565406 39.02951555160442, -77.17802697573674 39.03225358380645, -77.18192897211033 39.009322915602795, -77.2085628184563 39.012056543373646, -77.212457420933 38.989123040949856, -77.23908695219129 38.991852264766436, -77.2429741657589 38.96891593191184, -77.24685968789612 38.94597707609985, -77.25074351970035 38.92303570130763, -77.27735735192725 38.92575991394752, -77.28123380677899 38.902815719796145, -77.3078433242218 38.9055355297515, -77.31171240709887 38.88258852003934, -77.31557980769969 38.859639002610166, -77.31944552711496 38.83668698144577, -77.32330956643438 38.813732460529, -77.32717192674671 38.7907754438438, -77.38033824482774 38.79619972678439, -77.38418757595292 38.77323960803576, -77.38803523500448 38.75027700081815, -77.39188122306548 38.727311909119024, -77.39572554121803 38.70434433692694, -77.4488519193492 38.70974979724878, -77.45268323290465 38.686779137580565, -77.47924278664827 38.689475421030835, -77.48306677038123 38.66650198310784, -77.48688909456827 38.64352607566149, -77.49070976028341 38.620547702684924, -77.49452876859974 38.597566868172485, -77.49834612058942 38.57458357611964, -77.50216181732374 38.551597830522795, -77.52868875292567 38.554288187154526, -77.53249714200459 38.53129968543838, -77.53630388033454 38.50830873784174, -77.54010896898258 38.485315348364445, -77.54391240901484 38.46231952100733, -77.5477142014965 38.43932125977235, -77.55151434749193 38.4163205686625, -77.55531284806447 38.39331745168188, -77.55910970427664 38.37031191283562, -77.56290491718998 38.347303956129856, -77.5666984878652 38.32429358557186, -77.57049041736202 38.301280805169895, -77.49109980025635 38.29320764970775, -77.48729098374369 38.31621949890267, -77.46082449790089 38.31351996445558, -77.4646389416886 38.29050842667592, -77.46845173595267 38.26749448439166, -77.36264424607646 38.25665799283943, -77.3664778735196 38.23364290346502, -77.3703098441849 38.210625418943955, -77.37414015914005 38.18760554328796, -77.37796881945178 38.16458328050963, -77.3251180823904 38.15914305232156, -77.32895630600063 38.13611903887001, -77.3025385694544 38.1333931190574, -77.3063807406756 38.110367044501864, -77.25356053117363 38.104903598045546, -77.25741224625759 38.08187578626325, -77.28381607398568 38.084609230999874, -77.28766052862612 38.06157873082033, -77.2348654227099 38.05610840020243, -77.23100977215677 38.07913826183947, -77.20460865358162 38.076396657903636, -77.20846990078358 38.0533671163064, -77.21232948234473 38.030335210019125, -77.15955369606046 38.02484104822452, -77.16342279442081 38.00180742423602, -77.18980441852868 38.00455622245871, -77.19366626081673 37.98151992041314, -77.14091554616746 37.976018891198045, -77.14478689403003 37.95298088221013, -77.14865657356644 37.929940525625234, -77.15252458584862 37.90689782546524, -77.15639093194751 37.88385278575291, -77.16025561293321 37.86080541051212, -77.16411862987488 37.83775570376766, -77.16797998384074 37.814703669545324, -77.11531277813395 37.80919087944639, -77.11918360460652 37.78613717393223, -77.12305276561722 37.76308114967211, -77.09673232723088 37.760319299412714, -77.10060538513375 37.73726128797114, -77.10447677740451 37.7142009661808, -77.10834650511114 37.69113833807209, -77.16095538093154 37.69665600115424, -77.16481233553009 37.67359041417305, -77.16866763230193 37.650522528259906, -77.22125969078817 37.6560226002031, -77.2251022269325 37.632951763538856, -77.22894311197571 37.609878635335775, -77.25523005636381 37.612621912251, -77.25139472224423 37.635695367934915, -77.33028025768132 37.64390176438408, -77.33409893387244 37.62082732938803, -77.36039123490741 37.62355432997035, -77.36420271820683 37.60047728039837, -77.44307095935405 37.60863289021205, -77.44686415079018 37.58555258043729, -77.47315066982478 37.58826265422723, -77.47693668087285 37.56517973803728, -77.50321897346181 37.56788541884889, -77.50699780892165 37.544799900140816, -77.53327587379607 37.547501188510225, -77.53704753846571 37.52441307118359, -77.54081758363614 37.50132268287557, -77.54458601034439 37.4782300276287, -77.54835281962663 37.45513510948638, -77.55211801251815 37.43203793249309, -77.55588159005332 37.40893850069405, -77.55964355326566 37.38583681813562, -77.56340390318782 37.36273288886492, -77.56716264085158 37.33962671693012, -77.51470752290044 37.33422593111357, -77.51847570308591 37.311118174900805, -77.52224226849827 37.288008184784026, -77.46981451059597 37.28259245883485, -77.47359050350909 37.25948089663735, -77.47736487914489 37.23636710930069, -77.45116401270327 37.23365381291211, -77.4549422868896 37.210538134831694, -77.40255553746152 37.205100022190464, -77.39876623621166 37.22821503799548, -77.3463737472876 37.222760021424804, -77.3501740722252 37.19964567001506, -77.35397277055891 37.17652910323543, -77.19689326539908 37.160070631891564, -77.20072336160086 37.136953863735165, -77.20455181964442 37.11383489032761, -77.15222464249125 37.10831761720169, -77.15606245536006 37.08519711817997, -77.15989862762703 37.06207442269087, -77.05530427043045 37.050993916747096, -77.05916075867698 37.02787038911665, -76.95460982614632 37.0167263773497, -76.95848659965448 36.993602032901855, -76.96236171762872 36.97047550686847, -76.93623831270861 36.9676800581024, -76.94011725275364 36.94455169910836, -76.94399453711935 36.92142116698618, -76.94787016685929 36.89828846579546, -76.89566024481036 36.89268748634358, -76.89954515800217 36.86955331293703, -76.9034284141782 36.84641697926576, -76.90731001439197 36.823278489391704, -76.93339790362754 36.82607996326301, -76.93727238758436 36.802938973560096, -76.94114521992609 36.77979583543989, -76.94501640170228 36.75665055296698, -76.9488859339616 36.733503130206806, -76.9527538177518 36.71035357122569, -77.00487905089138 36.715940897044234, -77.0087343844102 36.69278850875075, -77.01258807602689 36.6696339916922, -77.01644012678388 36.6464773499376, -77.02029053772273 36.623318587556895, -77.02413930988409 36.60015770862079, -77.0279864443078 36.5769947172009, -77.03183194203275 36.55382961736957, -77.035675804097 36.53066241320007, -77.03951803153774 36.5074931087664, -77.09155062165539 36.51305796974977, -77.09538034945663 36.489885868047494, -77.06936882352964 36.48710580866386, -77.07320235445239 36.463931964776805, -77.07703425608264 36.44075603251484, -77.0808645294527 36.417578015955456, -77.10685976839295 36.420357022515184, -77.11068298998597 36.39717657412101, -77.11450458760235 36.37399404924977, -77.11832456227046 36.3508094519813, -77.12214291501792 36.32762278639641, -77.12595964687141 36.30443405657665, -77.12977475885674 36.28124326660431, -77.18170416225048 36.28678494086753, -77.18550683041114 36.2635913892068, -77.1893078851816 36.24039578488962, -77.19310732758247 36.21719813200088, -77.19690515863347 36.1939984346263, -77.22285019180505 36.19676180674991, -77.21905776785083 36.2199618571125, -77.29691694463568 36.22822881983069, -77.30069314233147 36.205027713812186, -77.30446773854635 36.181824566059575, -77.25258194480112 36.17631870024821, -77.25636575003054 36.15311421940119, -77.26014795138252 36.12990770566227, -77.26392854987073 36.106699163120545, -77.26770754650802 36.08348859586577, -77.31955012883806 36.088991639474436, -77.32331673282204 36.06577834438285, -77.27148494230636 36.060276007988556, -77.27526073827688 36.03706140358023, -77.22344494367391 36.03154365076278, -77.22722992053454 36.008327744679576, -77.23101329518465 35.98510983091645, -77.17922427186237 35.97957738196025, -77.18301681292706 35.95635817893203, -77.1868077494085 35.93313697707903, -77.08328845071222 35.92202660228301, -77.08709929138554 35.89880484370288, -77.09090852072919 35.875581095827684, -77.03917823656438 35.870003189129896, -77.04299659575312 35.846778179748966, -77.04681334126724 35.82355118993688, -77.05062847412341 35.80032222379038, -77.07647685713297 35.80311210275436, -77.08028501523971 35.77988080123592, -77.10612934510914 35.78266629329729, -77.10993053302361 35.75943266039405, -77.11373011569019 35.73619706277979, -77.1175280941195 35.712959504554355, -77.16918851184174 35.71851624217555, -77.1729741741718 35.695276001294246, -77.17675823864343 35.672033807335175, -77.25422648266614 35.68033657227562, -77.25799288791906 35.657091342338255, -77.33545671903555 35.66535682622877, -77.33170638348409 35.68860313810764, -77.32795446416843 35.71184749901727, -77.37962490524386 35.71733914754245, -77.38336610299575 35.69409406880949, -77.38710572135173 35.670847038446404, -77.39084376130606 35.647598060557186, -77.39458022385216 35.62434713924655, -77.39831510998262 35.6010942786199, -77.42412547393903 35.60383227386365, -77.4278534335603 35.58057711830993, -77.43157982092727 35.557320031324, -77.22521848936549 35.535309286459004, -77.22898605668237 35.512053170963114, -77.2547713721416 35.5148182160165, -77.25853201289576 35.491559815286585, -77.31009583565319 35.4970771236246, -77.31384421602529 35.473816077809786, -77.31759101723293 35.45055311864485, -77.3213362402681 35.42728825023953, -77.325079886122 35.404021476704116, -77.32882195578496 35.380752802149686, -77.33256245024653 35.357482230688, -77.33630137049539 35.33420976643136, -77.34003871751945 35.31093541349284, -77.44301114330196 35.32191017976252, -77.446725625979 35.29863248193297, -77.4504385460501 35.2753529023349, -77.45414990449548 35.252071445083885, -77.45785970229461 35.228788114296094, -77.46156794042615 35.20550291408841, -77.4652746198679 35.18221584857823, -77.46897974159685 35.158926921883776, -77.4726833065892 35.13563613812375, -77.498387061299 35.138366876644916, -77.50208376277094 35.11507387366462, -77.50577891160899 35.091779021531735, -77.5571689837102 35.09722700705221, -77.56085197160378 35.07392957775422, -77.61223647212785 35.07936079777628, -77.61590730549882 35.05606079642761, -77.61957659775305 35.03275895699101, -77.62324434985544 35.0094552835897, -77.67460205312969 35.01486828216899, -77.67825766767037 34.99156204879091, -77.68191174828398 34.96825398905017, -77.68556429593045 34.94494410707205, -77.65990071067792 34.94224070669306, -77.66355701945217 34.918929372352274, -77.66721179503172 34.89561622434906, -77.67086503837544 34.872301266810375, -77.67451675044137 34.84898450386385, -77.6781669321868 34.82566593963764, -77.72944245803093 34.831065073675596, -77.73308054478925 34.80774397815692, -77.73671710741732 34.7844210889736, -77.81360800530581 34.792487572491154, -77.81722720334223 34.769161794974394, -77.82084488556663 34.7458342310935, -77.9233411119544 34.75653059270562, -77.92693616374525 34.73319978707953, -77.93052971016841 34.70986720208037, -78.08424743860654 34.72578733448391, -78.08780780996155 34.70245079855405, -78.09136669065911 34.67911248962413, -78.14259454880168 34.68438574459095, -78.14614138537141 34.66104494494599, -78.14968673742182 34.637702379945125, -78.20089832417487 34.64295819031022, -78.2044316437651 34.61961314330883, -78.20796348496337 34.59626633860091, -78.21149384869254 34.57291778032474, -78.21502273587474 34.54956747261911, -78.31737597735022 34.56002534060004, -78.31386817127039 34.58337708663435, -78.33946474523242 34.585981915026444, -78.34296727916848 34.56262981086397, -78.34646834815604 34.53927595985898, -78.4488243815579 34.54965242039156, -78.45230290759515 34.5262953975175, -78.4557799790542 34.50293663485006, -78.50694403155556 34.508099447622136, -78.5104091139904 34.48473823698425, -78.5871482331049 34.49245140317471, -78.59059606490379 34.46908739538859, -78.56502044984758 34.46652069259906, -78.5684721064407 34.44315531065025, -78.61961397760912 34.44828400950307, -78.62305366336123 34.42491619362188, -78.62649191185957 34.40154665683256, -78.75431439969282 34.41429491679108, -78.75772489936631 34.39092189670017, -78.76113397424318 34.3675471624808, -78.81225005355591 34.37261708162137, -78.81564718299978 34.34923993368892, -78.81904289368829 34.32586107932219, -78.89569411082967 34.333433881145105, -78.89907262875738 34.31005227148111, -78.87352633019387 34.30753235017685, -78.8769086944112 34.28414939219667, -78.9535352620644 34.29169611989433, -78.95690044803793 34.26831041603807, -78.93136236804334 34.265799184732124, -78.93473140349279 34.242412139689556, -79.03686955963165 34.252431700681385, -79.03352154465509 34.27582014277641, -79.11015288975406 34.28329391490642, -79.11348513192208 34.25990443117295, -79.11681598318027 34.236513258487406, -79.12014544439536 34.213120401002634, -79.12347351643325 34.18972586287191, -79.17452470090329 34.19468563089415, -79.1778408829457 34.171288722422275, -79.1811556817983 34.147890141025584, -79.18446909832237 34.12448989085912, -79.158958688806 34.12201304429063, -79.16227596867185 34.09861147702045, -79.21328742249578 34.103560483965694, -79.21659283355949 34.0801565615125, -79.21989686699872 34.056750982465445, -79.34739267400349 34.0690501920494, -79.35066912455194 34.04564123041334, -79.3761663874596 34.048088755551696, -79.37943623153572 34.02467779963108, -79.3539442098084 34.02223061904483, -79.35721793062223 33.99881836210272, -79.3604902878421 33.975404463746216, -79.41145448745341 33.98029345607489, -79.41471501161527 33.956877230216044, -79.4179741781198 33.933459370685675, -79.4689218614739 33.938331030346426, -79.47216920658597 33.91491085227006, -79.47541519996663 33.89148904826971, -79.47865984245601 33.86806562250749, -79.5295805428843 33.87291926740584, -79.53281338071842 33.84949353565636, -79.53604487357262 33.8260661898984, -79.53927502228237 33.802637234295744, -79.5425038276825 33.779206673012546, -79.59338710850321 33.784041623049475, -79.59660413102704 33.76060877195268, -79.59981981613413 33.73717432293577, -79.65068657461066 33.74199196125011, -79.65389048847616 33.71855523142283, -79.6570930708072 33.69511691144048, -79.75879784907623 33.70470164359608, -79.76197824021301 33.68126036839364, -79.78740191451456 33.68364625225756, -79.79057576952727 33.66020305300662, -79.81599530298219 33.66258461326362, -79.81282666331933 33.68602815301927, -79.83825248490697 33.6884060705016, -79.84141590855427 33.66496219083676, -79.89226032917051 33.66970539722392, -79.89541200873066 33.64625925934839, -79.89856237904068 33.6228115454639, -79.90171144091288 33.599362259740296, -79.95252884468327 33.60408750298167, -79.95566617914754 33.58063597171423, -79.95880221101335 33.55718287639335, -80.00960302031433 33.561890840994934, -80.01272733640988 33.53843550919775, -80.0158503557358 33.51497862113729, -80.09202824584447 33.52200868894118, -80.09513435597002 33.49854923672804, -80.12052388323386 33.50088429620769, -80.12362350090619 33.47742295881962, -80.14900887187244 33.479753702624116, -80.15210200145266 33.456290484285624, -80.17748321521468 33.45861691316417, -80.18056986106207 33.43515181810176, -80.18365522676973 33.41168518599839, -80.18673931313067 33.3882170210292, -80.23747367128614 33.39285593070524, -80.24054608838902 33.36938556564864, -80.2436172319317 33.34591367553428, -80.26897557814016 33.34822649427809, -80.27204025679744 33.32475274794235, -80.27510366557044 33.30127748463147, -80.32580269280288 33.305889854105104, -80.32885445472776 33.28241240803909, -80.33190495253525 33.25893345281353, -80.48396441924375 33.27267114740471, -80.48698253038839 33.24918868854786, -80.56301046834048 33.256002877857355, -80.5660117656268 33.23251792459788, -80.61669174580571 33.237040182433326, -80.61968142532899 33.21355307130078, -80.62266986691718 33.19006446479409, -80.67333313192685 33.19456950867076, -80.67630996738218 33.17107875348026, -80.6792855706274 33.14758651075227, -80.83123718012533 33.161002336830016, -80.83418045533726 33.13750664960963, -80.83712251244144 33.11400948164949, -80.88776027189914 33.11844833454519, -80.8906907495891 33.094949040108176, -80.89362001486916 33.07144827278111, -81.02017985307272 33.08247264120576, -81.02308201184086 33.05896878836727, -81.02598297017366 33.035463469721954, -81.07659304518103 33.03984412293218, -81.0794824500244 33.016336699153776, -81.08237066010473 32.992827817430125, -81.03178128850068 32.98844845175574, -81.03467864997707 32.96493876080801, -81.0375748139825 32.94142762079983, -81.08814349892879 32.94580569689542, -81.09102812914725 32.92229246645938, -81.09391156755215 32.898777794828085, -81.09679381487935 32.875261686189766, -81.09967487186408 32.8517441447331, -81.10255473924101 32.82822517464693, -81.1530756536976 32.83258415190445, -81.15594401362515 32.80906311171335, -81.15881118958069 32.78554065076464, -81.20931532573097 32.78988247376503, -81.21217100582608 32.76635795201075, -81.21502550757457 32.74283201737476, -81.29075796913203 32.74931308261825, -81.29359583239204 32.72578477600135, -81.31883674171043 32.72793688100342, -81.31600403325116 32.751465507495986, -81.31317015550331 32.774992724294506, -81.31033510774525 32.79851852720756, -81.3608507264353 32.80281275501459, -81.35802483182023 32.82633777627367, -81.35519776992592 32.849861374765524, -81.50682935744004 32.86265263465503, -81.5096254211206 32.839127142993135, -81.51242033006169 32.81560022707545, -81.51521408497615 32.79207189109398, -81.5180066865762 32.76854213924088, -81.5207981355735 32.745010975708624, -81.54604754925592 32.74712739193699, -81.54883268839868 32.72359450628671, -81.55161667844564 32.70006021709724, -81.55439952010538 32.67652452856203, -81.50393256441025 32.67228962113159, -81.50672456123462 32.648753168793654, -81.5095154069246 32.62521532598914, -81.51230510218961 32.60167609691226, -81.46187278799968 32.597427236042435, -81.46467162160417 32.57388726016155, -81.46746930204732 32.550345906889575, -81.39185873236661 32.54394481739628, -81.39467067564885 32.52040304992054, -81.39748146097038 32.4968599141844, -81.40029108904395 32.47331541438266, -81.40309956058165 32.44976955471021, -81.45346458592998 32.45403834543903, -81.45626164192993 32.43049048817196, -81.45905754695221 32.4069412789314, -81.5094058042726 32.41119295799407, -81.51219030527626 32.38764176053671, -81.51497366085015 32.36408921900692, -81.56530514400711 32.3683237929871, -81.56807710707689 32.34476927262954, -81.57084793025439 32.3212134161043, -81.5736176142403 32.29765622760891, -81.57638615973472 32.27409771134102, -81.57915356743715 32.250537871498636, -81.58191983804655 32.226976712279914, -81.63219359848793 32.231191635037035, -81.63494850739114 32.207628521237865, -81.63770228471414 32.18406409597372, -81.6879592827635 32.188261932910535, -81.69070170985873 32.164695562489314, -81.71582647571957 32.16678823508643, -81.71856266827787 32.143220242859314, -81.76880472603253 32.14739309873961, -81.77152958077107 32.12382317179116, -81.77425331698018 32.10025194897163, -81.7240316840931 32.09608036383208, -81.72676450872828 32.072508485432394, -81.72949621209973 32.0489353200426, -81.77969743655494 32.05310563252188, -81.7824178212917 32.02953054729333, -81.78513709024118 32.00595418299716, -81.78785524408751 31.98237654383465, -81.79057228351427 31.958797634007414, -81.7404118266941 31.954629872598847, -81.7431379340514 31.93105033527265, -81.74586292426288 31.907469536163294, -81.74858679801287 31.88388747947259, -81.75130955598516 31.860304169402532, -81.75403119886305 31.836719610155225, -81.7039252399323 31.832539277262736, -81.7066559274087 31.80895411689947, -81.70938549707772 31.78536771624222, -81.71211394962332 31.761780079493306, -81.714841285729 31.73819121085521, -81.71756750607761 31.714601114530666, -81.69254126516077 31.712506651085672, -81.69527143892505 31.688915655345504, -81.77033767733919 31.695186257289812, -81.77305153364034 31.671593071475286, -81.77576428029307 31.647998670106396, -81.75075142743047 31.645913054576248, -81.75346812861743 31.622317765380732, -81.75618371948246 31.598721269275885, -81.80619007732591 31.60288726928078, -81.80889443910303 31.579288923101522, -81.83389390893987 31.581365695478507, -81.83659210728588 31.55776582734801, -81.83928920342228 31.534164764208334, -81.84198519802216 31.5105625102638, -81.84468009175805 31.486959069719013, -81.847373885302 31.46335444677871, -81.89732496509207 31.467492957840467, -81.90000756068045 31.44388651029758, -81.90268906146198 31.420278888298167, -81.90536946810464 31.39667009604753, -81.90804878127587 31.373060137751043, -81.91072700164253 31.349449017614184, -81.91340412987101 31.325836739842522, -81.93835073897216 31.327898158385462, -81.93567865068032 31.351510759584727, -81.96063118754697 31.353568571217362, -81.9632982353609 31.32995564722597, -81.96596419573491 31.30634156933796, -81.96862906933194 31.28272634175928, -81.97129285681427 31.259109968696123, -81.97395555884373 31.23549245435471, -81.97661717608159 31.211873802941355, -81.97927770918858 31.188254018662363, -81.98193715882492 31.16463310572425, -82.0317643416895 31.168731774871073, -82.03441265814584 31.14510909008351, -82.03705989646546 31.12148528458628, -82.03970605730451 31.0978603625863, -82.04235114131872 31.07423432829062, -82.04499514916321 31.050607185906205, -82.04763808149265 31.026978939640266, -82.05027993896108 31.003349593699884, -82.07515970933623 31.00539077572377, -82.07779548064244 30.9817600099606, -82.08043018039413 30.95812815270727, -82.13017229222845 30.962197458310108, -82.13279590357534 30.938563866069774, -82.13541844866617 30.91492919029565, -82.13803992814888 30.891293435195458, -82.14066034267083 30.86765660497708, -82.14327969287888 30.844018703848302, -82.1458979794194 30.820379736017113, -82.14851520293814 30.79673970569132, -82.1511313640805 30.773098617078908, -82.15374646349117 30.749456474387802, -82.12891998159579 30.74742670174837, -82.13153901099166 30.723783834774256, -82.13415697795614 30.700139922365224, -82.13677388313357 30.67649496872905, -82.13938972716788 30.65284897807371, -82.1420045107024 30.629201954606923, -82.14461823437998 30.605553902536567, -82.14723089884293 30.581904826070485, -82.14984250473306 30.558254729416475, -82.15245305269163 30.534603616782366, -82.15506254335945 30.510951492375973, -82.15767097737674 30.487298360405052, -82.10813018067249 30.48323428113732, -82.11074749566002 30.459580803934998, -82.11336375132751 30.43592632803746, -82.11597894831603 30.41227085765215, -82.11859308726609 30.388614396986437, -82.12120616881768 30.364956950247702, -82.14595131492105 30.366989294271328, -82.14855838134243 30.343330535144336, -82.15116439361205 30.319670798132506, -82.10169479057123 30.31560353015876, -82.10430965767878 30.291943482073744, -82.1069234679773 30.268282464971268, -82.0327552379125 30.26215429446475, -82.0353828388786 30.23849331272842, -82.03800937842537 30.21483137106979, -82.04063485719385 30.191168473695317, -82.0432592758246 30.167504624811375, -81.99385766892689 30.16340235804402, -81.9964909076646 30.139738233740736, -81.99912308363074 30.116073166795644, -81.94974469215823 30.11195665937968, -81.95238567568698 30.08829132942404, -81.95502559381919 30.06462506569444, -81.95766444719737 30.04095787239641, -81.96030223646359 30.01728975373516, -81.96293896225936 29.993620713916037, -81.96557462522568 29.969950757144222, -81.9162588536709 29.965822741417487, -81.91890329864843 29.942152552698403, -81.92154667818535 29.918481455892742, -81.92418899292346 29.894809455205188, -81.92683024350401 29.871136554840042, -81.90219333290803 29.869068076450844, -81.89954716684373 29.892740634739145, -81.85026612106377 29.888591325687756, -81.85292211652637 29.86491945353909, -81.85557704264805 29.841246686603277, -81.85823090007251 29.817573029084087, -81.8608836894428 29.79389848518524, -81.86353541140157 29.770223059110297, -81.8661860665909 29.746546755062756, -81.81696741216417 29.742386029277288, -81.81962680527597 29.718709543000497, -81.82228512903397 29.69503218761523, -81.82494238408098 29.671353967324226, -81.82759857105934 29.647674886330165, -81.85218786788127 29.649755805907812, -81.85483809339541 29.626075521395727, -81.8574872540527 29.602394384356998, -81.80832910100261 29.598230052960425, -81.81098697728315 29.57454876321296, -81.81364378613299 29.550866629800087, -81.81629952819306 29.527183656923548, -81.81895420410368 29.503499848785, -81.82160781450469 29.479815209585965, -81.82426036003541 29.456129743527644, -81.82691184133473 29.43244345481125, -81.80236825239247 29.43035791459709, -81.80502354577972 29.406671157831408, -81.75594872261753 29.40248915318452, -81.75861269709742 29.378802285673707, -81.7612756035105 29.355114608791524, -81.76393744249688 29.331426126737902, -81.76659821469623 29.307736843712703, -81.71756582563063 29.303542166802735, -81.72023526025228 29.279852794803173, -81.72290362554305 29.25616263068812, -81.72557092214336 29.232471678656438, -81.67657118674208 29.228263647859844, -81.67924713032123 29.204572623973203, -81.68192200267583 29.180880821024935, -81.68459580444693 29.157188243213117, -81.68726853627503 29.133494894735524, -81.63831112161728 29.129274247693914, -81.64099248184911 29.10558084914215, -81.64367276961478 29.081886688777715, -81.61920506670954 29.079771284436863, -81.62188912691978 29.05607672612624, -81.6245721140473 29.03238141462584, -81.57565870335311 29.028140455149334, -81.5783502974199 29.0044451169437, -81.58104081589465 28.9807490343999, -81.60548740679175 28.982870722538163, -81.60817201467786 28.959173537909315, -81.61085555014968 28.935475617103613, -81.56198258155295 28.931229828756297, -81.56467470843624 28.90753190145028, -81.56736576040373 28.883833246816284, -81.46966897976802 28.875298269291658, -81.47237826243746 28.851600352481995, -81.475086463924 28.827901717653905, -81.42626264880828 28.823612549537458, -81.42354480175628 28.84731044934206, -81.35030124173569 28.840846667659697, -81.353033553181 28.81714987549723, -81.35576477466608 28.79345237066894, -81.25815768632907 28.784782979493055, -81.26090708188566 28.761086254451815, -81.26365538125964 28.737388826062208, -81.21487644399282 28.733032500605084, -81.21763326882323 28.709335122219315, -81.22038899502299 28.685637049335412, -81.17163287287956 28.681266817716146, -81.17439711245329 28.657568807357627, -81.17716025095663 28.633870111350415, -81.17992228904502 28.61017073388377, -81.18268322737343 28.58647067914678, -81.1096133959455 28.579890992459394, -81.11238762572967 28.556191401846476, -81.11516075145651 28.532491143045327, -81.09081552808058 28.530290979887912, -81.09359234245693 28.506590437997883, -81.06925281076053 28.50438681043584, -81.0720333101766 28.480685990802268, -81.0748127037751 28.456984516013645, -81.02615549700278 28.45256725762967, -81.02894335568124 28.428865898547237, -81.03173010613352 28.405163893154104, -81.03451574901796 28.381461245635833, -80.98589084781034 28.377030923461103, -80.98868494072258 28.353328408849514, -80.99147792366765 28.32962526095529, -80.99426979730444 28.30592148396264, -80.99706056229138 28.28221708205555, -80.99985021928629 28.258512059417612, -81.02413834593717 28.2607272098618, -81.0269221266709 28.237021183728306, -81.02970480257845 28.213314544994763, -81.00542621192899 28.211100168682268, -81.00821254888993 28.18739330895043, -81.01099778048517 28.163685845219018, -80.96246235702237 28.15924713881053, -80.96525600535915 28.135539853118733, -80.96804854594674 28.111831972261772, -80.97083997944152 28.08812350042063, -80.97363030649933 28.064414441775874, -80.92513654902484 28.05996352342657, -80.92793527485834 28.03625466467561, -80.93073289188169 28.01254522795216, -80.88226174989931 28.00808055601829, -80.88506775382481 27.984371331742793, -80.78815533165928 27.975397617641462, -80.79097920073356 27.95168940600412, -80.79380195194442 27.927980630349776, -80.7695856037043 27.925728426171297, -80.7724119767791 27.902019488338667, -80.72399149244289 27.89750439863011, -80.72682621999236 27.873795703263276, -80.72965982616512 27.85008645712248, -80.6812619348432 27.845557668333832, -80.68410388366982 27.821848677231824, -80.68694470878754 27.798139144182834, -80.68978441086021 27.774429073361233, -80.69262299055114 27.750718468940875, -80.64426658501779 27.746177606987946, -80.64711348958362 27.722467279484945, -80.64995926944563 27.69875642720648, -80.6528039252677 27.67504505432495, -80.65564745771314 27.651333165012254, -80.63148950801568 27.64905862188747, -80.6343366329474 27.625346625491655, -80.61018431376544 27.623068671002162, -80.61303502766836 27.599356572873173, -80.61588461654644 27.575643971302842, -80.61873308106303 27.55193087046109, -80.62158042188094 27.528217274517583, -80.62442663966246 27.504503187641266, -80.57617183715573 27.499939906321355, -80.57902633847657 27.47622614940865, -80.58187971446101 27.452511910376302, -80.53364738403714 27.44793501892761, -80.53650903186038 27.42422112244362, -80.5393695520551 27.40050675265136, -80.49115968238051 27.39591626587573, -80.49402846272967 27.372202251220088, -80.49689611316607 27.34848777206581, -80.49976263435458 27.32477283257784, -80.4274969529557 27.317862264248117, -80.43037640594038 27.29414811246296, -80.43325472560063 27.270433509390326, -80.43613191260279 27.24671845919328, -80.43900796761272 27.22300296603445, -80.39087292391562 27.218380223831122, -80.39375720407915 27.194665126577718, -80.39664034998778 27.170949595165165, -80.34852770857935 27.166313317225004, -80.35141906802725 27.14259819431671, -80.35430929096536 27.11888264604994, -80.30621904048864 27.114232847293746, -80.30911746536778 27.09051772013318, -80.31201475149 27.066802176412946, -80.28798035185856 27.064472422866164, -80.29088116438828 27.04075688944485, -80.26685235706039 27.03842376177663, -80.26975669254517 27.014708244004815, -80.22171118982621 27.010031448475154, -80.22462370410368 26.986316377022632, -80.2275350751532 26.962600906602155, -80.2304453036451 26.938885041369243, -80.23335439024913 26.915168785478926, -80.18534986037545 26.910480222007397, -80.18826710843506 26.886764434321137, -80.1911832123848 26.863048264767514, -80.1940981728949 26.839331717499665, -80.1970119906351 26.81561479667009, -80.19992466627458 26.791897506430978, -80.202836200482 26.768179850933834, -80.17886320977632 26.765832454938547, -80.18177824307688 26.74211486820479, -80.18469213450783 26.71839692475481, -80.18760488473728 26.694678628738327, -80.19051649443286 26.670959984304574, -80.1934269642616 26.647240995602438, -80.1963362948901 26.623521666780036, -80.19924448698437 26.599802001985054, -80.20215154120994 26.576082005364633, -80.20505745823185 26.552361681065353, -80.20796223871453 26.528641033233306, -80.210865883322 26.504920066013884, -80.23478793296762 26.507262720257263, -80.23768582195777 26.483541005293855, -80.28552344673325 26.48821411067485, -80.28841096403521 26.464491221059497, -80.29129735273604 26.440768023777565, -80.29418261349467 26.41704452297291, -80.29706674696955 26.393320722788797, -80.34487110751171 26.397975264734786, -80.34774488740112 26.374250306991872, -80.35061754483971 26.3505250576828, -80.39840710948364 26.35516277129038, -80.40126942306814 26.331436374184392, -80.40413061902646 26.30770969332626, -80.40699069801049 26.28398273285722, -80.40984966067164 26.260255496917814, -80.45760599272003 26.264874672899783, -80.46045462958158 26.241146306279752, -80.46330215493057 26.21741767200244, -80.46614856941495 26.193688774207292, -80.46899387368212 26.169959617032717, -80.51671700094185 26.174560269423225, -80.51955199742947 26.15082999869669, -80.52238588849598 26.127099476402904, -80.52521867478526 26.103368706679166, -80.5280503569408 26.079637693662026, -80.5757403072426 26.084219836588723, -80.57856169960432 26.060487727160396, -80.58138199261413 26.036755382249723, -80.58420118691204 26.013022805991895, -80.63186716601112 26.0175873093975, -80.63467608433547 25.993853650204972, -80.63748390871854 25.97011976747599, -80.68513509719453 25.974667496765996, -80.68793265528208 25.950932540910966, -80.71175499432772 25.95320033093989, -80.71454687771154 25.9294647333633, -80.71733767429458 25.90572892396726, -80.72012738470897 25.88199290688421, -80.76774721098346 25.886514639622703, -80.77052667373115 25.86277756781968, -80.77330505505729 25.839040296140524, -80.77608235559059 25.81530282871614, -80.77885857595919 25.791565169676716, -80.8740355124366 25.80055668978555, -80.87127760156116 25.824296045095902, -80.86851861748666 25.848035207893403, -80.93993797710736 25.854741880614668, -80.9371916671261 25.87848210996304, -80.93444428793103 25.902222137865316, -80.93169583889984 25.925961960188772, -80.95551779078646 25.928191248901292, -80.9527728601887 25.95193128044914, -80.95002686025735 25.975671097927187, -80.99769173589006 25.98012004798936, -80.99495385230477 26.00386048205933, -80.99221490164204 26.02760069334246, -81.03990163165267 26.032036235169343, -81.03717080862633 26.055777050525275, -81.03443892078629 26.079517634374714, -81.15371689139388 26.090544643287913, -81.1510069528407 26.114287054051193, -81.14829595701777 26.138029223920768, -81.2437706810415 26.14678620574175, -81.24107706222287 26.17052976579938, -81.23838239194434 26.194273075798726, -81.28614333916039 26.19863054692676, -81.28345684430356 26.222374415109634, -81.28076930028723 26.246118024508785, -81.32855212589153 26.250462009032052, -81.32587276865388 26.274206164115032, -81.32319236456475 26.297950051686385, -81.3949007124743 26.304440106377257, -81.39223313008885 26.328184928474048, -81.38956450493785 26.35192947411013, -81.38689483641181 26.37567373913834, -81.43473240431555 26.37998394203556, -81.4320709510278 26.40372872150923, -81.42940845669229 26.427473211641225, -81.45333777490104 26.429623435944094, -81.45067887281395 26.453368030667868, -81.47461367233534 26.455514867990324, -81.47195836593599 26.47925956199918, -81.46930202021602 26.50300395377947, -81.46664463456715 26.52674803917985, -81.4905941954017 26.52889227986695, -81.48794041122515 26.552636450505794, -81.48528558768292 26.5763803062416, -81.48262972416634 26.60012384292116, -81.50659406385957 26.602265480503466, -81.50394180761272 26.626009088369667, -81.50128851195737 26.64975236865268, -81.49863417628443 26.673495317197453, -81.54659329460353 26.677769580932516, -81.54394722621367 26.701512978914877, -81.54130012016323 26.725256036409654, -81.53865197584366 26.748998749259805, -81.53600279264603 26.77274111330768, -81.53335256996097 26.796483124395184, -81.53070130717848 26.82022477836367, -81.52804900368822 26.843966071053913, -81.52539565887936 26.867706998306215, -81.57343273506142 26.87197233961947, -81.5707876868959 26.895713676243073, -81.56814159978312 26.91945463866885, -81.56549447311286 26.943195222735255, -81.56284630627438 26.966935424280113, -81.56019709865652 26.990675239140813, -81.55754684964758 27.0144146631542, -81.55489555863545 27.038153692156683, -81.55224322500752 27.06189232198414, -81.57630044296506 27.064022396050298, -81.57365175055165 27.087761009197575, -81.57100201610184 27.111499214619723, -81.56835123900258 27.135237008151034, -81.54427996229533 27.133105774767554, -81.54162345206832 27.15684276624371, -81.53896589615519 27.180579337716804, -81.63529362724066 27.189084509564584, -81.6326538019643 27.212822194845867, -81.63001293701771 27.236559450907205, -81.67820067246244 27.240790715214132, -81.67556816594977 27.26452830175156, -81.72376867923634 27.26874508566649, -81.72114453979624 27.292482994806285, -81.79346572992914 27.298780720046885, -81.79085467192517 27.32251932152911, -81.81496811924853 27.324611315031795, -81.81236073988413 27.34834984576917, -81.83647973262582 27.350438401666125, -81.83908240346189 27.326699494946936, -81.84168404854238 27.30296014036081, -81.9622444301586 27.31334195928296, -81.95966632598562 27.337083184283546, -82.03202662726197 27.343267623116738, -82.02946164231474 27.367009512311668, -82.02689564559 27.39075094774147, -82.0243286364908 27.41449192523221, -82.02176061441972 27.43823244060962, -82.01919157877889 27.461972489698944, -82.01662152897 27.485712068324943, -82.0407715834267 27.487768132331404, -82.03820524274526 27.511507604669802, -82.08651727432103 27.51560900820075, -82.08395937301664 27.5393487356761, -82.08140046124332 27.563087979515412, -82.07884053840402 27.58682673554119, -82.07627960390121 27.61056499957567, -82.10045577388718 27.612611433227965, -82.09789856164697 27.636349566266464, -82.12208028956576 27.63839254071431, -82.11952680315129 27.662130537448995, -82.11697230695502 27.685868029226736, -82.11441680037971 27.709605011867794, -82.1118602828276 27.733341481191776, -82.10930275370048 27.757077433018065, -82.10674421239962 27.780812863165526, -82.082534035788 27.778767706382812, -82.0799697338174 27.80250224770012, -82.07740441662914 27.826236259190757, -82.10162409087961 27.828282141697652, -82.0990625094607 27.852015981718175, -82.09649991346858 27.875749283331555, -82.12072991953261 27.877792059164186, -82.11817106413991 27.901525179598515, -82.1156111948212 27.925257753043486, -82.11305031097554 27.94898977531505, -82.13729541666358 27.951029800934293, -82.134738279506 27.974761627917076, -82.13218012847159 27.9984928951416, -82.15643558586885 28.00052980531779, -82.15388118637068 28.0242608675421, -82.17814223498384 28.026294300426432, -82.17559159062158 28.05002515234018, -82.17303993429158 28.073755431507248, -82.1973113461494 28.075785742447497, -82.19476344981628 28.099515801591988, -82.21904045788162 28.1015426307777, -82.21649632515316 28.12527246458977, -82.21395118237622 28.149001712663225, -82.26252676968043 28.153045273771216, -82.25999017499691 28.176774640990335, -82.25745257279299 28.20050341366445, -82.30605056548409 28.20453302466954, -82.30352152331312 28.228261904061135, -82.30099147615813 28.251990180100314, -82.29846042342173 28.27571784859696, -82.32277500755485 28.27772794516359, -82.32024773905096 28.301455352975896, -82.36888894189981 28.30546471233565, -82.36637025451395 28.329192203613367, -82.3638505653687 28.352919074133954, -82.36132987386802 28.376645319705595, -82.3588081794154 28.40037093613617, -82.35628548141393 28.42409591923315, -82.38063129411353 28.426096572344424, -82.37811239508254 28.449821265616155, -82.37559249318588 28.473545316954215, -82.37307158782626 28.49726872216514, -82.37054967840588 28.52099147705499, -82.3680267643265 28.54471357742964, -82.36550284498946 28.568435019094647, -82.38987832379176 28.570433901900056, -82.38735821349077 28.594155026390887, -82.38483709861875 28.617875483567587, -82.38231497857664 28.64159526923459, -82.37979185276497 28.665314379196232, -82.40418742207555 28.667310787433454, -82.4016681128249 28.691029561682235, -82.39914779849445 28.714747651618367, -82.39662647848442 28.738465053045044, -82.39410415219444 28.76218176176525, -82.418519844609 28.764175686370532, -82.41600134242637 28.787892040834837, -82.41348183465686 28.81160769398271, -82.41096132069983 28.835322641616237, -82.4084397999541 28.859036879537097, -82.4059172718181 28.882750403546837, -82.40339373568976 28.906463209446695, -82.40086919096653 28.930175293037696, -82.39834363704536 28.95388665012062, -82.42279885290301 28.95587944518035, -82.42027713585207 28.97959041180164, -82.41775441030005 29.003300643299728, -82.44222014325183 29.005290252414827, -82.43970125956861 29.029000083727453, -82.43718136808403 29.052709171300755, -82.53509131252477 29.060631640915865, -82.53258983669642 29.08434132862024, -82.53008735950046 29.10805026332341, -82.52758388033723 29.131758440823578, -82.52507939860655 29.155465856918806, -82.50058124755573 29.153489698979968, -82.49807089825774 29.17719601432176, -82.49555954327523 29.200901560069077, -82.3975362273398 29.192955526790662, -82.39500439806886 29.21665895314861, -82.41951385852435 29.21865160672368, -82.41698588287315 29.24235459313791, -82.41445689397437 29.266056797998615, -82.41192689122055 29.289758217103078, -82.40939587400358 29.313458846248498, -82.43392564537636 29.3154489721345, -82.43139848943466 29.339149142768203, -82.45593396279136 29.341135728318843, -82.4534106718552 29.364835435132616, -82.45088636847537 29.3885343389433, -82.44836105204416 29.412232435547093, -82.44583472195339 29.43592972073991, -82.44330737759432 29.459626190317593, -82.54155517306378 29.46754042242755, -82.53904637235416 29.491237400207012, -82.53653656387765 29.514933553095442, -82.63483662411954 29.522788336436278, -82.63234538914053 29.54648497583991, -82.62985315291856 29.570180781080253, -82.80197816115157 29.583781734618906, -82.79951923729658 29.607478975151746, -82.79705932456243 29.63117537161497, -82.79459842235406 29.654870919801027, -82.79213653007598 29.678565615502404, -82.89058994170094 29.68625726419104, -82.88814670862656 29.709952384409267, -82.8857024920702 29.7336466428803, -82.98420803458596 29.741278625236134, -82.98178250711466 29.764973286661537, -83.12959416670016 29.776306444232887, -83.1271971981548 29.80000211689359, -83.20112843554881 29.805617095007875, -83.19874528142411 29.829312822770316, -83.19636116683293 29.853007669237158, -83.29498652207155 29.860442274378048, -83.29262117557597 29.884137466531236, -83.2902548752887 29.907831768145172, -83.38893213290604 29.91520650107583, -83.3865846305714 29.938901126941666, -83.38423618114251 29.9625948530286, -83.45828186831358 29.96808680438618, -83.45594730213318 29.991780532600096, -83.4536117936121 30.01547335200176, -83.55238967709154 30.02274377484953, -83.55007302243696 30.046436878563267, -83.64888289442092 30.053646085796178, -83.64658511618886 30.077339457495665, -83.64428640967846 30.101031906136356, -83.7431480172137 30.10818104121034, -83.7408682169902 30.131873736525, -83.73858749526923 30.155565499557614, -83.78804265026083 30.159117813568027, -83.78577093468496 30.182809222357914, -83.78349830045505 30.206499690040346, -83.88245730184987 30.21355977062446, -83.8802036260815 30.237250448075216, -83.87794903847805 30.260940175201267, -84.32358911381357 30.291946996639794, -84.32575412803595 30.26825220424826, -84.32791826618626 30.244556458077508, -84.47645706129724 30.254607256275126, -84.47859045858455 30.23090891678385, -84.48072299279256 30.207209630830235, -84.67873437375809 30.220387410250062, -84.68082623301126 30.19668502392665, -84.68291724613957 30.172981698111386, -84.73240710847901 30.17623598009681, -84.73448732665966 30.152531185274196, -85.2789443671108 30.187290413604853, -85.2769736994584 30.21100090730392, -85.27500223402149 30.234710461496427, -85.37406858194144 30.24082898916471, -85.37211627326936 30.264538600532898, -85.42166329534776 30.267574884178376, -85.41972017978641 30.291284043124236, -85.41777627699575 30.3149922488744, -85.41583158649811 30.33869949720575, -85.4138861078154 30.362405783895145, -85.46347565863184 30.365428384882136, -85.46153939273916 30.389134197968335, -85.45960234171868 30.41283904062792, -85.55882912195747 30.418839195090317, -85.55691130895909 30.442544038506668, -85.55499271792152 30.466247902377262, -85.77838002960755 30.479523324170334, -85.776505771869 30.503228358128958, -85.7746307532812 30.526932402605087, -85.87397030249046 30.53273253561701, -85.87211459825794 30.556436525570543, -85.8702581403285 30.580139516940203, -86.0938982553166 30.592964486600664, -86.09208627161438 30.616668547757424, -86.29095850801853 30.627803432113918, -86.28918603196806 30.6515082821259, -86.28741283529091 30.675212118182184, -86.3869033527438 30.680687096360906, -86.38514958187132 30.70439079625543, -86.38339509762118 30.72809347312302, -86.38163989955862 30.751795122735896, -86.3798839872485 30.775495740866365, -86.3781273602554 30.799195323286682, -86.40302665372279 30.80055534078748, -86.40127435939037 30.824254101406204, -86.5008975188727 30.82965572217642, -86.49916471383217 30.853354304024176, -86.52407699560251 30.854695093021483, -86.52234853839502 30.878392840352205, -87.07067206502617 30.906899460141776, -87.06905421505562 30.930600711561823, -87.09398938316922 30.931851409107168, -87.09237593913805 30.955551799241636, -87.5663402806432 30.978570601788125, -87.5648225234557 31.002273597630026, -87.58977822996674 31.003445912316938, -87.5882649294804 31.027148022694583, -87.58675101139777 31.050849056507005, -87.58523647534103 31.074549009522425, -87.58372132093217 31.098247877508967, -87.58220554779275 31.12194565623477, -87.63216927278395 31.124280320392362, -87.63066305403149 31.147977375872316, -87.62915621992217 31.171673333362737, -87.62764877007916 31.195368188631647, -87.62614070412539 31.21906193744742, -87.62463202168342 31.24275457557823, -87.67464866507444 31.24507530186126, -87.67314956117629 31.268767191476744, -87.67164984417914 31.29245796167962, -87.79675115408429 31.29819251617554, -87.79822536685617 31.2745008416313, -87.79969897689577 31.250808047021273, -88.04983618319446 31.26197748234137, -88.04841358329614 31.285672039779804, -88.09845696848076 31.287858897030606, -88.09986936283283 31.26416399456913, -88.10128117971176 31.24046797475269, -88.20133276297045 31.244792935797996, -88.20272360478877 31.22109511936802, -88.20411387813533 31.197396193557136, -88.30413207696579 31.20165663887914, -88.3055013962976 31.177955933524174, -88.30687015614147 31.154254126770823, -88.33186565765604 31.155309036382487, -88.33322876532486 31.131605965200162, -88.38321094087179 31.133703613918943, -88.38456330905665 31.109999116810446, -88.43453710094576 31.11208065332143, -88.43587873716277 31.08837473656996, -88.43721982559993 31.06466773476188, -88.43856036659241 31.040959652131622, -88.4399003604751 31.017250492913632, -88.44123980758256 30.99354026134242, -88.46620194331143 30.994574289230837, -88.46753576404139 30.970862824606897, -88.46886904072683 30.947150295981643, -88.47020177370032 30.92343670758974, -88.39536240173341 30.920324289661707, -88.39670981177241 30.89661014349858, -88.3980566725887 30.872894946390286, -88.39940298451774 30.849178702571347, -88.40074874789474 30.825461416276195, -88.40209396305461 30.801743091739297, -88.40343863033202 30.778023733195194, -88.40478275006134 30.7543033448783, -88.60407942998329 30.762515102390545, -88.60538252433857 30.738792367369616, -88.63029151126864 30.73980096375531, -88.63158901622849 30.71607704411491, -88.706303374224 30.71907873710056, -88.70758517890853 30.695353315673483, -88.88189807054759 30.70221843028268, -88.88314395718857 30.678490887631984, -89.20685540499967 30.69072685192238, -89.20803504264407 30.666996324274756, -89.23293364953126 30.66790986002344, -89.23410775042841 30.644178176985356, -90.20524314578161 30.676731043510596, -90.20426643236256 30.700467980863205, -90.20328932110675 30.724203906547626, -90.2531255251976 30.725712398499265, -90.2540925012791 30.701976229694466, -90.25505908364025 30.678239049051335, -90.62871855063865 30.6890471133969, -90.62960876306884 30.66530718053876, -90.63049861311443 30.641566243101867, -90.68030475675462 30.642939938111645, -90.67942503592552 30.666681097476832, -90.75415162940425 30.668712444031357, -90.7550161550756 30.644970956559007, -90.82973013261383 30.64696654481931, -90.83057911584872 30.623223734033495, -91.27882343507922 30.634451335573093, -91.27806562670835 30.65819596128371, -91.27730750970063 30.681939584780203, -91.32713790865539 30.683108736649086, -91.32638962478501 30.706851542325147, -91.32564103602665 30.730593337173325, -91.4751990063278 30.734007368546763, -91.47448056676004 30.757748698172815, -91.52434530104202 30.758855367058782, -91.52505358801145 30.735113859238105, -91.52576158642609 30.711371335838027, -91.70022441264763 30.71511933311762, -91.70089661303047 30.691375193880525, -91.70156853965395 30.6676300471237, -91.85105595556003 30.67068797822872, -91.85169719117899 30.64694133418978, -91.85233816574184 30.62319369076936, -91.9519601667313 30.625152903515378, -91.95258061600224 30.601403947925245, -91.95320081277377 30.57765400121624, -92.10257916543425 30.580473777273948, -92.10316873423334 30.55672238665288, -92.10375806318613 30.53297001307895, -92.22819479185495 30.535210843756783, -92.22875858537061 30.511457127676618, -92.22932214961028 30.4877024368753, -92.62738814202446 30.494209797282632, -92.62787057804046 30.47045307786214, -92.62835281792373 30.446695391473053, -93.17553646048711 30.45399589486899, -93.17590731863996 30.43023605684049, -93.1510389652018 30.4299455685712, -93.15141472533679 30.40618481858164, -93.59897154482084 30.4108110241648, -93.5992562298068 30.387048564584717, -93.59954079912599 30.363285153699497, -94.71809046425916 30.369273349241972, -94.71803317713352 30.39303773768754, -94.7179758667204 30.416801174155736, -95.01638980405625 30.417053284074846, -95.0163864734578 30.393289806495435, -95.0163831442127 30.369525376910413, -95.11581414490252 30.369483551369623, -95.11579061969621 30.345718180854288, -95.11576710404528 30.32195186682448, -95.11574359794386 30.29818461352342, -95.11572010138619 30.27441642519406, -95.1156966143664 30.250647306079472, -95.11567313687874 30.226877260422516, -95.11564966891737 30.203106292465943, -95.11562621047652 30.17933440645252, -95.06599139352053 30.17936314620252, -95.06597801050113 30.155590341648363, -95.11560276155036 30.15556160662479, -95.11557932213314 30.13178789722537, -95.11555589221906 30.10801328249658, -95.18996277727486 30.107940754818607, -95.18992427639316 30.084165250960616, -95.18988579111468 30.060388850265845, -95.23947021720306 30.060320894702404, -95.2394217020583 30.036543612635885, -95.23937320656724 30.01276544222428, -95.28893748181746 30.01268181854364, -95.28899601866021 30.036459975130875, -95.28905457922609 30.06023724338229, -95.38822305801584 30.06002285358655, -95.38830174115614 30.083799193877347, -95.38838045619704 30.1075746373722, -95.48758872486279 30.10729737348588, -95.48768758670965 30.131071870259678, -95.48778648865428 30.154845461784102, -95.5870344724227 30.15450528288707, -95.58691544775174 30.13073174735577, -95.58679647133658 30.106957306613044, -95.58667754314791 30.08318196490113, -95.58655866315638 30.059405726462124, -95.58643983133273 30.03562859553813, -95.58632104764764 30.011850576370964, -95.63588450402212 30.011657119750662, -95.63575573165902 29.987878248586124, -95.6356270114401 29.964098497683416, -95.63549834333374 29.940317871284027, -95.63536972730826 29.916536373629338, -95.63524116333205 29.89275400896056, -95.63511265137352 29.86897078151892, -95.63498419140112 29.84518669554525, -95.63485578338329 29.821401755280537, -95.65959735864129 29.821299279261428, -95.6594640004126 29.797513506012884, -95.65933069609765 29.773726886965818, -95.65919744566378 29.74993942636065, -95.6590642490783 29.72615112843752, -95.65893110630856 29.702361997436586, -95.65879801732201 29.678572037597707, -95.65866498208601 29.65478125316064, -95.53513156369381 29.655253906934526, -95.5350235224435 29.63146222296362, -95.53491552481049 29.60766972282124, -95.43612803760458 29.60797731233101, -95.43604002006511 29.58418394864676, -95.43595203804503 29.560389777235486, -95.43586409152282 29.536594802336104, -95.43577618047702 29.512799028187292, -95.43568830488614 29.48900245902765, -95.43560046472878 29.46520509909557, -95.48493452332737 29.465059274543933, -95.48483677439077 29.44126115266622, -95.55882270126513 29.441013150980943, -95.55871008160031 29.417214288675087, -95.5585975073186 29.393414648354003, -95.58324947315678 29.39332419790398, -95.58313197823611 29.369523799094416, -95.58301453064402 29.345722630754384, -95.58289713035195 29.32192069712099, -95.58277977733134 29.298118002431085, -95.70593973694935 29.297607512772142, -95.70608188958856 29.321410120943806, -95.70622409948838 29.345211968115045, -95.75550761178151 29.344980373664594, -95.755355478229 29.321178565705857, -95.75520340593259 29.297375996772058, -95.85373013258594 29.29686613067343, -95.85355829054946 29.273062891471344, -95.85338651767614 29.249258899823147, -95.85321481392431 29.225454159964933, -95.85304317925221 29.20164867613264, -95.90226657372172 29.201370515214784, -95.90208510875537 29.177564338972882, -95.90190371676618 29.15375742725843, -95.95110707895566 29.15346376581136, -95.95091586866967 29.129656172907378, -95.9507247352487 29.105847853033048, -96.07368257133554 29.105045744584437, -96.07346680720853 29.081236838899336, -96.07325112978096 29.057427214800544, -96.17157661402152 29.056715618184068, -96.17134127385933 29.032905401578933, -96.17110602822358 29.00909447510559, -96.26939079060945 29.008320807376, -96.26913590666098 28.984509307771127, -96.26888112504642 28.96069710684917, -96.31800328410232 28.960287045908707, -96.31826792785013 28.984099176531295, -96.31853267789229 29.0079106058815, -96.36767421868855 29.00748482614926, -96.36794894493684 29.031295477116796, -96.36822378157268 29.055105418391772, -96.41738470620014 29.05466390952446, -96.41766953085327 29.07847306142518, -96.41795446999676 29.102281495214, -96.46713478051714 29.101824246893745, -96.46742971949973 29.12563188032453, -96.46772477708505 29.14943878722475, -96.56612377441435 29.14847719748102, -96.56580893902814 29.124670454481354, -96.5654942301926 29.100862985056278, -96.68844121255343 29.09957372469718, -96.68810192920905 29.075765753195263, -96.6877627821846 29.051957063876987, -96.76150001781906 29.05113702459728, -96.7611461991394 29.027327761931556, -96.78572011240874 29.02704667250447, -96.78536150198563 29.00323674868766, -96.78500303555843 28.979426119874773, -96.78464471304042 28.95561479029857, -96.78428653434496 28.931802764191705, -96.78392849938548 28.907990045786402, -96.73482985632269 28.908547851422416, -96.73448181299034 28.88473434909631, -96.73413390927197 28.86092016287497, -96.68505450366493 28.861462215929375, -96.68471657983186 28.837647256748312, -96.6843787915003 28.81383162207586, -96.68404113858882 28.790015316142984, -96.68370362101601 28.76619834318037, -96.73274368885971 28.76565666366275, -96.73239648195288 28.741839121431937, -96.73204941415709 28.718020920690613, -96.73170248538884 28.694202065668527, -96.73135569556456 28.670382560595133, -96.80485603299202 28.669541466851527, -96.80449466924213 28.645721461653977, -96.85348449923437 28.645141409146014, -96.85311347590297 28.621320863007156, -96.9020930178729 28.620725377602113, -96.90171234300894 28.596904297572518, -96.90133182047704 28.573082584624142, -96.90095145018576 28.549260242984715, -96.90057123204377 28.525437276881664, -96.90019116595982 28.501613690542086, -96.99805082998105 28.50037719516171, -96.99845046390051 28.524200566236285, -96.99885025770344 28.548023317207686, -97.19464151669173 28.545363170552246, -97.1942025753794 28.52154088226797, -97.19376380959841 28.497717974167198, -97.24269065761698 28.497014372265816, -97.24224228904376 28.473190971154008, -97.241794099698 28.449366958754084, -97.29070081166277 28.44864808930958, -97.29024303137936 28.42482359528674, -97.28978543401024 28.400998498504308, -97.36311507705311 28.399891495015517, -97.36264301977492 28.376065993175402, -97.36217115103689 28.352239897144237, -97.41103729534804 28.35148277618053, -97.41055586147681 28.32765622272062, -97.41007461981154 28.30382908359904, -97.458920635114 28.303056732178465, -97.45842984013461 28.27922914703857, -97.45793924101781 28.25540098476627, -97.45744883764638 28.23157224958429, -97.45695862990318 28.207742945714937, -97.50576504997419 28.206955652008467, -97.50526530825074 28.183125922150477, -97.50476576579862 28.159295632132867, -97.55355208198051 28.15849313672632, -97.55304301732876 28.134662432144783, -97.55253415558224 28.110831175931146, -97.65006591583354 28.109180332065453, -97.65059421134676 28.133011297164316, -97.65112271750851 28.156841710807466, -97.87064645147814 28.152899641886155, -97.87007420801382 28.129069922780808, -97.86950219261551 28.105239652640698, -97.86893040514691 28.081408835685686, -97.8683588454718 28.05757747613527, -97.86778751345416 28.033745578208517, -97.86721640895799 28.009913146124173, -97.81849287135596 28.01081529020913, -97.81793168970738 27.986982168488375, -97.81737073145253 27.96314852095022, -97.81680999645808 27.939314351812328, -97.8655044592402 27.9384126871066, -97.86493426347238 27.914578160570944, -97.91361830336093 27.913661206687344, -97.91303865482588 27.889826329909162, -97.91245923684536 27.865990944374488, -97.91188004928183 27.84215505429919, -97.91130109199791 27.81831866389862, -97.91072236485631 27.794481777387777, -97.91014386771984 27.77064439898115, -97.90956560045143 27.746806532892876, -97.90898756291415 27.72296818333665, -97.90840975497112 27.699129354525642, -97.90783217648561 27.675290050672658, -97.95641884602688 27.674359308133504, -97.95583185605952 27.650519700011923, -97.9552450990999 27.626679625370826, -98.07666023229241 27.624286160198803), (-91.34245306833499 29.399036254156048, -91.2931647621935 29.39786967553414, -91.29391143784214 29.374078098130543, -91.3431898254348 29.375244479664797, -91.34245306833499 29.399036254156048), (-76.34039958268843 38.40619991001576, -76.36685981079017 38.40906979474364, -76.3628035085855 38.432044331033346, -76.33633766645035 38.42917411753561, -76.34039958268843 38.40619991001576), (-76.3628035085855 38.432044331033346, -76.3892707802879 38.434910460681316, -76.38521834007852 38.457882890103136, -76.35874545108612 38.455016432546515, -76.3628035085855 38.432044331033346), (-76.38521834007852 38.457882890103136, -76.4381684019192 38.46360355142235, -76.43412544963681 38.48657419531111, -76.46060824106578 38.48942872474859, -76.45656916296828 38.51239725049874, -76.45252833553862 38.53536332808267, -76.4484857576472 38.55832695350988, -76.47498685684151 38.56117837184035, -76.47094816003793 38.584139865243024, -76.46690771285755 38.60709889815879, -76.49342150624186 38.609946876093666, -76.48938494585077 38.63290376744908, -76.48534663517046 38.655858189991854, -76.48130657306945 38.67881013973656, -76.47726475841527 38.701759612698964, -76.47322119007448 38.72470660489594, -76.46917586691272 38.747651112345395, -76.46512878779457 38.77059313106637, -76.46107995158373 38.793532657078956, -76.45702935714284 38.816469686404496, -76.45297700333364 38.83940421506525, -76.44892288901684 38.86233623908471, -76.4448670130522 38.88526575448747, -76.44080937429848 38.908192757299226, -76.41422209929934 38.90534060896614, -76.41828540465154 38.88241392483795, -76.42234694484827 38.85948472847182, -76.4264067210322 38.83655302384193, -76.43046473434504 38.813618814923636, -76.40390154635591 38.81076385064649, -76.40796345415171 38.78782746201062, -76.41202359899707 38.76488857739351, -76.41608198203217 38.74194720077373, -76.36299383293459 38.73622692472449, -76.36706175079287 38.71328370489126, -76.37112790440979 38.69033800172294, -76.37519229492554 38.66738981920132, -76.37925492347927 38.644439161309116, -76.32621766439915 38.63870511371861, -76.33028980510137 38.6157526340887, -76.3343601814231 38.59279768776536, -76.33842879450347 38.569840278734475, -76.34249564548061 38.5468804109829, -76.34656073549174 38.523918088498725, -76.35062406567303 38.500953315271005, -76.35468563715975 38.47798609528985, -76.3811641457787 38.480852880401365, -76.38521834007852 38.457882890103136), (-89.10276027823863 30.282559007740975, -89.10395691202092 30.25881267741709, -89.10515306057974 30.235065411730822, -89.20437920767928 30.238763793710906, -89.2055547945416 30.215014990482647, -89.20672990487756 30.191265259949528, -89.2811234844589 30.19399695886775, -89.2822830706625 30.17024585663666, -89.28344218699385 30.146493835266465, -89.33301976188336 30.14829476646954, -89.33187067459582 30.1720470838878, -89.33072112148716 30.19579848196597, -89.35552051024165 30.19669336044003, -89.35437550994972 30.220443981794638, -89.35323004529846 30.24419367523778, -89.30361156812073 30.242399407712707, -89.30245559310129 30.266147875058078, -89.30129914909621 30.289895406220918, -89.10276027823863 30.282559007740975), (-89.48176153335542 30.15360345906328, -89.48288007462592 30.12984935335639, -89.48399816278418 30.10609433618841, -89.50877973365458 30.106965107843212, -89.50989235881968 30.08320903999423, -89.51100453344462 30.059452069058477, -89.61009439441955 30.06289482006041, -89.61118609211 30.03913638217475, -89.61227734788726 30.015377049290155, -89.61336816201946 29.99161682564222, -89.61445853477454 29.967855715466396, -89.61554846642018 29.944093722998037, -89.61663795722387 29.920330852472475, -89.66612502773017 29.92202703070535, -89.66504553139401 29.945790182324725, -89.66396559824736 29.969552455698324, -89.81249527932248 29.974548678038346, -89.81144492185194 29.998310895455273, -89.81039413915377 30.02207222559971, -89.66180442046212 30.01707435076663, -89.66072317529283 30.04083396399025, -89.65964149225157 30.06459268202594, -89.65855937107244 30.088350500637834, -89.65747681148932 30.112107415590074, -89.55834397521838 30.108694891122937, -89.55724092426627 30.132450336420554, -89.53245360810543 30.131587262748067, -89.53134509546584 30.155341654329618, -89.48176153335542 30.15360345906328), (-70.68919304276505 41.65419349836276, -70.69463897849472 41.63173906920916, -70.66752632350432 41.6280643999583, -70.67297565546592 41.60560730986604, -70.67842257341998 41.58314721423011, -70.68386707895266 41.560684116818585, -70.71096231285733 41.564357738214994, -70.71639860531849 41.54189129259956, -70.74348999720982 41.545560436548364, -70.74891808168456 41.52309064604805, -70.77600562943252 41.52675531280878, -70.78142551100476 41.50428218074558, -70.80850921248383 41.507942370579016, -70.8139208962364 41.48546590027778, -70.86808255098182 41.49277319992523, -70.87348024292268 41.47029304500027, -70.95471991489258 41.481221995883914, -70.94933962783732 41.503703197182325, -70.92225199219028 41.50006399199802, -70.91686351687196 41.522541858416886, -70.88977201990886 41.51889817759142, -70.88437535123799 41.54137270579958, -70.8572799950698 41.53772454906947, -70.85187512795574 41.56019573573878, -70.82477591469791 41.55654310284184, -70.81936284404885 41.57901094464689, -70.79225977582128 41.57535383532214, -70.78683849654432 41.59781832894063, -70.75973157547143 41.59415674292814, -70.75430208247246 41.616617885040604, -70.74887018266557 41.63907602024102, -70.72175359886704 41.635409609371656, -70.71631347625728 41.65786438643839, -70.68919304276505 41.65419349836276), (-72.08942606806367 41.282141957664834, -72.0945426467543 41.259599975720405, -72.06747992714047 41.2561275692853, -72.07260005322733 41.23358298540413, -72.09965696237403 41.23705505397168, -72.1047690164094 41.214507196223316, -72.15887673871981 41.22143827690252, -72.16397491775531 41.198886810883714, -72.21807836738522 41.205800709550665, -72.22316267773975 41.183245639193316, -72.30431415305064 41.19358452596915, -72.30937879181948 41.171025518854236, -72.33642712480408 41.17446322481239, -72.34148371680132 41.15190095759832, -72.3955742252132 41.158763317863134, -72.40061696755804 41.136197458143236, -72.40565748133376 41.11362868099129, -72.45973202031237 41.12047319323641, -72.46475869709958 41.09790083049845, -72.49179287568158 41.10131656224306, -72.49681152734881 41.07874095313778, -72.52384170716935 41.08215222377555, -72.52885233882066 41.05957337173454, -72.58290649752193 41.06638286609627, -72.58790331123485 41.04380043938038, -72.61492728504963 41.047198663683346, -72.61991609018723 41.02461300094426, -72.7009813631727 41.034781919024546, -72.70595056020942 41.01219235491233, -72.75999141061017 41.01895034024069, -72.76494680893255 40.996357213419465, -72.92707725018305 41.01653016440601, -72.9319956335771 40.99393215092263, -73.01306734811604 41.0039619373895, -73.01796613759103 40.981360040925225, -73.15309183627903 40.99799218307241, -73.1579594149192 40.97538575183206, -73.23903843142935 40.985314537464525, -73.24388642526469 40.96270423621557, -73.43309105429081 40.985724681639006, -73.42828378226915 41.008337262036974, -73.42347438481276 41.03094695203601, -73.36938395432739 41.024389019732254, -73.3645607797796 41.04699516826029, -73.33751234432319 41.04370968561261, -73.33268121080896 41.06631261299514, -73.3056286898994 41.06302267765013, -73.30078959228115 41.0856223804174, -73.27373298775612 41.08232799205117, -73.26888592089483 41.10492446673619, -73.16065367558406 41.091704325714204, -73.15578115204421 41.114296593943095, -73.15090647268546 41.13688595249996, -73.09677756670295 41.13024980602935, -73.0918890712631 41.1528356005048, -73.03775555464411 41.146182285063325, -73.03285323658372 41.16876451145419, -72.97871512961787 41.16209402570112, -72.97379898240911 41.184672680010486, -72.96888065905698 41.20724841185338, -72.9418026030612 41.20390632136653, -72.93687626935055 41.22647880076932, -72.90979415721266 41.22313225363588, -72.91472632253753 41.2005601008484, -72.86057909584622 41.19385527047461, -72.85563527080387 41.216426768655005, -72.74733890501972 41.20296624114221, -72.74236957611957 41.22553349784568, -72.66114862142643 41.2153937557357, -72.65615961132775 41.23795709352878, -72.52079822110012 41.220973288495635, -72.51577787840924 41.24353203885727, -72.35336901033708 41.223013232482934, -72.34831152138881 41.24556705023198, -72.29417815335998 41.23869375362887, -72.28910678949183 41.26124396655615, -72.23496909731881 41.254353487663415, -72.22988385217165 41.2769000918344, -72.17574185641573 41.26999242938345, -72.17064272364239 41.2925354208698, -72.08942606806367 41.282141957664834), (-76.29561605167092 39.26609594586353, -76.2997191622017 39.243210624625036, -76.30382048438307 39.220322728425934, -76.30792001937641 39.19743226122201, -76.31201776834219 39.174539226970204, -76.31611373243982 39.1516436296286, -76.32020791282775 39.12874547315648, -76.29356819085453 39.12587785875485, -76.29766627621066 39.1029774637377, -76.30176257779242 39.08007451786748, -76.35502072629781 39.085804381063234, -76.35093579594097 39.108707960401475, -76.3775727301056 39.11156706022352, -76.37349171013524 39.13446840363818, -76.36940891237502 39.15736719117312, -76.3960586765555 39.16022282169543, -76.39197979495964 39.18311936382932, -76.38789913564922 39.20601334180909, -76.36123797886592 39.20315708276235, -76.35714984080505 39.22604817889895, -76.35305992033028 39.248936703320325, -76.34896821628313 39.27182265207053, -76.29561605167092 39.26609594586353), (-75.99273839484637 36.13206758073534, -75.99678746369175 36.10888878052216, -75.91911508284696 36.1000160692387, -75.92317854293756 36.076836374127076, -75.92724028412039 36.05365465148853, -75.84961269758647 36.0447479928302, -75.8536888046429 36.021565391691645, -75.82782110829763 36.01858883941981, -75.82373964177624 36.041771057791394, -75.79786799210063 36.03879009868633, -75.7937794383043 36.061969912077, -75.76790383666821 36.0589845455864, -75.77199775032916 36.03580511572161, -75.77608993312252 36.01262366456196, -75.78018038613827 35.98944019618748, -75.78426911046554 35.96625471467908, -75.83597886612056 35.97221835295683, -75.83190084938356 35.99540460311459, -75.88362693008453 36.00135291825311, -75.8876942356946 35.978165901686765, -76.27573702251642 36.02225949689714, -76.27972219651222 35.99906478777593, -76.28370568529014 35.975868066937444, -76.38719325257158 35.98747041528851, -76.38323123148774 36.01066863151017, -76.3792675339132 36.03386483461527, -76.3274995386046 36.0280702182762, -76.32352341917672 36.05126365900236, -76.31954561677195 36.07445507914103, -76.16421012565799 36.05697011060349, -76.16019840087787 36.08015726137333, -76.15618497788724 36.103342385499666, -76.10439603686225 36.09748034650151, -76.1003701667114 36.120662688626766, -76.04857603132929 36.114783788625836, -76.04453770771273 36.13796334385944, -75.99273839484637 36.13206758073534), (-75.53721572533645 35.72444651504263, -75.54134581326323 35.70124543424717, -75.54547416076186 35.678042389224366, -75.54960076892458 35.6548373840624, -75.49805572442803 35.64877866011371, -75.50219122281317 35.625572491613774, -75.50632497975954 35.60236437187957, -75.51045699635918 35.57915430500116, -75.51458727370326 35.5559422950692, -75.51871581288198 35.532728346175084, -75.52284261498471 35.50951246241088, -75.52696768109988 35.48629464786943, -75.55270234304888 35.4893232320736, -75.55682037544229 35.46610309166665, -75.53109101231503 35.46307490664416, -75.53521260971677 35.4398532428292, -75.53933247439083 35.41662966051947, -75.54345060742206 35.39340416381043, -75.54756700989437 35.37017675679832, -75.55168168289079 35.34694744358001, -75.55579462749348 35.32371622825302, -75.55990584478366 35.3004831149156, -75.66268358699696 35.31256061182968, -75.65859351064026 35.3357953285854, -75.71000135824012 35.34181084763953, -75.71408085887128 35.318575332619154, -75.71815864602736 35.29533792152517, -75.72223472078032 35.27209861845794, -75.7263090842012 35.248857427518594, -75.77768022598447 35.25485373537084, -75.78174231694052 35.23160986182467, -75.78580270295207 35.20836410789459, -75.91420201135124 35.2232808299825, -75.91823429404998 35.20003120918207, -75.92226488455555 35.176779714424555, -75.97361314591922 35.182716793042964, -75.9776314879765 35.15946263480924, -75.98164814420363 35.13620661012134, -76.05864915736935 35.145079831208, -76.06264829916326 35.12182075593831, -76.08831276148531 35.12477009655557, -76.09230494978799 35.10150876671106, -76.11796549947917 35.104453710443536, -76.12195073873383 35.081190130006675, -76.14760737448482 35.084130677446545, -76.15158566913324 35.0608648504021, -76.15556229593483 35.037597175334334, -76.2068585480766 35.0434646891149, -76.2108229668318 35.020194380818715, -76.31341061315491 35.031879826407575, -76.30946728702278 35.05515170639908, -76.3351228438893 35.058063457357946, -76.3311831410822 35.08133388247618, -76.5365181337873 35.10448691755571, -76.53261904436187 35.12775859774041, -76.5287183179859 35.151028420584815, -76.47735539349405 35.14526263649084, -76.47344244899396 35.16852982633318, -76.46952786122064 35.1917951513011, -76.4181491288434 35.186011801263916, -76.41422231142572 35.20927448477923, -76.41029384440132 35.2325352958914, -76.40636372673714 35.2557942304917, -76.40243195739923 35.279051284472025, -76.45385305680496 35.28483772023161, -76.44993023721557 35.308093659185516, -76.44600576816701 35.33134770861285, -76.3174101088075 35.31684770613176, -76.32136108837743 35.29359558351607, -76.14142111658155 35.27312995919781, -76.13743305789596 35.2963793602327, -76.13344332303392 35.319626871818016, -76.08202297792576 35.31374192627424, -76.0780209709352 35.33698676296085, -76.05230755554612 35.33403788806287, -76.04829856770104 35.35728043661782, -75.9968652608337 35.35136988088628, -75.99284398894652 35.3746097453711, -75.98882102598081 35.39784770575933, -75.98479637087672 35.42108375795029, -75.98077002257351 35.444317897844, -75.92929981628751 35.438388173703345, -75.9252611617672 35.461619614382606, -75.92122080763987 35.484849135277, -75.91717875283959 35.50807673228893, -75.91313499629958 35.53130240132136, -75.86162786375493 35.525353503546306, -75.85757177878207 35.54857645825286, -75.83181498560107 35.54559560042602, -75.82775187881205 35.56881622805318, -75.7504739281424 35.55984840756033, -75.74639316783751 35.58306591879005, -75.74231068863725 35.606281487806356, -75.71654354078619 35.60328340424451, -75.71245402503311 35.62649663413564, -75.70836278607946 35.64970791398837, -75.65681143444849 35.643698135734176, -75.65270783211308 35.666906675557016, -75.64860250011633 35.690113257881364, -75.64449543737192 35.7133178786178, -75.6403866427927 35.736520533677556, -75.53721572533645 35.72444651504263)), ((-68.9560141137306 43.88312763563148, -68.9619757050401 43.86102929652357, -68.90665765709035 43.85326438357101, -68.91262858249132 43.83116329333433, -68.9185968096575 43.80905882314906, -68.89095310536699 43.80517075074106, -68.8969246434548 43.783063222486774, -68.84165584148026 43.77527521687176, -68.83567229310259 43.7973821073078, -68.80803518919896 43.79348153667321, -68.80204293146019 43.81558473315899, -68.77440202779593 43.811679677370996, -68.76840105536601 43.833779176862436, -68.76239737038857 43.85587529523336, -68.70709816626685 43.848051408667, -68.70107974846069 43.87014350504977, -68.69505860947427 43.892232214099714, -68.8887286734001 43.91954733864458, -68.89470770435418 43.89745640981896, -68.92237766501765 43.901341582389534, -68.9283479734737 43.879246946902185, -68.9560141137306 43.88312763563148)), ((-69.35113252318942 43.800531976251044, -69.35699980243746 43.778409276406094, -69.36286443003905 43.756283207421056, -69.36872640776949 43.734153772902005, -69.3745857374024 43.71202097645678, -69.29168937518438 43.70053839547146, -69.28581200737123 43.72267024596072, -69.25817819683321 43.71883407081665, -69.2522921610512 43.740962245133304, -69.24640346535527 43.763087055823384, -69.2405121079642 43.78520849928104, -69.35113252318942 43.800531976251044)), ((-70.31081246974323 41.37027515423088, -70.316326796372 41.34779649976545, -70.32183868756294 41.32531488061679, -70.3273481449109 41.30283030056473, -70.2733268532303 41.29535337743141, -70.27884539728149 41.2728665642542, -70.22484355836676 41.265373887908616, -70.23037117606836 41.24288484911822, -69.98751322020456 41.208967239760455, -69.98193387633134 41.23145298470657, -69.95495390892196 41.22766340787115, -69.9493663605816 41.250145837672264, -69.94377634697904 41.2726253168819, -69.93818386650133 41.2951018417199, -69.93258891753428 41.31757540840763, -69.9595918717165 41.321366453887705, -69.9540002052213 41.343837424634714, -69.98101092310975 41.347624716809875, -69.97542254349887 41.37009308643237, -70.00244102816266 41.37387662368167, -69.99685593985355 41.39634238699866, -70.02388219436237 41.40012216770347, -70.01830040177748 41.4225853195368, -70.04533442920147 41.426361342080746, -70.03975593676834 41.44882187725506, -70.06679774017812 41.45259414002405, -70.07237046401039 41.430133243074586, -70.09940850427719 41.43390102230523, -70.10497299815879 41.41143678374305, -70.0779407254404 41.407669366289106, -70.0835085260811 41.38520251343962, -70.05648402137716 41.3814313373992, -70.06205512434693 41.35896187543733, -70.06762376738716 41.33648944542733, -70.09463675143935 41.34025989464388, -70.10019717937578 41.317784136248946, -70.20824605823088 41.33282328025152, -70.2137810010464 41.31034310725689, -70.24079244263409 41.314092230848296, -70.2352632607724 41.336572766082554, -70.28930363177027 41.34405937605168, -70.28378353791601 41.36653767014309, -70.31081246974323 41.37027515423088)), ((-71.5972532383357 41.24153408633444, -71.60247657031849 41.21900118466519, -71.60769759437756 41.19646534724331, -71.6129163120267 41.17392657787069, -71.6181327247784 41.151384880350555, -71.62334683414392 41.12884025848761, -71.5423169174407 41.11819101003996, -71.537085460722 41.14073458925082, -71.51007346703562 41.13717624721914, -71.50483391737176 41.15971655536997, -71.53185169343595 41.16327524544246, -71.52661561406707 41.18581297481051, -71.55364105917043 41.189367889186094, -71.54840845460355 41.211903034618885, -71.54317353731587 41.234435245181466, -71.5972532383357 41.24153408633444)), ((-81.25006488552803 27.154698320303936, -81.25277870218795 27.13096643342314, -81.25549145148234 27.10723412921853, -81.25820313403864 27.083501411854577, -81.26091375048372 27.05976828549521, -81.26362330144407 27.036034754303873, -81.26633178754558 27.012300822443613, -81.26903920941373 26.988566494076935, -81.27174556767349 26.96483177336581, -81.27445086294934 26.9410966644717, -81.27715509586523 26.91736117155566, -81.10901446690512 26.902038692157042, -81.11175029706506 26.87830561502828, -81.11448505356354 26.85457216377327, -81.09047777703204 26.852368853041543, -81.09321612044013 26.8286354345025, -81.04521351328283 26.82421823444428, -81.04796009726495 26.80048525828503, -81.02396476622212 26.798271371722258, -81.02121352562861 26.822003942827592, -80.97321618944898 26.817563977406227, -80.9759767417184 26.793832218552936, -80.95198405116687 26.791606952342473, -80.95474817421821 26.767875240623884, -80.90677474878832 26.763414146942953, -80.9095470896278 26.73968289677213, -80.86158650540015 26.73520745658816, -80.86436705545796 26.711476675898226, -80.74450438793494 26.700223808108092, -80.74730706996637 26.676494746364735, -80.72334185710963 26.674233220674584, -80.7205345323506 26.697961867140904, -80.69656557278674 26.69569613750851, -80.69375250386747 26.719424022910022, -80.69093833234565 26.743151559088673, -80.66696098156073 26.740881208267517, -80.66414105977667 26.76460797505592, -80.68812305757531 26.766878741891638, -80.68530667891001 26.790605567165606, -80.68248919570276 26.814332030756795, -80.65849789853365 26.81206043259006, -80.65567465777828 26.83578611502798, -80.65285030940184 26.85951142770706, -80.62885060834206 26.857235205871497, -80.62602049629736 26.88095972907278, -80.60201704443368 26.8786792978921, -80.59918116503073 26.902403027213733, -80.59634417248452 26.926126374778043, -80.62035693943886 26.928407637811915, -80.61752349332154 26.95213101503719, -80.61468893454227 26.975854001957075, -80.61185326244805 26.999576594414023, -80.6090164763853 27.023298788249985, -80.63304880275578 27.025577914112727, -80.63021556998656 27.04930011909144, -80.65425347113018 27.05157585990277, -80.6514237951174 27.075298070683377, -80.64859300675965 27.09901986989543, -80.6726411566406 27.10129263582531, -80.66981392964693 27.125014431103295, -80.69386765942123 27.127283807318424, -80.6910439972625 27.151005593321354, -80.71510330832689 27.153271577965587, -80.71228321447684 27.176993349352564, -80.78448060086214 27.18376971221617, -80.78167344309131 27.20749227944218, -80.82981889920505 27.211991648326276, -80.83261669056641 27.188268268140387, -80.90482754395737 27.194987569070403, -80.90761018659458 27.17126254397835, -80.910391734718 27.147537092267967, -80.91317218897095 27.12381121810264, -80.9372302133484 27.126042164238925, -80.94000489600629 27.102315467566587, -80.94277848787755 27.078588356534006, -80.99087848884336 27.08303722657365, -80.99364163946363 27.059308898123234, -80.99640370417302 27.035580163176935, -80.99916468360925 27.011851025896245, -81.02320198859906 27.014068549746998, -81.02595721245748 26.990338611062327, -81.04999072788667 26.99255193236435, -81.04724017548787 27.01628227356796, -81.07127924281274 27.018492197162573, -81.06853228314348 27.042222541315066, -81.04448854204537 27.040012216141125, -81.04173582692401 27.06374175592236, -81.06578424359309 27.065952482447518, -81.06303512352692 27.089682016397855, -81.08708909808914 27.091889341490923, -81.08434357655926 27.11561886428097, -81.13246352231312 27.120022904259, -81.12972628532572 27.14375280909626, -81.20192682573591 27.150331531053222, -81.19920256780182 27.17406220620782, -81.19647723763413 27.19779245616081, -81.2205552064652 27.19997854417372, -81.22327584844315 27.176247898974072, -81.22599541999317 27.15251682834632, -81.25006488552803 27.154698320303936), (-81.07127924281274 27.018492197162573, -81.07402512323497 26.9947614541516, -81.0767699250439 26.97103031644321, -81.10080052815238 26.973235637196286, -81.09806039703997 26.996967176227912, -81.09531918911031 27.02069832033464, -81.07127924281274 27.018492197162573)), ((-82.93169753048909 24.68582736852342, -82.93403262463768 24.662051016443048, -82.93636681771275 24.63827468594327, -82.93870011023441 24.614498381128175, -82.91509868101569 24.61258252639333, -82.91743558911195 24.588806626384695, -82.82305528850641 24.581107368431926, -82.82070032222164 24.60488176090525, -82.79710257902155 24.602947233794733, -82.7947421889392 24.62672127842055, -82.79238088801567 24.650495349846018, -82.79001867572515 24.674269443968083, -82.93169753048909 24.68582736852342))) + diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/grid/dataset/alias/gfeParamInfo.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/grid/dataset/alias/gfeParamInfo.xml index 0422a19046..82cf781917 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/grid/dataset/alias/gfeParamInfo.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/grid/dataset/alias/gfeParamInfo.xml @@ -209,4 +209,16 @@ NAHwave15 NAHwave10 NAHwave4 + RFCFFG_ParameterInfo + RFCFFG_ParameterInfo + RFCFFG_ParameterInfo + RFCFFG_ParameterInfo + RFCFFG_ParameterInfo + RFCFFG_ParameterInfo + RFCFFG_ParameterInfo + RFCFFG_ParameterInfo + RFCFFG_ParameterInfo + RFCFFG_ParameterInfo + RFCFFG_ParameterInfo + RFCFFG_ParameterInfo diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/config/gfe/serverConfig.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/config/gfe/serverConfig.py index 68b28bffa9..b9121c606c 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/config/gfe/serverConfig.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/config/gfe/serverConfig.py @@ -41,9 +41,9 @@ # 03/20/2014 #2418 dgilling Remove unneeded D2D source PHISH. # 04/17/2014 #2934 dgilling Remove alias for TPCSurgeProb D2D database. # 05/09/2014 #3148 randerso Add tpHPCndfd to D2DAccumulativeElements for HPCERP -# # 05/29/2014 #3224 randerso Added "SPC":8 to D2DDBVERSIONS # 07/09/2014 #3146 randerso Removed unused import +# 07/10/2014 swhite Add surge and tropical threat WEs and their dependencies ######################################################################## #---------------------------------------------------------------------------- @@ -162,7 +162,7 @@ VWaveDir = ("VWaveDir", SCALAR, "m/s", "V WaveDir Comp", 0.50, -0.50, 3, NO) LkSfcT = ("LkSfcT", SCALAR, "C", "Lake Surface T", 40.0, -2.0, 1, NO) SnowMap = ("SnowMap", SCALAR, "in", "Snowfall Map", 20.0, 0.0, 1, YES) WaveDir = ("WaveDir", VECTOR, "m/s", "Wave Direction", 5.0, 0.0, 2, NO) -StormTotalQPF = ('StormTotalQPF', SCALAR, 'in', 'Storm Total QPF (in)', 10.0, 0.0, 2, YES) +StormTotalQPF = ('StormTotalQPF', SCALAR, 'in', 'Storm Total QPF (in)', 10.0, 0.0, 2, NO) SeasonTotalSnow = ('SeasonTotalSnow', SCALAR, 'in', 'Season Total Snow (in)', 150.0, 0.0, 2, YES) # Marine Weather Elements @@ -287,9 +287,31 @@ pwsN64 = ("pwsN64", SCALAR, "%", "Night64WSI PROB", 100.0, 0.0, 0, NO) pws34int = ("pws34int", SCALAR, "%", "34WSIntPROB", 100.0, 0.0, 0, NO) pws64int = ("pws64int", SCALAR, "%", "64WSIntPROB", 100.0, 0.0, 0, NO) -# Surge parms for HLS -SurgeHtPlusTide = ("SurgeHtPlusTide", SCALAR, "ft", "SurgeHtPlusTide", 50.0, -100.0, 2, NO) -SurgeHtPlusTideWTopo = ("SurgeHtPlusTideWTopo", SCALAR, "ft", "SurgeHtPlusTideWTopo", 50.0, -100.0, 2, NO) +# Surge parms for HLS/TCV +InundationMax = ("InundationMax", SCALAR, "ft", "Max Inundation", 30.0, -100.0, 1, NO) +InundationTiming = ("InundationTiming", SCALAR, "ft", "Incremental Inundation", 30.0, -100.0, 1, NO) +SurgeHtPlusTideMSL = ("SurgeHtPlusTideMSL", SCALAR, "ft", "Surge above MSL", 30.0, -100.0, 1, NO) +SurgeHtPlusTideMLLW = ("SurgeHtPlusTideMLLW", SCALAR, "ft", "Surge above MLLW", 30.0, -100.0, 1, NO) +SurgeHtPlusTideMHHW = ("SurgeHtPlusTideMHHW", SCALAR, "ft", "Surge above MHHW", 30.0, -100.0, 1, NO) +SurgeHtPlusTideNAVD = ("SurgeHtPlusTideNAVD", SCALAR, "ft", "Surge above NAVD88", 30.0, -100.0, 1, NO) + +# parms for storm surge collaboration +SShazardKeys = [("",""), ("SS.A", "STORM SURGE WATCH"), ("SS.W", "STORM SURGE WARNING")] +ProposedSS = ("ProposedSS", DISCRETE, "w/w/a", "Proposed StormSurge Hazards", YES, SShazardKeys, 7) +tempProposedSS = ("tempProposedSS", DISCRETE, "w/w/a", "Temp Proposed StormSurge Hazards", + YES, SShazardKeys, 4) +InitialSS = ("InitialSS", DISCRETE, "w/w/a", "Initial StormSurge Hazards", + YES, SShazardKeys, 4) +DiffSS = ("DiffSS", SCALAR, "None", "Difference StormSurge Hazards", 2.0, -1.0, 0, NO) + +# parms for tropical cyclone threat graphics +Threat4Keys = [("None","None to Little"), ("Elevated","Elevated"), ("Mod", "Moderate"), ("High", "High"), ("Extreme","Extreme"),] + +FloodingRainThreat = ("FloodingRainThreat", DISCRETE, "Cat", "Flooding Rain Threat", NO, Threat4Keys,2) +StormSurgeThreat = ("StormSurgeThreat", DISCRETE, "Cat", "Storm Surge Threat", NO, Threat4Keys,2) +WindThreat = ("WindThreat", DISCRETE, "Cat", "Wind Threat", NO, Threat4Keys,2) +TornadoThreat = ("TornadoThreat", DISCRETE, "Cat", "Tornado Threat", NO, Threat4Keys,2) +QPFtoFFGRatio = ("QPFtoFFGRatio", SCALAR, "", "QPF to FFG Ratio", 8.0, 0.0, 0, NO) # Hazards HazardKeys = [] @@ -440,23 +462,23 @@ HAZE = ('H', 'Haze', [INTEN_NONE], [PRIMARY, MENTION]) BLWGSNOW = ('BS', 'Blowing Snow', - [AREAS,PATCHY,DEFN], + [PATCHY, AREAS, DEFN], [INTEN_NONE], [PRIMARY, MENTION]) BLWGSAND = ('BN', 'Blowing Sand', - [AREAS,PATCHY,DEFN], + [PATCHY, AREAS, DEFN], [INTEN_NONE], [PRIMARY, MENTION]) SMOKE = ('K', 'Smoke', - [AREAS, PATCHY, DEFN], + [PATCHY, AREAS, DEFN], [INTEN_NONE], [PRIMARY, MENTION]) BLWGDUST = ('BD', 'Blowing Dust', - [AREAS,PATCHY,DEFN], + [PATCHY, AREAS, DEFN], [INTEN_NONE], [PRIMARY, MENTION]) FROST = ('FR','Frost', - [AREAS, PATCHY, WIDE], + [PATCHY, AREAS, DEFN], [INTEN_NONE], [PRIMARY, MENTION, OUTLYNG]) FRZSPRAY = ('ZY','Freezing Spray', @@ -644,8 +666,8 @@ NDFD_Oceanic_10K = ('NDFD_Oceanic_10km', MERCATOR, # Add a new domain for NHC purposes GridForNHA = ('GridForNHA', LAMBERT_CONFORMAL, - (-102.551, 16.6069), (-50.5524, 47.3806), - (-95.0, 35.0), 35.0, 35.0, (1, 1), (1729,1601), 0.0, 0.0, 0.0) + (-103.929, 20.164), (-50.8894, 42.9545), + (-95.0, 35.0), 35.0, 35.0, (1, 1), (1833,1241), 0.0, 0.0, 0.0) # list of all projections allProjections = [Grid201, Grid202, Grid203, Grid204, Grid205, Grid206, @@ -830,7 +852,7 @@ SITES = { 'TIR' : ([220, 171], (59.0, 25.0), (13.0, 12.0), 'EST5EDT', Grid211, "rfc"), 'TUA' : ([281, 168], (39.0, 22.0), (18.0, 10.0), 'CST6CDT', Grid211, "rfc"), -#Special Sites - Updated NHC and OPC domains in OB9.3 +#Special Sites - Added Hawaiian High Seas domain 'US' : ([267, 159], (18.0, 9.5), (67.0, 40.0), 'EDT5EDT', Grid211, "other"), 'FSL' : ([161, 145], (38.50, 27.00), (10.0, 9.0), 'MST7MDT', Grid211, "other"), # 'NH1' : ([667, 461], (69.5, 4.5), (52.03125, 35.9375), 'EST5EDT', Grid204, "wfo"), @@ -839,6 +861,7 @@ SITES = { 'NH2' : ([1188, 363], (1328.0, 365.0), (1187.0, 362.0), 'EST5EDT', NDFD_Oceanic_10K, "wfo"), 'ONA' : ([244, 383], (68.9375, 19.5625), (15.1875, 23.875), 'EST5EDT', Grid211, "wfo"), 'ONP' : ([396, 415], (8.1875, 21.5625), (24.6875, 25.875), 'PST8PDT', Grid211, "wfo"), + 'HPA' : ([899, 671], (284.0, 30.0), (898.0, 670.0), 'Pacific/Honolulu', NDFD_Oceanic_10K, "wfo"), #Ice Desk for AFC 'AICE' : ([560, 340], (9.0, 11.0), (29.0, 19.0), 'America/Anchorage', @@ -856,8 +879,9 @@ SITES = { #National Centers 'HAK' : ( [825,553], ( 1.0, 1.0), (103.0, 69.0), 'EST5EDT', Grid214AK, "nc"), - 'HUS' : ([1073,689], (19.0, 8.0), ( 67.0, 43.0), 'EST5EDT', Grid211, "nc"), - 'NHA' : ([1729,1601], (1.0,1.0), (1728.0, 1600.0), 'EST5EDT', GridForNHA, "nc"), + 'HUS' : ([1073,689], (19.0, 8.0), ( 67.0, 43.0), 'EST5EDT', Grid211, "nc"), + #'NHA' : ([1729,1601], (1.0,1.0), (1728.0, 1600.0), 'EST5EDT', GridForNHA, "nc"), + 'NHA' : ([1833,1241], (41.5,5.0), (54.0,40.5), 'EST5EDT', Grid211, "nc"), } @@ -1202,6 +1226,18 @@ elif SID in CONUS_EAST_SITES: 'NPHwave4', 'WPHwave10', 'GLOBHwave', + ('FFG-ALR', 'FFGALR'), + ('FFG-FWR', 'FFGFWR'), + ('FFG-KRF', 'FFGKRF'), + ('FFG-MSR', 'FFGMSR'), + ('FFG-ORN', 'FFGORN'), + ('FFG-PTR', 'FFGPTR'), + ('FFG-RHA', 'FFGRHA'), + ('FFG-RSA', 'FFGRSA'), + ('FFG-STR', 'FFGSTR'), + ('FFG-TAR', 'FFGTAR'), + ('FFG-TIR', 'FFGTIR'), + ('FFG-TUA', 'FFGTUA'), ] else: #######DCS3501 WEST_CONUS @@ -1260,6 +1296,18 @@ else: #######DCS3501 WEST_CONUS 'NPHwave4', 'WPHwave10', 'GLOBHwave', + ('FFG-ALR', 'FFGALR'), + ('FFG-FWR', 'FFGFWR'), + ('FFG-KRF', 'FFGKRF'), + ('FFG-MSR', 'FFGMSR'), + ('FFG-ORN', 'FFGORN'), + ('FFG-PTR', 'FFGPTR'), + ('FFG-RHA', 'FFGRHA'), + ('FFG-RSA', 'FFGRSA'), + ('FFG-STR', 'FFGSTR'), + ('FFG-TAR', 'FFGTAR'), + ('FFG-TIR', 'FFGTIR'), + ('FFG-TUA', 'FFGTUA'), ] if SID in GreatLake_SITES: @@ -1288,6 +1336,7 @@ elif SID == "HFO": elif SID == "SJU": NETCDFDIRS = [('/awips2/edex/data/gfe/topo/NED3ARCSTOPO','CRMTopo'), ('/awips2/edex/data/gfe/topo/NED3ARCSTOPONEW','NED'), + ('/awips2/edex/data/gfe/topo/VDATUMS','VDATUMS'), ] @@ -1301,6 +1350,7 @@ elif SID in CONUS_EAST_SITES: ('/awips2/edex/data/gfe/climo/NCDC'), ('/awips2/edex/data/gfe/topo/NED3ARCSTOPO','CRMTopo'), ('/awips2/edex/data/gfe/topo/NED3ARCSTOPONEW','NED'), + ('/awips2/edex/data/gfe/topo/VDATUMS','VDATUMS'), ] @@ -1309,6 +1359,7 @@ else: #######DCS3501 WEST_CONUS ('/awips2/edex/data/gfe/climo/NCDC'), ('/awips2/edex/data/gfe/topo/NED3ARCSTOPO','CRMTopo'), ('/awips2/edex/data/gfe/topo/NED3ARCSTOPONEW','NED'), + ('/awips2/edex/data/gfe/topo/VDATUMS','VDATUMS'), ] @@ -1601,7 +1652,7 @@ TRANSMIT_SCRIPT = GFESUITE_HOME + '/bin/gfe_msg_send -s %SUBJECT -a %ADDRESSES - # to the ISC database that is your own office type. The format of this # entry is a list of tuples. The tuple is a list of weather elements # objects (such as Temp and not "T"), and an office type, such as "rfc". -EXTRA_ISC_PARMS = [([QPF], 'rfc'), ([QPF], 'wfo')] +EXTRA_ISC_PARMS = [([QPF,FloodingRainThreat], 'rfc'), ([QPF,FloodingRainThreat], 'wfo'), ([ProposedSS,Hazards,InundationMax,InundationTiming,SurgeHtPlusTideMSL,SurgeHtPlusTideMLLW,SurgeHtPlusTideMHHW,SurgeHtPlusTideNAVD], 'nc'),([ProposedSS,Hazards,InundationMax,InundationTiming,SurgeHtPlusTideMSL,SurgeHtPlusTideMLLW,SurgeHtPlusTideMHHW,SurgeHtPlusTideNAVD], 'wfo')] #--------------------------------------------------------------------------- # @@ -1792,11 +1843,13 @@ OFFICIALDBS = [([Temp, Td, Wind, Weather, Sky, FzLevel, SnowLevel], TC1), ([Wetflag], FireWx1300TC), ([StormTotalSnow], TC1), # Tropical parms - ([prob34, prob50, prob64], TC1), - ([pws34,pws50,pws64,SurgeHtPlusTide,SurgeHtPlusTideWTopo], TC1), + ([prob34, prob50, prob64,pws34,pws50,pws64,], TC1), + ([InundationMax,SurgeHtPlusTideMSL,SurgeHtPlusTideMLLW,SurgeHtPlusTideMHHW,SurgeHtPlusTideNAVD], TC1), + ([ProposedSS,DiffSS,tempProposedSS,InitialSS], TC1), + ([WindThreat,StormSurgeThreat,FloodingRainThreat,TornadoThreat], TC1), ([pwsD34,pwsD64], PWSDTC), ([pwsN34,pwsN64], PWSNTC), - ([pws34int,pws64int], TC6NG), + ([pws34int,pws64int,InundationTiming,QPFtoFFGRatio], TC6NG), # DR20541 and 20482 ([PoP12hr], TC12NG), ([QPF6hr, SnowAmt6hr], TC6NG), diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/RFCFFG_ParameterInfo.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/RFCFFG_ParameterInfo.xml new file mode 100644 index 0000000000..bc02f3a8a8 --- /dev/null +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/RFCFFG_ParameterInfo.xml @@ -0,0 +1,55 @@ + + + + 0 + 21600 + 43200 + 64800 + 86400 + + + FFG0624hr + 6 hr flash flood guidance + mm + millimeters + totalprecip + 0.0 + 1000.0 + -99999.0 + 1 + SFC + + SFC + + + + FFG0324hr + 3 hr flash flood guidance + mm + millimeters + totalprecip + 0.0 + 1000.0 + -99999.0 + 1 + SFC + + SFC + + + + FFG0124hr + 1 hr flash flood guidance + mm + millimeters + totalprecip + 0.0 + 1000.0 + -99999.0 + 1 + SFC + + SFC + + + diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/utility/common_static/base/colormaps/GFE/Inundation.cmap b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/utility/common_static/base/colormaps/GFE/Inundation.cmap new file mode 100644 index 0000000000..1a6d51e5a6 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/utility/common_static/base/colormaps/GFE/Inundation.cmap @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/utility/common_static/base/colormaps/GFE/TPCprob.cmap b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/utility/common_static/base/colormaps/GFE/TPCprob.cmap new file mode 100644 index 0000000000..3ba849ef69 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/utility/common_static/base/colormaps/GFE/TPCprob.cmap @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/utility/common_static/base/colormaps/GFE/gHLS_new.cmap b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/utility/common_static/base/colormaps/GFE/gHLS_new.cmap new file mode 100644 index 0000000000..6ecf894afc --- /dev/null +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/utility/common_static/base/colormaps/GFE/gHLS_new.cmap @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/utility/common_static/base/colormaps/GFE/w.cmap b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/utility/common_static/base/colormaps/GFE/w.cmap new file mode 100644 index 0000000000..1bf7879e4c --- /dev/null +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/utility/common_static/base/colormaps/GFE/w.cmap @@ -0,0 +1,6 @@ + + + + + + diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/rsync_parms.ccc b/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/rsync_parms.ccc index 4813f80e85..0e93e75808 100644 --- a/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/rsync_parms.ccc +++ b/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/rsync_parms.ccc @@ -48,6 +48,7 @@ mask=ISC_Send_Area parmlist1="-p MaxT -p MinT -p MaxRH -p MinRH -p T -p Td -p RH -p WindChill -p HeatIndex -p ApparentT" parmlist2="-p PoP -p PoP12 -p Sky -p Wx -p Hazards -p SnowLevel -p QPF -p SnowAmt -p IceAccum -p Wind -p WindGust" parmlist3="-p ClearIndex -p FreeWind -p LAL -p Haines -p MixHgt -p VentRate -p TransWind -p Wind20ft -p CLRIndx" +parmlist4="-p StormSurgeThreat -p WindThreat -p FloodingRainThreat -p TornadoThreat" parmlist5="" parmlist6="" parmlist="$parmlist1 $parmlist2 $parmlist3 $parmlist4 $parmlist5 $parmlist6" diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite/hti/bin/kml_legend.sh b/edexOsgi/com.raytheon.uf.tools.gfesuite/hti/bin/kml_legend.sh new file mode 100755 index 0000000000..3567115202 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.tools.gfesuite/hti/bin/kml_legend.sh @@ -0,0 +1,90 @@ +#!/bin/sh +# +# kml_legend.sh - creates legends for the KML files. +# +# requirements: imagemagick (tested on version 6.2.8); +# file logos.png must be in the same directory as this script +# +# UPDATED: 26 June 2012 - JCM - changed legend text per DWS request +# UPDATED: 19 July 2012 - JCM - changed legend text to black from white +# UPDATED: 08 Sept 2014 - JCM - changed None and Low to new phraseology; +# removed marine legend; updated coastal +# and inland threats +# UPDATED: 11 Sept 2014 - JCM - completed updates above +# UPDATED: 20 Oct. 2014 - JCM - set up for 2015 season +# +######################################################################## +# CONFIGURATION SECTION BELOW +######################################################################## +GFESUITE_HOME="/awips2/GFESuite" +HTI_HOME="${GFESUITE_HOME}/hti" +site=$(hostname|cut -c 5-) + +if [ ! -f ${HTI_HOME}/etc/sitevars.${site} ]; then + cp ${HTI_HOME}/etc/sitevars.ccc ${HTI_HOME}/etc/sitevars.${site} +fi + +# SITES CAN CUSTOMIZE THE SITEVARS AS NEEDED +. ${HTI_HOME}/etc/sitevars.${site} + +######################################################################## +# BEGIN MAIN SCRIPT +######################################################################## + +cd ${HTI_HOME}/bin + +# create a canvas, 200x500 +convert -size 200x500 xc:black temp.png + +# make the image transparent +##convert temp.png -alpha transparent transparent.png +convert temp.png null: -matte -compose Clear -composite -compose Over transparent.png + +# insert the logos at the bottom +composite -gravity south -geometry +0+0 logos.png transparent.png trans2.png + +# write the date onto the image +DATE=`date +"Issued %F %H%MZ"` +# DATE= " " +convert trans2.png -font Century-Schoolbook-Bold -pointsize 16 -fill black -annotate +0+400 "$DATE" trans2a.png + +convert trans2a.png -fill black -draw 'rectangle 5,340 25,360' \ + -fill "#E5E5E5" -draw 'rectangle 6,341 24,359' \ + -font Century-Schoolbook-Bold -pointsize 16 -fill black -annotate +30+355 "None to Little" \ + -fill black -draw 'rectangle 5,320 25,340' \ + -fill "#FFFF00" -draw 'rectangle 6,321 24,339' \ + -font Century-Schoolbook-Bold -pointsize 16 -fill black -annotate +30+335 "Elevated" \ + -fill black -draw 'rectangle 5,300 25,320' \ + -fill "#FFA70F" -draw 'rectangle 6,301 24,319' \ + -font Century-Schoolbook-Bold -pointsize 16 -fill black -annotate +30+315 "Moderate" \ + -fill black -draw 'rectangle 5,280 25,300' \ + -fill "#FF0000" -draw 'rectangle 6,281 24,299' \ + -font Century-Schoolbook-Bold -pointsize 16 -fill black -annotate +30+295 "High" \ + -fill black -draw 'rectangle 5,260 25,280' \ + -fill "#CC00CC" -draw 'rectangle 6,261 24,279' \ + -font Century-Schoolbook-Bold -pointsize 16 -fill black -annotate +30+275 "Extreme" \ + trans2b.png + +# Now, draw labels for Flooding Rain, Storm Surge, Tornado, and Wind threats and create +# the final legend png files. + +# inland flood threat (Flooding Rain Threat) +convert trans2b.png -font Century-Schoolbook-Bold -pointsize 20 -fill black -annotate +5+250 "Threat" \ + -annotate +5+230 "Flooding Rain" floodingrainthreatlegend.png +# coastal flood threat (Storm Surge Threat) +convert trans2b.png -font Century-Schoolbook-Bold -pointsize 20 -fill black -annotate +5+250 "Threat" \ + -annotate +5+230 "Storm Surge" stormsurgethreatlegend.png +# tornado threat +convert trans2b.png -font Century-Schoolbook-Bold -pointsize 20 -fill black -annotate +5+250 "Threat" \ + -annotate +5+230 "Tornado" tornadothreatlegend.png +# wind threat +convert trans2b.png -font Century-Schoolbook-Bold -pointsize 20 -fill black -annotate +5+250 "Threat" \ + -annotate +5+230 "Wind" windthreatlegend.png + +#echo ${PRODUCTdir} +chmod 666 *legend.png +mv *legend.png ${PRODUCTdir}/ + +# clean up scraps +rm temp.png transparent.png trans2.png trans2a.png trans2b.png + diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite/hti/bin/logos.png b/edexOsgi/com.raytheon.uf.tools.gfesuite/hti/bin/logos.png new file mode 100644 index 0000000000..121428fb9f Binary files /dev/null and b/edexOsgi/com.raytheon.uf.tools.gfesuite/hti/bin/logos.png differ diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite/hti/bin/make_hti.sh b/edexOsgi/com.raytheon.uf.tools.gfesuite/hti/bin/make_hti.sh new file mode 100755 index 0000000000..5dfce4d230 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.tools.gfesuite/hti/bin/make_hti.sh @@ -0,0 +1,199 @@ +#!/bin/bash -l +# UNIX Shell Script +# Tested Operating System(s): RHEL 3, 4, 5, 6 +# Tested Run Level(s): 3, 5 +# Shell Used: BASH shell +# Original Author(s): Douglas.Gaer@noaa.gov +# File Creation Date: 01/27/2009 +# Date Last Modified: 10/20/2014 +# +# Contributors: +# Joe Maloney (MFL), Pablo Santos (MFL) +# ----------------------------------------------------------- +# ------------- Program Description and Details ------------- +# ----------------------------------------------------------- +# +# This script uses ifpImage to create PNG graphics of tropical threat +# grids, then runProcedure to create KML of the same grids. Finally, +# the output files are rsync'd to LDAD and finally the webfarm. +# +# To execute: +# ./make_hti.sh wfo +# (where wfo is the three letter wfo id) +# +# The script can be launched from the Scripts... menu in GFE, though +# it should also be run via trigger. +# +# Directory program runs from: /awips2/GFESuite/hti/bin +# +# Needed configuration on ls2/3: /data/ldad/hti needs to exist. The +# script will create this directory if +# it is missing. +# +# History: +# 20 OCT 2014 - jcm - created from make_ghls.sh, broke out of webapps +# package. Renamed make_hti.sh. +# +######################################################################## +# CHECK TO SEE IF SITE ID WAS PASSED AS ARGUMENT +# IF NOT THEN EXIT FROM THE SCRIPT +######################################################################## +if [ $# -lt 1 ] ;then + echo Invalid number of arguments. + echo Script stopped. + echo ./rsyncGridsToCWF.sh wfo + exit +else + SITE=$(echo ${1} | tr '[a-z]' '[A-Z]') + site=$(echo ${1} | tr '[A-Z]' '[a-z]') +fi + +######################################################################## +# CONFIGURATION SECTION BELOW +######################################################################## +GFESUITE_HOME="/awips2/GFESuite" +HTI_HOME="${GFESUITE_HOME}/hti" + +if [ ! -f ${HTI_HOME}/etc/sitevars.${site} ]; then + cp ${HTI_HOME}/etc/sitevars.ccc ${HTI_HOME}/etc/sitevars.${site} +fi + +# SITES CAN CUSTOMIZE THE SITEVARS AS NEEDED +. ${HTI_HOME}/etc/sitevars.${site} + +######################################################################## +# BEGIN MAIN SCRIPT +######################################################################## + +# set current data and log file name +currdate=$(date -u +%Y%m%d) +export LOG_FILE="${HTI_HOME}/logs/${currdate}/make_hti.log" + +# check to see if log directory structure exists. +if [ ! -d ${HTI_HOME}/logs ] ;then + mkdir -p ${HTI_HOME}/logs + chmod 777 ${HTI_HOME}/logs + chown awips:fxalpha ${HTI_HOME}/logs +fi +if [ ! -d ${HTI_HOME}/logs/${currdate} ] ;then + mkdir -p ${HTI_HOME}/logs/${currdate} + chmod 777 ${HTI_HOME}/logs/${currdate} + chown awips:fxalpha ${HTI_HOME}/logs/${currdate} +fi + +# Log file header +echo " " >> $LOG_FILE +echo "####################################################################################" >> $LOG_FILE +echo "# Starting Make_HTI Script.... #" >> $LOG_FILE +echo "####################################################################################" >> $LOG_FILE +chmod 666 $LOG_FILE + +# Check to see if ${PRODUCTdir} exists. If not, create. +echo "Making sure that ${PRODUCTdir} exists at $(date)" >> $LOG_FILE +if [ ! -d ${PRODUCTdir} ]; then + echo " **** ${PRODUCTdir} directory not found." >> $LOG_FILE + echo " **** Creating ${PRODUCTdir} directory..." >> $LOG_FILE + mkdir -p $PRODUCTdir + echo " **** Changing permissions of ${PRODUCTdir} directory..." >> $LOG_FILE + chmod 777 $PRODUCTdir + echo " **** Changing ownership of ${PRODUCTdir} directory..." >> $LOG_FILE + chown awips:fxalpha $PRODUCTdir +else + echo " ${PRODUCTdir} exists." >> $LOG_FILE +fi +echo "...finished." >> $LOG_FILE +echo " " >> $LOG_FILE + +# THESE SHOULD MATCH THREAT GRIDS IN GFE +PARMS="WindThreat FloodingRainThreat StormSurgeThreat TornadoThreat" + +echo "Starting ifpIMAGE loop." >> $LOG_FILE +for PARM in $PARMS +do + # NOTE: cannot run ifpIMAGE on dx3/dx4 - must ssh to a px + echo "Creating ${PARM} image..." >> $LOG_FILE + ssh px1 "unset DISPLAY; ${GFEBINdir}/ifpIMAGE -site ${SITE} -c ${SITE}${PARM} -o ${PRODUCTdir}" + convert ${PRODUCTdir}/${SITE}${PARM}.png -resize 104x148 ${PRODUCTdir}/${SITE}${PARM}_sm.png +done + +rm -f ${PRODUCTdir}/*.info + +# Generate KML automatically via runProcedure +echo "Running KML procedure." >> $LOG_FILE +#ssh px1 "unset DISPLAY; ${GFEBINdir}/runProcedure -site ${SITE} -n TCImpactGraphics_KML -c gfeConfig" +ssh px1 "unset DISPLAY; ${GFEBINdir}/runProcedure -site ${SITE} -n TCImpactGraphics_KML2015 -c gfeConfig" + +# Create legends for KML +${HTI_HOME}/bin/kml_legend.sh + +echo "Copying image and kml files to LDAD for WEB processing" >> $LOG_FILE +/usr/bin/ssh -o stricthostkeychecking=no -x ${LDADuser}@${LDADserver} mkdir -p ${LDAD_DATA} &> /dev/null +/usr/bin/rsync -av --force --progress --stats -e "/usr/bin/ssh -o stricthostkeychecking=no -x" ${PRODUCTdir}/*.txt ${PRODUCTdir}/*.png ${LDADuser}@${LDADserver}:/${LDAD_DATA}/. +echo "Done copying image and text files to LDAD" >> $LOG_FILE + +# NOTE: The lines below are for SR and ER sites to upload images to the National Website +# NOTE: This can be ran as any AWIPS user so we must SSH as ldad@ls1 and run the commands via an SSH tunnel +echo "Copying graphics to NWSHQ Web farm ${NWSHQ_RSYNCSERVER}" >> $LOG_FILE +CMD="/usr/bin/rsync -av --force --progress --stats ${LDAD_DATA}/*.png ${NWSHQ_RSYNCSERVER}::ghls_images/${site}" +echo "/usr/bin/ssh -o stricthostkeychecking=no -x ${LDADuser}@${LDADserver} ${CMD}" >> $LOG_FILE +/usr/bin/ssh -o stricthostkeychecking=no -x ${LDADuser}@${LDADserver} ${CMD} + +echo "Copying KML.TXT files to NWSHQ Web farm ${NWSHQ_RSYNCSERVER}" >> $LOG_FILE +CMD="/usr/bin/rsync -av --force --progress --stats ${LDAD_DATA}/*.txt ${NWSHQ_RSYNCSERVER}::ghls_includes/${siteid}" +echo "/usr/bin/ssh -o stricthostkeychecking=no -x ${LDADuser}@${LDADserver} ${CMD}" >> $LOG_FILE +/usr/bin/ssh -o stricthostkeychecking=no -x ${LDADuser}@${LDADserver} "${CMD}" +echo "Copy to ${NWSHQ_RSYNCSERVER} complete" >> $LOG_FILE + +# NOTE: Local processing is site specific and not required. +# NOTE: If you site is doing any local processing you must set local processing to TRUE and make sure +# NOTE: all you local lw processing variables are setup in your /awips2/GFESuite/hti/etc/sitevars.ccc file +# NOTE: If you want local lw processing on for all scripts add the following line to the +# NOTE: /awips2/GFESuite/hti/etc/sitevars.ccc (where ccc is your siteid). +# NOTE: LOCALlw_PROCESSING="TRUE" +if [ "${LOCALlw_PROCESSING}" == "" ]; then LOCALlw_PROCESSING="FALSE"; fi + +if [ "${LOCALlw_PROCESSING}" == "TRUE" ] + then + # NOTE: This can be ran as any AWIPS user so we must SSH as ldad@ls1 and run the commands via and SSH tunnel + echo "Copying image and text files to ${LOCALlwserver} Linux system for local WEB processing and archiving" >> $LOG_FILE + CMD="/usr/bin/rsync -av --force --progress --stats -e ssh ${LDAD_DATA}/*.txt ${LDAD_DATA}/*.png ${LOCALlwuser}@${LOCALlwserver}:${LOCAL_LWDATA}/." + echo "/usr/bin/ssh -o stricthostkeychecking=no -x ${LDADuser}@${LDADserver} ${CMD}" >> $LOG_FILE + /usr/bin/ssh -o stricthostkeychecking=no -x ${LDADuser}@${LDADserver} "${CMD}" + echo "Done copying image and text files to ${LOCALlwserver}" >> $LOG_FILE +fi + +# Archive *Threat.png and *kml.txt files if desired +if [ "${ARCHIVE}" == "YES" ] +then + echo "Begin archiving process..." >> $LOG_FILE + echo "Making sure ${PRODUCTdir}/archive exists at $(date)" >> $LOG_FILE + if [ ! -d ${PRODUCTdir}/archive ]; then + echo " ${PRODUCTdir}/archive directory not found!" >> $LOG_FILE + echo " Creating archive directory..." >> $LOG_FILE + mkdir -p ${PRODUCTdir}/archive + echo " Changing permissions on ${PRODUCTdir}/archive..." >> $LOG_FILE + chmod 777 ${PRODUCTdir}/archive + echo " Changing ownership on ${PRODUCTdir}/archive..." >> $LOG_FILE + chown awips:fxalpha ${PRODUCTdir}/archive + else + echo " ${PRODUCTdir}/archive directory exists!" >> $LOG_FILE + fi + DATESTAMP=`date +%Y%m%d_%H%M` + if [ ! -d ${PRODUCTdir}/archive/${DATESTAMP} ]; then mkdir -p ${PRODUCTdir}/archive/${DATESTAMP} ; fi + + ARCHFILES=`cd ${PRODUCTdir}; ls *Threat.png *kml.txt` + echo "Copying files to ${PRODUCTdir}/archive/${DATESTAMP} " >> $LOG_FILE + for ARCHFILE in $ARCHFILES + do + cp ${PRODUCTdir}/${ARCHFILE} ${PRODUCTdir}/archive/${DATESTAMP}/ + done + echo "Archiving complete!" >> $LOG_FILE +else + echo "**** NO HTI PRODUCTS ARCHIVED! If you wish to archive HTI products, check " >> $LOG_FILE + echo "**** ${HTI_HOME}/etc/sitevars.${site}" >> $LOG_FILE +fi + +echo "Script complete at $(date)" >> ${LOGfile} +echo " " >> ${LOGfile} +exit 0 +######################################################################## diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite/hti/etc/sitevars.ccc b/edexOsgi/com.raytheon.uf.tools.gfesuite/hti/etc/sitevars.ccc new file mode 100755 index 0000000000..cb7712027b --- /dev/null +++ b/edexOsgi/com.raytheon.uf.tools.gfesuite/hti/etc/sitevars.ccc @@ -0,0 +1,34 @@ +# Configuration file for make_hti.sh & kml_legend.sh + +GFESUITE_HOME="/awips2/GFESuite" # Where is GFESuite? +GFEBINdir="${GFESUITE_HOME}/bin" # Where is GFESuite/bin? + +HTI_HOME="${GFESUITE_HOME}/hti" # Where the hti stuff lives +PRODUCTdir="${HTI_HOME}/data" # Where the hti output/data will go +ARCHIVE="YES" # YES, graphics/kml will be archived with + # each run, NO otherwise. + +# LDAD setup +LDADserver="ls1-${site}" # Name of local rsync server +LDADuser="ldad" # User on local rsync server +LDAD_DATA="/data/ldad/hti" # Directory where output is stored on + # local rsync server + +# CONSOLIDATED WEB FARM setup +NWSHQ_RSYNCSERVER="sync.weather.gov" # Name of remote rsync server + + +# OPTIONAL: Local office processing +# The setup below is for site that do processing on local office Linux +# workstations using Doug Gaer's webapps package. (NOTE: the webapps +# package is not supported by NCF or AWIPS.) +# If you wish to use this, set LOCALlw_PROCESSING to TRUE, +# then configure the following variables as appropriate +LOCALlw_PROCESSING="FALSE" # Set to TRUE to enable local processing +LOCALlwserver="machine.xxx.noaa.gov" # Name of local workstation where webapps + # is installed +LOCALlwuser="username" # User on local workstation where webapps + # is installed +LOCAL_LWDATA="/data/webapps" # Directory where output is stored on + # local workstation above +